optional-kubernetes-engine/bookshelf/model_mongodb.py (41 lines of code) (raw):

# Copyright 2015 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from bson.objectid import ObjectId from flask_pymongo import PyMongo builtin_list = list mongo = None def _id(id): if not isinstance(id, ObjectId): return ObjectId(id) return id # [START from_mongo] def from_mongo(data): """ Translates the MongoDB dictionary format into the format that's expected by the application. """ if not data: return None data['id'] = str(data['_id']) return data # [END from_mongo] def init_app(app): global mongo mongo = PyMongo(app) # [START list_by_user] def list_by_user(user_id, limit=10, cursor=None): cursor = int(cursor) if cursor else 0 results = mongo.db.books\ .find({'createdById': user_id}, skip=cursor, limit=10)\ .sort('title') books = builtin_list(map(from_mongo, results)) next_page = cursor + limit if len(books) == limit else None return (books, next_page) # [END list_by_user] # [START list] def list(limit=10, cursor=None): cursor = int(cursor) if cursor else 0 results = mongo.db.books.find(skip=cursor, limit=10).sort('title') books = builtin_list(map(from_mongo, results)) next_page = cursor + limit if len(books) == limit else None return (books, next_page) # [END list] # [START read] def read(id): result = mongo.db.books.find_one({'_id': _id(id)}) return from_mongo(result) # [END read] # [START create] def create(data): result = mongo.db.books.insert_one(data) return read(result.inserted_id) # [END create] # [START update] def update(data, id): mongo.db.books.replace_one({'_id': _id(id)}, data) return read(id) # [END update] def delete(id): mongo.db.books.delete_one({'_id': _id(id)})