def _save_generation_strategy(generation_strategy: GenerationStrategy, encoder: Encoder) -> int: # If the generation strategy has not yet generated anything, there will be no # experiment set on it. if generation_strategy._experiment is None: experiment_id = None else: # Experiment was set on the generation strategy, so need to check whether # if has been saved and create a relationship b/w GS and experiment if so. experiment_id = _get_experiment_id( experiment=generation_strategy._experiment, encoder=encoder) gs_sqa = encoder.generation_strategy_to_sqa( generation_strategy=generation_strategy, experiment_id=experiment_id) with session_scope() as session: if generation_strategy._db_id is None: session.add(gs_sqa) session.flush() # Ensures generation strategy id is set. generation_strategy._db_id = gs_sqa.id else: gs_sqa_class = encoder.config.class_to_sqa_class[ GenerationStrategy] existing_gs_sqa = session.query(gs_sqa_class).get( generation_strategy._db_id) existing_gs_sqa.update(gs_sqa) # our update logic ignores foreign keys, i.e. fields ending in _id, # because we want SQLAlchemy to handle those relationships for us # however, generation_strategy.experiment_id is an exception, so we # need to update that manually existing_gs_sqa.experiment_id = gs_sqa.experiment_id return generation_strategy._db_id
def save_generation_strategy(generation_strategy: GenerationStrategy, config: Optional[SQAConfig] = None) -> int: """Save generation strategy (using default SQAConfig if no config is specified). If the generation strategy has an experiment set, the experiment will be saved first. Returns: The ID of the saved generation strategy. """ # Start up SQA encoder. config = config or SQAConfig() encoder = Encoder(config=config) # If the generation strategy has not yet generated anything, there will be no # experiment set on it. if generation_strategy._experiment is None: experiment_id = None else: # Experiment was set on the generation strategy, so we need to save it first. save_experiment(experiment=generation_strategy._experiment, config=config) experiment_id = _get_experiment_id( experiment=generation_strategy._experiment, encoder=encoder) gs_sqa = encoder.generation_strategy_to_sqa( generation_strategy=generation_strategy, experiment_id=experiment_id) with session_scope() as session: if generation_strategy._db_id is None: session.add(gs_sqa) session.flush() # Ensures generation strategy id is set. generation_strategy._db_id = gs_sqa.id else: existing_gs_sqa = session.query(SQAGenerationStrategy).get( generation_strategy._db_id) existing_gs_sqa.update(gs_sqa) # our update logic ignores foreign keys, i.e. fields ending in _id, # because we want SQLAlchemy to handle those relationships for us # however, generation_strategy.experiment_id is an exception, so we # need to update that manually existing_gs_sqa.experiment_id = gs_sqa.experiment_id return generation_strategy._db_id
def _save_generation_strategy(generation_strategy: GenerationStrategy, encoder: Encoder) -> int: # If the generation strategy has not yet generated anything, there will be no # experiment set on it. if generation_strategy._experiment is None: experiment_id = None else: # Experiment was set on the generation strategy, so need to check whether # if has been saved and create a relationship b/w GS and experiment if so. experiment_id = _get_experiment_id( # pyre-fixme[6]: Expected `Experiment` for 1st param but got # `Optional[Experiment]`. experiment=generation_strategy._experiment, encoder=encoder, ) gs_sqa = encoder.generation_strategy_to_sqa( generation_strategy=generation_strategy, experiment_id=experiment_id) if generation_strategy._db_id is not None: gs_sqa_class = encoder.config.class_to_sqa_class[GenerationStrategy] with session_scope() as session: existing_gs_sqa = session.query(gs_sqa_class).get( generation_strategy._db_id) # pyre-fixme[16]: `Optional` has no attribute `update`. existing_gs_sqa.update(gs_sqa) # our update logic ignores foreign keys, i.e. fields ending in _id, # because we want SQLAlchemy to handle those relationships for us # however, generation_strategy.experiment_id is an exception, so we # need to update that manually # pyre-fixme[16]: `Optional` has no attribute `experiment_id`. existing_gs_sqa.experiment_id = gs_sqa.experiment_id gs_sqa = existing_gs_sqa with session_scope() as session: session.add(gs_sqa) session.flush() # Ensures generation strategy id is set. # pyre-fixme[16]: `None` has no attribute `id`. generation_strategy._db_id = gs_sqa.id # pyre-fixme[7]: Expected `int` but got `Optional[int]`. return generation_strategy._db_id
def _save_generation_strategy(generation_strategy: GenerationStrategy, encoder: Encoder) -> int: # If the generation strategy has not yet generated anything, there will be no # experiment set on it. experiment = generation_strategy._experiment if experiment is None: experiment_id = None else: # Experiment was set on the generation strategy, so need to check whether # if has been saved and create a relationship b/w GS and experiment if so. experiment_id = experiment.db_id if experiment_id is None: raise ValueError( # pragma: no cover f"Experiment {experiment.name} should be saved before " "generation strategy.") gs_sqa, obj_to_sqa = encoder.generation_strategy_to_sqa( generation_strategy=generation_strategy, experiment_id=experiment_id) if generation_strategy._db_id is not None: gs_sqa_class = encoder.config.class_to_sqa_class[GenerationStrategy] with session_scope() as session: existing_gs_sqa = session.query(gs_sqa_class).get( generation_strategy._db_id) # pyre-fixme[16]: `Optional` has no attribute `update`. existing_gs_sqa.update(gs_sqa) # our update logic ignores foreign keys, i.e. fields ending in _id, # because we want SQLAlchemy to handle those relationships for us # however, generation_strategy.experiment_id is an exception, so we # need to update that manually # pyre-fixme[16]: `Optional` has no attribute `experiment_id`. existing_gs_sqa.experiment_id = gs_sqa.experiment_id gs_sqa = existing_gs_sqa with session_scope() as session: session.add(gs_sqa) session.flush() # Ensures generation strategy id is set. _set_db_ids(obj_to_sqa=obj_to_sqa) return not_none(generation_strategy.db_id)