def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ set_global_settings(settings) logging.basicConfig() logging.getLogger('sqlalchemy.engine').setLevel(logging.WARN) logging.captureWarnings(True) # execfile("D:/Repositories/JCU-DC24/venv/Scripts/activate_this.py", dict(__file__="D:/Repositories/JCU-DC24/venv/Scripts/activate_this.py")) #def main(): scripts.initializedb.initialise_all_db(settings) deform_templates = resource_filename('deform', 'templates') search_path = (resource_filename('jcudc24provisioning', 'templates/widgets'),resource_filename('jcudc24provisioning', 'templates/widgets/readonly'), resource_filename('jcudc24provisioning', 'templates/custom_widgets'), resource_filename('jcudc24provisioning', 'templates/custom_widgets/readonly'), deform_templates) Form.set_zpt_renderer(search_path, encoding="latin-1") set_cache_regions_from_settings(settings) my_session_factory = session_factory_from_settings(settings) config = Configurator(settings=settings, session_factory = my_session_factory, root_factory=RootFactory) # ---------------Project/Workflow pages------------------------ config.add_route('create', '/project/create') # Project creation wizard - templates, pre-fill etc. config.add_route('general', '/project/{project_id}/general') # Project creation wizard - templates, pre-fill etc. config.add_route('description', '/project/{project_id}/description') # descriptions config.add_route('information', '/project/{project_id}/information') # metadata or associated information config.add_route('methods', '/project/{project_id}/methods') # Data collection methods config.add_route('datasets', '/project/{project_id}/datasets') # Datasets or collections of data config.add_route('submit', '/project/{project_id}/submit') # Submit, review and approval # Project action pages config.add_route('dataset_log', '/project/{project_id}/logs/dataset_{dataset_id}_logs.txt') config.add_route('logs', '/project/{project_id}/logs') config.add_route('dataset_calibration', '/project/{project_id}/dataset/{dataset_id}/calibration/*calibration_id') config.add_route('dataset', '/project/{project_id}/dataset/*dataset_id') # Datasets or collections of data config.add_route('ingester_dataset', '/project/{project_id}/dataset/{dataset_id}') # View current settings for exported dataset. config.add_route('data_calibration', '/project/{project_id}/datasets/{dataset_id}/data/{id_list}/calibration/*calibration_id') config.add_route('data', '/project/{project_id}/datasets/{dataset_id}/data/*data_id') config.add_route('permissions', '/project/{project_id}/permissions') config.add_route('notifications', '/project/{project_id}/notifications') config.add_route('duplicate', '/project/{project_id}/duplicate') config.add_route('create_template', '/project/{project_id}/create_template') config.add_route('search', '/search*search_info') config.add_route('dataset_record', '/project/{project_id}/datasets/{dataset_id}/record') # Datasets or collections of data config.add_route('delete_record', '/project/{project_id}/datasets/{dataset_id}/delete_record') # Datasets or collections of data # config.add_route('browse', '/browse') # config.add_route('browse_projects', '/browse/projects/*search_info') # config.add_route('browse', '/browse/datasets') # config.add_route('browse', '/browse/data') # config.add_route('browse', '/browse/data/calibrations') # Exception handler config.add_route('workflow_exception', '/project/{route:.*}') # --------------JSON Search views-------------------------------- config.add_route('get_model', '/get_model/{object_type}/{id}', xhr=True) config.add_route('get_ingester_logs', '/get_ingester_logs/{dam_id}/{filtering:.*}', xhr=True) config.add_route('add_method_from_template', '/add/{project_id}/{method_id}', xhr=True) config.add_route('get_activities', '/mint/activities/{search_terms}', xhr=True) config.add_route('get_parties', '/mint/parties/{search_terms}', xhr=True) config.add_route('get_from_identifier', '/mint/{identifier:.*}', xhr=True) config.add_route('dashboard', '/') # Home page/user dashboard config.add_route('user', '/user') config.add_route('login', '/login') # Login page config.add_route('login_shibboleth', '/login/shibboleth') # Login page config.add_route('logout', '/logout') # logout and redirect page config.add_route('admin', '/admin') # administer user permissions + view admin required items config.add_route('help', '/help') # administer user permissions + view admin required items config.add_route('lock_page', '/lock_page/{user_id}/*url') config.add_route('unlock_page', '/unlock_page/{lock_id}') config.add_route('record_data', '/{metadata_id}') config.add_route('record_data_portal', '/{metadata_id}/data') # Redirect to the data portal # --------------Static resources-------------------------------- config.add_static_view('deform_static', 'deform:static', cache_max_age=0) config.add_static_view('static', 'jcudc24provisioning:static') config.add_static_view('project_uploads', "jcudc24provisioning:project_uploads", permission=DefaultPermissions.VIEW_PROJECT) authn_policy = ShibbolethAuthenticationPolicy(settings) authz_policy = ACLAuthorizationPolicy() config.set_authentication_policy(authn_policy) config.set_authorization_policy(authz_policy) config.set_default_permission(NO_PERMISSION_REQUIRED) config.add_request_method(get_user, 'user', reify=True) config.scan() json_config = create_json_config() f = open(settings.get("redbox.local_config_file"), 'w') f.write(json_config) # Upload the json cofiguration to ReDBox # hostname = global_settings.get("redbox.ssh_address") # remote hostname where SSH server is running # port = asint(global_settings.get("redbox.ssh_port")) # rsa_private_key = global_settings.get("redbox.rsa_private_key") # username = global_settings.get("redbox.ssh_username") # password = global_settings.get("redbox.ssh_password") # file_send = SFTPFileSend(hostname, port, username, password=password, rsa_private_key=rsa_private_key) # file_send.upload_file(settings.get("redbox.local_config_file"), settings.get("redbox.ssh_config_file")) # file_send.close() # try: # InitialiseDatabase() # except Exception as e: # logger.exception("Error initialising database: %s", e) # sys.exit() # Create the temporary folders if they don't already exist if not os.path.exists(settings.get("tmpdir")): os.mkdir(settings.get("tmpdir")) if not os.path.exists(settings.get("pyramid_deform.tempdir")): os.mkdir(settings.get("pyramid_deform.tempdir")) if not os.path.exists(settings.get("mint.tmpdir")): os.mkdir(settings.get("mint.tmpdir")) if not os.path.exists(settings.get("redbox.tmpdir")): os.mkdir(settings.get("redbox.tmpdir")) if not os.path.exists(settings.get("workflows.files")): os.mkdir(settings.get("workflows.files")) # if not os.path.exists(settings.get("mail.queue_path")): # os.mkdir(settings.get("mail.queue_path")) return config.make_wsgi_app()