#!/usr/bin/env python3 """Strange fixture.""" import sys import os sys.path.insert(0, os.path.abspath('.')) from dokomoforms.options import parse_options, options parse_options() from sqlalchemy import DDL from sqlalchemy.orm import sessionmaker from dokomoforms.models import create_engine, Base import dokomoforms.models as models engine = create_engine(echo=options.debug) Session = sessionmaker() engine.execute(DDL('DROP SCHEMA IF EXISTS ' + options.schema + ' CASCADE')) # creates db schema Base.metadata.create_all(engine) # connection = engine.connect() # transaction = connection.begin() # session = Session(bind=connection, autocommit=True) session = Session(bind=engine, autocommit=True) with session.begin(): creator = models.Administrator( name='test_user', # known ID against which we can test
def __init__(self, session=None, options=options): """Set up the application with handlers and a db connection. Defines the URLs (with associated handlers) and settings for the application, drops the database schema (if the user selected that option), then prepares the database and creates a session. """ self._api_version = API_VERSION self._api_root_path = API_ROOT_PATH sur = SurveyResource urls = [ # Administrative url(r"/", handlers.Index, name="index"), url(r"/user/login/?", handlers.Login, name="login"), url(r"/user/logout/?", handlers.Logout, name="logout"), url(r"/user/authenticated/?", handlers.CheckLoginStatus, name="check_login"), # Views # * Admin views url(r"/admin/?", handlers.AdminHomepageHandler, name="admin_homepage"), url(r"/admin/({})/?".format(UUID_REGEX), handlers.ViewSurveyHandler, name="admin_survey_view"), url(r"/admin/data/({})/?".format(UUID_REGEX), handlers.ViewSurveyDataHandler, name="admin_data_view"), url( r"/admin/submission/({})/?".format(UUID_REGEX), handlers.ViewSubmissionHandler, name="admin_submission_view", ), url(r"/admin/user-administration/?", handlers.ViewUserAdminHandler, name="admin_user_view"), # * Enumerate views url(r"/enumerate/?", handlers.EnumerateHomepageHandler, name="enumerate_homepage"), url(r"/enumerate/({})/?".format(UUID_REGEX), handlers.Enumerate, name="enumerate"), url(r"/enumerate/(.+)/?", handlers.EnumerateTitle, name="enumerate_title"), # API # * Surveys api_url("/surveys/?", sur.as_list(), name="surveys"), api_url("/surveys/({uuid})/?", sur.as_detail(), name="survey"), api_url("/surveys/({uuid})/submit/?", sur.as_view("submit"), name="submit_to_survey"), api_url("/surveys/({uuid})/submissions/?", sur.as_view("list_submissions"), name="survey_list_submissions"), api_url("/surveys/({uuid})/stats/?", sur.as_view("stats"), name="survey_stats"), api_url("/surveys/({uuid})/activity/?", sur.as_view("activity"), name="survey_activity"), api_url("/surveys/activity/?", sur.as_view("activity_all"), name="activity_all"), # * Submissions api_url("/submissions/?", SubmissionResource.as_list(), name="submissions"), api_url("/submissions/({uuid})/?", SubmissionResource.as_detail(), name="submission"), # * * Photos api_url("/photos/?", PhotoResource.as_list(), name="photos"), api_url("/photos/({uuid})/?", PhotoResource.as_detail(), name="photo"), # * Nodes api_url("/nodes/?", NodeResource.as_list(), name="nodes"), api_url("/nodes/({uuid})/?", NodeResource.as_detail(), name="node"), # * Users api_url("/users/?", UserResource.as_list(), name="users"), api_url("/users/({uuid})/?", UserResource.as_detail(), name="user"), api_url("/users/generate-api-token/?", handlers.GenerateToken, name="generate_token"), ] settings = { "template_path": os.path.join(_pwd, "dokomoforms/templates"), "static_path": os.path.join(_pwd, "dokomoforms/static"), "default_handler_class": handlers.NotFound, "xsrf_cookies": True, "cookie_secret": get_cookie_secret(), "login_url": "/", "debug": options.debug, } # Debug if settings["debug"]: # pragma: no cover from dokomoforms.handlers.debug import revisit_debug revisit_debug() urls += [ url(r"/debug/create/(.+)/?", handlers.DebugUserCreationHandler), url(r"/debug/login/(.+)/?", handlers.DebugLoginHandler), url(r"/debug/logout/?", handlers.DebugLogoutHandler), url(r"/debug/persona_verify/?", handlers.DebugPersonaHandler), url(r"/debug/facilities/?", handlers.DebugRevisitHandler), url(r"/debug/toggle_facilities/?", handlers.DebugToggleRevisitHandler), url(r"/debug/toggle_revisit_slow/?", handlers.DebugToggleRevisitSlowModeHandler), ] # Demo if options.demo: urls += [ url(r"/demo/login/?", handlers.DemoUserCreationHandler), url(r"/demo/logout/?", handlers.DemoLogoutHandler), ] options.organization = "Demo Mode" super().__init__(urls, **settings) # Database setup if session is None: engine = create_engine() if options.kill: logging.info("Dropping schema {}.".format(options.schema)) engine.execute(DDL("DROP SCHEMA IF EXISTS {} CASCADE".format(options.schema))) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine, autocommit=True) self.session = Session() else: self.session = session
def __init__(self, session=None, options=options): """Set up the application with handlers and a db connection. Defines the URLs (with associated handlers) and settings for the application, drops the database schema (if the user selected that option), then prepares the database and creates a session. """ self._api_version = API_VERSION self._api_root_path = API_ROOT_PATH sur = SurveyResource urls = [ # Administrative url(r'/', handlers.Index, name='index'), url(r'/user/login/?', handlers.Login, name='login'), url(r'/user/logout/?', handlers.Logout, name='logout'), url( r'/user/authenticated/?', handlers.CheckLoginStatus, name='check_login' ), # Views # * Admin views url( r'/admin/?', handlers.AdminHomepageHandler, name='admin_homepage' ), url( r'/admin/({})/?'.format(UUID_REGEX), handlers.ViewSurveyHandler, name='admin_survey_view', ), url( r'/admin/data/({})/?'.format(UUID_REGEX), handlers.ViewSurveyDataHandler, name='admin_data_view', ), url( r'/admin/submission/({})/?'.format(UUID_REGEX), handlers.ViewSubmissionHandler, name='admin_submission_view', ), url( r'/admin/user-administration/?', handlers.ViewUserAdminHandler, name='admin_user_view', ), # * Enumerate views url( r'/enumerate/?', handlers.EnumerateHomepageHandler, name='enumerate_homepage' ), url( r'/enumerate/({})/?'.format(UUID_REGEX), handlers.Enumerate, name='enumerate' ), url( r'/enumerate/(.+)/?', handlers.EnumerateTitle, name='enumerate_title' ), # API # * Surveys api_url('/surveys/?', sur.as_list(), name='surveys'), api_url('/surveys/({uuid})/?', sur.as_detail(), name='survey'), api_url( '/surveys/({uuid})/submit/?', sur.as_view('submit'), name='submit_to_survey' ), api_url( '/surveys/({uuid})/submissions/?', sur.as_view('list_submissions'), name='survey_list_submissions', ), api_url( '/surveys/({uuid})/stats/?', sur.as_view('stats'), name='survey_stats' ), api_url( '/surveys/({uuid})/activity/?', sur.as_view('activity'), name='survey_activity' ), api_url( '/surveys/activity/?', sur.as_view('activity_all'), name='activity_all' ), # * Submissions api_url( '/submissions/?', SubmissionResource.as_list(), name='submissions' ), api_url( '/submissions/({uuid})/?', SubmissionResource.as_detail(), name='submission' ), # * * Photos api_url('/photos/?', PhotoResource.as_list(), name='photos'), api_url( '/photos/({uuid})/?', PhotoResource.as_detail(), name='photo' ), # * Nodes api_url('/nodes/?', NodeResource.as_list(), name='nodes'), api_url( '/nodes/({uuid})/?', NodeResource.as_detail(), name='node' ), # * Users api_url('/users/?', UserResource.as_list(), name='users'), api_url( '/users/({uuid})/?', UserResource.as_detail(), name='user' ), api_url( '/users/generate-api-token/?', handlers.GenerateToken, name='generate_token' ), ] settings = { 'template_path': os.path.join(_pwd, 'dokomoforms/templates'), 'static_path': os.path.join(_pwd, 'dokomoforms/static'), 'default_handler_class': handlers.NotFound, 'xsrf_cookies': True, 'cookie_secret': get_cookie_secret(), 'login_url': '/', 'debug': options.debug, } # HTTPS if options.https: settings['xsrf_cookie_kwargs'] = {'secure': True} # Debug if settings['debug']: # pragma: no cover from dokomoforms.handlers.debug import revisit_debug revisit_debug() urls += [ url(r'/debug/create/(.+)/?', handlers.DebugUserCreationHandler), url(r'/debug/login/(.+)/?', handlers.DebugLoginHandler), url(r'/debug/logout/?', handlers.DebugLogoutHandler), url(r'/debug/persona_verify/?', handlers.DebugPersonaHandler), url(r'/debug/facilities/?', handlers.DebugRevisitHandler), url(r'/debug/toggle_facilities/?', handlers.DebugToggleRevisitHandler), url(r'/debug/toggle_revisit_slow/?', handlers.DebugToggleRevisitSlowModeHandler), ] # Demo if options.demo: urls += [ url(r'/demo/login/?', handlers.DemoUserCreationHandler), url(r'/demo/logout/?', handlers.DemoLogoutHandler), ] options.organization = 'Demo Mode' super().__init__(urls, **settings) # Database setup if session is None: engine = create_engine() if options.kill: logging.info('Dropping schema {}.'.format(options.schema)) engine.execute(DDL( 'DROP SCHEMA IF EXISTS {} CASCADE'.format(options.schema) )) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine, autocommit=True) self.session = Session() else: self.session = session
"""Truncate all the tables.""" connection = engine.connect() with connection.begin(): connection.execute(""" DO $func$ BEGIN EXECUTE ( SELECT 'TRUNCATE TABLE ' || string_agg( '{0}.' || quote_ident(t.tablename), ', ' ) || ' CASCADE' FROM pg_tables t WHERE t.schemaname = '{0}' ); END $func$; """.format(schema_name)) if __name__ == '__main__': from sqlalchemy import DDL from dokomoforms.options import options from dokomoforms.models import create_engine, Base engine = create_engine(echo=options.debug) engine.execute( DDL('DROP SCHEMA IF EXISTS {} CASCADE'.format(options.schema))) Base.metadata.create_all(engine) load_fixtures(engine)
def __init__(self, session=None, options=options): """Set up the application with handlers and a db connection. Defines the URLs (with associated handlers) and settings for the application, drops the database schema (if the user selected that option), then prepares the database and creates a session. """ self._api_version = API_VERSION self._api_root_path = API_ROOT_PATH sur = SurveyResource settings = { 'template_path': os.path.join(_pwd, 'dokomoforms', 'templates'), 'static_path': os.path.join(_pwd, 'dokomoforms', 'static'), 'default_handler_class': handlers.NotFound, 'xsrf_cookies': True, 'cookie_secret': get_cookie_secret(), 'login_url': '/', 'debug': options.debug, } urls = [ # Administrative url(r'/', handlers.Index, name='index'), url(r'/user/login/?', handlers.Login, name='login'), url(r'/user/logout/?', handlers.Logout, name='logout'), url( r'/user/authenticated/?', handlers.CheckLoginStatus, name='check_login' ), # Views # * Admin views url( r'/admin/?', handlers.AdminHomepageHandler, name='admin_homepage' ), url( r'/admin/({})/?'.format(UUID_REGEX), handlers.ViewSurveyHandler, name='admin_survey_view', ), url( r'/admin/data/({})/?'.format(UUID_REGEX), handlers.ViewSurveyDataHandler, name='admin_data_view', ), url( r'/admin/submission/({})/?'.format(UUID_REGEX), handlers.ViewSubmissionHandler, name='admin_submission_view', ), url( r'/admin/user-administration/?', handlers.ViewUserAdminHandler, name='admin_user_view', ), # * Enumerate views url( r'/enumerate/?', handlers.EnumerateHomepageHandler, name='enumerate_homepage' ), url( r'/enumerate/({})/?'.format(UUID_REGEX), handlers.Enumerate, name='enumerate' ), url( r'/enumerate/(.+)/?', handlers.EnumerateTitle, name='enumerate_title' ), # API # * Surveys api_url('/surveys/?', sur.as_list(), name='surveys'), api_url('/surveys/({uuid})/?', sur.as_detail(), name='survey'), api_url( '/surveys/({uuid})/submit/?', sur.as_view('submit'), name='submit_to_survey' ), api_url( '/surveys/({uuid})/submissions/?', sur.as_view('list_submissions'), name='survey_list_submissions', ), api_url( '/surveys/({uuid})/stats/?', sur.as_view('stats'), name='survey_stats' ), api_url( '/surveys/({uuid})/activity/?', sur.as_view('activity'), name='survey_activity' ), api_url( '/surveys/activity/?', sur.as_view('activity_all'), name='activity_all' ), # * Submissions api_url( '/submissions/?', SubmissionResource.as_list(), name='submissions' ), api_url( '/submissions/({uuid})/?', SubmissionResource.as_detail(), name='submission' ), # * * Photos api_url('/photos/?', PhotoResource.as_list(), name='photos'), api_url( '/photos/({uuid})/?', PhotoResource.as_detail(), name='photo' ), # * Nodes api_url('/nodes/?', NodeResource.as_list(), name='nodes'), api_url( '/nodes/({uuid})/?', NodeResource.as_detail(), name='node' ), # * Users api_url('/users/?', UserResource.as_list(), name='users'), api_url( '/users/({uuid})/?', UserResource.as_detail(), name='user' ), api_url( '/users/generate-api-token/?', handlers.GenerateToken, name='generate_token' ), ] # HTTPS if options.https: settings['xsrf_cookie_kwargs'] = {'secure': True} # Debug if settings['debug']: # pragma: no cover from dokomoforms.handlers.debug import revisit_debug revisit_debug() urls += [ url(r'/debug/create/(.+)/?', handlers.DebugUserCreationHandler), url(r'/debug/login/(.+)/?', handlers.DebugLoginHandler), url(r'/debug/logout/?', handlers.DebugLogoutHandler), url(r'/debug/persona_verify/?', handlers.DebugPersonaHandler), url(r'/debug/facilities/?', handlers.DebugRevisitHandler), url(r'/debug/toggle_facilities/?', handlers.DebugToggleRevisitHandler), url(r'/debug/toggle_revisit_slow/?', handlers.DebugToggleRevisitSlowModeHandler), ] # Demo if options.demo: urls += [ url(r'/demo/login/?', handlers.DemoUserCreationHandler), url(r'/demo/logout/?', handlers.DemoLogoutHandler), ] options.organization = 'Demo Mode' super().__init__(urls, **settings) # Database setup if session is None: engine = create_engine() if options.kill: logging.info('Dropping schema {}.'.format(options.schema)) engine.execute(DDL( 'DROP SCHEMA IF EXISTS {} CASCADE'.format(options.schema) )) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine, autocommit=True) self.session = Session() else: self.session = session