def app_find_by_name(simulation_type, application_mode, simulation_name): redirect_uri = None # use the existing named simulation, or copy it from the examples rows = simulation_db.iterate_simulation_datafiles(simulation_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, }) if len(rows) == 0: for s in simulation_db.examples(simulation_type): if s['models']['simulation']['name'] == simulation_name: simulation_db.save_new_example(simulation_type, s) rows = simulation_db.iterate_simulation_datafiles(simulation_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, }) break if len(rows): if application_mode == 'default': redirect_uri = '/{}#/source/{}'.format(simulation_type, rows[0]['simulationId']) elif application_mode == 'lattice': redirect_uri = '/{}#/lattice/{}'.format(simulation_type, rows[0]['simulationId']) elif application_mode == 'wavefront' or application_mode == 'light-sources': redirect_uri = '/{}#/beamline/{}?application_mode={}'.format( simulation_type, rows[0]['simulationId'], application_mode) else: redirect_uri = '/{}#/source/{}?application_mode={}'.format( simulation_type, rows[0]['simulationId'], application_mode) if redirect_uri: # redirect using javascript for safari browser which doesn't support hash redirects return flask.render_template( 'html/javascript-redirect.html', redirect_uri=redirect_uri ) werkzeug.exceptions.abort(404)
def create_examples(): """Adds missing app examples to all users. """ from pykern import pkio from sirepo import feature_config from sirepo import server from sirepo import simulation_db from sirepo import cookie server.init() for d in pkio.sorted_glob(simulation_db.user_dir_name('*')): if _is_src_dir(d): continue; uid = simulation_db.uid_from_dir_name(d) cookie.init_mock(uid) for sim_type in feature_config.cfg.sim_types: simulation_db.verify_app_directory(sim_type) names = map( lambda x: x['name'], simulation_db.iterate_simulation_datafiles(sim_type, simulation_db.process_simulation_list, { 'simulation.isExample': True, })) for s in simulation_db.examples(sim_type): if s.models.simulation.name not in names: simulation_db.save_new_example(s)
def api_findByName(simulation_type, application_mode, simulation_name): if cfg.oauth_login: from sirepo import oauth oauth.set_default_state(logged_out_as_anonymous=True) # use the existing named simulation, or copy it from the examples rows = simulation_db.iterate_simulation_datafiles(simulation_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, 'simulation.isExample': True, }) if len(rows) == 0: for s in simulation_db.examples(simulation_type): if s['models']['simulation']['name'] == simulation_name: simulation_db.save_new_example(s) rows = simulation_db.iterate_simulation_datafiles(simulation_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, }) break else: raise AssertionError(util.err(simulation_name, 'simulation not found with type {}', simulation_type)) return javascript_redirect( uri_router.format_uri( simulation_type, application_mode, rows[0]['simulationId'], simulation_db.get_schema(simulation_type) ) )
def api_findByName(simulation_type, application_mode, simulation_name): if cfg.oauth_login: from sirepo import oauth oauth.set_default_state(logged_out_as_anonymous=True) redirect_uri = None # use the existing named simulation, or copy it from the examples rows = simulation_db.iterate_simulation_datafiles(simulation_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, }) if len(rows) == 0: for s in simulation_db.examples(simulation_type): if s['models']['simulation']['name'] == simulation_name: simulation_db.save_new_example(simulation_type, s) rows = simulation_db.iterate_simulation_datafiles(simulation_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, }) break if len(rows): if application_mode == 'default': redirect_uri = '/{}#/source/{}'.format(simulation_type, rows[0]['simulationId']) elif application_mode == 'lattice': redirect_uri = '/{}#/lattice/{}'.format(simulation_type, rows[0]['simulationId']) elif application_mode == 'wavefront' or application_mode == 'light-sources': redirect_uri = '/{}#/beamline/{}?application_mode={}'.format( simulation_type, rows[0]['simulationId'], application_mode) else: redirect_uri = '/{}#/source/{}?application_mode={}'.format( simulation_type, rows[0]['simulationId'], application_mode) if redirect_uri: return javascript_redirect(redirect_uri) werkzeug.exceptions.abort(404)
def _create_example(example): data = simulation_db.save_new_example(example) # ensure all datafiles for the new example exist in the sim lib dir for f in template_common.lib_files(data): if not f.exists(): r = template_common.resource_dir(data.simulationType).join(f.basename) assert r.exists(), 'Example missing resource file: {}'.format(f) pkio.mkdir_parent_only(f) r.copy(f)
def api_findByNameWithAuth(simulation_type, application_mode, simulation_name): req = http_request.parse_params(type=simulation_type) #TODO(pjm): need to unquote when redirecting from saved cookie redirect? if hasattr(urllib, 'unquote'): # python2 simulation_name = urllib.unquote(simulation_name) else: # python3 simulation_name = urllib.parse.unquote(simulation_name) # use the existing named simulation, or copy it from the examples rows = simulation_db.iterate_simulation_datafiles( req.type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, 'simulation.isExample': True, }, ) if len(rows) == 0: for s in simulation_db.examples(req.type): if s['models']['simulation']['name'] != simulation_name: continue simulation_db.save_new_example(s) rows = simulation_db.iterate_simulation_datafiles( req.type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, }, ) break else: sirepo.util.raise_not_found( 'simulation not found by name={} type={}', simulation_name, req.type, ) m = simulation_db.get_schema(req.type).appModes[application_mode] return http_reply.gen_redirect_for_local_route( req.type, m.localRoute, PKDict(simulationId=rows[0].simulationId), query=m.includeMode and PKDict(application_mode=application_mode), )
def api_findByName(simulation_type, application_mode, simulation_name): sim_type = sirepo.template.assert_sim_type(simulation_type) # use the existing named simulation, or copy it from the examples rows = simulation_db.iterate_simulation_datafiles( sim_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, 'simulation.isExample': True, }, ) if len(rows) == 0: for s in simulation_db.examples(sim_type): if s['models']['simulation']['name'] != simulation_name: continue simulation_db.save_new_example(s) rows = simulation_db.iterate_simulation_datafiles( sim_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, }, ) break else: util.raise_not_found( 'simulation not found by name={} type={}', simulation_name, sim_type, ) # format the uri for the local route to this simulation for application_mode s = simulation_db.get_schema(sim_type) m = s.appModes[application_mode] r = m.localRoute assert r in s.localRoutes u = '/{}#/{}/{}'.format(sim_type, r, rows[0].simulationId) if m.includeMode: u += '?application_mode={}'.format(application_mode) return http_reply.gen_redirect_for_anchor(u)
def api_findByName(simulation_type, application_mode, simulation_name): # use the existing named simulation, or copy it from the examples rows = simulation_db.iterate_simulation_datafiles(simulation_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, 'simulation.isExample': True, }) if len(rows) == 0: for s in simulation_db.examples(simulation_type): if s['models']['simulation']['name'] == simulation_name: simulation_db.save_new_example(s) rows = simulation_db.iterate_simulation_datafiles(simulation_type, simulation_db.process_simulation_list, { 'simulation.name': simulation_name, }) break else: util.raise_not_found('{}: simulation not found by name: {}', simulation_type, simulation_name) return javascript_redirect( uri_router.format_uri( simulation_type, application_mode, rows[0]['simulationId'], simulation_db.get_schema(simulation_type) ) )
def _create_example(example): simulation_db.save_new_example(example)