def register_extra_parameters(self): initialize_experiment_package(os.getcwd()) extra_parameters = None # Import and instantiate the experiment class if available # This will run any experiment specific parameter registrations from dallinger.experiment import load try: exp_klass = load() except ImportError: exp_klass = None exp_params = getattr(exp_klass, "extra_parameters", None) if exp_params is not None and not self._experiment_params_loaded: exp_params() self._experiment_params_loaded = True try: from dallinger_experiment.experiment import extra_parameters except ImportError: try: from dallinger_experiment.dallinger_experiment import extra_parameters except ImportError: try: from dallinger_experiment import extra_parameters except ImportError: pass if extra_parameters is not None and not self._module_params_loaded: extra_parameters() self._module_params_loaded = True
def register_extra_parameters(self): initialize_experiment_package(os.getcwd()) extra_parameters = None try: from dallinger_experiment.experiment import extra_parameters except ImportError: try: from dallinger_experiment.dallinger_experiment import extra_parameters except ImportError: try: from dallinger_experiment import extra_parameters except ImportError: pass if extra_parameters is not None and getattr(extra_parameters, 'loaded', None) is None: extra_parameters() extra_parameters.loaded = True
def restore_state_from_replay( self, app_id, session, zip_path=None, **configuration_options ): # We need to fake dallinger_experiment to point at the current experiment module = sys.modules[type(self).__module__] if sys.modules.get("dallinger_experiment", module) != module: logger.warning("dallinger_experiment is already set, updating") sys.modules["dallinger_experiment"] = module # Load the configuration system and globals config = get_config() # Manually load extra parameters and ignore errors try: from dallinger_experiment.experiment import extra_parameters try: extra_parameters() extra_parameters.loaded = True except KeyError: pass except ImportError: pass config.load() self.app_id = self.original_app_id = app_id self.session = session self.exp_config = config # The replay index is initialised to 1970 as that is guaranteed # to be before any experiment Info objects self._replay_time_index = datetime.datetime(1970, 1, 1, 1, 1, 1) # Create a second database session so we can load the full history # of the experiment to be replayed and selectively import events # into the main database specific_db_url = db_url + "-import-" + app_id import_engine = create_engine(specific_db_url) try: # Clear the temporary storage and import it init_db(drop_all=True, bind=import_engine) except Exception: create_db_engine = create_engine(db_url) conn = create_db_engine.connect() conn.execute("COMMIT;") conn.execute( 'CREATE DATABASE "{}"'.format(specific_db_url.rsplit("/", 1)[1]) ) conn.close() import_engine = create_engine(specific_db_url) init_db(drop_all=True, bind=import_engine) self.import_session = scoped_session( sessionmaker(autocommit=False, autoflush=True, bind=import_engine) ) # Find the real data for this experiment if zip_path is None: zip_path = find_experiment_export(app_id) if zip_path is None: msg = 'Dataset export for app id "{}" could not be found.' raise IOError(msg.format(app_id)) print("Ingesting dataset from {}...".format(os.path.basename(zip_path))) ingest_zip(zip_path, engine=import_engine) self._replay_range = tuple( self.import_session.query( func.min(Info.creation_time), func.max(Info.creation_time) ) )[0] # We apply the configuration options we were given and yield # the scrubber function into the context manager, so within the # with experiment.restore_state_from_replay(...): block the configuration # options are correctly set with config.override(configuration_options, strict=True): self.replay_start() yield Scrubber(self, session=self.import_session) self.replay_finish() # Clear up global state self.import_session.rollback() self.import_session.close() session.rollback() session.close() # Remove marker preventing experiment config variables being reloaded try: del module.extra_parameters.loaded except AttributeError: pass config._reset(register_defaults=True) del sys.modules["dallinger_experiment"]