diff --git a/ansys/rep/client/auth/api/auth_api.py b/ansys/rep/client/auth/api/auth_api.py index 0c9141c59..817b9a546 100644 --- a/ansys/rep/client/auth/api/auth_api.py +++ b/ansys/rep/client/auth/api/auth_api.py @@ -6,8 +6,11 @@ # Author(s): F.Negri, O.Koenig # ---------------------------------------------------------- +from typing import List + from keycloak import KeycloakAdmin +from ..resource import User from ..schema.user import UserSchema @@ -44,11 +47,11 @@ def __init__(self, client): def url(self): return f"{self.client.rep_url}/auth/" - def get_users(self, as_objects=True): + def get_users(self, as_objects=True) -> List[User]: """Return a list of users.""" return get_users(self.client, as_objects=as_objects) - def create_user(self, user, as_objects=True): + def create_user(self, user: User, as_objects=True) -> User: """Create a new user. Args: @@ -57,7 +60,7 @@ def create_user(self, user, as_objects=True): """ return create_user(self.client, user, as_objects=as_objects) - def update_user(self, user, as_objects=True): + def update_user(self, user: User, as_objects=True) -> User: """Modify an existing user. Args: @@ -66,7 +69,7 @@ def update_user(self, user, as_objects=True): """ return update_user(self.client, user, as_objects=as_objects) - def delete_user(self, user): + def delete_user(self, user: User) -> None: """Delete an existing user. Args: diff --git a/ansys/rep/client/auth/resource/user.py b/ansys/rep/client/auth/resource/user.py index ca92894d1..509e47aae 100644 --- a/ansys/rep/client/auth/resource/user.py +++ b/ansys/rep/client/auth/resource/user.py @@ -32,16 +32,27 @@ class Meta: schema = UserSchema rest_name = "None" - def __init__(self, **kwargs): - self.id = missing - self.username = missing - self.password = missing - self.first_name = missing - self.last_name = missing - self.email = missing - self.groups = missing - self.realm_roles = missing - self.is_admin = missing + def __init__(self, + id=missing, + username=missing, + password=missing, + first_name=missing, + last_name=missing, + email=missing, + groups=missing, + realm_roles=missing, + is_admin=missing, + **kwargs + ): + self.id = id + self.username = username + self.password = password + self.first_name = first_name + self.last_name = last_name + self.email = email + self.groups = groups + self.realm_roles = realm_roles + self.is_admin = is_admin super().__init__(**kwargs) diff --git a/ansys/rep/client/jms/resource/__init__.py b/ansys/rep/client/jms/resource/__init__.py index 51142427f..4b93521e7 100644 --- a/ansys/rep/client/jms/resource/__init__.py +++ b/ansys/rep/client/jms/resource/__init__.py @@ -7,7 +7,6 @@ # ---------------------------------------------------------- from .algorithm import Algorithm -from .bool_parameter_definition import BoolParameterDefinition from .evaluator import Evaluator from .file import File from .fitness_definition import FitnessDefinition, FitnessTermDefinition @@ -15,7 +14,8 @@ from .job_definition import JobDefinition from .license_context import LicenseContext from .operation import Operation -from .parameter_definition import ParameterDefinition, FloatParameterDefinition, IntParameterDefinition, StringParameterDefinition +from .parameter_definition import ParameterDefinition, FloatParameterDefinition, \ + IntParameterDefinition, StringParameterDefinition, BoolParameterDefinition from .parameter_mapping import ParameterMapping from .project import Project from .project_permission import ProjectPermission diff --git a/ansys/rep/client/jms/resource/algorithm.py b/ansys/rep/client/jms/resource/algorithm.py index 512857bb2..2b1fab686 100644 --- a/ansys/rep/client/jms/resource/algorithm.py +++ b/ansys/rep/client/jms/resource/algorithm.py @@ -29,15 +29,23 @@ class Meta: schema = AlgorithmSchema rest_name = "algorithms" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.description = missing - self.creation_time = missing - self.modification_time = missing - self.data = missing - self.jobs = missing + def __init__(self, + id=missing, + name=missing, + description=missing, + creation_time=missing, + modification_time=missing, + data=missing, + jobs=missing + ): + self.id = id + self.name = name + self.description = description + self.creation_time = creation_time + self.modification_time = modification_time + self.data = data + self.jobs = jobs - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ AlgorithmSchema.Meta.object_class = Algorithm diff --git a/ansys/rep/client/jms/resource/bool_parameter_definition.py b/ansys/rep/client/jms/resource/bool_parameter_definition.py deleted file mode 100644 index 5c93d2426..000000000 --- a/ansys/rep/client/jms/resource/bool_parameter_definition.py +++ /dev/null @@ -1,45 +0,0 @@ -# autogenerated code -from marshmallow.utils import missing -from ansys.rep.client.jms.resource.parameter_definition import ParameterDefinition -from ..schema.parameter_definition import BoolParameterDefinitionSchema - -class BoolParameterDefinition(ParameterDefinition): - """BoolParameterDefinition resource. - - Parameters - ---------- - id : str, optional - Unique ID to access the resource, generated internally by the server on creation. - name : str, optional - Name (ID) of the parameter. - quantity_name : str, optional - Name of the quantity the parameter represents, e.g. Length. - units : str, optional - Units for the parameter. - display_text : str, optional - Text to display as the parameter name. - mode : str - Indicates whether it's an input or output parameter. Filled server side. - type : str - default : bool, optional - Default parameter value. - - """ - - class Meta: - schema = BoolParameterDefinitionSchema - rest_name = "parameter_definitions" - - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.quantity_name = missing - self.units = missing - self.display_text = missing - self.mode = missing - self.type = missing - self.default = missing - - super().__init__(**kwargs) - -BoolParameterDefinitionSchema.Meta.object_class = BoolParameterDefinition diff --git a/ansys/rep/client/jms/resource/evaluator.py b/ansys/rep/client/jms/resource/evaluator.py index 9495fca96..68e628e13 100644 --- a/ansys/rep/client/jms/resource/evaluator.py +++ b/ansys/rep/client/jms/resource/evaluator.py @@ -41,21 +41,35 @@ class Meta: schema = EvaluatorSchema rest_name = "evaluators" - def __init__(self, **kwargs): - self.id = missing - self.host_id = missing - self.name = missing - self.hostname = missing - self.platform = missing - self.task_manager_type = missing - self.project_server_select = missing - self.alive_update_interval = missing - self.update_time = missing - self.external_access_port = missing - self.project_assignment_mode = missing - self.project_list = missing - self.configuration = missing + def __init__(self, + id=missing, + host_id=missing, + name=missing, + hostname=missing, + platform=missing, + task_manager_type=missing, + project_server_select=missing, + alive_update_interval=missing, + update_time=missing, + external_access_port=missing, + project_assignment_mode=missing, + project_list=missing, + configuration=missing + ): + self.id = id + self.host_id = host_id + self.name = name + self.hostname = hostname + self.platform = platform + self.task_manager_type = task_manager_type + self.project_server_select = project_server_select + self.alive_update_interval = alive_update_interval + self.update_time = update_time + self.external_access_port = external_access_port + self.project_assignment_mode = project_assignment_mode + self.project_list = project_list + self.configuration = configuration - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ EvaluatorSchema.Meta.object_class = Evaluator diff --git a/ansys/rep/client/jms/resource/file.py b/ansys/rep/client/jms/resource/file.py index 94c2e23b1..f5ec40999 100644 --- a/ansys/rep/client/jms/resource/file.py +++ b/ansys/rep/client/jms/resource/file.py @@ -26,6 +26,8 @@ class File(Object): modification_time : datetime, optional The date and time the file resource was last modified. format : str, optional + expiry_time : datetime, optional + File expiration time. evaluation_path : str, optional Relative path under which the file instance for a job evaluation will be stored. monitor : bool, optional @@ -43,25 +45,42 @@ class Meta: schema = FileSchema rest_name = "files" - def __init__(self, src=None, **kwargs): + def __init__(self, src=None, + id=missing, + name=missing, + type=missing, + storage_id=missing, + size=missing, + hash=missing, + creation_time=missing, + modification_time=missing, + expiry_time=missing, + format=missing, + evaluation_path=missing, + monitor=missing, + collect=missing, + collect_interval=missing, + reference_id=missing + ): self.src = src self.content = None - self.id = missing - self.name = missing - self.type = missing - self.storage_id = missing - self.size = missing - self.hash = missing - self.creation_time = missing - self.modification_time = missing - self.format = missing - self.evaluation_path = missing - self.monitor = missing - self.collect = missing - self.collect_interval = missing - self.reference_id = missing + self.id = id + self.name = name + self.type = type + self.storage_id = storage_id + self.size = size + self.hash = hash + self.creation_time = creation_time + self.modification_time = modification_time + self.expiry_time = expiry_time + self.format = format + self.evaluation_path = evaluation_path + self.monitor = monitor + self.collect = collect + self.collect_interval = collect_interval + self.reference_id = reference_id - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ FileSchema.Meta.object_class = File diff --git a/ansys/rep/client/jms/resource/job.py b/ansys/rep/client/jms/resource/job.py index 9649552d0..275446797 100644 --- a/ansys/rep/client/jms/resource/job.py +++ b/ansys/rep/client/jms/resource/job.py @@ -47,24 +47,41 @@ class Meta: schema = JobSchema rest_name = "jobs" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.eval_status = missing - self.job_definition_id = missing - self.priority = missing - self.values = missing - self.fitness = missing - self.fitness_term_values = missing - self.note = missing - self.creator = missing - self.executed_level = missing - self.creation_time = missing - self.modification_time = missing - self.elapsed_time = missing - self.host_ids = missing - self.file_ids = missing + def __init__(self, + id=missing, + name=missing, + eval_status=missing, + job_definition_id=missing, + priority=missing, + values=missing, + fitness=missing, + fitness_term_values=missing, + note=missing, + creator=missing, + executed_level=missing, + creation_time=missing, + modification_time=missing, + elapsed_time=missing, + host_ids=missing, + file_ids=missing + ): + self.id = id + self.name = name + self.eval_status = eval_status + self.job_definition_id = job_definition_id + self.priority = priority + self.values = values + self.fitness = fitness + self.fitness_term_values = fitness_term_values + self.note = note + self.creator = creator + self.executed_level = executed_level + self.creation_time = creation_time + self.modification_time = modification_time + self.elapsed_time = elapsed_time + self.host_ids = host_ids + self.file_ids = file_ids - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ JobSchema.Meta.object_class = Job diff --git a/ansys/rep/client/jms/resource/job_definition.py b/ansys/rep/client/jms/resource/job_definition.py index ab61d4599..d06badd2b 100644 --- a/ansys/rep/client/jms/resource/job_definition.py +++ b/ansys/rep/client/jms/resource/job_definition.py @@ -14,6 +14,7 @@ class JobDefinition(Object): Name of the job definition active : bool Defines whether this is the active job definition in the project where evaluators will evaluate pending jobs + client_hash : str, optional creation_time : datetime, optional The date and time the job definition was created. modification_time : datetime, optional @@ -30,17 +31,29 @@ class Meta: schema = JobDefinitionSchema rest_name = "job_definitions" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.active = missing - self.creation_time = missing - self.modification_time = missing - self.parameter_definition_ids = missing - self.parameter_mapping_ids = missing - self.task_definition_ids = missing - self.fitness_definition = missing + def __init__(self, + id=missing, + name=missing, + active=missing, + client_hash=missing, + creation_time=missing, + modification_time=missing, + parameter_definition_ids=missing, + parameter_mapping_ids=missing, + task_definition_ids=missing, + fitness_definition=missing + ): + self.id = id + self.name = name + self.active = active + self.client_hash = client_hash + self.creation_time = creation_time + self.modification_time = modification_time + self.parameter_definition_ids = parameter_definition_ids + self.parameter_mapping_ids = parameter_mapping_ids + self.task_definition_ids = task_definition_ids + self.fitness_definition = fitness_definition - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ JobDefinitionSchema.Meta.object_class = JobDefinition diff --git a/ansys/rep/client/jms/resource/license_context.py b/ansys/rep/client/jms/resource/license_context.py index 341402dd2..4bb8822fe 100644 --- a/ansys/rep/client/jms/resource/license_context.py +++ b/ansys/rep/client/jms/resource/license_context.py @@ -19,10 +19,13 @@ class Meta: schema = LicenseContextSchema rest_name = "license_contexts" - def __init__(self, **kwargs): - self.context_id = missing - self.environment = missing + def __init__(self, + context_id=missing, + environment=missing + ): + self.context_id = context_id + self.environment = environment - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ LicenseContextSchema.Meta.object_class = LicenseContext diff --git a/ansys/rep/client/jms/resource/operation.py b/ansys/rep/client/jms/resource/operation.py index 6681d3982..3f222135f 100644 --- a/ansys/rep/client/jms/resource/operation.py +++ b/ansys/rep/client/jms/resource/operation.py @@ -26,18 +26,29 @@ class Meta: schema = OperationSchema rest_name = "operations" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.finished = missing - self.succeeded = missing - self.progress = missing - self.status = missing - self.result = missing - self.messages = missing - self.start_time = missing - self.end_time = missing + def __init__(self, + id=missing, + name=missing, + finished=missing, + succeeded=missing, + progress=missing, + status=missing, + result=missing, + messages=missing, + start_time=missing, + end_time=missing + ): + self.id = id + self.name = name + self.finished = finished + self.succeeded = succeeded + self.progress = progress + self.status = status + self.result = result + self.messages = messages + self.start_time = start_time + self.end_time = end_time - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ OperationSchema.Meta.object_class = Operation diff --git a/ansys/rep/client/jms/resource/parameter_definition.py b/ansys/rep/client/jms/resource/parameter_definition.py index 8b8112ec6..73a116979 100644 --- a/ansys/rep/client/jms/resource/parameter_definition.py +++ b/ansys/rep/client/jms/resource/parameter_definition.py @@ -19,9 +19,11 @@ class Meta: schema = ParameterDefinitionSchema rest_name = "parameter_definitions" - def __init__(self, **kwargs): + def __init__(self, - super().__init__(**kwargs) + ): + + self.obj_type = self.__class__.__name__ ParameterDefinitionSchema.Meta.object_class = ParameterDefinition @@ -62,22 +64,36 @@ class Meta: schema = FloatParameterDefinitionSchema rest_name = "parameter_definitions" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.quantity_name = missing - self.units = missing - self.display_text = missing - self.mode = missing - self.type = missing - self.default = missing - self.lower_limit = missing - self.upper_limit = missing - self.step = missing - self.cyclic = missing - self.value_list = missing - - super().__init__(**kwargs) + def __init__(self, + id=missing, + name=missing, + quantity_name=missing, + units=missing, + display_text=missing, + mode=missing, + type=missing, + default=missing, + lower_limit=missing, + upper_limit=missing, + step=missing, + cyclic=missing, + value_list=missing + ): + self.id = id + self.name = name + self.quantity_name = quantity_name + self.units = units + self.display_text = display_text + self.mode = mode + self.type = type + self.default = default + self.lower_limit = lower_limit + self.upper_limit = upper_limit + self.step = step + self.cyclic = cyclic + self.value_list = value_list + + self.obj_type = self.__class__.__name__ FloatParameterDefinitionSchema.Meta.object_class = FloatParameterDefinition @@ -116,21 +132,34 @@ class Meta: schema = IntParameterDefinitionSchema rest_name = "parameter_definitions" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.quantity_name = missing - self.units = missing - self.display_text = missing - self.mode = missing - self.type = missing - self.default = missing - self.lower_limit = missing - self.upper_limit = missing - self.step = missing - self.cyclic = missing - - super().__init__(**kwargs) + def __init__(self, + id=missing, + name=missing, + quantity_name=missing, + units=missing, + display_text=missing, + mode=missing, + type=missing, + default=missing, + lower_limit=missing, + upper_limit=missing, + step=missing, + cyclic=missing + ): + self.id = id + self.name = name + self.quantity_name = quantity_name + self.units = units + self.display_text = display_text + self.mode = mode + self.type = type + self.default = default + self.lower_limit = lower_limit + self.upper_limit = upper_limit + self.step = step + self.cyclic = cyclic + + self.obj_type = self.__class__.__name__ IntParameterDefinitionSchema.Meta.object_class = IntParameterDefinition @@ -161,17 +190,26 @@ class Meta: schema = BoolParameterDefinitionSchema rest_name = "parameter_definitions" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.quantity_name = missing - self.units = missing - self.display_text = missing - self.mode = missing - self.type = missing - self.default = missing - - super().__init__(**kwargs) + def __init__(self, + id=missing, + name=missing, + quantity_name=missing, + units=missing, + display_text=missing, + mode=missing, + type=missing, + default=missing + ): + self.id = id + self.name = name + self.quantity_name = quantity_name + self.units = units + self.display_text = display_text + self.mode = mode + self.type = type + self.default = default + + self.obj_type = self.__class__.__name__ BoolParameterDefinitionSchema.Meta.object_class = BoolParameterDefinition @@ -204,17 +242,27 @@ class Meta: schema = StringParameterDefinitionSchema rest_name = "parameter_definitions" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.quantity_name = missing - self.units = missing - self.display_text = missing - self.mode = missing - self.type = missing - self.default = missing - self.value_list = missing - - super().__init__(**kwargs) + def __init__(self, + id=missing, + name=missing, + quantity_name=missing, + units=missing, + display_text=missing, + mode=missing, + type=missing, + default=missing, + value_list=missing + ): + self.id = id + self.name = name + self.quantity_name = quantity_name + self.units = units + self.display_text = display_text + self.mode = mode + self.type = type + self.default = default + self.value_list = value_list + + self.obj_type = self.__class__.__name__ StringParameterDefinitionSchema.Meta.object_class = StringParameterDefinition diff --git a/ansys/rep/client/jms/resource/parameter_mapping.py b/ansys/rep/client/jms/resource/parameter_mapping.py index 2c45225ce..b7dcae4d6 100644 --- a/ansys/rep/client/jms/resource/parameter_mapping.py +++ b/ansys/rep/client/jms/resource/parameter_mapping.py @@ -34,24 +34,41 @@ class Meta: schema = ParameterMappingSchema rest_name = "parameter_mappings" - def __init__(self, **kwargs): - self.id = missing - self.line = missing - self.column = missing - self.key_string = missing - self.float_field = missing - self.width = missing - self.precision = missing - self.tokenizer = missing - self.decimal_symbol = missing - self.digit_grouping_symbol = missing - self.string_quote = missing - self.true_string = missing - self.false_string = missing - self.parameter_definition_id = missing - self.task_definition_property = missing - self.file_id = missing + def __init__(self, + id=missing, + line=missing, + column=missing, + key_string=missing, + float_field=missing, + width=missing, + precision=missing, + tokenizer=missing, + decimal_symbol=missing, + digit_grouping_symbol=missing, + string_quote=missing, + true_string=missing, + false_string=missing, + parameter_definition_id=missing, + task_definition_property=missing, + file_id=missing + ): + self.id = id + self.line = line + self.column = column + self.key_string = key_string + self.float_field = float_field + self.width = width + self.precision = precision + self.tokenizer = tokenizer + self.decimal_symbol = decimal_symbol + self.digit_grouping_symbol = digit_grouping_symbol + self.string_quote = string_quote + self.true_string = true_string + self.false_string = false_string + self.parameter_definition_id = parameter_definition_id + self.task_definition_property = task_definition_property + self.file_id = file_id - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ ParameterMappingSchema.Meta.object_class = ParameterMapping diff --git a/ansys/rep/client/jms/resource/project.py b/ansys/rep/client/jms/resource/project.py index 7cee191ba..a216cbb46 100644 --- a/ansys/rep/client/jms/resource/project.py +++ b/ansys/rep/client/jms/resource/project.py @@ -31,16 +31,25 @@ class Meta: schema = ProjectSchema rest_name = "projects" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.active = missing - self.priority = missing - self.creation_time = missing - self.modification_time = missing - self.file_storages = missing - self.statistics = missing + def __init__(self, + id=missing, + name=missing, + active=missing, + priority=missing, + creation_time=missing, + modification_time=missing, + file_storages=missing, + statistics=missing + ): + self.id = id + self.name = name + self.active = active + self.priority = priority + self.creation_time = creation_time + self.modification_time = modification_time + self.file_storages = file_storages + self.statistics = statistics - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ ProjectSchema.Meta.object_class = Project diff --git a/ansys/rep/client/jms/resource/project_permission.py b/ansys/rep/client/jms/resource/project_permission.py index 7d559d407..77d2b53ff 100644 --- a/ansys/rep/client/jms/resource/project_permission.py +++ b/ansys/rep/client/jms/resource/project_permission.py @@ -19,12 +19,17 @@ class Meta: schema = ProjectPermissionSchema rest_name = "permissions" - def __init__(self, **kwargs): - self.permission_type = missing - self.value_id = missing - self.value_name = missing - self.role = missing + def __init__(self, + permission_type=missing, + value_id=missing, + value_name=missing, + role=missing + ): + self.permission_type = permission_type + self.value_id = value_id + self.value_name = value_name + self.role = role - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ ProjectPermissionSchema.Meta.object_class = ProjectPermission diff --git a/ansys/rep/client/jms/resource/selection.py b/ansys/rep/client/jms/resource/selection.py index f088d890c..dffef14f1 100644 --- a/ansys/rep/client/jms/resource/selection.py +++ b/ansys/rep/client/jms/resource/selection.py @@ -27,14 +27,21 @@ class Meta: schema = JobSelectionSchema rest_name = "job_selections" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.creation_time = missing - self.modification_time = missing - self.algorithm_id = missing - self.jobs = missing + def __init__(self, + id=missing, + name=missing, + creation_time=missing, + modification_time=missing, + algorithm_id=missing, + jobs=missing + ): + self.id = id + self.name = name + self.creation_time = creation_time + self.modification_time = modification_time + self.algorithm_id = algorithm_id + self.jobs = jobs - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ JobSelectionSchema.Meta.object_class = JobSelection diff --git a/ansys/rep/client/jms/resource/task.py b/ansys/rep/client/jms/resource/task.py index d61471b95..f47c9ed7a 100644 --- a/ansys/rep/client/jms/resource/task.py +++ b/ansys/rep/client/jms/resource/task.py @@ -32,6 +32,7 @@ class Task(Object): ID of the :class:`TaskDefinition` the task is linked to. task_definition_snapshot : TaskDefinition, optional Snapshot of :class:`TaskDefinition` created when task status changes to prolog, before evaluation. + executed_command : str, optional job_id : str ID of the :class:`Job` the task is linked to. host_id : str, optional @@ -40,6 +41,8 @@ class Task(Object): List of IDs of input files of task. output_file_ids : list[str] List of IDs of output files of task. + monitored_file_ids : list[str] + List of IDs of monitored files of task. inherited_file_ids : list[str] List of IDs of inherited files of task. owned_file_ids : list[str] @@ -53,27 +56,51 @@ class Meta: schema = TaskSchema rest_name = "tasks" - def __init__(self, **kwargs): - self.id = missing - self.modification_time = missing - self.creation_time = missing - self.pending_time = missing - self.prolog_time = missing - self.running_time = missing - self.finished_time = missing - self.eval_status = missing - self.trial_number = missing - self.elapsed_time = missing - self.task_definition_id = missing - self.task_definition_snapshot = missing - self.job_id = missing - self.host_id = missing - self.input_file_ids = missing - self.output_file_ids = missing - self.inherited_file_ids = missing - self.owned_file_ids = missing - self.license_context_id = missing + def __init__(self, + id=missing, + modification_time=missing, + creation_time=missing, + pending_time=missing, + prolog_time=missing, + running_time=missing, + finished_time=missing, + eval_status=missing, + trial_number=missing, + elapsed_time=missing, + task_definition_id=missing, + task_definition_snapshot=missing, + executed_command=missing, + job_id=missing, + host_id=missing, + input_file_ids=missing, + output_file_ids=missing, + monitored_file_ids=missing, + inherited_file_ids=missing, + owned_file_ids=missing, + license_context_id=missing + ): + self.id = id + self.modification_time = modification_time + self.creation_time = creation_time + self.pending_time = pending_time + self.prolog_time = prolog_time + self.running_time = running_time + self.finished_time = finished_time + self.eval_status = eval_status + self.trial_number = trial_number + self.elapsed_time = elapsed_time + self.task_definition_id = task_definition_id + self.task_definition_snapshot = task_definition_snapshot + self.executed_command = executed_command + self.job_id = job_id + self.host_id = host_id + self.input_file_ids = input_file_ids + self.output_file_ids = output_file_ids + self.monitored_file_ids = monitored_file_ids + self.inherited_file_ids = inherited_file_ids + self.owned_file_ids = owned_file_ids + self.license_context_id = license_context_id - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ TaskSchema.Meta.object_class = Task diff --git a/ansys/rep/client/jms/resource/task_definition.py b/ansys/rep/client/jms/resource/task_definition.py index 4c99d6c31..67743b3b0 100644 --- a/ansys/rep/client/jms/resource/task_definition.py +++ b/ansys/rep/client/jms/resource/task_definition.py @@ -24,14 +24,20 @@ class Meta: schema = ResourceRequirementsSchema rest_name = "None" - def __init__(self, **kwargs): - self.platform = missing - self.memory = missing - self.cpu_core_usage = missing - self.disk_space = missing - self.custom = missing - - super().__init__(**kwargs) + def __init__(self, + platform=missing, + memory=missing, + cpu_core_usage=missing, + disk_space=missing, + custom=missing + ): + self.platform = platform + self.memory = memory + self.cpu_core_usage = cpu_core_usage + self.disk_space = disk_space + self.custom = custom + + self.obj_type = self.__class__.__name__ ResourceRequirementsSchema.Meta.object_class = ResourceRequirements @@ -51,11 +57,14 @@ class Meta: schema = SoftwareSchema rest_name = "None" - def __init__(self, **kwargs): - self.name = missing - self.version = missing + def __init__(self, + name=missing, + version=missing + ): + self.name = name + self.version = version - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ SoftwareSchema.Meta.object_class = Software @@ -83,15 +92,22 @@ class Meta: schema = SuccessCriteriaSchema rest_name = "None" - def __init__(self, **kwargs): - self.return_code = missing - self.expressions = missing - self.required_output_file_ids = missing - self.require_all_output_files = missing - self.required_output_parameter_ids = missing - self.require_all_output_parameters = missing - - super().__init__(**kwargs) + def __init__(self, + return_code=missing, + expressions=missing, + required_output_file_ids=missing, + require_all_output_files=missing, + required_output_parameter_ids=missing, + require_all_output_parameters=missing + ): + self.return_code = return_code + self.expressions = expressions + self.required_output_file_ids = required_output_file_ids + self.require_all_output_files = require_all_output_files + self.required_output_parameter_ids = required_output_parameter_ids + self.require_all_output_parameters = require_all_output_parameters + + self.obj_type = self.__class__.__name__ SuccessCriteriaSchema.Meta.object_class = SuccessCriteria @@ -109,10 +125,12 @@ class Meta: schema = LicensingSchema rest_name = "None" - def __init__(self, **kwargs): - self.enable_shared_licensing = missing + def __init__(self, + enable_shared_licensing=missing + ): + self.enable_shared_licensing = enable_shared_licensing - super().__init__(**kwargs) + self.obj_type = self.__class__.__name__ LicensingSchema.Meta.object_class = Licensing @@ -161,25 +179,43 @@ class Meta: schema = TaskDefinitionSchema rest_name = "task_definitions" - def __init__(self, **kwargs): - self.id = missing - self.name = missing - self.execution_command = missing - self.use_execution_script = missing - self.execution_script_id = missing - self.execution_level = missing - self.execution_context = missing - self.environment = missing - self.max_execution_time = missing - self.num_trials = missing - self.store_output = missing - self.input_file_ids = missing - self.output_file_ids = missing - self.success_criteria = missing - self.licensing = missing - self.software_requirements = missing - self.resource_requirements = missing - - super().__init__(**kwargs) + def __init__(self, + id=missing, + name=missing, + execution_command=missing, + use_execution_script=missing, + execution_script_id=missing, + execution_level=missing, + execution_context=missing, + environment=missing, + max_execution_time=missing, + num_trials=missing, + store_output=missing, + input_file_ids=missing, + output_file_ids=missing, + success_criteria=missing, + licensing=missing, + software_requirements=missing, + resource_requirements=missing + ): + self.id = id + self.name = name + self.execution_command = execution_command + self.use_execution_script = use_execution_script + self.execution_script_id = execution_script_id + self.execution_level = execution_level + self.execution_context = execution_context + self.environment = environment + self.max_execution_time = max_execution_time + self.num_trials = num_trials + self.store_output = store_output + self.input_file_ids = input_file_ids + self.output_file_ids = output_file_ids + self.success_criteria = success_criteria + self.licensing = licensing + self.software_requirements = software_requirements + self.resource_requirements = resource_requirements + + self.obj_type = self.__class__.__name__ TaskDefinitionSchema.Meta.object_class = TaskDefinition diff --git a/ansys/rep/client/jms/resource/task_definition_template.py b/ansys/rep/client/jms/resource/task_definition_template.py index e955f2728..30ff0871c 100644 --- a/ansys/rep/client/jms/resource/task_definition_template.py +++ b/ansys/rep/client/jms/resource/task_definition_template.py @@ -27,13 +27,18 @@ class Meta: schema = TemplatePropertySchema rest_name = "None" - def __init__(self, **kwargs): - self.default = missing - self.description = missing - self.type = missing - self.value_list = missing - - super().__init__(**kwargs) + def __init__(self, + default=missing, + description=missing, + type=missing, + value_list=missing + ): + self.default = default + self.description = description + self.type = type + self.value_list = value_list + + self.obj_type = self.__class__.__name__ TemplatePropertySchema.Meta.object_class = TemplateProperty @@ -54,14 +59,20 @@ class Meta: schema = TemplateResourceRequirementsSchema rest_name = "None" - def __init__(self, **kwargs): - self.platform = missing - self.memory = missing - self.cpu_core_usage = missing - self.disk_space = missing - self.custom = missing - - super().__init__(**kwargs) + def __init__(self, + platform=missing, + memory=missing, + cpu_core_usage=missing, + disk_space=missing, + custom=missing + ): + self.platform = platform + self.memory = memory + self.cpu_core_usage = cpu_core_usage + self.disk_space = disk_space + self.custom = custom + + self.obj_type = self.__class__.__name__ TemplateResourceRequirementsSchema.Meta.object_class = TemplateResourceRequirements @@ -87,14 +98,20 @@ class Meta: schema = TemplateInputFileSchema rest_name = "None" - def __init__(self, **kwargs): - self.name = missing - self.type = missing - self.evaluation_path = missing - self.description = missing - self.required = missing - - super().__init__(**kwargs) + def __init__(self, + name=missing, + type=missing, + evaluation_path=missing, + description=missing, + required=missing + ): + self.name = name + self.type = type + self.evaluation_path = evaluation_path + self.description = description + self.required = required + + self.obj_type = self.__class__.__name__ TemplateInputFileSchema.Meta.object_class = TemplateInputFile @@ -124,16 +141,24 @@ class Meta: schema = TemplateOutputFileSchema rest_name = "None" - def __init__(self, **kwargs): - self.name = missing - self.type = missing - self.evaluation_path = missing - self.description = missing - self.required = missing - self.monitor = missing - self.collect = missing - - super().__init__(**kwargs) + def __init__(self, + name=missing, + type=missing, + evaluation_path=missing, + description=missing, + required=missing, + monitor=missing, + collect=missing + ): + self.name = name + self.type = type + self.evaluation_path = evaluation_path + self.description = description + self.required = required + self.monitor = monitor + self.collect = collect + + self.obj_type = self.__class__.__name__ TemplateOutputFileSchema.Meta.object_class = TemplateOutputFile @@ -168,6 +193,8 @@ class TaskDefinitionTemplate(Object): Whether to run task with the execution command or the execution script. execution_script_storage_id : str, optional Storage ID of the script to execute (command or execution script is required). + execution_script_storage_bucket : str, optional + File storage bucket where the execution script is located. input_files : list[TemplateInputFile], optional List of predefined input files. output_files : list[TemplateOutputFile], optional @@ -179,23 +206,41 @@ class Meta: schema = TaskDefinitionTemplateSchema rest_name = "task_definition_templates" - def __init__(self, **kwargs): - self.id = missing - self.modification_time = missing - self.creation_time = missing - self.name = missing - self.version = missing - self.description = missing - self.software_requirements = missing - self.resource_requirements = missing - self.execution_context = missing - self.environment = missing - self.execution_command = missing - self.use_execution_script = missing - self.execution_script_storage_id = missing - self.input_files = missing - self.output_files = missing - - super().__init__(**kwargs) + def __init__(self, + id=missing, + modification_time=missing, + creation_time=missing, + name=missing, + version=missing, + description=missing, + software_requirements=missing, + resource_requirements=missing, + execution_context=missing, + environment=missing, + execution_command=missing, + use_execution_script=missing, + execution_script_storage_id=missing, + execution_script_storage_bucket=missing, + input_files=missing, + output_files=missing + ): + self.id = id + self.modification_time = modification_time + self.creation_time = creation_time + self.name = name + self.version = version + self.description = description + self.software_requirements = software_requirements + self.resource_requirements = resource_requirements + self.execution_context = execution_context + self.environment = environment + self.execution_command = execution_command + self.use_execution_script = use_execution_script + self.execution_script_storage_id = execution_script_storage_id + self.execution_script_storage_bucket = execution_script_storage_bucket + self.input_files = input_files + self.output_files = output_files + + self.obj_type = self.__class__.__name__ TaskDefinitionTemplateSchema.Meta.object_class = TaskDefinitionTemplate diff --git a/ansys/rep/client/jms/schema/file.py b/ansys/rep/client/jms/schema/file.py index 2dc1c97d4..92660abf6 100644 --- a/ansys/rep/client/jms/schema/file.py +++ b/ansys/rep/client/jms/schema/file.py @@ -40,6 +40,10 @@ class Meta(ObjectSchema.Meta): load_only=True, description="The date and time the file resource was last modified.", ) + expiry_time = fields.DateTime( + allow_none=True, + metadata={"description": "File expiration time."}, + ) format = fields.String(allow_none=True) evaluation_path = fields.String( diff --git a/ansys/rep/client/jms/schema/job_definition.py b/ansys/rep/client/jms/schema/job_definition.py index baf23e3d0..a8b087600 100644 --- a/ansys/rep/client/jms/schema/job_definition.py +++ b/ansys/rep/client/jms/schema/job_definition.py @@ -26,6 +26,7 @@ class Meta(ObjectSchema.Meta): description="Defines whether this is the active job definition in the " "project where evaluators will evaluate pending jobs" ) + client_hash = fields.String(allow_none=True) creation_time = fields.DateTime( allow_none=True, load_only=True, diff --git a/ansys/rep/client/jms/schema/task.py b/ansys/rep/client/jms/schema/task.py index a48f5630c..ee12ea3c7 100644 --- a/ansys/rep/client/jms/schema/task.py +++ b/ansys/rep/client/jms/schema/task.py @@ -66,6 +66,8 @@ class Meta(ObjectSchema.Meta): "created when task status changes to prolog, before evaluation.", ) + executed_command = fields.String(allow_none=True) + job_id = IdReference( allow_none=False, attribute="job_id", @@ -88,6 +90,11 @@ class Meta(ObjectSchema.Meta): attribute="output_file_ids", description="List of IDs of output files of task.", ) + monitored_file_ids = IdReferenceList( + referenced_class="File", + attribute="monitored_file_ids", + description="List of IDs of monitored files of task.", + ) inherited_file_ids = IdReferenceList( referenced_class="File", diff --git a/ansys/rep/client/jms/schema/task_definition_template.py b/ansys/rep/client/jms/schema/task_definition_template.py index b08475f4d..86cdb2b1a 100644 --- a/ansys/rep/client/jms/schema/task_definition_template.py +++ b/ansys/rep/client/jms/schema/task_definition_template.py @@ -133,6 +133,10 @@ class Meta(ObjectSchema.Meta): description="Storage ID of the script to execute " "(command or execution script is required).", ) + execution_script_storage_bucket = fields.String( + allow_none=True, + metadata={"description": "File storage bucket where the execution script is located."}, + ) input_files = fields.Nested( TemplateInputFileSchema, diff --git a/generate_resources.py b/generate_resources.py index e68f3a80c..9476ccaa8 100644 --- a/generate_resources.py +++ b/generate_resources.py @@ -261,6 +261,7 @@ "additional_fields": [], "class": "User", "resource_filename": "user", + "init_with_kwargs": True, }, ] @@ -335,6 +336,16 @@ def get_resource_imports(resource, base_class): def get_resource_code(resource, base_class, fields, field_docs): + fields_str = "" + for k in fields: + fields_str += f" self.{k} = {k}\n" + init_fields_str = ",\n".join([f" {k}=missing" for k in fields]) + + additional_initialization = " self.obj_type = self.__class__.__name__" + if "init_with_kwargs" in resource: + additional_initialization = " super().__init__(**kwargs)" + init_fields_str += ",\n **kwargs" + code = f'''class {resource['class']}({base_class["name"]}): """{resource['class']} resource. @@ -347,9 +358,11 @@ class Meta: schema = {resource['schema']} rest_name = "{resource['rest_name']}" - def __init__(self, **kwargs): -{fields} - super().__init__(**kwargs) + def __init__(self, +{init_fields_str} + ): +{fields_str} +{additional_initialization} {resource['schema']}.Meta.object_class = {resource['class']} ''' @@ -372,10 +385,6 @@ def process_resources(subpackage, resources, base_class_path="ansys.rep.client") # query schema field names and doc fields, field_docs = declared_fields(resource_class, resources) - fields_str = "" - for k in fields: - fields_str += f" self.{k} = missing\n" - field_docs_str = "" for k in field_docs: field_docs_str += f" {k}" @@ -400,7 +409,7 @@ def process_resources(subpackage, resources, base_class_path="ansys.rep.client") resources_code[file_name]["imports"].extend(get_resource_imports(resource, base_class)) resources_code[file_name]["code"].append( - get_resource_code(resource, base_class, fields_str, field_docs_str) + get_resource_code(resource, base_class, fields, field_docs_str) ) # dump generated code to files diff --git a/tests/jms/test_job_definitions.py b/tests/jms/test_job_definitions.py index 3bf9ab6f0..fbc063516 100644 --- a/tests/jms/test_job_definitions.py +++ b/tests/jms/test_job_definitions.py @@ -49,8 +49,6 @@ def test_task_definition_fields(self): task_def = TaskDefinition( name="Task.1", - application_name="MyApp", - application_version="1.0.0", execution_command="%executable%", max_execution_time=10.0, execution_level=0, diff --git a/tests/jms/test_jobs.py b/tests/jms/test_jobs.py index 5eb4be080..234e7efb0 100644 --- a/tests/jms/test_jobs.py +++ b/tests/jms/test_jobs.py @@ -24,9 +24,8 @@ class JobsTest(REPTestCase): def test_job_deserialization(self): - dp_dict = { + job_dict = { "id": "02q1DiPEP0nanLN5384q8L", - "obj_type": "Job", "modification_time": "2021-03-03T19:39:38.826286+00:00", "creation_time": "2021-03-03T19:38:15.024782+00:00", "name": "Job.0", @@ -68,7 +67,7 @@ def test_job_deserialization(self): } schema = JobSchema() - job = schema.load(dp_dict) + job = schema.load(job_dict) self.assertEqual(job.id, "02q1DiPEP0nanLN5384q8L") self.assertEqual(job.name, "Job.0") self.assertEqual(job.job_definition_id, "02q3QL54xZzmBhfkAcEdqh") diff --git a/tests/jms/test_parameter_definitions.py b/tests/jms/test_parameter_definitions.py index 428329ae3..ce910f921 100644 --- a/tests/jms/test_parameter_definitions.py +++ b/tests/jms/test_parameter_definitions.py @@ -183,8 +183,8 @@ def test_parameter_definition_integration(self): job_def = project_api.create_job_definitions([job_def])[0] self.assertEqual(len(job_def.parameter_definition_ids), 2) - fp = FloatParameterDefinition(name="f_param", display_name="A Float Parameter") - bp = BoolParameterDefinition(name="b_param", display_name="A Bool Parameter", default=False) + fp = FloatParameterDefinition(name="f_param", display_text="A Float Parameter") + bp = BoolParameterDefinition(name="b_param", display_text="A Bool Parameter", default=False) fp = project_api.create_parameter_definitions([fp])[0] bp = project_api.create_parameter_definitions([bp])[0] job_def.parameter_definition_ids.extend([p.id for p in [bp, fp]]) diff --git a/tests/jms/test_projects.py b/tests/jms/test_projects.py index 1dea1ece5..ca928e577 100644 --- a/tests/jms/test_projects.py +++ b/tests/jms/test_projects.py @@ -96,7 +96,7 @@ def test_project_deserialization(self): def test_project_serialization(self): - project = Project(name="new_project", replace=False) + project = Project(name="new_project") self.assertEqual(project.creation_time, missing) self.assertEqual(project.statistics, missing) diff --git a/tests/jms/test_task_definition_templates.py b/tests/jms/test_task_definition_templates.py index c3df6aeb7..a3abe95ca 100644 --- a/tests/jms/test_task_definition_templates.py +++ b/tests/jms/test_task_definition_templates.py @@ -59,7 +59,6 @@ def test_template_deserialization(self): "default": "DMP", "type": "string", "description": "Available parallel processing types.", - "display_name": "Parallel Processing Type", "value_list": ["DMP", "SMP", "Hybrid"], }, }, diff --git a/tests/jms/test_tasks.py b/tests/jms/test_tasks.py index 15b68625a..ee638d9a6 100644 --- a/tests/jms/test_tasks.py +++ b/tests/jms/test_tasks.py @@ -15,7 +15,7 @@ import pytest from ansys.rep.client.jms import JmsApi, ProjectApi -from ansys.rep.client.jms.resource import Job, JobDefinition, Project, TaskDefinition +from ansys.rep.client.jms.resource import Job, JobDefinition, Project, Software, TaskDefinition from ansys.rep.client.jms.schema.task import TaskSchema from tests.rep_test import REPTestCase @@ -27,7 +27,6 @@ def test_task_deserialization(self): task_dict = { "id": "02q3zCLSbavqZAeO3VjChL", - "obj_type": "Task", "modification_time": "2021-02-26T09:02:47.818186+00:00", "creation_time": "2021-02-26T09:02:11.999810+00:00", "pending_time": "2021-02-26T09:02:12.464568+00:00", @@ -118,10 +117,9 @@ def test_task_integration(self): tasks = project_api.get_tasks(job_id=job.id) self.assertEqual(tasks[0].job_id, job.id) - @pytest.mark.requires_evaluator def test_job_sync(self): - # create base project with 1 process step and 3 design points + # create base project with 1 task and 3 jobs num_jobs = 3 client = self.client() jms_api = JmsApi(client) @@ -133,8 +131,7 @@ def test_job_sync(self): task_def_1 = TaskDefinition( name="Task.1", - application_name="NonExistingApp", - application_version="1.0.0", + software_requirements=[Software(name="NonExistingApp", version="1.0.0")], execution_command="%executable%", max_execution_time=10.0, execution_level=0, @@ -156,11 +153,10 @@ def test_job_sync(self): self.assertEqual(len(tasks), 1) self.assertEqual(tasks[0].eval_status, "pending") - # add a second process step + # add a second task task_def_2 = TaskDefinition( name="Task.2", - application_name="NonExistingApp", - application_version="1.0.0", + software_requirements=[Software(name="NonExistingApp", version="1.0.0")], execution_command="%executable%", max_execution_time=10.0, execution_level=1, @@ -171,7 +167,7 @@ def test_job_sync(self): job_def.task_definition_ids.append(task_def_2.id) job_def = project_api.update_job_definitions([job_def])[0] - # sync design points individually + # sync jobs individually jobs = project_api.get_jobs() project_api._sync_jobs(jobs) @@ -201,8 +197,7 @@ def test_job_sync(self): # add a third process step task_def_3 = TaskDefinition( name="Task.3", - application_name="NonExistingApp", - application_version="1.0.0", + software_requirements=[Software(name="NonExistingApp", version="1.0.0")], execution_command="%executable%", max_execution_time=10.0, execution_level=0,