Created
April 28, 2014 02:05
-
-
Save gmr/11360182 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
from tornado import gen, ioloop, web | |
import queries | |
class WidgetRequestHandler(web.RequestHandler): | |
def initialize(self): | |
self.session = queries.TornadoSession() | |
@gen.coroutine | |
def post(self, *args, **kwargs): | |
if 'sku' not in kwargs: | |
raise web.HTTPError(404, 'Missing SKU') | |
name = self.get_argument('name') | |
qty = self.get_argument('qty') | |
try: | |
yield self.session.query("UPDATE widgets SET name=%(name)s, qty=%(qty)s WHERE sku=%(sku)s", | |
{'sku': kwargs['sku'], 'name': name, 'qty': qty}) | |
except queries.IntegrityError as error: | |
self.set_status(409) | |
if 'duplicate key' in str(error): | |
self.finish({'error': "Can not add the same SKU again."}) | |
else: | |
self.finish({'error': str(error)}) | |
else: | |
self.set_status(201) | |
self.finish() | |
@gen.coroutine | |
def get(self, *args, **kwargs): | |
data = yield self.session.query("SELECT * FROM widgets WHERE sku=%(sku)s", | |
{'sku': kwargs['sku']}) | |
if not data: | |
self.set_status(404) | |
self.finish({'error': 'widget not found'}) | |
else: | |
self.finish(data[0]) | |
@gen.coroutine | |
def post(self, *args, **kwargs): | |
self.finish() | |
@gen.coroutine | |
def put(self, *args, **kwargs): | |
sku = self.get_argument('sku') | |
name = self.get_argument('name') | |
qty = self.get_argument('qty') | |
try: | |
yield self.session.query("INSERT INTO widgets VALUES (%s, %s, %s)", | |
[sku, name, qty]) | |
except queries.IntegrityError as error: | |
self.set_status(409) | |
if 'duplicate key' in str(error): | |
self.finish({'error': "Can not add the same SKU again."}) | |
else: | |
self.finish({'error': str(error)}) | |
else: | |
self.set_status(201) | |
self.finish() | |
class WidgetsRequestHandler(web.RequestHandler): | |
def initialize(self): | |
self.session = queries.TornadoSession() | |
@gen.coroutine | |
def get(self, *args, **kwargs): | |
data = yield self.session.query("SELECT * FROM widgets ORDER BY sku") | |
self.finish({'widgets': data}) | |
if __name__ == "__main__": | |
logging.basicConfig(level=logging.DEBUG) | |
application = web.Application([ | |
(r"/widget", WidgetRequestHandler), | |
(r"/widget/(?P<sku>[a-z0-9]{10})", WidgetRequestHandler), | |
(r"/widgets", WidgetsRequestHandler) | |
]).listen(8888) | |
ioloop.IOLoop.instance().start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment