Index: third_party/gsutil/third_party/protorpc/demos/appstats/protorpc_appstats/main.py |
diff --git a/third_party/gsutil/third_party/protorpc/demos/appstats/protorpc_appstats/main.py b/third_party/gsutil/third_party/protorpc/demos/appstats/protorpc_appstats/main.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..8e9ea1f1131db77d6f3a64759c73334864c658e3 |
--- /dev/null |
+++ b/third_party/gsutil/third_party/protorpc/demos/appstats/protorpc_appstats/main.py |
@@ -0,0 +1,90 @@ |
+#!/usr/bin/env python |
+# |
+# Copyright 2010 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. |
+# |
+ |
+import os |
+import re |
+ |
+from google.appengine.ext import webapp |
+from google.appengine.ext.webapp import util |
+ |
+from protorpc.webapp import service_handlers |
+ |
+import protorpc_appstats |
+ |
+# This regular expression is used to extract the full path of |
+# an incoming request so that the service can be correctly |
+# registered with its internal registry. The only assumption |
+# that is made about the placement of the appstats service by |
+# this main module is that the last element of the service path |
+# is 'service'. |
+_METHOD_REGEX = r'\.[^/]+' |
+_SERVICE_PATH_REGEX = re.compile(r'(.*)/service(%s|/protorpc(%s)?)?' % |
+ (_METHOD_REGEX, _METHOD_REGEX)) |
+ |
+ |
+def parse_service_path(path_info): |
+ """Parse the service path from PATH_INFO in the environment. |
+ |
+ The appstats service may be placed at any URL path within a webapp |
+ application. It isn't possible to know what the actual path is |
+ until the actual request time. This function attempts to parse |
+ the incoming request to determine where the appstats service is |
+ configured. If it can successfully determine its location, it |
+ will attempt to map protorpc RegistryService underneath its service |
+ path. |
+ |
+ The appstats service is always expected to be <path>/service. The |
+ RegistryService is mapped to <path>/service/protorpc. |
+ |
+ Args: |
+ path_info: PATH_INFO extracted from the CGI environment. |
+ |
+ Returns: |
+ A pair paths (appstats_service_path, registry_service_path): |
+ appstats_service_path: The full path of the appstats service. If the |
+ full path cannot be determined this will be '.*/service'. |
+ registry_service_path: The full path of the appstats registry service. |
+ If the path of the appstats service cannot be determined this will be |
+ None. |
+ """ |
+ match = _SERVICE_PATH_REGEX.match(path_info) |
+ if match: |
+ appstats_service_path = '%s/service' % (match.group(1),) |
+ # Creates a "local" registry service. |
+ registry_service_path = '%s/protorpc' % (appstats_service_path,) |
+ else: |
+ # Not possible to determine full service name for registry. Do |
+ # not create registry for service. |
+ appstats_service_path = '.*/service' |
+ registry_service_path = None |
+ return appstats_service_path, registry_service_path |
+ |
+ |
+def main(): |
+ path_info = os.environ.get('PATH_INFO', '') |
+ service_path, registry_path = parse_service_path(path_info) |
+ |
+ # Create webapp URL mappings for service and private registry. |
+ mapping = service_handlers.service_mapping( |
+ [(service_path, protorpc_appstats.AppStatsService)], registry_path) |
+ |
+ application = webapp.WSGIApplication(mapping) |
+ util.run_wsgi_app(application) |
+ |
+ |
+if __name__ == '__main__': |
+ main() |