Index: third_party/gsutil/third_party/protorpc/demos/echo/services.py |
diff --git a/third_party/gsutil/third_party/protorpc/demos/echo/services.py b/third_party/gsutil/third_party/protorpc/demos/echo/services.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..a44a22c3caf989f9ddf9c5887f831e9a583012c5 |
--- /dev/null |
+++ b/third_party/gsutil/third_party/protorpc/demos/echo/services.py |
@@ -0,0 +1,120 @@ |
+#!/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. |
+# |
+ |
+"""Echo service demo. |
+ |
+Implements a simple echo service. The request and response objects are |
+the same message that contains numerous different fields useful for testing and |
+illustrating the forms interface. |
+""" |
+ |
+__author__ = 'rafek@google.com (Rafe Kaplan)' |
+ |
+import appengine_config |
+ |
+import logging |
+import time |
+ |
+from protorpc import messages |
+from protorpc import remote |
+from protorpc.webapp import service_handlers |
+ |
+package = 'protorpc.echo' |
+ |
+ |
+class SubMessage(messages.Message): |
+ """A sub-message that can be required by EchoData.""" |
+ |
+ value = messages.StringField(1) |
+ |
+ |
+class EchoData(messages.Message): |
+ """Echo message. |
+ |
+ Contains all relevant ProtoRPC data-types including recursive reference |
+ to itself in nested and repeated form. |
+ """ |
+ |
+ class Color(messages.Enum): |
+ """A simple enumeration type.""" |
+ |
+ RED = 1 |
+ GREEN = 2 |
+ BLUE = 3 |
+ |
+ # A required field with a default. |
+ required = messages.EnumField(Color, 1, |
+ required=True, |
+ default=Color.BLUE) |
+ required_message = messages.MessageField(SubMessage, 18, required=True) |
+ |
+ # Optional fields. |
+ a_string = messages.StringField(2) |
+ an_int = messages.IntegerField(3) |
+ a_float = messages.FloatField(4) |
+ a_bool = messages.BooleanField(5) |
+ a_bytes = messages.BytesField(6) |
+ a_color = messages.EnumField(Color, 7) |
+ an_echo = messages.MessageField('EchoData', 8) |
+ |
+ # Repeated fields. |
+ strings = messages.StringField(9, repeated=True) |
+ ints = messages.IntegerField(10, repeated=True) |
+ floats = messages.FloatField(11, repeated=True) |
+ bools = messages.BooleanField(12, repeated=True); |
+ bytes = messages.BytesField(13, repeated=True) |
+ colors = messages.EnumField(Color, 14, repeated=True) |
+ echos = messages.MessageField('EchoData', 15, repeated=True) |
+ |
+ # With defaults |
+ default_string = messages.StringField(19, default='a default') |
+ default_int = messages.IntegerField(20, default=30) |
+ default_float = messages.FloatField(21, default=3.1415) |
+ default_bool = messages.BooleanField(22, default=True) |
+ default_bytes = messages.BytesField(23, default='YSBieXRlcw==') |
+ default_color = messages.EnumField(Color, 24, default=Color.GREEN) |
+ |
+ # If want_time is set to True, the response will contain current seconds |
+ # since epoch. |
+ want_time = messages.BooleanField(16) |
+ time = messages.IntegerField(17) |
+ |
+ |
+class EchoService(remote.Service): |
+ """Echo service echos response to client.""" |
+ |
+ @remote.method(EchoData, EchoData) |
+ def echo(self, request): |
+ """Echo method.""" |
+ logging.info('\n'.join( |
+ ['Received request:', |
+ ' Host = %s' % self.request_state.remote_host, |
+ ' IP Address = %s' % self.request_state.remote_address, |
+ ])) |
+ if request.want_time: |
+ request.time = int(time.time()) |
+ return request |
+ |
+ |
+def main(): |
+ service_handlers.run_services( |
+ [('/echo', EchoService), |
+ ]) |
+ |
+ |
+if __name__ == '__main__': |
+ main() |