def put(self, user_id): """ユーザ情報の更新.""" admin = check_authorize_admin() user = ss.query(User).filter_by(id=user_id, group_id=admin.group_id).first() if user is None: abort(404) if 'email' in rq.form: query = ss.query(User).filter_by(email=rq.form['email']) if query.count() > 0: abort(409, 'そのメールアドレスは既に使われています') else: user.email = rq.form['email'] if 'first_name' in rq.form: user.first_name = rq.form['first_name'] if 'last_name' in rq.form: user.last_name = rq.form['last_name'] if 'gender' in rq.form: user.gender = rq.form['gender'] if 'password' in rq.form: user.password = rq.form['password'] if 'fitbit_id' in rq.form: user.fitbit_id = rq.form['fitbit_id'] if 'fitbit_access_token' in rq.form: user.fitbit_access_token = rq.form['fitbit_access_token'] if 'fitbit_refresh_token' in rq.form: user.fitbit_refresh_token = rq.form['fitbit_refresh_token'] if ss.dirty: ss.commit() # commit()後一度オブジェクトを参照しないとvars()で表示できない?? print('change', user.first_name) user = vars(user) del user['_sa_instance_state'] del user['password'] del user['token'] return jsonify(user)
def post(self): """サインアウト.""" user = check_authorize() token = Token(user.token) token.update() user.token = token.tokenize() ss.commit() return jsonify(message='See you again!')
def delete(self, user_id): """ユーザの削除.""" admin = check_authorize_admin() user = ss.query(User).filter_by(id=user_id, group_id=admin.group_id).first() if user is None: abort(404) ss.delete(user) ss.commit() return jsonify(message='Good Bye!')
def delete(self, group_name): """グループの削除.""" admin = check_authorize_admin() group = ss.query(Group).filter_by(name=group_name).first() # URLのグループ if not group: abort(404) if not admin or admin.group_id != group.id: abort(403) ss.delete(group) ss.commit() return jsonify(message='Good Bye!')
def put(self, group_name): """グループ情報の変更.""" admin = check_authorize_admin() group = ss.query(Group).filter_by(name=group_name).first() # URLのグループ if not group: abort(404) if not admin or admin.group_id != group.id: abort(403) if 'name' not in rq.form: abort(400) query = ss.query(Group).filter_by(name=rq.form['name']) if query.count() > 0: abort(409, 'そのグループ名は既に使われています') group.name = rq.form['name'] ss.commit() return jsonify(id=group.id, name=group.name)
def post(self): """退勤.""" user = check_authorize() latest_record = (ss.query(AttendanceRecord).filter_by( owner_id=user.id).order_by(AttendanceRecord.id.desc()).first()) if latest_record is None or latest_record.end is not None: abort(409, "既に退勤しています") latest_record.end = datetime.datetime.now() ss.commit() print('check out at %s' % latest_record.end) latest_record = vars(latest_record) del latest_record['_sa_instance_state'] del latest_record['owner_id'] return jsonify(latest_record)
def post(self): """出勤.""" user = check_authorize() latest_record = (ss.query(AttendanceRecord).filter_by( owner_id=user.id).order_by(AttendanceRecord.id.desc()).first()) if latest_record is not None and latest_record.end is None: abort(409, "既に出勤しています") record = AttendanceRecord(begin=datetime.datetime.now(), owner_id=user.id) ss.add(record) ss.commit() print('go to walk at %s' % record.begin) record = vars(record) del record['_sa_instance_state'] del record['owner_id'] return jsonify(record)
def post(self): """ユーザの追加.""" admin = check_authorize_admin() if set(rq.form) != { 'email', 'first_name', 'last_name', 'gender', 'password' }: abort(400) query = ss.query(User).filter_by(email=rq.form['email']) if query.count() > 0: abort(409, 'そのメールアドレスは既に使われています') new_user = User( email=rq.form['email'], first_name=rq.form['first_name'], last_name=rq.form['last_name'], gender=rq.form['gender'], password=generate_password_hash(rq.form['password']), # user_idが決まらないとアクセストークンが作れないのでダミーを入れる token=Token.generate(0, 0), fitbit_id='', fitbit_access_token='', fitbit_refresh_token='', permission='user', group_id=admin.group_id) ss.add(new_user) ss.commit() new_user.token = Token.generate(new_user.id, new_user.group_id) ss.commit() # commit()後一度オブジェクトを参照しないとvars()で表示できない?? print('add', new_user.first_name) new_user = vars(new_user) del new_user['_sa_instance_state'] del new_user['password'] del new_user['fitbit_id'] del new_user['fitbit_access_token'] del new_user['fitbit_refresh_token'] del new_user['token'] return jsonify(new_user)
def post(self): """新規グループと管理ユーザの追加.""" if set(rq.form) != { 'name', 'email', 'first_name', 'last_name', 'gender', 'password' }: abort(400) query = ss.query(Group).filter_by(name=rq.form['name']) if query.count() > 0: abort(409, 'そのグループ名は既に使われています') query = ss.query(User).filter_by(email=rq.form['email']) if query.count() > 0: abort(409, 'そのメールアドレスは既に使われています') # グループの作成 group = Group(name=rq.form['name']) ss.add(group) ss.commit() # 管理者ユーザの作成 admin = User( email=rq.form['email'], first_name=rq.form['first_name'], last_name=rq.form['last_name'], gender=rq.form['gender'], password=generate_password_hash(rq.form['password']), # user_idが決まらないとアクセストークンが作れないのでダミーを入れる token=Token.generate(0, 0), fitbit_id='', fitbit_access_token='', fitbit_refresh_token='', permission='admin', group_id=group.id) ss.add(admin) ss.commit() admin.token = Token.generate(admin.id, admin.group_id) ss.commit() # commit()後一度オブジェクトを参照しないとvars()で表示できない?? print('add', admin.first_name) admin = vars(admin) del admin['_sa_instance_state'] del admin['password'] return jsonify({ 'group': { 'id': group.id, 'name': group.name }, 'admin': admin, })
def delete(self): """ユーザの削除(自分).""" user = check_authorize() ss.delete(user) ss.commit() return jsonify(message='Good Bye!')
if user.fitbit_access_token == '' or (session.query(Stress).filter_by( owner_id=user.id, date=crawl_date).first()): continue resource_url = f'https://api.fitbit.com/1/user/{user.fitbit_id}/activities/heart/date/{crawl_date.isoformat()}/1d/1sec/time/00:00/23:59.json' r = requests.get(resource_url, headers={ 'Authorization': 'Bearer ' + user.fitbit_access_token, }) if r.status_code == 200: print('success') data = r.json()['activities-heart-intraday']['dataset'] heart_rate = numpy.array([datum['value'] for datum in data]) try: stress_val = float(stress_calc_package.calc(heart_rate)) except: stress_val = 0 print(stress_val) try: # stress_calc_package()の返り値の型が不定で、nanを判定できないので # DBにデータを入れるときにnot null制約に引っかかるのをハンドリングする stress = Stress(date=crawl_date, stress=stress_val, owner_id=user.id) session.add(stress) session.commit() except Exception: session.rollback() else: print(f'failued code: {r.status_code}') print(r.text)