def save_new_preconfigured_configuration(configuration_id, animal): animal.save_new_configuration( Config.get_int_value('gps.preconfig_' + str(configuration_id) + '_readtime'), Config.get_int_value('gps.preconfig_' + str(configuration_id) + '_sampletime'), Config.get_int_value('gps.preconfig_' + str(configuration_id) + '_datatime'))
def __init__(self): self.session = scoped_session( sessionmaker(extension=ZopeTransactionExtension())) host = Config.get_string_value('db.host') port = Config.get_string_value('db.port') db = Config.get_string_value('db.dbname') user = Config.get_string_value('db.user') password = Config.get_string_value('db.password') conn_str = 'postgresql+psycopg2://' + user + ':' + password + \ '@' + host + ':' + port + '/' + db self.engine = create_engine(conn_str, echo=False) self.session.configure(bind=self.engine) Base.metadata.bind = self.engine
def __init__(self): self.session = scoped_session( sessionmaker(extension=ZopeTransactionExtension())) host = Config.get_string_value('db.host') port = Config.get_string_value('db.port') db = Config.get_string_value('db.dbname') user = Config.get_string_value('db.user') password = Config.get_string_value('db.password') conn_str = 'postgresql+psycopg2://' + user + ':' + password + \ '@' + host + ':' + port + '/' + db self.engine = create_engine( conn_str, echo=False ) self.session.configure(bind=self.engine) Base.metadata.bind = self.engine
def nominatim_request_by_name(request): result = [] if 'q' in request.GET: query = request.GET['q'] logger_nominatim.info('Nominatim request: «' + query + '»') result = json.load( urllib2.urlopen( 'http://nominatim.openstreetmap.org/search?format=json&limit=5&email=' + Config.get_string_value('smtp.mail') + '&q=' + query)) return result
def get_custom_localizer(locale): if locale == None: locale = Config.get_string_value('pyramid.default_locale_name') registry = Config.registry localizer = registry.queryUtility(ILocalizer, name=locale) if localizer is None: # no localizer utility registered yet tdirs = registry.queryUtility(ITranslationDirectories, default=[]) localizer = make_localizer(locale, tdirs) registry.registerUtility(localizer, ILocalizer, name=locale) return localizer
class Entity(): session = Db.instance().session srid = Config.get_string_value('config.viewer_proj') ''' This is a baseclass with delivers all basic database operations ''' def save(self): self.session.add(self) self.session.flush() def saveMultiple(self, objects=[]): self.session.add_all(objects) self.session.flush() def update(self): self.session.merge(self) self.session.flush() def delete(self): self.session.delete(self) self.session.flush() def queryObject(self): return self.session.query(self.__class__)
def get_device_preconfig_names(request=None, locale=None): nr = 1 try: while True: Config.get_int_value('gps.preconfig_' + str(nr) + '_readtime') Config.get_int_value('gps.preconfig_' + str(nr) + '_sampletime') Config.get_int_value('gps.preconfig_' + str(nr) + '_datatime') nr = nr + 1 except: pass if request != None: localizer = get_localizer(request) else: localizer = get_custom_localizer(locale) device_preconfig_names = [] for i in range(1, nr): device_preconfig_names.append(localizer.translate(_('gps_preconfig_' + str(i) + '_name', domain='Ondestan'))) return device_preconfig_names
def get_device_preconfig_names(request=None, locale=None): nr = 1 try: while True: Config.get_int_value('gps.preconfig_' + str(nr) + '_readtime') Config.get_int_value('gps.preconfig_' + str(nr) + '_sampletime') Config.get_int_value('gps.preconfig_' + str(nr) + '_datatime') nr = nr + 1 except: pass if request != None: localizer = get_localizer(request) else: localizer = get_custom_localizer(locale) device_preconfig_names = [] for i in range(1, nr): device_preconfig_names.append( localizer.translate( _('gps_preconfig_' + str(i) + '_name', domain='Ondestan'))) return device_preconfig_names
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings, root_factory='ondestan.models.RootFactory') Config.init_settings(settings, config.registry) encoding = Config.get_string_value('config.default_encoding') if encoding != '' and encoding != None: reload(sys) sys.setdefaultencoding(encoding) from ondestan.services import user_service from ondestan.utils.db import Db Db.instance() logger = logging.getLogger('ondestan') authn_policy = AuthTktAuthenticationPolicy( 'ondestan', callback=user_service.group_finder ) authz_policy = ACLAuthorizationPolicy() config.add_subscriber(add_renderer_globals, BeforeRender) config.add_static_view('static', 'static', cache_max_age=3600) config.set_authentication_policy(authn_policy) config.set_authorization_policy(authz_policy) config.add_translation_dirs('ondestan:locale') config.add_route('default', '/') config.add_route('tour', '/tour') config.add_route('login', '/login') config.add_route('logout', '/logout') config.add_route('password_reset', '/users/password_reset') config.add_route('signup', '/users/signup') config.add_route('signup_success', '/users/signup_success') config.add_route('update_profile', '/users/update') config.add_route('activate_user', '/users/activate/{loginhash}') config.add_route('gps_update', '/gps_update') config.add_route('check_user_email', '/users/check_email') config.add_route('check_device_imei', '/devices/check_imei') config.add_route('check_device_phone', '/devices/check_phone') config.add_route('orders', '/orders') config.add_route('order_state_history', '/orders/history/{order_id}') config.add_route('order_devices', '/orders/devices/{order_id}') config.add_route('delete_device', '/devices/delete/{device_id}') config.add_route('notifications', '/notifications') config.add_route('activate_device', '/devices/activate/{device_id}') config.add_route('deactivate_device', '/devices/deactivate/' + '{device_id}') config.add_route('update_animal_name', '/animals/update_name') config.add_route('plot_manager', '/plots/manager') config.add_route('create_plot', '/plots/create') config.add_route('update_plot_geom', '/plots/update_geom') config.add_route('update_plot_name', '/plots/update_name') config.add_route('delete_plot', '/plots/delete_plot') config.add_route('map', '/map') config.add_route('history_map', '/history_map/{animal_id}') config.add_route('device_configuration', '/device_configuration/{animal_id}') config.add_route('device_configuration_history', '/device_configuration_history/{animal_id}') config.add_route('charging_history_map', '/charging_history_map/{animal_id}') config.add_route('json_animals', '/json/animals.json') config.add_route('json_animal_positions', '/json/positions/{animal_id}.json') config.add_route('json_animal_charging_positions', '/json/charging_positions/{animal_id}.json') config.add_route('json_animal_approx_position', '/json/approx_position/{animal_id}.json') config.add_route('json_inactive_animals', '/json/inactive_animals.json') config.add_route('json_plots', '/json/plots.json') config.add_route('animals_list', '/animals') config.add_route('nominatim_request_by_name', '/nominatim/request_by_name') config.scan() logger.info('Application initialized') return config.make_wsgi_app()
# We put these 18n strings here so they're detected when parsing files _('year', domain='Ondestan') _('years', domain='Ondestan') _('month', domain='Ondestan') _('months', domain='Ondestan') _('day', domain='Ondestan') _('days', domain='Ondestan') _('hour', domain='Ondestan') _('hours', domain='Ondestan') _('minute', domain='Ondestan') _('minutes', domain='Ondestan') _('second', domain='Ondestan') _('seconds', domain='Ondestan') utc_timezone = tz.tzutc() default_timezone = tz.gettz(Config.get_string_value('config.default_timezone')) date_format = Config.get_string_value('config.get_date_format') def rand_string(length=10): chars = set(string.ascii_uppercase + string.ascii_lowercase + string.digits) char_gen = (c for c in imap(urandom, repeat(1)) if c in chars) return ''.join(islice(char_gen, None, length)) def get_custom_localizer(locale): if locale == None: locale = Config.get_string_value('pyramid.default_locale_name') registry = Config.registry
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings, root_factory='ondestan.models.RootFactory') Config.init_settings(settings, config.registry) encoding = Config.get_string_value('config.default_encoding') if encoding != '' and encoding != None: reload(sys) sys.setdefaultencoding(encoding) from ondestan.services import user_service from ondestan.utils.db import Db Db.instance() logger = logging.getLogger('ondestan') authn_policy = AuthTktAuthenticationPolicy( 'ondestan', callback=user_service.group_finder) authz_policy = ACLAuthorizationPolicy() config.add_subscriber(add_renderer_globals, BeforeRender) config.add_static_view('static', 'static', cache_max_age=3600) config.set_authentication_policy(authn_policy) config.set_authorization_policy(authz_policy) config.add_translation_dirs('ondestan:locale') config.add_route('default', '/') config.add_route('tour', '/tour') config.add_route('login', '/login') config.add_route('logout', '/logout') config.add_route('password_reset', '/users/password_reset') config.add_route('signup', '/users/signup') config.add_route('signup_success', '/users/signup_success') config.add_route('update_profile', '/users/update') config.add_route('activate_user', '/users/activate/{loginhash}') config.add_route('gps_update', '/gps_update') config.add_route('check_user_email', '/users/check_email') config.add_route('check_device_imei', '/devices/check_imei') config.add_route('check_device_phone', '/devices/check_phone') config.add_route('orders', '/orders') config.add_route('order_state_history', '/orders/history/{order_id}') config.add_route('order_devices', '/orders/devices/{order_id}') config.add_route('delete_device', '/devices/delete/{device_id}') config.add_route('notifications', '/notifications') config.add_route('activate_device', '/devices/activate/{device_id}') config.add_route('deactivate_device', '/devices/deactivate/' + '{device_id}') config.add_route('update_animal_name', '/animals/update_name') config.add_route('plot_manager', '/plots/manager') config.add_route('create_plot', '/plots/create') config.add_route('update_plot_geom', '/plots/update_geom') config.add_route('update_plot_name', '/plots/update_name') config.add_route('delete_plot', '/plots/delete_plot') config.add_route('map', '/map') config.add_route('history_map', '/history_map/{animal_id}') config.add_route('device_configuration', '/device_configuration/{animal_id}') config.add_route('device_configuration_history', '/device_configuration_history/{animal_id}') config.add_route('charging_history_map', '/charging_history_map/{animal_id}') config.add_route('json_animals', '/json/animals.json') config.add_route('json_animal_positions', '/json/positions/{animal_id}.json') config.add_route('json_animal_charging_positions', '/json/charging_positions/{animal_id}.json') config.add_route('json_animal_approx_position', '/json/approx_position/{animal_id}.json') config.add_route('json_inactive_animals', '/json/inactive_animals.json') config.add_route('json_plots', '/json/plots.json') config.add_route('animals_list', '/animals') config.add_route('nominatim_request_by_name', '/nominatim/request_by_name') config.scan() logger.info('Application initialized') return config.make_wsgi_app()
# coding=UTF-8 from smtplib import SMTP from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from twilio.rest import TwilioRestClient from ondestan.config import Config import logging, sys logger = logging.getLogger('ondestan') # put your own credentials here account_sid = Config.get_string_value('twilio.account_sid') auth_token = Config.get_string_value('twilio.auth_token') caller_nr = Config.get_string_value('twilio.caller_nr') default_prefix = Config.get_string_value('twilio.default_prefix') if Config.get_boolean_value('twilio.send_sms'): client = TwilioRestClient(account_sid, auth_token) else: client = None smtp_server = Config.get_string_value('smtp.server') smtp_port = int(Config.get_string_value('smtp.port')) smtp_mail = Config.get_string_value('smtp.mail') smtp_password = Config.get_string_value('smtp.password') def send_mail(html, text, subject, destination): # Create message container - the correct MIME type is multipart/alternative
# coding=UTF-8 from sqlalchemy import Column, Integer, ForeignKey, String, Boolean, func from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.dialects.postgresql import array from ondestan.entities import Entity from ondestan.entities.position import Position from ondestan.entities.configuration import Configuration from ondestan.utils import Base from ondestan.config import Config from datetime import datetime max_positions = Config.get_int_value('config.history_max_positions') default_config_readtime = Config.get_int_value('gps.default_config_readtime') default_config_sampletime = Config.get_int_value('gps.default_config_sampletime') default_config_datatime = Config.get_int_value('gps.default_config_datatime') class Animal(Entity, Base): __tablename__ = "animals" id = Column(Integer, primary_key=True) name = Column(String) type = Column(String) imei = Column(String) phone = Column(String) active = Column(Boolean)
from ondestan.entities import Animal, Position, Order_state, Configuration from ondestan.utils import format_utcdatetime, escape_code_to_eval from ondestan.utils import internal_format_datetime, get_fancy_time_from_utc from ondestan.utils import compare_datetime_ago_from_utc, send_sms from ondestan.config import Config import ondestan.services import logging import transaction import os.path from datetime import datetime from dateutil.relativedelta import relativedelta logger = logging.getLogger('ondestan') low_battery_barrier = Config.get_float_value('config.low_battery_barrier') medium_battery_barrier = Config.get_float_value( 'config.medium_battery_barrier') same_position_max_hours = Config.get_float_value( 'config.same_position_max_hours') no_positions_max_hours = Config.get_float_value( 'config.no_positions_max_hours') no_positions_web_checks = Config.get_int_value( 'config.no_positions_web_checks') no_positions_mail_checks = Config.get_int_value( 'config.no_positions_mail_checks') no_positions_sms_checks = Config.get_int_value( 'config.no_positions_sms_checks') update_sms = Config.get_string_value('gps.update_sms') alarm_state_readtime = Config.get_int_value('gps.alarm_state_readtime')
# coding=UTF-8 from smtplib import SMTP from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from twilio.rest import TwilioRestClient from ondestan.config import Config import logging, sys logger = logging.getLogger('ondestan') # put your own credentials here account_sid = Config.get_string_value('twilio.account_sid') auth_token =Config.get_string_value('twilio.auth_token') caller_nr = Config.get_string_value('twilio.caller_nr') default_prefix = Config.get_string_value('twilio.default_prefix') if Config.get_boolean_value('twilio.send_sms'): client = TwilioRestClient(account_sid, auth_token) else: client = None smtp_server = Config.get_string_value('smtp.server') smtp_port = int(Config.get_string_value('smtp.port')) smtp_mail = Config.get_string_value('smtp.mail') smtp_password = Config.get_string_value('smtp.password') def send_mail(html, text, subject, destination): # Create message container - the correct MIME type is multipart/alternative
# coding=UTF-8 from sqlalchemy import Column, Integer, ForeignKey, String, Boolean, func from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.dialects.postgresql import array from ondestan.entities import Entity from ondestan.entities.position import Position from ondestan.entities.configuration import Configuration from ondestan.utils import Base from ondestan.config import Config from datetime import datetime max_positions = Config.get_int_value('config.history_max_positions') default_config_readtime = Config.get_int_value('gps.default_config_readtime') default_config_sampletime = Config.get_int_value( 'gps.default_config_sampletime') default_config_datatime = Config.get_int_value('gps.default_config_datatime') class Animal(Entity, Base): __tablename__ = "animals" id = Column(Integer, primary_key=True) name = Column(String) type = Column(String) imei = Column(String) phone = Column(String)
from pyramid.security import (remember, forget) from pyramid.i18n import (get_localizer, TranslationString as _) from webhelpers.paginate import Page from ondestan.security import get_user_email, check_permission from ondestan.services import plot_service, animal_service, user_service from ondestan.services import order_service, notification_service from ondestan.gps import comms_service from ondestan.gps.gps_update_error import GpsUpdateError from ondestan.utils import Customizable_PageURL_WebOb, format_utcdatetime, parse_to_utcdatetime from ondestan.utils import get_device_config_fancy_description, get_fancy_time_from_utc, get_device_preconfig_names from ondestan.config import Config max_positions = Config.get_int_value('config.history_max_positions') import logging, json, urllib2 from datetime import datetime logger = logging.getLogger('ondestan') logger_nominatim = logging.getLogger('nominatim') @view_config(route_name='login', renderer='templates/login.pt') @forbidden_view_config(renderer='templates/login.pt') def login(request): activated = False if 'activated' in request.params: activated = request.params['activated'].lower() == 'true' referrer = request.url
import pyproj #import md5 from gps_update_error import GpsUpdateError from pyramid.httpexceptions import (HTTPOk, HTTPBadRequest, HTTPForbidden, HTTPMethodNotAllowed) from ondestan.services import animal_service from ondestan.entities.position import Position from ondestan.config import Config from ondestan.utils import internal_parse_datetime import logging logger = logging.getLogger('ondestan') legacy_data_header = Config.get_string_value('gps.legacy_data_header') legacy_beacon_header = Config.get_string_value('gps.legacy_beacon_header') legacy_positions_divider = Config.get_string_value( 'gps.legacy_positions_divider') legacy_params_divider = Config.get_string_value('gps.legacy_params_divider') legacy_params_positions = Config.get_string_value( 'gps.legacy_params_positions').split(',') legacy_default_response = Config.get_string_value( 'gps.legacy_default_response') legacy_gps_proj = pyproj.Proj("+init=EPSG:" + Config.get_string_value('gps.legacy_proj')) data_header = Config.get_string_value('gps.data_header') positions_divider = Config.get_string_value('gps.positions_divider') params_divider = Config.get_string_value('gps.params_divider') header_params_positions = Config.get_string_value(