Exemplo n.º 1
0
def setup(settings=None):
    """Utility function that helps to connect the system to the given database.

    if the database is None then the it setups using the default database in
    the settings file.

    :param settings: This is a dictionary which has keys prefixed with
        "sqlalchemy" and shows the settings. The most important one is the
        engine. The default is None, and in this case it uses the settings from
        stalker.config.Config.database_engine_settings
    """

    if settings is None:
        settings = defaults.database_engine_settings
        logger.debug("no settings given, using the default: %s" % settings)

    logger.debug("settings: %s" % settings)
    # create engine
    engine = engine_from_config(settings, "sqlalchemy.")

    logger.debug("engine: %s" % engine)

    # create the Session class
    DBSession.remove()
    DBSession.configure(bind=engine, extension=None)

    # create the database
    logger.debug("creating the tables")
    Base.metadata.create_all(engine)

    # update defaults
    update_defaults_with_studio()
Exemplo n.º 2
0
def setup(settings=None):
    """Utility function that helps to connect the system to the given database.

    if the database is None then the it setups using the default database in
    the settings file.

    :param settings: This is a dictionary which has keys prefixed with
        "sqlalchemy" and shows the settings. The most important one is the
        engine. The default is None, and in this case it uses the settings from
        stalker.config.Config.database_engine_settings
    """

    if settings is None:
        from stalker import defaults
        settings = defaults.database_engine_settings
        logger.debug('no settings given, using the default setting')

    # logger.debug("settings: %s" % settings)
    # create engine
    from sqlalchemy import engine_from_config
    engine = engine_from_config(settings, 'sqlalchemy.')

    logger.debug('engine: %s' % engine)

    # create the Session class
    from stalker.db.session import DBSession
    DBSession.remove()
    DBSession.configure(
        bind=engine,
        extension=None
    )

    # check alembic versions of the database
    # and raise an error if it is not matching with the system
    check_alembic_version()

    # create the database
    logger.debug("creating the tables")
    from stalker.db.declarative import Base
    Base.metadata.create_all(engine)
    DBSession.commit()

    # update defaults
    update_defaults_with_studio()

    # create repo env variables
    create_repo_vars()
Exemplo n.º 3
0
def setup(settings=None):
    """Utility function that helps to connect the system to the given database.

    if the database is None then the it setups using the default database in
    the settings file.

    :param settings: This is a dictionary which has keys prefixed with
        "sqlalchemy" and shows the settings. The most important one is the
        engine. The default is None, and in this case it uses the settings from
        stalker.config.Config.database_engine_settings
    """

    if settings is None:
        settings = defaults.database_engine_settings
        logger.debug('no settings given, using the default: %s' % settings)

    logger.debug("settings: %s" % settings)
    # create engine
    engine = engine_from_config(settings, 'sqlalchemy.')

    logger.debug('engine: %s' % engine)

    # create the Session class
    DBSession.remove()
    DBSession.configure(
        bind=engine,
        extension=None
    )

    # check alembic versions of the database
    # and raise an error if it is not matching with the system
    check_alembic_version()

    # create the database
    logger.debug("creating the tables")
    Base.metadata.create_all(engine)

    # update defaults
    update_defaults_with_studio()

    # create repo env variables
    create_repo_vars()
Exemplo n.º 4
0
def setup(settings=None):
    """Utility function that helps to connect the system to the given database.

    if the database is None then the it setups using the default database in
    the settings file.

    :param settings: This is a dictionary which has keys prefixed with
        "sqlalchemy" and shows the settings. The most important one is the
        engine. The default is None, and in this case it uses the settings from
        stalker.config.Config.database_engine_settings
    """

    if settings is None:
        settings = defaults.database_engine_settings
        logger.debug('no settings given, using the default: %s' % settings)

    logger.debug("settings: %s" % settings)
    # create engine
    engine = engine_from_config(settings, 'sqlalchemy.')

    logger.debug('engine: %s' % engine)

    # create the Session class
    DBSession.remove()
    DBSession.configure(
        bind=engine,
        extension=None
    )

    # create the database
    logger.debug("creating the tables")
    Base.metadata.create_all(engine)

    # update defaults
    update_defaults_with_studio()

    # create repo env variables
    create_repo_vars()
