Пример #1
0
#!/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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    """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)
Пример #5
0
    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