optional-kubernetes-engine/bookshelf/model_datastore.py (61 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 flask import current_app from google.cloud import datastore builtin_list = list def init_app(app): pass def get_client(): return datastore.Client(current_app.config['PROJECT_ID']) def from_datastore(entity): """Translates Datastore results into the format expected by the application. Datastore typically returns: [Entity{key: (kind, id), prop: val, ...}] This returns: {id: id, prop: val, ...} """ if not entity: return None if isinstance(entity, builtin_list): entity = entity.pop() entity['id'] = entity.key.id return entity def list(limit=10, cursor=None): ds = get_client() query = ds.query(kind='Book', order=['title']) query_iterator = query.fetch(limit=limit, start_cursor=cursor) page = next(query_iterator.pages) entities = builtin_list(map(from_datastore, page)) next_cursor = ( query_iterator.next_page_token.decode('utf-8') if query_iterator.next_page_token else None) return entities, next_cursor def list_by_user(user_id, limit=10, cursor=None): ds = get_client() query = ds.query( kind='Book', filters=[ ('createdById', '=', user_id) ] ) query_iterator = query.fetch(limit=limit, start_cursor=cursor) page = next(query_iterator.pages) entities = builtin_list(map(from_datastore, page)) next_cursor = ( query_iterator.next_page_token.decode('utf-8') if query_iterator.next_page_token else None) return entities, next_cursor def read(id): ds = get_client() key = ds.key('Book', int(id)) results = ds.get(key) return from_datastore(results) def update(data, id=None): ds = get_client() if id: key = ds.key('Book', int(id)) else: key = ds.key('Book') entity = datastore.Entity( key=key, exclude_from_indexes=['description']) entity.update(data) ds.put(entity) return from_datastore(entity) create = update def delete(id): ds = get_client() key = ds.key('Book', int(id)) ds.delete(key)