async def patch_user(request: web.Request, body) -> web.Response: user_id = id_validator(request.match_info['user_id'], 'user') user_table = get_model_by_name('user') user_exists = await request.app['pg'].fetchval( select([exists().where(user_table.c.user_id == user_id)])) if not user_exists: raise web.HTTPNotFound(body=json.dumps( {'error': f'User with id={user_id} not found'}), content_type='application/json') if request.auth_user['user_id'] != user_id: raise web.HTTPForbidden(body=json.dumps( {'error': 'Access denied for requested resource'}), content_type='application/json') if not body: return web.Response(status=200, content_type='application/json', body=json.dumps({})) user = await request.app['pg'].fetchrow(user_table.update().where( user_table.c.user_id == user_id).values(**body).returning( literal_column('*'))) result = row_to_dict(user_table, user) return web.Response(status=200, content_type='application/json', body=json.dumps(result))
def get_user_secret(cls, user_id): '''user_idに紐づくuser情報(すべて)取得 ''' with session_scope() as session: row = session.query(cls).filter(cls.user_id == user_id).first() return row_to_dict(row)
def get_all_by_t_id(cls, thread_id): with session_scope() as session: rows = session.query(cls).filter(cls.thread_id == thread_id).all() result = [row_to_dict(row) for row in rows] return result
def get_all(cls): with session_scope() as session: rows = session.query(cls).all() result = [row_to_dict(row) for row in rows] return result
async def get_all_users(request: web.Request) -> web.Response: user_table = get_model_by_name('user') users = await request.app['pg'].fetch(user_table.select()) result = [row_to_dict(user_table, user) for user in users] return web.Response(status=200, content_type='application/json', body=json.dumps(result))
def get(cls, flip_id): with session_scope() as session: rows = session.query(cls).filter(cls.flip_id == flip_id).first() if not rows: return None return row_to_dict(rows)
def get_by_login_token(cls, login_token): '''仮登録ユーザをlogin_tokenから取得 ''' with session_scope() as session: # prov_user = session. row = session.query(cls).filter( cls.login_token == login_token).first() if not row: return None return row_to_dict(row)
def get_by_title(cls, title): with session_scope() as session: rows = session.query( cls ).join( Category, cls.category_id == Category.category_id ).filter( cls.title.like(title + '%') ) result = [row_to_dict(row) for row in rows] return result
def get(cls, email): '''仮登録ユーザの最新のカラムを取得 Args: email: 学番メール Returns: dict: ProvisionalUser: 仮登録ユーザ情報 ''' with session_scope() as session: # prov_user = session. rows = session.query(cls).filter(cls.email == email).order_by( cls.provisional_user_id.desc()).first() return row_to_dict(rows)
async def get_user(request: web.Request) -> web.Response: user_id = id_validator(request.match_info['user_id'], 'user') user_table = get_model_by_name('user') user_exists = await request.app['pg'].fetchval( select([exists().where(user_table.c.user_id == user_id)])) if not user_exists: raise web.HTTPNotFound(body=json.dumps( {'error': f'User with id={user_id} not found'}), content_type='application/json') user = await request.app['pg'].fetchrow( user_table.select().where(user_table.c.user_id == user_id)) return web.Response(status=200, content_type='application/json', body=json.dumps(row_to_dict(user_table, user)))
def post(cls, title, category_id, params=None): # length_check if len(title) > 40: raise Exception('over title length') with session_scope() as session: if not params: data = cls( title=title, category_id=category_id, create_at=datetime.now(JST).strftime( '%Y-%m-%d %H:%M:%S.%f' ), update_at=datetime.now(JST).strftime( '%Y-%m-%d %H:%M:%S.%f' ), ) else: if not params.get('create_at'): params.update({ 'create_at': datetime.now(JST).strftime('%Y-%m-%d %H:%M:%S.%f') } ) if not params.get('update_at'): params.update({ 'update_at': datetime.now(JST).strftime('%Y-%m-%d %H:%M:%S.%f') } ) data = cls( title=title, category_id=category_id, **params ) session.add(data) session.flush() # threadのspeed計算処理 cls._update_speed(session=session) return row_to_dict(data)
def get(cls, thread_id): '''threadとthread_idに紐づくcomment取得 ''' from app.models.comment import Comment with session_scope() as session: # thread取得 t_rows = session.query(cls).filter( cls.thread_id == thread_id ).first() if not t_rows: return None # thread_idに紐づくcommentリスト取得 comments = Comment.get_all_by_t_id(thread_id) result = { 'thread': row_to_dict(t_rows), 'comments': comments, } return result
def all(cls): with session_scope() as session: rows = session.query(cls).all() return [row_to_dict(row) for row in rows]
def get_all_by_c_id(cls, category_id, sort_id, paging): '''category_idに紐づくthreadリスト取得 ''' with session_scope() as session: query = session.query( cls ).join( Category, Thread.category_id == Category.category_id ).filter( Category.category_id == category_id ) # sort if sort_id == current_config().get('ID_ASC'): # ID昇順 pass elif sort_id == current_config().get('ID_DESC'): # ID降順 query = query.order_by(cls.thread_id.desc()) elif sort_id == current_config().get('SPEED_DESC'): # 人気高い順 query = query.order_by(cls.speed.desc()) elif sort_id == current_config().get('SPEED_ASC'): # 人気低い順 query = query.order_by(cls.speed.asc()) elif sort_id == current_config().get('NUM_COMMENT_DESC'): # コメント数多い順 query = query.order_by(cls.thread_id.desc()) elif sort_id == current_config().get('NUM_COMMENT_ASC'): # コメント数少ない順 query = query.order_by(cls.thread_id.asc()) # paging # ex) # 1. offset=0, limit=10 # 2. offset=10, limit=20 # pagingバリデーション if paging <= 0: paging = 1 offset = (paging - 1) * 10 limit = 10 query_range = query.offset(offset).limit(limit) rows = query_range.all() # threadが取得できなかった場合 # 1. threadが1つ以上取得できる場合,最後のpagingのthreadリストを返却 # 2. threadが0の場合,[]を返却 if not rows: # category_idに紐づくすべてのthread取得 rows = query.all() # それでもthreadが取得できない場合 if not rows: return [] result = [] count = len(rows) # threadリストを逆順にしてpaging区切りのthreadをまとめて返却 for row in list(reversed(rows)): if count == 0 or count % 10 == 0: break result.append(row_to_dict(row)) count = count - 1 return result result = [row_to_dict(row) for row in rows] return result