Exemplo n.º 5
0
 def tearDownClass(cls):
     """cleanup the test in class level
     """
     DBSession.remove()
     DBSession.configure()
Exemplo n.º 6
0
 def setUpClass(cls):
     """setup the test in class level
     """
     DBSession.remove()
     DBSession.configure()
Exemplo n.º 7
0
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

from stalker import db, User
from stalker.models.asset import Asset
from stalker.models.project import Project
from stalker.models.repository import Repository
from stalker.db.session import DBSession
from stalker.models.status import Status, StatusList
from stalker.models.task import Task
from stalker.models.type import Type

DBSession.remove()
DBSession.configure(extension=None)
db.setup()

status1 = Status(name="Complete", code="CMPLT")
status2 = Status(name="Pending Review", code="PRev")

repo1 = Repository(name="TestRepo")

project_status_list = StatusList(name="test",
                                 target_entity_type=Project,
                                 statuses=[status1])

project_type = Type(name="test", code='test', target_entity_type=Project)

new_project1 = Project(name="test project1",
                       code='tp1',
Exemplo n.º 8
0
def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    # use the ZopeTransactionExtension for session
    from zope.sqlalchemy import ZopeTransactionExtension
    from stalker.db.session import DBSession
    DBSession.remove()
    DBSession.configure(extension=ZopeTransactionExtension())

    # setup the database to the given settings
    from stalker import db
    db.setup(settings)

    import os
    for key in os.environ:
        logger.debug('%s: %s' % (key, os.environ[key]))

    # setup internal and external urls
    global stalker_server_external_url
    global stalker_server_internal_url
    stalker_server_external_url = settings.get('stalker.external_url')
    stalker_server_internal_url = settings.get('stalker.internal_url')

    # setup authorization and authentication
    from pyramid.authentication import AuthTktAuthenticationPolicy
    from pyramid.authorization import ACLAuthorizationPolicy
    from stalker_pyramid.views.auth import group_finder
    authn_policy = AuthTktAuthenticationPolicy('sosecret',
                                               hashalg='sha512',
                                               callback=group_finder)
    authz_policy = ACLAuthorizationPolicy()

    from pyramid.config import Configurator
    config = Configurator(
        settings=settings,
        root_factory='stalker_pyramid.views.auth.RootFactory')
    config.set_authentication_policy(authn_policy)
    config.set_authorization_policy(authz_policy)

    # Configure Beaker sessions and caching
    import pyramid_beaker
    session_factory = pyramid_beaker.session_factory_from_settings(settings)
    config.set_session_factory(session_factory)
    pyramid_beaker.set_cache_regions_from_settings(settings)

    # config.include('pyramid_jinja2')
    # config.include('pyramid_mailer')
    config.add_jinja2_renderer('.html')
    config.add_jinja2_search_path('templates', name='.html')

    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_static_view('angular', 'angular', cache_max_age=3600)
    config.add_static_view('templates', 'templates', cache_max_age=3600)

    # *************************************************************************
    # Basics
    config.add_route('home', '/')
    config.add_route('me_menu', 'me_menu')
    config.add_route('signin', 'signin')
    config.add_route('login', '/api/login')
    config.add_route('logout', '/api/logout')
    config.add_route('logged_in_user', '/api/logged_in_user')

    config.add_route('flash_message', '/flash_message')

    # addresses like http:/localhost:6543/SPL/{some_path} will let SP to serve
    # those files
    # SPL   : Stalker Pyramid Local
    config.add_route('serve_files', 'SPL/{partial_file_path:[a-zA-Z0-9/\.]+}')

    # addresses like http:/localhost:6543/FDSPL/{some_path} will serve the
    # files with their original filename in a forced download mode.
    # FDSPL : Forced Download Stalker Pyramid Local
    config.add_route('forced_download_files',
                     'FDSPL/{partial_file_path:[a-zA-Z0-9/\.]+}')

    # before anything about stalker create the defaults
    from stalker.config import defaults
    logger.debug(
        os.path.normpath(defaults.server_side_storage_path +
                         '/{partial_file_path}').replace('\\', '/'))

    # *************************************************************************
    # DATA VIEWS
    # *************************************************************************

    # *************************************************************************
    # SimpleEntities
    config.add_route('simple_entity', '/api/simple_entities/{id}')
    config.add_route('simple_entities', '/api/simple_entities')
    config.add_route('simple_entity_generic_data',
                     '/api/simple_entities/{id}/generic_data')

    # *************************************************************************
    # Entities
    config.add_route('entity', '/api/entities/{id}')
    config.add_route('entities', '/api/entities')
    config.add_route('entity_notes', '/api/entities/{id}/notes')
    config.add_route('entity_tags', '/api/entities/{id}/tags')

    # OLD VIEWS
    config.add_route('get_search_result', '/search')  # json
    config.add_route('submit_search', '/submit_search')

    # TODO: Do we still really need "get_entity_tasks_by_filter"
    config.add_route('get_entity_tasks_by_filter',
                     'api/entities/{id}/tasks/filter/{f_id}/')

    config.add_route('get_entity_tickets', 'api/entities/{id}/tickets/')
    config.add_route('get_entity_tickets_count',
                     'api/entities/{id}/tickets/count/')
    config.add_route('get_entity_time_logs', 'api/entities/{id}/time_logs/')
    config.add_route('get_entity_projects', 'api/entities/{id}/projects/')
    config.add_route('get_entity_sequences', 'api/entities/{id}/sequences/')
    config.add_route('get_entity_sequences_count',
                     'api/entities/{id}/sequences/count/')
    config.add_route('get_entity_assets', 'api/entities/{id}/assets/')
    config.add_route('get_entity_assets_count',
                     'api/entities/{id}/assets/count/')
    config.add_route('get_entity_shots', 'api/entities/{id}/shots/')
    config.add_route('get_entity_shots_simple',
                     'api/entities/{id}/shots/simple/')
    config.add_route('get_entity_shots_count',
                     'api/entities/{id}/shots/count/')
    config.add_route('get_entity_scenes', 'api/entities/{id}/scenes/')
    config.add_route('get_entity_scenes_simple',
                     'api/entities/{id}/scenes/simple/')
    config.add_route('get_entity_scenes_count',
                     'api/entities/{id}/scenes/count/')
    config.add_route('get_entity_vacations', 'api/entities/{id}/vacations/')
    config.add_route('get_entity_vacations_count',
                     'api/entities/{id}/vacations/count/')
    config.add_route('get_entity_entities_out_stack',
                     'api/entities/{id}/{entities}/out_stack/')
    config.add_route('get_entity_events', 'api/entities/{id}/events/')  #json
    config.add_route('get_entity_notes', 'api/entities/{id}/notes/')  #json
    config.add_route('get_entity_task_min_start',
                     'api/entities/{id}/task_min_start/')  #json
    config.add_route('get_entity_task_max_end',
                     'api/entities/{id}/task_max_end/')  #json
    config.add_route('get_entity_users_roles',
                     'api/entities/{id}/users/roles/')  #json

    config.add_route('append_entities_to_entity', 'api/entities/{id}/append')

    # *************************************************************************
    # Notes
    config.add_route('note', '/api/notes/{id}')
    config.add_route('notes', '/api/notes')

    # *************************************************************************
    # Thumbnail  and Links
    config.add_route('link', '/api/links/{id}')
    config.add_route('links', '/api/links')

    # config.add_route('upload_files',         'api/upload_files')
    # config.add_route('assign_thumbnail',     'api/assign_thumbnail')

    # *************************************************************************
    # References

    config.add_route('get_task_references',
                     'api/tasks/{id}/references/')  # json
    config.add_route('get_task_references_count',
                     'api/tasks/{id}/references/count/')  # json
    config.add_route('get_asset_references',
                     'api/assets/id}/references/')  # json
    config.add_route('get_asset_references_count',
                     'api/assets/id}/references/count/')  # json

    config.add_route('get_shot_references',
                     'api/shots/{id}/references/')  # json
    config.add_route('get_shot_references_count',
                     'api/shots/{id}/references/count/')  # json

    config.add_route('get_references', 'api/references/')
    config.add_route('get_reference', 'api/references/{id}')

    config.add_route('assign_reference', 'api/assign_reference')
    config.add_route('delete_reference', 'api/references/{id}/delete')

    config.add_route('update_reference', 'api/references/{id}/update')

    # *************************************************************************
    # Outputs
    config.add_route('get_entity_outputs', 'api/entities/{id}/outputs/')
    config.add_route('get_entity_outputs_count',
                     'api/entities/{id}/outputs/count/')

    config.add_route('get_task_outputs', 'api/tasks/{id}/outputs/')
    config.add_route('get_task_outputs_count', 'api/tasks/{id}/outputs/count/')

    config.add_route('get_version_outputs', 'api/versions/{id}/outputs/')
    config.add_route('get_version_outputs_count',
                     'api/versions/{id}/outputs/count/')

    config.add_route('assign_output', 'api/assign_output')
    config.add_route('delete_output', 'api/outputs/{id}/delete')

    # *************************************************************************
    # Studio
    config.add_route('create_studio', 'api/studios/create')
    config.add_route('update_studio', 'api/studios/{id}/update')

    config.add_route('get_studio_tasks', 'api/studios/{id}/tasks/')
    config.add_route('get_studio_vacations',
                     'api/studios/{id}/vacations/')  # json
    config.add_route('get_studio_vacations_count',
                     'api/studios/{id}/vacations/count/')  # json

    config.add_route('schedule_info', 'api/schedule_info')  # json
    config.add_route('studio_scheduling_mode', 'api/studio_scheduling_mode')
    config.add_route('auto_schedule_tasks', 'api/auto_schedule_tasks')

    # *************************************************************************
    # Project
    config.add_route('projects', '/api/projects')
    config.add_route('project', '/api/projects/{id}')
    config.add_route('project_budgets', '/api/projects/{id}/budgets')
    config.add_route('project_clients', '/api/projects/{id}/clients')
    config.add_route('project_dailies', '/api/projects/{id}/dailies')
    config.add_route('project_references', '/api/projects/{id}/references')
    config.add_route('project_repositories', '/api/projects/{id}/repositories')
    config.add_route('project_tasks', '/api/projects/{id}/tasks')
    config.add_route('project_tickets', '/api/projects/{id}/tickets')
    config.add_route('project_users', '/api/projects/{id}/users')

    # config.add_route('project_assets',       '/api/projects/{id}/tasks?entity_type=Asset')
    # config.add_route('project_shots',        '/api/projects/{id}/tasks?entity_type=Shot')
    # config.add_route('project_sequences',    '/api/projects/{id}/tasks?entity_type=Sequence')
    # config.add_route('project_scenes',       '/api/projects/{id}/tasks?entity_type=Scene')

    # config.add_route('project_reviews',         'api/projects/{id}/reviews/') #json
    # config.add_route('project_tasks_cost',      'api/projects/{id}/tasks/cost/') #json
    # config.add_route('add_project_entries_to_budget',   'api/projects/{id}/entries/budgets/{bid}/add')
    # config.add_route('get_project_tasks_today',    'api/projects/{id}/tasks/{action}/today/')  # json
    # config.add_route('get_project_tasks_in_date',  'api/projects/{id}/tasks/{action}/{date}/')  # json

    # *************************************************************************
    # Clients
    config.add_route('append_user_to_client', 'api/clients/{id}/user/append')

    config.add_route('create_client', 'api/clients/create')
    config.add_route('update_client', 'api/clients/{id}/update')

    config.add_route('get_studio_clients', 'api/studios/{id}/clients/')
    config.add_route('get_clients', 'api/clients/')
    config.add_route('get_client_users_out_stack',
                     'api/clients/{id}/users/out_stack/')
    config.add_route('get_client_users', 'api/clients/{id}/users/')

    # *************************************************************************
    # Budgets
    config.add_route('create_budget', 'api/budgets/create')
    config.add_route('update_budget', 'api/budgets/{id}/update')

    config.add_route('save_budget_calendar', 'api/budgets/{id}/save/calendar')

    config.add_route('duplicate_budget', 'api/budgets/{id}/duplicate')
    config.add_route('change_budget_type', 'api/budgets/{id}/type/{type_name}')
    config.add_route('get_budget_entries', 'api/budgets/{id}/entries/')

    # *************************************************************************
    # BudgetEntries
    config.add_route('create_budgetentry', 'api/budgetentries/create')
    config.add_route('edit_budgetentry', 'api/budgetentries/edit')
    config.add_route('update_budgetentry', 'api/budgetentries/update')
    config.add_route('delete_budgetentry', 'api/budgetentries/delete')

    # *************************************************************************
    # Dailies
    config.add_route('create_daily', 'api/dailies/create')
    config.add_route('update_daily', 'api/dailies/{id}/update')
    config.add_route('inline_update_daily', 'api/dailies/{id}/update/inline')

    config.add_route('get_daily_outputs', 'api/dailies/{id}/outputs/')  # json

    config.add_route('append_link_to_daily',
                     'api/links/{id}/dailies/{did}/append')
    config.add_route('remove_link_to_daily',
                     'api/links/{id}/dailies/{did}/remove')
    config.add_route('convert_to_webm', 'api/links/{id}/convert_to_webm')

    # *************************************************************************
    # ImageFormat
    config.add_route('image_format', '/api/image_formats/{id}')
    config.add_route('image_formats', '/api/image_formats')

    # *************************************************************************
    # Repository
    config.add_route('repository', '/api/repositories/{id}')
    config.add_route('repositories', '/api/repositories')

    # serve files in repository
    config.add_route('serve_repository_files',
                     '$REPO{id}/{partial_file_path:[a-zA-Z0-9/\._\-\+\(\)]*}')

    config.add_route('forced_download_repository_files',
                     'FD{file_path:[a-zA-Z0-9/\._\-\+\(\)/$]*}')

    config.add_route('video_player', 'video_player')  # html

    # *************************************************************************
    # Structure
    config.add_route('structure', '/api/structures/{id}')
    config.add_route('structures', '/api/structures')
    config.add_route('structure_templates', '/api/structures/{id}/templates')

    # *************************************************************************
    # User
    config.add_route('users', '/api/users')
    config.add_route('user', '/api/users/{id}')
    config.add_route('user_departments', '/api/users/{id}/departments')
    config.add_route('user_groups', '/api/users/{id}/groups')
    config.add_route('user_projects', '/api/users/{id}/projects')
    config.add_route('user_vacations', '/api/users/{id}/vacations')
    config.add_route('user_tasks', '/api/users/{id}/tasks')
    config.add_route('user_tasks_watched', '/api/users/{id}/tasks_watched')
    config.add_route('user_tasks_responsible',
                     '/api/users/{id}/tasks_responsible')
    config.add_route('user_reviews', '/api/users/{id}/reviews')
    config.add_route('user_tickets', '/api/users/{id}/tickets')
    config.add_route('user_time_logs', '/api/users/{id}/time_logs')

    # other views
    config.add_route('check_availability', '/api/check_availability')

    # *************************************************************************
    # FilenameTemplate
    config.add_route('filename_template', '/api/filename_templates/{id}')
    config.add_route('filename_templates', '/api/filename_templates')

    # *************************************************************************
    # Status
    config.add_route('status', '/api/statuses/{id}')
    config.add_route('statuses', '/api/statuses')

    # *************************************************************************
    # StatusList
    # base views
    config.add_route('status_list', '/api/status_lists/{id}')
    config.add_route('status_lists', '/api/status_lists')

    # collection views
    config.add_route('status_list_statuses', '/api/status_lists/{id}/statuses')

    # *************************************************************************
    # Assets
    config.add_route('create_asset', 'api/assets/create')
    config.add_route('update_asset', 'api/assets/{id}/update')

    config.add_route('get_asset_tickets', 'api/assets/{id}/tickets/')

    config.add_route('get_assets_types', 'api/assets/types/')  # json
    config.add_route('get_assets_type_task_types',
                     'api/assets/types/{t_id}/task_types/')  # json
    config.add_route('get_assets_children_task_type',
                     'api/assets/children/task_type/')  # json

    # *************************************************************************
    # Shots
    config.add_route('create_shot', 'api/shots/create')
    config.add_route('update_shot', 'api/shots/{id}/update')

    config.add_route('get_shots_children_task_type',
                     'api/shots/children/task_type/')  # json

    # *************************************************************************
    # Scene
    config.add_route('get_scenes_children_task_type',
                     'api/scenes/children/task_type/')  # json
    config.add_route('create_scene', 'api/scenes/create')  # html

    # *************************************************************************
    # Sequence
    config.add_route('create_sequence', 'api/sequences/create')
    config.add_route('update_sequence', 'api/sequences/{id}/update')

    config.add_route('get_sequence_references',
                     'api/sequences/{id}/references/')  # json
    config.add_route('get_sequence_references_count',
                     'api/sequences/{id}/references/count/')  # json
    config.add_route('get_sequence_tickets',
                     'api/sequences/{id}/tickets/')  # json
    config.add_route('get_sequence_tasks', 'api/sequences/{id}/tasks/')  # json
    config.add_route('get_sequences', 'api/sequences/')  # json

    # *************************************************************************
    # Task
    config.add_route('get_task_external_link', 'api/tasks/{id}/external_link')
    config.add_route('get_task_internal_link', 'api/tasks/{id}/internal_link')

    # Actions
    config.add_route('create_task', 'api/tasks/create')
    config.add_route('update_task', 'api/tasks/{id}/update')
    config.add_route('inline_update_task', 'api/tasks/{id}/update/inline')
    config.add_route('update_task_schedule_timing',
                     'api/tasks/{id}/update/schedule_timing')
    config.add_route('update_task_dependencies',
                     'api/tasks/{id}/update/dependencies')
    config.add_route('force_task_status',
                     'api/tasks/{id}/force_status/{status_code}')
    config.add_route('force_tasks_status',
                     'api/tasks/force_status/{status_code}')
    config.add_route('resume_task', 'api/tasks/{id}/resume')
    config.add_route('review_task', 'api/tasks/{id}/review')
    config.add_route('cleanup_task_new_reviews',
                     'api/tasks/{id}/cleanup_new_reviews')

    config.add_route('duplicate_task_hierarchy', 'api/tasks/{id}/duplicate')

    config.add_route('get_gantt_tasks', 'api/tasks/{id}/gantt')
    config.add_route('get_gantt_task_children',
                     'api/tasks/{id}/children/gantt')

    config.add_route('get_tasks', 'api/tasks/')
    config.add_route('get_tasks_count', 'api/tasks/count/')

    config.add_route('get_task', 'api/tasks/{id}/')
    config.add_route('get_task_events', 'api/tasks/{id}/events/')  #json
    config.add_route('get_task_children_task_types',
                     'api/tasks/{id}/children_task_types/')  # json
    config.add_route('get_task_children_tasks',
                     'api/tasks/{id}/children_tasks/')  # json
    config.add_route('get_task_leafs_in_hierarchy',
                     'api/tasks/{id}/leafs_in_hierarchy/')  #json

    config.add_route('get_task_related_entities',
                     'api/tasks/{id}/related/{e_type}/{d_type}/')  # json
    config.add_route('get_task_dependency',
                     'api/tasks/{id}/dependency/{type}/')  # json
    config.add_route('get_task_tickets', 'api/tasks/{id}/tickets')  # json

    config.add_route('get_task_reviews', 'api/tasks/{id}/reviews/')  # json
    config.add_route('get_task_reviews_count',
                     'api/tasks/{id}/reviews/count/')  # json
    config.add_route('get_task_reviewers', 'api/tasks/{id}/reviewers/')  # json
    config.add_route('get_task_last_reviews',
                     'api/tasks/{id}/last_reviews/')  #json

    config.add_route('request_review', 'api/tasks/{id}/request_review')

    config.add_route('approve_task', 'api/tasks/{id}/approve')
    config.add_route('request_revision', 'api/tasks/{id}/request_revision')
    config.add_route('request_revisions', 'api/tasks/request_revisions')

    config.add_route('request_extra_time', 'api/tasks/{id}/request_extra_time')

    config.add_route('get_task_resources', 'api/tasks/{id}/resources/')  #json
    config.add_route('remove_task_user',
                     'api/tasks/{id}/remove/{user_type}/{user_id}')
    config.add_route('change_tasks_users', 'api/tasks/change/{user_type}')

    config.add_route('change_task_users', 'api/tasks/{id}/change/{user_type}')
    config.add_route('change_tasks_priority', 'api/tasks/change_priority')

    config.add_route('add_tasks_dependencies', 'api/tasks/add/dependencies')

    config.add_route('delete_task', 'api/tasks/delete')

    config.add_route('fix_tasks_statuses', 'api/tasks/fix/statuses/')
    config.add_route('fix_task_statuses', 'api/tasks/{id}/fix/statuses/')
    config.add_route('fix_task_schedule_info',
                     'api/tasks/{id}/fix/schedule_info/')

    config.add_route('watch_task', 'api/tasks/{id}/watch')
    config.add_route('unwatch_task', 'api/tasks/{id}/unwatch')

    # *************************************************************************
    # TimeLog
    config.add_route('time_log', '/api/time_logs/{id}')
    config.add_route('time_logs', '/api/time_logs')

    # *************************************************************************
    # Ticket
    config.add_route('ticket', '/api/tickets/{id}')
    config.add_route('tickets', '/api/tickets')

    config.add_route('ticket_links', '/api/tickets/{id}/links')
    config.add_route('ticket_related_tickets',
                     '/api/tickets/{id}/related_tickets')
    config.add_route('ticket_logs', '/api/tickets/{id}/logs')

    # extra urls
    config.add_route('ticket_resolutions', '/api/ticket_resolutions')
    config.add_route('ticket_workflow', '/api/ticket_workflow')

    # *************************************************************************
    # Vacation
    config.add_route('vacation', '/api/vacations/{id}')
    config.add_route('vacations', '/api/vacations')

    # *************************************************************************
    # Version
    config.add_route('create_version', 'api/versions/create')

    config.add_route('get_task_versions', 'api/tasks/{id}/versions/')  # jsons
    config.add_route('get_user_versions', 'api/users/{id}/versions/')  # jsons
    config.add_route('get_entity_versions',
                     'api/entities/{id}/versions/')  # json
    config.add_route('get_entity_versions_used_by_tasks',
                     'api/entities/{id}/version/used_by/tasks/')  # json

    config.add_route('pack_version', 'api/versions/{id}/pack')  # json

    # *************************************************************************
    # Department
    config.add_route('department', '/api/departments/{id}')
    config.add_route('departments', '/api/departments')
    config.add_route('department_users', '/api/departments/{id}/users')
    config.add_route('department_user_roles',
                     '/api/departments/{id}/user_roles')

    # old ones
    config.add_route('department_tasks', '/api/departments/{id}/tasks')

    # *************************************************************************
    # Group
    config.add_route('group', '/api/groups/{id}')
    config.add_route('groups', '/api/groups')

    # collection views
    config.add_route('group_users', '/api/groups/{id}/users')

    # *************************************************************************
    # Tag
    config.add_route('tag', 'api/tags/{id}')
    config.add_route('tags', 'api/tags')

    # *************************************************************************
    # Type
    config.add_route('type', 'api/types/{id}')
    config.add_route('types', 'api/types')

    # *************************************************************************
    # Role
    config.add_route('role', '/api/roles/{id}')
    config.add_route('roles', '/api/roles')

    # *************************************************************************
    # Price Lists / Good
    config.add_route('get_studio_goods', 'api/studios/{id}/goods/')
    config.add_route('get_goods', 'api/goods/')

    config.add_route('get_studio_price_lists', 'api/studios/{id}/price_lists/')
    config.add_route('get_price_lists', 'api/price_lists/')

    config.add_route('create_good', 'api/goods/create')
    config.add_route('edit_good', 'api/goods/edit')
    config.add_route('update_good', 'api/goods/update')
    config.add_route('delete_good', 'api/goods/delete')

    # *************************************************************************
    # Anima
    config.add_route('add_related_assets', 'api/entities/{id}/assets/add')
    config.add_route('remove_related_asset',
                     'api/entities/{id}/assets/{a_id}/remove')
    config.add_route('get_entity_task_type_result',
                     'api/entities/{id}/{task_type}/result')

    # *************************************************************************
    # Test
    config.add_route('test_page', 'test_page')

    config.scan(ignore='stalker.env')
    return config.make_wsgi_app()
Exemplo n.º 9
0
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

from stalker import db, User
from stalker.models.asset import Asset
from stalker.models.project import Project
from stalker.models.repository import Repository
from stalker.db.session import DBSession
from stalker.models.status import Status, StatusList
from stalker.models.task import Task
from stalker.models.type import Type

DBSession.remove()
DBSession.configure(extension=None)
db.setup()

status1 = Status(name="Complete", code="CMPLT")
status2 = Status(name="Pending Review", code="PRev")

repo1 = Repository(name="TestRepo")

project_status_list = StatusList(
    name="test",
    target_entity_type=Project,
    statuses=[status1]
)

project_type = Type(
    name="test",
Exemplo n.º 10
0
    def setUp(self):
        """setup the test
        """
        self.config = testing.setUp()
        db.setup({'sqlalchemy.url': 'sqlite:///:memory:'})

        DBSession.configure(extension=ZopeTransactionExtension())

        with transaction.manager:
            self.test_repo = Repository(
                name='Test Repository',
                linux_path=tempfile.mkdtemp(),
                windows_path=tempfile.mkdtemp(),
                osx_path=tempfile.mkdtemp()
            )
            DBSession.add(self.test_repo)

            self.status1 = Status(name='Status1', code='STS1')
            self.status2 = Status(name='Status2', code='STS2')
            self.status3 = Status(name='Status3', code='STS3')
            self.status4 = Status(name='Status4', code='STS4')
            self.status5 = Status(name='Status5', code='STS5')
            DBSession.add_all([self.status1, self.status2, self.status3,
                               self.status4, self.status5])

            self.test_project_status_list = StatusList(
                name='Project Statuses',
                statuses=[self.status1, self.status2, self.status3, self.status4,
                          self.status5],
                target_entity_type='Project'
            )
            DBSession.add(self.test_project_status_list)

            self.test_task_status_list = StatusList(
                name='Task Statuses',
                statuses=[self.status1, self.status2, self.status3, self.status4,
                          self.status5],
                target_entity_type='Task'
            )
            DBSession.add(self.test_task_status_list)

            self.test_version_status_list = StatusList(
                name='Version Statuses',
                statuses=[self.status1, self.status2, self.status3, self.status4,
                          self.status5],
                target_entity_type='Version'
            )
            DBSession.add(self.test_task_status_list)

            # create a project
            self.test_project = Project(
                name='Test Project',
                code='TP',
                repository=self.test_repo,
                status_list=self.test_project_status_list
            )
            DBSession.add(self.test_project)

            # create a task
            self.test_task = Task(
                project=self.test_project,
                name='Test Task',
                status_list=self.test_task_status_list
            )
            DBSession.add(self.test_task)

            # create a test version
            self.test_version = Version(
                task=self.test_task,
                status_list=self.test_version_status_list
            )
            DBSession.add(self.test_version)

        DBSession.add_all([
            self.test_project, self.test_project_status_list,
            self.test_repo, self.test_task, self.test_task_status_list,
            self.test_version
        ])
Exemplo n.º 11
0
 def tearDownClass(cls):
     """cleanup the test in class level
     """
     DBSession.remove()
     DBSession.configure()
Exemplo n.º 12
0
 def setUpClass(cls):
     """setup the test in class level
     """
     DBSession.remove()
     DBSession.configure()