Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- # this file is released under public domain and you can use without limitations
- #########################################################################
- ## This is a samples controller
- ## - index is the default action of any application
- ## - user is required for authentication and authorization
- ## - download is for downloading files uploaded in the db (does streaming)
- ## - call exposes all registered services (none by default)
- #########################################################################
- from gluon.tools import Service
- from geopy import geocoders, distance, Point
- import datetime
- service = Service(globals())
- geocode = geocoders.Google()
- def index():
- """
- example action using the internationalization operator T and flash
- rendered by views/default/index.html or views/generic.html
- if you need a simple wiki simple replace the two lines below with:
- return auth.wiki()
- """
- response.flash = T("Welcome to web2py!")
- return dict(message=T('Hello World'))
- @service.jsonrpc
- def systemListMethods():
- return ['add','sub','check_in','restaurant_menu','reserve_table','order_item']
- @service.jsonrpc
- def add(a,b):
- return a+b
- @service.jsonrpc
- def sub(a,b):
- return a-b
- @service.jsonrpc
- def restaurants_area(latitude=0, longitude=0, num=10):
- count = db(db.restaurant).count()
- session.num = session.num or num
- session.count = (session.count or 0) + 1
- session.range_start = session.range_start or 0
- session.range_end = session.range_end or count
- session.latitude = session.latitude or latitude
- session.longitude = session.longitude or longitude
- point = lambda lat,lon: Point(str(lat) + '; ' + str(lon))
- p = point(session.latitude, session.longitude)
- d = distance.distance
- restaurants = db(db.restaurant).select()
- restaurants = restaurants.sort(lambda row: d(p,point(row.latitude, row.longitude)).km)
- session.range_start = session.range_start if count < (int(session.count)-1)*int(session.num) else (int(session.count)-1)*int(session.num)
- session.range_end = session.range_end if count < int(session.count)*int(session.num) else int(session.count)*int(session.num)
- return restaurants[session.range_start:session.range_end]
- @service.jsonrpc
- def check_in(restaurant_id):
- session.restaurant_id = db.restaurant(restaurant_id).id
- return dict(restaurant_id=session.restaurant_id)
- @service.jsonrpc
- def restaurant_menu():
- menu = db.restaurant(session.restaurant_id).menu
- menuitems = db(db.item.id.belongs(menu.menuitems)).select(db.item.ALL)
- return menuitems
- @service.jsonrpc
- def reserve_table(capacity):
- restaurant = db.restaurant(session.restaurant_id)
- session.table_id = db.restaurant_table.insert(restaurant=restaurant,capacity=capacity,booked_on=datetime.datetime.now())
- return dict(table_id=session.table_id)
- @service.jsonrpc
- def order_item(item_id,quantity=1,refill=False):
- restaurant_table = db.restaurant_table(session.table_id)
- restaurant_order = db.restaurant_order.insert(item=item_id,quantity=quantity,restaurant_table=restaurant_table,
- ordered_on=datetime.datetime.now())
- return dict(order_id=restaurant_order)
- @service.jsonrpc
- def count():
- session.counter = (session.counter or 0) + 1
- return dict(counter=session.counter, now=request.now)
- def user():
- """
- exposes:
- http://..../[app]/default/user/login
- http://..../[app]/default/user/logout
- http://..../[app]/default/user/register
- http://..../[app]/default/user/profile
- http://..../[app]/default/user/retrieve_password
- http://..../[app]/default/user/change_password
- use @auth.requires_login()
- @auth.requires_membership('group name')
- @auth.requires_permission('read','table name',record_id)
- to decorate functions that need access control
- """
- return dict(form=auth())
- def download():
- """
- allows downloading of uploaded files
- http://..../[app]/default/download/[filename]
- """
- return response.download(request, db)
- #@auth.requires_login()
- def call():
- """
- exposes services. for example:
- http://..../[app]/default/call/jsonrpc
- decorate with @services.jsonrpc the functions to expose
- supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv
- """
- #session.forget(response)
- return service()
- #~ def tester():
- #~ from gluon.contrib.simplejsonrpc import ServerProxy
- #~ URL = "http://127.0.0.1:8000/waiterapp/default/call/jsonrpc"
- #~ service = ServerProxy(URL, verbose=True)
- #~ latitude, longitude = ('43.7747943', '-79.7420149')
- #~ return dict()
Advertisement
Add Comment
Please, Sign In to add comment