TheLegace

waiterapp

Feb 11th, 2013
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.63 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. # this file is released under public domain and you can use without limitations
  3.  
  4. #########################################################################
  5. ## This is a samples controller
  6. ## - index is the default action of any application
  7. ## - user is required for authentication and authorization
  8. ## - download is for downloading files uploaded in the db (does streaming)
  9. ## - call exposes all registered services (none by default)
  10. #########################################################################
  11. from gluon.tools import Service
  12. from geopy import geocoders, distance, Point
  13. import datetime
  14. service = Service(globals())
  15. geocode = geocoders.Google()
  16.  
  17. def index():
  18.     """
  19.    example action using the internationalization operator T and flash
  20.    rendered by views/default/index.html or views/generic.html
  21.  
  22.    if you need a simple wiki simple replace the two lines below with:
  23.    return auth.wiki()
  24.    """
  25.     response.flash = T("Welcome to web2py!")
  26.     return dict(message=T('Hello World'))
  27.    
  28. @service.jsonrpc
  29. def systemListMethods():
  30.     return ['add','sub','check_in','restaurant_menu','reserve_table','order_item']
  31.  
  32. @service.jsonrpc
  33. def add(a,b):
  34.     return a+b
  35. @service.jsonrpc
  36. def sub(a,b):
  37.     return a-b
  38.  
  39. @service.jsonrpc
  40. def restaurants_area(latitude=0, longitude=0, num=10):
  41.    
  42.     count = db(db.restaurant).count()
  43.    
  44.     session.num = session.num or num
  45.     session.count = (session.count or 0) + 1
  46.     session.range_start = session.range_start or 0
  47.     session.range_end = session.range_end or count
  48.    
  49.     session.latitude = session.latitude or latitude
  50.     session.longitude = session.longitude or longitude
  51.    
  52.     point = lambda lat,lon: Point(str(lat) + '; ' + str(lon))
  53.     p = point(session.latitude, session.longitude)
  54.     d = distance.distance
  55.    
  56.     restaurants = db(db.restaurant).select()   
  57.     restaurants = restaurants.sort(lambda row: d(p,point(row.latitude, row.longitude)).km)
  58.    
  59.     session.range_start = session.range_start if count < (int(session.count)-1)*int(session.num) else (int(session.count)-1)*int(session.num)
  60.     session.range_end = session.range_end if count < int(session.count)*int(session.num) else int(session.count)*int(session.num)
  61.    
  62.     return restaurants[session.range_start:session.range_end]
  63.  
  64. @service.jsonrpc
  65. def check_in(restaurant_id):
  66.     session.restaurant_id = db.restaurant(restaurant_id).id
  67.     return dict(restaurant_id=session.restaurant_id)
  68.    
  69. @service.jsonrpc
  70. def restaurant_menu():
  71.     menu = db.restaurant(session.restaurant_id).menu
  72.     menuitems = db(db.item.id.belongs(menu.menuitems)).select(db.item.ALL)
  73.     return menuitems
  74.  
  75. @service.jsonrpc
  76. def reserve_table(capacity):
  77.     restaurant = db.restaurant(session.restaurant_id)
  78.     session.table_id = db.restaurant_table.insert(restaurant=restaurant,capacity=capacity,booked_on=datetime.datetime.now())
  79.     return dict(table_id=session.table_id)
  80.  
  81. @service.jsonrpc
  82. def order_item(item_id,quantity=1,refill=False):
  83.     restaurant_table = db.restaurant_table(session.table_id)
  84.     restaurant_order = db.restaurant_order.insert(item=item_id,quantity=quantity,restaurant_table=restaurant_table,
  85.         ordered_on=datetime.datetime.now())
  86.     return dict(order_id=restaurant_order)
  87.  
  88. @service.jsonrpc
  89. def count():
  90.     session.counter = (session.counter or 0) + 1
  91.     return dict(counter=session.counter, now=request.now)
  92.  
  93. def user():
  94.     """
  95.    exposes:
  96.    http://..../[app]/default/user/login
  97.    http://..../[app]/default/user/logout
  98.    http://..../[app]/default/user/register
  99.    http://..../[app]/default/user/profile
  100.    http://..../[app]/default/user/retrieve_password
  101.    http://..../[app]/default/user/change_password
  102.    use @auth.requires_login()
  103.        @auth.requires_membership('group name')
  104.        @auth.requires_permission('read','table name',record_id)
  105.    to decorate functions that need access control
  106.    """
  107.     return dict(form=auth())
  108.  
  109. def download():
  110.     """
  111.    allows downloading of uploaded files
  112.    http://..../[app]/default/download/[filename]
  113.    """
  114.     return response.download(request, db)
  115.  
  116. #@auth.requires_login()
  117. def call():
  118.     """
  119.    exposes services. for example:
  120.    http://..../[app]/default/call/jsonrpc
  121.    decorate with @services.jsonrpc the functions to expose
  122.    supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv
  123.    """
  124.     #session.forget(response)
  125.     return service()
  126.  
  127. #~ def tester():
  128.     #~ from gluon.contrib.simplejsonrpc import ServerProxy
  129.     #~ URL = "http://127.0.0.1:8000/waiterapp/default/call/jsonrpc"
  130.     #~ service = ServerProxy(URL, verbose=True)
  131.     #~ latitude, longitude = ('43.7747943', '-79.7420149')    
  132.     #~ return dict()
Advertisement
Add Comment
Please, Sign In to add comment