Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 def post(self):
     """サインアウト."""
     user = check_authorize()
     token = Token(user.token)
     token.update()
     user.token = token.tokenize()
     ss.commit()
     return jsonify(message='See you again!')
Ejemplo n.º 3
0
 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!')
Ejemplo n.º 4
0
 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!')
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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,
     })
Ejemplo n.º 10
0
 def delete(self):
     """ユーザの削除(自分)."""
     user = check_authorize()
     ss.delete(user)
     ss.commit()
     return jsonify(message='Good Bye!')
Ejemplo n.º 11
0
    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)