예제 #1
0
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'))
예제 #2
0
파일: db.py 프로젝트: onde-estan/ondestan
    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
예제 #3
0
파일: db.py 프로젝트: onde-estan/ondestan
    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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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__)
예제 #8
0
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
예제 #9
0
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
예제 #10
0
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()
예제 #11
0
# 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
예제 #12
0
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()
예제 #13
0
# 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
예제 #14
0
# 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
예제 #15
0
# 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)
예제 #16
0
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'))
예제 #17
0
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')
예제 #18
0
# 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
예제 #19
0
# 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)
예제 #20
0
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
예제 #21
0
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')
예제 #22
0
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(