Skip to content

Commits on Source 4

# [3.11.0](https://gitlab.ics.muni.cz/perun/perun-proxyidp/perun-connector/compare/v3.10.0...v3.11.0) (2024-07-11)
### Bug Fixes
* get single resource methods failing ([0856e55](https://gitlab.ics.muni.cz/perun/perun-proxyidp/perun-connector/commit/0856e5549054abf87d13437b97e01313062397a7))
### Features
* new method get_group_ids_for_resource ([cf200e3](https://gitlab.ics.muni.cz/perun/perun-proxyidp/perun-connector/commit/cf200e30b439f35f0cee9a5ddcb010a629d433a1))
# [3.10.0](https://gitlab.ics.muni.cz/perun/perun-proxyidp/perun-connector/compare/v3.9.0...v3.10.0) (2024-06-10)
......
......@@ -111,6 +111,8 @@ class AdapterInterface(metaclass=abc.ABCMeta):
and callable(subclass.get_facility_by_id)
and hasattr(subclass, "get_resources_for_facility")
and callable(subclass.get_resources_for_facility)
and hasattr(subclass, "get_group_ids_for_resource")
and callable(subclass.get_group_ids_for_resource)
and hasattr(subclass, "get_groups_for_resource")
and callable(subclass.get_groups_for_resource)
and hasattr(subclass, "get_resource_by_id")
......@@ -437,6 +439,10 @@ class AdapterInterface(metaclass=abc.ABCMeta):
) -> List[Resource]:
raise NotImplementedError
@abc.abstractmethod
def get_group_ids_for_resource(self, resource: Union[Resource, int]) -> List[int]:
raise NotImplementedError
@abc.abstractmethod
def get_groups_for_resource(
self, resource: Union[Resource, int], map_unique_name=True
......
......@@ -407,6 +407,9 @@ class AdaptersManager(AdapterInterface):
self._get_caller_name(), facility, map_vo
)
def get_group_ids_for_resource(self, resource: Union[Resource, int]) -> List[int]:
return self._execute_method_by_priority(self._get_caller_name(), resource)
def get_groups_for_resource(
self, resource: Union[Resource, int], map_unique_name=True
) -> List[Group]:
......
......@@ -178,7 +178,7 @@ class LdapAdapter(AdapterInterface):
return list(groups)
def __get_assigned_groups_ldap_resource(self, resource) -> List[Group]:
vo = self.get_vo(resource["perunVoId"])
vo = self.get_vo(vo_id=resource["perunVoId"])
unique_ids = []
groups = []
......@@ -264,7 +264,7 @@ class LdapAdapter(AdapterInterface):
)
return Facility(
ldap_result["perunFacilityId"],
int(ldap_result["perunFacilityId"]),
ldap_result["cn"][0],
ldap_result["description"][0],
rp_identifier,
......@@ -651,7 +651,7 @@ class LdapAdapter(AdapterInterface):
return [
Facility(
facility["perunFacilityId"],
int(facility["perunFacilityId"]),
facility["cn"][0],
facility["description"][0] if facility["description"] else "",
facility[rp_id_attr[0]] if rp_id_attr else "",
......@@ -698,7 +698,7 @@ class LdapAdapter(AdapterInterface):
facility_id = resource["perunFacilityDn"].split(",", 1)[0].split("=", 1)[1]
result.append(
Resource(
resource["perunResourceId"],
int(resource["perunResourceId"]),
self.get_vo(vo_id=resource["perunVoId"])
if fetch_related_vos
else None,
......@@ -732,7 +732,7 @@ class LdapAdapter(AdapterInterface):
)
return Facility(
facility["perunFacilityId"],
int(facility["perunFacilityId"]),
facility["cn"][0],
facility["description"][0] if facility["description"] else "",
facility[rp_id_attr[0]] if rp_id_attr else "",
......@@ -763,7 +763,7 @@ class LdapAdapter(AdapterInterface):
return [
Resource(
resource["perunResourceId"],
int(resource["perunResourceId"]),
self.get_vo(vo_id=resource["perunVoId"]),
facility,
resource["cn"],
......@@ -771,11 +771,25 @@ class LdapAdapter(AdapterInterface):
for resource in resources
]
def get_group_ids_for_resource(self, resource: Union[Resource, int]) -> List[int]:
resource_id = self.get_object_id(resource)
resource = self.connector.search_for_entity(
self._ldap_base,
"(&(objectClass=perunResource)(perunResourceId=" + str(resource_id) + "))",
["perunResourceId", "assignedGroupId", "perunVoId"],
)
if not resource:
raise LDAPNotExistsException(
"Resource with id: " + str(resource_id) + " not exists resource."
)
return resource.get("assignedGroupId", [])
def get_groups_for_resource(
self, resource: Union[Resource, int], map_unique_name=True
) -> List[Group]:
resource_id = self.get_object_id(resource)
resource = self.connector.search_for_entities(
resource = self.connector.search_for_entity(
self._ldap_base,
"(&(objectClass=perunResource)(perunResourceId=" + str(resource_id) + "))",
["perunResourceId", "assignedGroupId", "perunVoId"],
......@@ -790,7 +804,7 @@ class LdapAdapter(AdapterInterface):
def get_resource_by_id(
self, resource_id: int, map_vo=True, map_facility=True
) -> Resource:
resource = self.connector.search_for_entities(
resource = self.connector.search_for_entity(
self._ldap_base,
"(&(objectClass=perunResource)(perunResourceId=" + str(resource_id) + "))",
["perunResourceId", "cn", "perunVoId", "perunFacilityDn"],
......@@ -801,7 +815,7 @@ class LdapAdapter(AdapterInterface):
)
facility_id = resource["perunFacilityDn"].split(",", 1)[0].split("=", 1)[1]
return Resource(
resource["perunResourceId"],
int(resource["perunResourceId"]),
self.get_vo(vo_id=resource["perunVoId"]),
self.get_facility_by_id(facility_id),
resource["cn"],
......
......@@ -1044,6 +1044,18 @@ class PerunRpcAdapter(AdapterInterface):
for resource in resources
]
def get_group_ids_for_resource(self, resource: Union[Resource, int]) -> List[int]:
with ApiClient(self._CONFIG, cookie=self.cookie) as api_client:
resource_id = self.get_object_id(resource)
groups = self._call_api(
ResourcesManagerApi(api_client).get_assigned_groups,
{"resource": resource_id},
)
result = set()
for group in groups:
result.add(group["id"])
return list(result)
def get_groups_for_resource(
self, resource: Union[Resource, int], map_unique_name=True
) -> List[Group]:
......
[metadata]
version = 3.10.0
version = 3.11.0
license_files = LICENSE