Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ansys/rep/client/jms/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
JobSelection,
Licensing,
ParameterMapping,
Permission,
Project,
ProjectPermission,
ResourceRequirements,
Software,
StringParameterDefinition,
Expand Down
38 changes: 34 additions & 4 deletions ansys/rep/client/jms/api/jms_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@

from ansys.rep.client.client import Client
from ansys.rep.client.exceptions import REPError
from ansys.rep.client.jms.resource import (
Evaluator,
Operation,
Permission,
Project,
TaskDefinitionTemplate,
)
from ansys.rep.client.jms.schema.project import ProjectSchema

from ..resource import Operation
from ..resource.evaluator import Evaluator
from ..resource.project import Project, ProjectSchema
from ..resource.task_definition_template import TaskDefinitionTemplate
from .base import create_objects, delete_objects, get_object, get_objects, update_objects

log = logging.getLogger(__name__)
Expand Down Expand Up @@ -153,6 +157,32 @@ def delete_task_definition_templates(self, templates: List[TaskDefinitionTemplat
"""
return delete_objects(self.client.session, self.url, templates)

# Task Definition Template Permissions
def get_task_definition_template_permissions(
self, template_id: str, as_objects: bool = True
) -> List[Permission]:
"""Get permissions of a task definition template"""
return get_objects(
self.client.session,
f"{self.url}/task_definition_templates/{template_id}",
Permission,
as_objects,
)

def update_task_definition_template_permissions(
self,
template_id: str,
permissions: List[Permission],
as_objects: bool = True,
) -> List[Permission]:
"""Update permissions of a task definition template"""
return update_objects(
self.client.session,
f"{self.url}/task_definition_templates/{template_id}",
permissions,
as_objects,
)

################################################################
# Operations
def get_operations(self, as_objects=True, **query_params) -> List[Operation]:
Expand Down
49 changes: 19 additions & 30 deletions ansys/rep/client/jms/api/project_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,22 @@
from ansys.rep.client.client import Client
from ansys.rep.client.common import Object
from ansys.rep.client.exceptions import ClientError, REPError
from ansys.rep.client.jms.resource import (
Algorithm,
File,
Job,
JobDefinition,
JobSelection,
LicenseContext,
ParameterDefinition,
ParameterMapping,
Permission,
Project,
Task,
TaskDefinition,
)
from ansys.rep.client.jms.schema.job import JobSchema

from ..resource.algorithm import Algorithm
from ..resource.file import File
from ..resource.job import Job, JobSchema
from ..resource.job_definition import JobDefinition
from ..resource.license_context import LicenseContext
from ..resource.parameter_definition import ParameterDefinition
from ..resource.parameter_mapping import ParameterMapping
from ..resource.project import Project
from ..resource.project_permission import ProjectPermission, ProjectPermissionSchema
from ..resource.selection import JobSelection
from ..resource.task import Task
from ..resource.task_definition import TaskDefinition
from .base import create_objects, delete_objects, get_objects, update_objects
from .jms_api import JmsApi, _monitor_operation, get_project

Expand Down Expand Up @@ -331,12 +334,11 @@ def delete_algorithms(self, algorithms: List[Algorithm]):

################################################################
# Permissions
def get_permissions(self, as_objects=True) -> List[ProjectPermission]:
return self._get_objects(ProjectPermission, as_objects=as_objects)
def get_permissions(self, as_objects=True) -> List[Permission]:
return self._get_objects(Permission, as_objects=as_objects, fields=None)

def update_permissions(self, permissions: List[ProjectPermission]):
# the rest api currently doesn't return anything on permissions update
update_permissions(self.client, self.url, permissions)
def update_permissions(self, permissions: List[Permission], as_objects=True):
return self._update_objects(permissions, as_objects=as_objects)

################################################################
# License contexts
Expand Down Expand Up @@ -560,19 +562,6 @@ def sync_jobs(project_api: ProjectApi, jobs: List[Job]):
r = project_api.client.session.put(f"{url}", data=json_data)


def update_permissions(client, project_api_url, permissions):

if not permissions:
return

url = f"{project_api_url}/permissions"

schema = ProjectPermissionSchema(many=True)
serialized_data = schema.dump(permissions)
json_data = json.dumps({"permissions": serialized_data})
r = client.session.put(f"{url}", data=json_data)


@cached(cache=TTLCache(1024, 60), key=lambda project: project.id)
def get_fs_url(project: Project):
if project.file_storages == missing:
Expand Down
2 changes: 1 addition & 1 deletion ansys/rep/client/jms/resource/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
IntParameterDefinition, StringParameterDefinition, BoolParameterDefinition
from .parameter_mapping import ParameterMapping
from .project import Project
from .project_permission import ProjectPermission
from .permission import Permission
from .selection import JobSelection
from .task import Task
from .task_definition import Licensing, SuccessCriteria, Software, ResourceRequirements, TaskDefinition
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
# autogenerated code
from marshmallow.utils import missing
from ansys.rep.client.common import Object
from ..schema.project_permission import ProjectPermissionSchema
from ..schema.permission import PermissionSchema

class ProjectPermission(Object):
"""ProjectPermission resource.
class Permission(Object):
"""Permission resource.

Parameters
----------
permission_type : str
value_id : str
Either 'user', 'group', or 'anyone'.
value_id : str, optional
Can be the ID of a user or group.
value_name : str, optional
role : str
Either 'admin', 'writer', or 'reader'.

"""

class Meta:
schema = ProjectPermissionSchema
schema = PermissionSchema
rest_name = "permissions"

def __init__(self,
Expand All @@ -32,4 +35,4 @@ def __init__(self,

self.obj_type = self.__class__.__name__

ProjectPermissionSchema.Meta.object_class = ProjectPermission
PermissionSchema.Meta.object_class = Permission
19 changes: 19 additions & 0 deletions ansys/rep/client/jms/schema/permission.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from marshmallow import fields

from ansys.rep.client.common import BaseSchema


class PermissionSchema(BaseSchema):
class Meta(BaseSchema.Meta):
pass

permission_type = fields.String(
required=True, metadata={"description": "Either 'user', 'group', or 'anyone'."}
)
value_id = fields.String(
allow_none=True, metadata={"description": "Can be the ID of a user or group."}
)
value_name = fields.String(allow_none=True)
role = fields.String(
required=True, metadata={"description": "Either 'admin', 'writer', or 'reader'."}
)
21 changes: 0 additions & 21 deletions ansys/rep/client/jms/schema/project_permission.py

This file was deleted.

6 changes: 6 additions & 0 deletions doc/source/api/jms.rst
Original file line number Diff line number Diff line change
Expand Up @@ -144,4 +144,10 @@ Task Definition Template
:members:

.. autoclass:: ansys.rep.client.jms.TaskDefinitionTemplate
:members:

Permissions
^^^^^^^^^^^

.. autoclass:: ansys.rep.client.jms.Permission
:members:
2 changes: 1 addition & 1 deletion doc/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"sphinx.ext.napoleon",
"sphinx.ext.todo",
"sphinx.ext.extlinks",
# "sphinx.ext.viewcode", # to show pytho source code
# "sphinx.ext.viewcode", # to show python source code
"sphinxcontrib.httpdomain",
"sphinxcontrib.globalsubs",
"sphinx.ext.intersphinx",
Expand Down
8 changes: 4 additions & 4 deletions generate_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,12 @@
"resource_filename": "project",
},
{
"schema": "ProjectPermissionSchema",
"schema_filename": "project_permission",
"schema": "PermissionSchema",
"schema_filename": "permission",
"rest_name": "permissions",
"additional_fields": [],
"class": "ProjectPermission",
"resource_filename": "project_permission",
"class": "Permission",
"resource_filename": "permission",
},
{
"schema": "ResourceRequirementsSchema",
Expand Down
4 changes: 2 additions & 2 deletions prepare_documentation.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@
Licensing,
Operation,
ParameterMapping,
Permission,
Project,
ProjectPermission,
ResourceRequirements,
Software,
StringParameterDefinition,
Expand Down Expand Up @@ -66,7 +66,7 @@ def generate_openapi_specs():

for resource in [
Project,
ProjectPermission,
Permission,
LicenseContext,
Job,
Algorithm,
Expand Down
10 changes: 4 additions & 6 deletions tests/jms/test_project_permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from ansys.rep.client.auth import AuthApi, User
from ansys.rep.client.exceptions import ClientError
from ansys.rep.client.jms import JmsApi, ProjectApi
from ansys.rep.client.jms.resource import JobDefinition, Project, ProjectPermission
from ansys.rep.client.jms.resource import JobDefinition, Permission, Project
from tests.rep_test import REPTestCase

log = logging.getLogger(__name__)
Expand All @@ -31,12 +31,11 @@ def grant_permissions(project_api: ProjectApi, user):
permissions = project_api.get_permissions()
log.info(f"Permissions before: {permissions}")
permissions.append(
ProjectPermission(
Permission(
permission_type="user", value_name=user.username, role="writer", value_id=user.id
)
)
project_api.update_permissions(permissions)
permissions = project_api.get_permissions()
permissions = project_api.update_permissions(permissions)
log.info(f"Permissions after: {permissions}")


Expand All @@ -45,8 +44,7 @@ def remove_permissions(project_api: ProjectApi, user):
permissions = project_api.get_permissions()
log.info(f"Permissions before: {permissions}")
permissions = [p for p in permissions if p.value_name != user.username]
project_api.update_permissions(permissions)
permissions = project_api.get_permissions()
permissions = project_api.update_permissions(permissions)
log.info(f"Permissions after: {permissions}")


Expand Down
Loading