Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Unified Diff: third_party/gsutil/third_party/protorpc/demos/guestbook/server/guestbook.py

Issue 1377933002: [catapult] - Copy Telemetry's gsutilz over to third_party. (Closed) Base URL: https://github.com/catapult-project/catapult.git@master
Patch Set: Rename to gsutil. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/gsutil/third_party/protorpc/demos/guestbook/server/guestbook.py
diff --git a/third_party/gsutil/third_party/protorpc/demos/guestbook/server/guestbook.py b/third_party/gsutil/third_party/protorpc/demos/guestbook/server/guestbook.py
new file mode 100755
index 0000000000000000000000000000000000000000..b7d383bedeb0e8b3e553cd11502ab450b285746b
--- /dev/null
+++ b/third_party/gsutil/third_party/protorpc/demos/guestbook/server/guestbook.py
@@ -0,0 +1,156 @@
+#!/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.
+#
+
+import appengine_config
+
+import cgi
+import datetime
+import time
+import wsgiref.handlers
+
+from google.appengine.ext import db
+from google.appengine.api import users
+from google.appengine.ext import webapp
+
+from protorpc import message_types
+from protorpc import messages
+from protorpc import remote
+from protorpc.webapp import service_handlers
+
+
+class Greeting(db.Model):
+ author = db.UserProperty()
+ content = db.StringProperty(multiline=True)
+ date = db.DateTimeProperty(auto_now_add=True)
+
+
+class MainPage(webapp.RequestHandler):
+ def get(self):
+ self.response.out.write('<html><body>')
+
+ greetings = db.GqlQuery("SELECT * "
+ "FROM Greeting "
+ "ORDER BY date DESC LIMIT 10")
+
+ for greeting in greetings:
+ if greeting.author:
+ self.response.out.write('<b>%s</b> wrote:' % greeting.author.nickname())
+ else:
+ self.response.out.write('An anonymous person wrote:')
+ self.response.out.write('<blockquote>%s</blockquote>' %
+ cgi.escape(greeting.content))
+
+
+ self.response.out.write("""
+ <form action="/sign" method="post">
+ <div><textarea name="content" rows="3" cols="60"></textarea></div>
+ <div><input type="submit" value="Sign Guestbook"></div>
+ </form>
+ </body>
+ </html>""")
+
+
+class Guestbook(webapp.RequestHandler):
+ def post(self):
+ greeting = Greeting()
+
+ if users.get_current_user():
+ greeting.author = users.get_current_user()
+
+ greeting.content = self.request.get('content')
+ greeting.put()
+ self.redirect('/')
+
+
+class Note(messages.Message):
+
+ text = messages.StringField(1, required=True)
+ when = messages.IntegerField(2)
+
+
+class GetNotesRequest(messages.Message):
+
+ limit = messages.IntegerField(1, default=10)
+ on_or_before = messages.IntegerField(2)
+
+ class Order(messages.Enum):
+ WHEN = 1
+ TEXT = 2
+ order = messages.EnumField(Order, 3, default=Order.WHEN)
+
+
+class Notes(messages.Message):
+ notes = messages.MessageField(Note, 1, repeated=True)
+
+
+class PostService(remote.Service):
+
+ # Add the remote decorator to indicate the service methods
+ @remote.method(Note)
+ def post_note(self, request):
+
+ # If the Note instance has a timestamp, use that timestamp
+ if request.when is not None:
+ when = datetime.datetime.utcfromtimestamp(request.when)
+
+ # Else use the current time
+ else:
+ when = datetime.datetime.now()
+ note = Greeting(content=request.text, date=when)
+ note.put()
+ return message_types.VoidMessage()
+
+ @remote.method(GetNotesRequest, Notes)
+ def get_notes(self, request):
+ query = Greeting.all().order('-date')
+
+ if request.on_or_before:
+ when = datetime.datetime.utcfromtimestamp(
+ request.on_or_before)
+ query.filter('date <=', when)
+
+ notes = []
+ for note_model in query.fetch(request.limit):
+ if note_model.date:
+ when = int(time.mktime(note_model.date.utctimetuple()))
+ else:
+ when = None
+ note = Note(text=note_model.content, when=when)
+ notes.append(note)
+
+ if request.order == GetNotesRequest.Order.TEXT:
+ notes.sort(key=lambda note: note.text)
+
+ return Notes(notes=notes)
+
+
+service_mapping = service_handlers.service_mapping(
+ [('/postservice', PostService)])
+
+application = webapp.WSGIApplication([
+ ('/', MainPage),
+ ('/sign', Guestbook),
+] + service_mapping,
+debug=True)
+
+
+def main():
+ wsgiref.handlers.CGIHandler().run(application)
+
+
+if __name__ == '__main__':
+ main()

Powered by Google App Engine
This is Rietveld 408576698