Files
POC-Java-www/pocwww/__init__.py
2017-04-19 16:03:35 -05:00

196 lines
7.0 KiB
Python

from pyramid.config import Configurator
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from datetime import datetime, date
from dateutil import tz
from pyramid.renderers import JSON
from bson.objectid import ObjectId
from .pagination import Pagination
try:
# for python 2
from urlparse import urlparse
except ImportError:
# for python 3
from urllib.parse import urlparse
from pymongo import MongoClient
from_zone = tz.tzutc()
to_zone = tz.tzlocal()
def format_datetime(inpDate, format='medium'):
inpDate = inpDate.replace(tzinfo=from_zone)
localDate = inpDate.astimezone(to_zone)
if format == 'long':
format = "%A, %B %d %Y at %I:%M:%S %p"
elif format == 'medium':
format = "%a, %b %d %Y %I:%M:%S %p"
elif format == 'short':
format = "%m/%d/%Y %I:%M:%S %p"
return localDate.strftime(format)
def format_dateString(inpDate, format='medium'):
iDate = datetime.strptime(inpDate, '%Y-%m-%d')
if format == 'long':
format = "%A, %B %d %Y"
elif format == 'medium':
format = "%a, %b %d %Y"
elif format == 'short':
format = "%m/%d/%Y"
return iDate.strftime(format)
def format_date(inpDate, format='medium'):
if format == 'long':
format = "%A, %B %d %Y"
elif format == 'medium':
format = "%a, %b %d %Y"
elif format == 'short':
format = "%m/%d/%Y"
return inpDate.strftime(format)
def roundDigits(inpValue, digits=2):
return round(inpValue, digits)
# JSON RENDERERS
def datetime_adapter(obj, request):
return obj.strftime("%Y-%m-%d %H:%M:%S.%fZ")
def objectId_adapter(obj, request):
return str(obj)
def date_adapter(obj, request):
return obj.strftime("%Y-%m-%d")
def pagination_adapter(obj, request):
p = {
'page': obj.page,
'per_page': obj.per_page,
'total_count': obj.total_count,
}
return p
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
authentication_policy = AuthTktAuthenticationPolicy('H3nryP7mp')
authorization_policy = ACLAuthorizationPolicy()
config = Configurator(settings=settings,
authentication_policy=authentication_policy,
authorization_policy=authorization_policy)
config.include('pyramid_jinja2')
config.commit() # this is needed or you will get None back on the next line
jinja2_env = config.get_jinja2_environment()
jinja2_env.filters['datetime'] = format_datetime
jinja2_env.filters['date'] = format_date
jinja2_env.filters['datestring'] = format_dateString
db_url = urlparse(settings['mongo_uri'])
config.registry.db = MongoClient(
host=db_url.hostname,
port=db_url.port,
)
def add_db(request):
db = config.registry.db[db_url.path[1:]]
if db_url.username and db_url.password:
db.authenticate(db_url.username, db_url.password)
return db
config.add_request_method(add_db, 'db', reify=True)
config.add_static_view('static', 'static', cache_max_age=3600)
# Add login for admin user
config.registry.db.poc.authenticate(db_url.username, db_url.password)
config.registry.db.poc.users.update_one({"username": "admin"}, {"$set": {"username": "admin", "password": "l3tm31n"}}, upsert=True)
# CUSTOM JSON RENDERER
prettyjson = JSON(indent=4)
prettyjson.add_adapter(datetime, datetime_adapter)
prettyjson.add_adapter(date, date_adapter)
prettyjson.add_adapter(ObjectId, objectId_adapter)
prettyjson.add_adapter(Pagination, pagination_adapter)
config.add_renderer('prettyjson', prettyjson)
# SHARED ROUTES
config.add_route('home', '/')
config.add_route('json_snapshot', '/json')
config.add_route("json_users", "/json/users", factory='pocwww.security.UserLoginFactory')
# Cards
config.add_route('cards_page', '/cards/{cards_date}/{page_num}')
config.add_route('json_cards_page', '/json/cards/{cards_date}/{page_num}')
config.add_route('cards_date', '/cards/{cards_date}')
config.add_route('json_cards_date', '/json/cards/{cards_date}')
config.add_route('cards', '/cards')
config.add_route('json_cards', '/json/cards')
config.add_route('card_single', "/card/view/{stroke_number}")
config.add_route('json_card_single', "/json/card/view/{stroke_number}")
config.add_route('json_lastcard', "/json/lastcard")
# Measurements
config.add_route('measurements_all', "/values")
config.add_route('measurements_all_json', "/json/values")
config.add_route('measurements_between_wparams_json', "/json/values/between/{startdt}/{enddt}")
config.add_route('measurements_between_json', "/json/values/between")
config.add_route("measurements_daterange_json", "/json/values/daterange")
config.add_route('measurements_singlebetween_wparams_json', "/json/values/tag/{tagname}/between/{startdt}/{enddt}")
config.add_route('measurements_singlebetween_json', "/json/values/tag/{tagname}")
config.add_route("measurements_singledaterange_json", "/json/values/tag/{tagname}/daterange")
config.add_route('measurements_single', "/values/tag/{tagname}")
# Gauge Off
config.add_route('gaugeoff_all', '/gaugeoff')
config.add_route('json_gaugeoff_all', '/json/gaugeoff')
# Fluid Shots
config.add_route('fluidshots_all', '/fluidshots')
config.add_route('json_fluidshots_all', '/json/fluidshots')
# Well Tests
config.add_route('welltests_all', '/welltests')
config.add_route('json_welltests_all', '/json/welltests')
# Run Status
config.add_route('runstatus', '/runstatus')
config.add_route('json_runstatus_page', '/json/runstatus/{page_num}')
config.add_route('json_runstatus', '/json/runstatus')
config.add_route('json_runstatusnow', "/json/runstatusnow")
# Configuration
config.add_route('json_config', '/json/config', factory='pocwww.security.UserLoginFactory')
config.add_route('config', '/config', factory='pocwww.security.UserLoginFactory')
# Setpoints
config.add_route('json_setpoints', '/json/setpoints', factory='pocwww.security.UserLoginFactory')
config.add_route('json_mode', '/json/mode', factory='pocwww.security.UserLoginFactory')
config.add_route('setpoints', '/setpoints', factory='pocwww.security.UserLoginFactory')
# Administration
config.add_route('admin', '/admin', factory='pocwww.security.UserLoginFactory')
config.add_route('auth', '/sign/{action}')
config.add_route('register', '/register', factory='pocwww.security.UserLoginFactory')
# POC Interface
config.add_route("json_updateconfig", "/json/updateconfig", factory='pocwww.security.UserLoginFactory')
config.add_route("json_cmd", '/json/cmd/{action}', factory='pocwww.security.UserLoginFactory')
config.add_route("json_update_poc_address", "/json/updatepocaddress", factory='pocwww.security.UserLoginFactory')
config.add_route("json_shake", '/json/cmd/shake', factory='pocwww.security.UserLoginFactory')
config.scan()
return config.make_wsgi_app()