Skip to content

Commit

Permalink
Merge pull request #257 from GoogleCloudPlatform/gae-requests
Browse files Browse the repository at this point in the history
Adding app engine request handling samples.
  • Loading branch information
Jon Wayne Parrott committed Apr 14, 2016
2 parents 19bd9c8 + 1c04431 commit 573d1e7
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 0 deletions.
10 changes: 10 additions & 0 deletions appengine/requests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## App Engine Requests Docs Snippets

These snippets demonstrate various aspects of App Engine Python request handling.

<!-- auto-doc-link -->
These samples are used on the following documentation page:

> https://cloud.google.com/appengine/docs/python/requests
<!-- end-auto-doc-link -->
7 changes: 7 additions & 0 deletions appengine/requests/app.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: .* # This regex directs all routes to main.app
script: main.app
66 changes: 66 additions & 0 deletions appengine/requests/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Copyright 2015 Google Inc. All rights reserved.
#
# 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.

"""
Sample application that demonstrates various aspects of App Engine's request
handling.
"""

import os
import time

import webapp2


# [START request_timer]
class TimerHandler(webapp2.RequestHandler):
def get(self):
from google.appengine.runtime import DeadlineExceededError

try:
time.sleep(70)
self.response.write('Completed.')
except DeadlineExceededError:
self.response.clear()
self.response.set_status(500)
self.response.out.write(
'The request did not complete in time.')
# [END request_timer]


# [START environment]
class PrintEnvironmentHandler(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
for key, value in os.environ.iteritems():
self.response.out.write(
"{} = {}\n".format(key, value))
# [END environment]


# [START request_ids]
class RequestIdHandler(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
request_id = os.environ.get('REQUEST_LOG_ID')
self.response.write(
'REQUEST_LOG_ID={}'.format(request_id))
# [END request_ids]


app = webapp2.WSGIApplication([
('/timer', TimerHandler),
('/environment', PrintEnvironmentHandler),
('/requestid', RequestIdHandler)
], debug=True)
44 changes: 44 additions & 0 deletions appengine/requests/main_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Copyright 2016 Google Inc. All rights reserved.
#
# 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

from google.appengine.runtime import DeadlineExceededError
import main
import mock
import webtest


def test_timer(testbed):
app = webtest.TestApp(main.app)

with mock.patch('main.time.sleep') as sleep_mock:
sleep_mock.side_effect = DeadlineExceededError()
app.get('/timer', status=500)
assert sleep_mock.called


def test_environment(testbed):
app = webtest.TestApp(main.app)
response = app.get('/environment')
assert response.headers['Content-Type'] == 'text/plain'
assert response.body


def test_request_id(testbed):
app = webtest.TestApp(main.app)
os.environ['REQUEST_LOG_ID'] = '1234'
response = app.get('/requestid')
assert response.headers['Content-Type'] == 'text/plain'
assert '1234' in response.body

0 comments on commit 573d1e7

Please sign in to comment.