Skip to content

Commit 50288f0

Browse files
authored
Merge pull request #48 from bugout-dev/resource-permissions
Resource holder permissions handlers
2 parents 1bb26c5 + ac4f647 commit 50288f0

File tree

4 files changed

+107
-2
lines changed

4 files changed

+107
-2
lines changed

bugout/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
__email__ = "engineering@bugout.dev"
99
__license__ = "MIT"
10-
__version__ = "0.2.6"
10+
__version__ = "0.2.7"
1111

1212
__all__ = (
1313
"__author__",

bugout/app.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,39 @@ def delete_resource(
411411
self.resource.timeout = timeout
412412
return self.resource.delete_resource(token=token, resource_id=resource_id)
413413

414+
def get_resource_holders(
415+
self,
416+
token: Union[str, uuid.UUID],
417+
resource_id: Union[str, uuid.UUID],
418+
timeout: float = REQUESTS_TIMEOUT,
419+
) -> data.BugoutResourceHolders:
420+
self.resource.timeout = timeout
421+
return self.resource.get_resource_holders(token=token, resource_id=resource_id)
422+
423+
def add_resource_holder_permissions(
424+
self,
425+
token: Union[str, uuid.UUID],
426+
resource_id: Union[str, uuid.UUID],
427+
holder_permissions: data.BugoutResourceHolder,
428+
timeout: float = REQUESTS_TIMEOUT,
429+
) -> data.BugoutResourceHolders:
430+
self.resource.timeout = timeout
431+
return self.resource.add_resource_holder_permissions(
432+
token=token, resource_id=resource_id, holder_permissions=holder_permissions
433+
)
434+
435+
def delete_resource_holder_permissions(
436+
self,
437+
token: Union[str, uuid.UUID],
438+
resource_id: Union[str, uuid.UUID],
439+
holder_permissions: data.BugoutResourceHolder,
440+
timeout: float = REQUESTS_TIMEOUT,
441+
) -> data.BugoutResourceHolders:
442+
self.resource.timeout = timeout
443+
return self.resource.delete_resource_holder_permissions(
444+
token=token, resource_id=resource_id, holder_permissions=holder_permissions
445+
)
446+
414447
# Journal scopes handlers
415448
def list_scopes(
416449
self, token: Union[str, uuid.UUID], api: str, timeout: float = REQUESTS_TIMEOUT

bugout/data.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ class HolderType(Enum):
3333
group = "group"
3434

3535

36+
class ResourcePermissions(Enum):
37+
ADMIN = "admin"
38+
CREATE = "create"
39+
READ = "read"
40+
UPDATE = "update"
41+
DELETE = "delete"
42+
43+
3644
class AuthType(Enum):
3745
bearer = "Bearer"
3846
web3 = "Web3"
@@ -127,6 +135,22 @@ class BugoutResources(BaseModel):
127135
resources: List[BugoutResource]
128136

129137

138+
class BugoutResourceHolder(BaseModel):
139+
id: uuid.UUID = Field(alias="holder_id")
140+
holder_type: HolderType
141+
permissions: List[ResourcePermissions] = Field(default_factory=list)
142+
143+
class Config:
144+
# Required configuration because in Brood we use "holder_id" instead of "id"
145+
# during creation and deletion of new permissions for holder
146+
allow_population_by_field_name = True
147+
148+
149+
class BugoutResourceHolders(BaseModel):
150+
resource_id: uuid.UUID
151+
holders: List[BugoutResourceHolder] = Field(default_factory=list)
152+
153+
130154
class BugoutJournalPermission(BaseModel):
131155
holder_type: HolderType
132156
holder_id: str

bugout/resource.py

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22
from typing import Any, Dict, Optional, Union
33

44
from .calls import make_request
5-
from .data import BugoutResource, BugoutResources, Method
5+
from .data import (
6+
BugoutResource,
7+
BugoutResources,
8+
Method,
9+
BugoutResourceHolder,
10+
BugoutResourceHolders,
11+
)
612
from .exceptions import InvalidUrlSpec
713
from .settings import REQUESTS_TIMEOUT
814

@@ -99,3 +105,45 @@ def delete_resource(
99105
}
100106
result = self._call(method=Method.delete, path=resources_path, headers=headers)
101107
return BugoutResource(**result)
108+
109+
def get_resource_holders(
110+
self,
111+
token: Union[str, uuid.UUID],
112+
resource_id: Union[str, uuid.UUID],
113+
) -> BugoutResourceHolders:
114+
path = f"resources/{resource_id}/holders"
115+
headers = {
116+
"Authorization": f"Bearer {token}",
117+
}
118+
result = self._call(method=Method.get, path=path, headers=headers)
119+
return BugoutResourceHolders(**result)
120+
121+
def add_resource_holder_permissions(
122+
self,
123+
token: Union[str, uuid.UUID],
124+
resource_id: Union[str, uuid.UUID],
125+
holder_permissions: BugoutResourceHolder,
126+
) -> BugoutResourceHolders:
127+
path = f"resources/{resource_id}/holders"
128+
headers = {
129+
"Authorization": f"Bearer {token}",
130+
}
131+
result = self._call(
132+
method=Method.post, path=path, headers=headers, json=holder_permissions
133+
)
134+
return BugoutResourceHolders(**result)
135+
136+
def delete_resource_holder_permissions(
137+
self,
138+
token: Union[str, uuid.UUID],
139+
resource_id: Union[str, uuid.UUID],
140+
holder_permissions: BugoutResourceHolder,
141+
) -> BugoutResourceHolders:
142+
path = f"resources/{resource_id}/holders"
143+
headers = {
144+
"Authorization": f"Bearer {token}",
145+
}
146+
result = self._call(
147+
method=Method.delete, path=path, headers=headers, json=holder_permissions
148+
)
149+
return BugoutResourceHolders(**result)

0 commit comments

Comments
 (0)