Skip to content

Commit

Permalink
Refactored binding constraints to be tracked in the service instead o…
Browse files Browse the repository at this point in the history
…f the study to allow correct handling of ini file
  • Loading branch information
Sigurd-Borge committed Sep 18, 2024
1 parent 313d9bf commit ea4eab5
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 9 deletions.
8 changes: 3 additions & 5 deletions src/antares/model/study.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ def get_settings(self) -> StudySettings:
return self._settings

def get_binding_constraints(self) -> MappingProxyType[str, BindingConstraint]:
return MappingProxyType(self._binding_constraints)
return MappingProxyType(self._binding_constraints_service.binding_constraints)

def create_area(
self, area_name: str, *, properties: Optional[AreaProperties] = None, ui: Optional[AreaUi] = None
Expand Down Expand Up @@ -265,11 +265,9 @@ def create_binding_constraint(
equal_term_matrix: Optional[pd.DataFrame] = None,
greater_term_matrix: Optional[pd.DataFrame] = None,
) -> BindingConstraint:
constraint = self._binding_constraints_service.create_binding_constraint(
return self._binding_constraints_service.create_binding_constraint(
name, properties, terms, less_term_matrix, equal_term_matrix, greater_term_matrix
)
self._binding_constraints[constraint.id] = constraint
return constraint

def update_settings(self, settings: StudySettings) -> None:
new_settings = self._study_service.update_study_settings(settings)
Expand All @@ -278,7 +276,7 @@ def update_settings(self, settings: StudySettings) -> None:

def delete_binding_constraint(self, constraint: BindingConstraint) -> None:
self._study_service.delete_binding_constraint(constraint)
self._binding_constraints.pop(constraint.id)
self._binding_constraints_service.binding_constraints.pop(constraint.id)

def delete(self, children: bool = False) -> None:
self._study_service.delete(children)
10 changes: 9 additions & 1 deletion src/antares/service/api_services/binding_constraint_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def __init__(self, config: APIconf, study_id: str) -> None:
self.study_id = study_id
self._wrapper = RequestWrapper(self.api_config.set_up_api_conf())
self._base_url = f"{self.api_config.get_host()}/api/v1"
self._binding_constraints: dict[str, BindingConstraint] = {}

def create_binding_constraint(
self,
Expand Down Expand Up @@ -104,7 +105,14 @@ def create_binding_constraint(
except APIError as e:
raise BindingConstraintCreationError(name, e.message) from e

return BindingConstraint(name, self, bc_properties, bc_terms)
constraint = BindingConstraint(name, self, bc_properties, bc_terms)
self._binding_constraints[constraint.id] = constraint

return constraint

@property
def binding_constraints(self) -> dict[str, BindingConstraint]:
return self._binding_constraints

def delete_binding_constraint_term(self, constraint_id: str, term_id: str) -> None:
url = f"{self._base_url}/studies/{self.study_id}/bindingconstraints/{constraint_id}/term/{term_id}"
Expand Down
5 changes: 5 additions & 0 deletions src/antares/service/base_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,11 @@ def add_constraint_terms(self, constraint: BindingConstraint, terms: List[Constr
"""
pass

@property
@abstractmethod
def binding_constraints(self) -> dict[str, BindingConstraint]:
pass

@abstractmethod
def delete_binding_constraint_term(self, constraint_id: str, term_id: str) -> None:
"""
Expand Down
10 changes: 7 additions & 3 deletions src/antares/service/local_services/binding_constraint_local.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def __init__(self, config: LocalConfiguration, study_name: str, **kwargs: Any) -
super().__init__(**kwargs)
self.config = config
self.study_name = study_name
self.binding_constraints: dict[str, BindingConstraint] = {}
self._binding_constraints: dict[str, BindingConstraint] = {}
self.ini_file = IniFile(self.config.study_path, IniFileTypes.BINDING_CONSTRAINTS_INI)

def create_binding_constraint(
Expand All @@ -37,7 +37,7 @@ def create_binding_constraint(
terms=terms,
)
constraint.properties = constraint.local_properties.yield_binding_constraint_properties
self.binding_constraints[constraint.id] = constraint
self._binding_constraints[constraint.id] = constraint

self._write_binding_constraint_ini()

Expand All @@ -46,11 +46,15 @@ def create_binding_constraint(
def _write_binding_constraint_ini(self) -> None:
binding_constraints_ini_content = {
idx: idx_constraint.local_properties.list_ini_fields
for idx, idx_constraint in enumerate(self.binding_constraints.values())
for idx, idx_constraint in enumerate(self._binding_constraints.values())
}
self.ini_file.ini_dict = binding_constraints_ini_content
self.ini_file.write_ini_file()

@property
def binding_constraints(self) -> dict[str, BindingConstraint]:
return self._binding_constraints

def add_constraint_terms(self, constraint: BindingConstraint, terms: list[ConstraintTerm]) -> list[ConstraintTerm]:
new_terms = constraint.local_properties.terms | {
term.id: term for term in terms if term.id not in constraint.get_terms()
Expand Down

0 comments on commit ea4eab5

Please sign in to comment.