| #!/usr/bin/env python |
| # |
| # Copyright 2007 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. |
| # |
| |
| |
| |
| |
| |
| """The Python datastore admin API for managing indices and schemas. |
| """ |
| |
| |
| |
| |
| |
| |
| |
| |
| from google.appengine.api import api_base_pb |
| from google.appengine.api import apiproxy_stub_map |
| from google.appengine.api import datastore |
| from google.appengine.api import datastore_errors |
| from google.appengine.api import datastore_types |
| from google.appengine.datastore import datastore_index |
| from google.appengine.datastore import datastore_pb |
| from google.appengine.runtime import apiproxy_errors |
| |
| def GetIndices(_app=None): |
| """Fetches all composite indices in the datastore for this app. |
| |
| Returns: |
| list of entity_pb.CompositeIndex |
| """ |
| |
| req = api_base_pb.StringProto() |
| req.set_value(datastore_types.ResolveAppId(_app)) |
| resp = datastore_pb.CompositeIndices() |
| resp = _Call('GetIndices', req, resp) |
| return resp.index_list() |
| |
| |
| def CreateIndex(index): |
| """Creates a new composite index in the datastore for this app. |
| |
| Args: |
| index: entity_pb.CompositeIndex |
| |
| Returns: |
| int, the id allocated to the index |
| """ |
| resp = api_base_pb.Integer64Proto() |
| resp = _Call('CreateIndex', index, resp) |
| return resp.value() |
| |
| |
| def UpdateIndex(index): |
| """Updates an index's status. The entire index definition must be present. |
| |
| Args: |
| index: entity_pb.CompositeIndex |
| """ |
| _Call('UpdateIndex', index, api_base_pb.VoidProto()) |
| |
| |
| def DeleteIndex(index): |
| """Deletes an index. The entire index definition must be present. |
| |
| Args: |
| index: entity_pb.CompositeIndex |
| """ |
| _Call('DeleteIndex', index, api_base_pb.VoidProto()) |
| |
| |
| def _Call(call, req, resp): |
| """Generic method for making a datastore API call. |
| |
| Args: |
| call: string, the name of the RPC call |
| req: the request PB. if the app_id field is not set, it defaults to the |
| local app. |
| resp: the response PB |
| """ |
| if hasattr(req, 'app_id'): |
| req.set_app_id(datastore_types.ResolveAppId(req.app_id())) |
| |
| try: |
| result = apiproxy_stub_map.MakeSyncCall('datastore_v3', call, req, resp) |
| if result: |
| return result |
| return resp |
| except apiproxy_errors.ApplicationError, err: |
| raise datastore._ToDatastoreError(err) |