Skip to content

Commit 5e7500b

Browse files
committed
Fix content type corner case and add resource client methods
1 parent ef4a25a commit 5e7500b

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

ansible_base/rbac/models/content_type.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ def get_by_natural_key(self, *args: str) -> "DABContentType":
141141
service = get_local_resource_prefix()
142142
app_label, model = args
143143
kwargs = {'service__in': [get_local_resource_prefix(), 'shared'], 'app_label': app_label, 'model': model}
144+
# This ask here is actually ambiguous, so we try this extra lookup
145+
shared_key = ('shared', app_label, model)
146+
if ('shared', app_label, model) in self._cache[self.db]:
147+
return self._cache[self.db][shared_key]
144148
else:
145149
service, app_label, model = args
146150
kwargs = {'service': service, 'app_label': app_label, 'model': model}

ansible_base/resource_registry/rest_client.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,10 @@ def list_resource_types(self, filters: Optional[dict] = None):
159159

160160
def get_resource_type_manifest(self, name, filters: Optional[dict] = None):
161161
return self._make_request("get", f"resource-types/{name}/manifest/", params=filters, stream=True)
162+
163+
# RBAC related methods
164+
def list_role_types(self, filters: Optional[dict] = None):
165+
return self._make_request("get", "role-types/", params=filters)
166+
167+
def list_role_permissions(self, filters: Optional[dict] = None):
168+
return self._make_request("get", "role-permissions/", params=filters)

test_app/tests/resource_registry/test_resources_api_rest_client.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,22 @@ def test_list_resource_types(resource_client):
156156
assert resp.json()["results"][0]["name"] == "shared.organization"
157157

158158

159+
@pytest.mark.django_db
160+
def test_list_role_types(resource_client):
161+
resp = resource_client.list_role_types(filters={"api_slug": "shared.organization"})
162+
assert resp.status_code == 200
163+
assert resp.json()["count"] == 1
164+
assert resp.json()["results"][0]["api_slug"] == "shared.organization"
165+
166+
167+
@pytest.mark.django_db
168+
def test_list_role_permissions(resource_client):
169+
resp = resource_client.list_role_permissions(filters={"api_slug": "shared.view_organization"})
170+
assert resp.status_code == 200
171+
assert resp.json()["count"] == 1
172+
assert resp.json()["results"][0]["api_slug"] == "shared.view_organization"
173+
174+
159175
@pytest.mark.django_db
160176
def test_get_resource_404(resource_client):
161177
resource_client.raise_if_bad_request = True

0 commit comments

Comments
 (0)