thirdparty/google_appengine/google/appengine/ext/remote_api/handler.py
changeset 2864 2e0b0af889be
parent 2273 e4cb9c53db3e
child 3031 7678f72140e6
--- a/thirdparty/google_appengine/google/appengine/ext/remote_api/handler.py	Sat Sep 05 14:04:24 2009 +0200
+++ b/thirdparty/google_appengine/google/appengine/ext/remote_api/handler.py	Sun Sep 06 23:31:53 2009 +0200
@@ -48,7 +48,13 @@
 from google.appengine.api import api_base_pb
 from google.appengine.api import apiproxy_stub
 from google.appengine.api import apiproxy_stub_map
+from google.appengine.api import datastore_errors
+from google.appengine.api import mail_service_pb
+from google.appengine.api import urlfetch_service_pb
 from google.appengine.api import users
+from google.appengine.api.capabilities import capability_service_pb
+from google.appengine.api.images import images_service_pb
+from google.appengine.api.memcache import memcache_service_pb
 from google.appengine.datastore import datastore_pb
 from google.appengine.ext import webapp
 from google.appengine.ext.remote_api import remote_api_pb
@@ -76,6 +82,10 @@
     runquery_response = datastore_pb.QueryResult()
     apiproxy_stub_map.MakeSyncCall('datastore_v3', 'RunQuery',
                                    request, runquery_response)
+    if runquery_response.result_size() > 0:
+      response.CopyFrom(runquery_response)
+      return
+
     next_request = datastore_pb.NextRequest()
     next_request.mutable_cursor().CopyFrom(runquery_response.cursor())
     next_request.set_count(request.limit())
@@ -154,18 +164,52 @@
 
 
 SERVICE_PB_MAP = {
+    'capability_service': {
+        'IsEnabled': (capability_service_pb.IsEnabledRequest,
+                      capability_service_pb.IsEnabledResponse),
+    },
     'datastore_v3': {
-        'Get': (datastore_pb.GetRequest, datastore_pb.GetResponse),
-        'Put': (datastore_pb.PutRequest, datastore_pb.PutResponse),
-        'Delete': (datastore_pb.DeleteRequest, datastore_pb.DeleteResponse),
-        'Count': (datastore_pb.Query, api_base_pb.Integer64Proto),
+        'Get':        (datastore_pb.GetRequest, datastore_pb.GetResponse),
+        'Put':        (datastore_pb.PutRequest, datastore_pb.PutResponse),
+        'Delete':     (datastore_pb.DeleteRequest, datastore_pb.DeleteResponse),
+        'Count':      (datastore_pb.Query, api_base_pb.Integer64Proto),
         'GetIndices': (api_base_pb.StringProto, datastore_pb.CompositeIndices),
     },
+    'images': {
+        'Transform': (images_service_pb.ImagesTransformRequest,
+                      images_service_pb.ImagesTransformResponse),
+        'Composite': (images_service_pb.ImagesCompositeRequest,
+                      images_service_pb.ImagesCompositeResponse),
+        'Histogram': (images_service_pb.ImagesHistogramRequest,
+                      images_service_pb.ImagesHistogramResponse),
+    },
+    'mail': {
+        'Send':         (mail_service_pb.MailMessage, api_base_pb.VoidProto),
+        'SendToAdmins': (mail_service_pb.MailMessage, api_base_pb.VoidProto),
+    },
+    'memcache': {
+        'Get':       (memcache_service_pb.MemcacheGetRequest,
+                      memcache_service_pb.MemcacheGetResponse),
+        'Set':       (memcache_service_pb.MemcacheSetRequest,
+                      memcache_service_pb.MemcacheSetResponse),
+        'Delete':    (memcache_service_pb.MemcacheDeleteRequest,
+                      memcache_service_pb.MemcacheDeleteResponse),
+        'Increment': (memcache_service_pb.MemcacheIncrementRequest,
+                      memcache_service_pb.MemcacheIncrementResponse),
+        'FlushAll':  (memcache_service_pb.MemcacheFlushRequest,
+                      memcache_service_pb.MemcacheFlushResponse),
+        'Stats':     (memcache_service_pb.MemcacheStatsRequest,
+                      memcache_service_pb.MemcacheStatsResponse),
+    },
     'remote_datastore': {
-        'RunQuery': (datastore_pb.Query, datastore_pb.QueryResult),
+        'RunQuery':    (datastore_pb.Query, datastore_pb.QueryResult),
         'Transaction': (remote_api_pb.TransactionRequest,
-                             datastore_pb.PutResponse),
-        'GetIDs': (remote_api_pb.PutRequest, datastore_pb.PutResponse),
+                        datastore_pb.PutResponse),
+        'GetIDs':      (remote_api_pb.PutRequest, datastore_pb.PutResponse),
+    },
+    'urlfetch': {
+        'Fetch': (urlfetch_service_pb.URLFetchRequest,
+                  urlfetch_service_pb.URLFetchResponse),
     },
 }
 
@@ -187,6 +231,7 @@
     elif 'X-appcfg-api-version' not in self.request.headers:
       self.response.set_status(403)
       self.response.out.write("This request did not contain a necessary header")
+      self.response.headers['Content-Type'] = 'text/plain'
       return False
     return True
 
@@ -202,6 +247,7 @@
         'rtok': rtok
         }
 
+    self.response.headers['Content-Type'] = 'text/plain'
     self.response.out.write(yaml.dump(app_info))
 
   def post(self):
@@ -221,6 +267,10 @@
       logging.exception('Exception while handling %s', request)
       self.response.set_status(200)
       response.mutable_exception().set_contents(pickle.dumps(e))
+      if isinstance(e, datastore_errors.Error):
+        application_error = response.mutable_application_error()
+        application_error.setCode(e.application_error)
+        application_error.setDetail(e.error_detail)
     self.response.out.write(response.Encode())
 
   def ExecuteRequest(self, request):