def delete(request): id = request.get('path_params')['id'] doc = db.find_one(table_name, id) if not doc: return {'status': 404} db.delete(table_name, id) return {'body': remove_none(doc)}
def create(request): data = writable_doc(json_schema, request.get('body')) if 'created_at' in json_schema[ 'properties'] and 'updated_at' in json_schema['properties']: now = datetime.now() data = {**data, 'created_at': now, 'updated_at': now} try: id = db.create(table_name, data) created_doc = db.find_one(table_name, id) return {'body': remove_none(created_doc)} except (UniqueViolation, ForeignKeyViolation) as db_error: return exception_response(db_error)
def update(request): id = request.get('path_params')['id'] data = writable_doc(json_schema, request.get('body')) try: if 'updated_at' in json_schema['properties']: data = {**data, 'updated_at': datetime.now()} db.update(table_name, id, data) except (UniqueViolation, ForeignKeyViolation) as db_error: return exception_response(db_error) updated_doc = db.find_one(table_name, id) if not updated_doc: return {'status': 404} return {'body': remove_none(updated_doc)}
def list(request): limit = int(util.get(request, 'query.limit', 100)) offset = int(util.get(request, 'query.offset', 0)) sort = util.get(request, 'query.sort') or '-updated_at' if not is_valid_sort(json_schema, sort): return invalid_response( 'Invalid sort parameter, must be on the format column1,column2,column3... For descending sort, use -column1' ) filter = parse_filter(json_schema, request.get('query', {})) count = db.count(table_name, filter) docs = [ remove_none(doc) for doc in db.find(table_name, limit, offset, sort, filter) ] body = { 'count': count, 'limit': limit, 'offset': offset, 'sort': sort, 'filter': filter, 'data': docs } return {'body': body}
def with_id_str(doc): if not doc or not '_id' in doc: return doc return remove_none({**doc, 'id': str(doc['_id']), '_id': None})