Skip to content

Instantly share code, notes, and snippets.

@gmr
Created April 28, 2014 02:05
Show Gist options
  • Save gmr/11360182 to your computer and use it in GitHub Desktop.
Save gmr/11360182 to your computer and use it in GitHub Desktop.
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