Skip to content

Commit 07eb706

Browse files
authored
feat(iam): add logs listing method (#348)
1 parent 1a456af commit 07eb706

File tree

8 files changed

+664
-0
lines changed

8 files changed

+664
-0
lines changed

scaleway-async/scaleway_async/iam/v1alpha1/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
from .types import ListApplicationsRequestOrderBy
66
from .types import ListGroupsRequestOrderBy
77
from .types import ListJWTsRequestOrderBy
8+
from .types import ListLogsRequestOrderBy
89
from .types import ListPermissionSetsRequestOrderBy
910
from .types import ListPoliciesRequestOrderBy
1011
from .types import ListQuotaRequestOrderBy
1112
from .types import ListSSHKeysRequestOrderBy
1213
from .types import ListUsersRequestOrderBy
14+
from .types import LogAction
15+
from .types import LogResourceType
1316
from .types import PermissionSetScopeType
1417
from .types import UserStatus
1518
from .types import UserType
@@ -21,12 +24,14 @@
2124
from .types import ListApplicationsResponse
2225
from .types import ListGroupsResponse
2326
from .types import ListJWTsResponse
27+
from .types import ListLogsResponse
2428
from .types import ListPermissionSetsResponse
2529
from .types import ListPoliciesResponse
2630
from .types import ListQuotaResponse
2731
from .types import ListRulesResponse
2832
from .types import ListSSHKeysResponse
2933
from .types import ListUsersResponse
34+
from .types import Log
3035
from .types import PermissionSet
3136
from .types import Policy
3237
from .types import Quotum
@@ -43,11 +48,14 @@
4348
"ListApplicationsRequestOrderBy",
4449
"ListGroupsRequestOrderBy",
4550
"ListJWTsRequestOrderBy",
51+
"ListLogsRequestOrderBy",
4652
"ListPermissionSetsRequestOrderBy",
4753
"ListPoliciesRequestOrderBy",
4854
"ListQuotaRequestOrderBy",
4955
"ListSSHKeysRequestOrderBy",
5056
"ListUsersRequestOrderBy",
57+
"LogAction",
58+
"LogResourceType",
5159
"PermissionSetScopeType",
5260
"UserStatus",
5361
"UserType",
@@ -59,12 +67,14 @@
5967
"ListApplicationsResponse",
6068
"ListGroupsResponse",
6169
"ListJWTsResponse",
70+
"ListLogsResponse",
6271
"ListPermissionSetsResponse",
6372
"ListPoliciesResponse",
6473
"ListQuotaResponse",
6574
"ListRulesResponse",
6675
"ListSSHKeysResponse",
6776
"ListUsersResponse",
77+
"Log",
6878
"PermissionSet",
6979
"Policy",
7080
"Quotum",

scaleway-async/scaleway_async/iam/v1alpha1/api.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818
ListApplicationsRequestOrderBy,
1919
ListGroupsRequestOrderBy,
2020
ListJWTsRequestOrderBy,
21+
ListLogsRequestOrderBy,
2122
ListPermissionSetsRequestOrderBy,
2223
ListPoliciesRequestOrderBy,
2324
ListQuotaRequestOrderBy,
2425
ListSSHKeysRequestOrderBy,
2526
ListUsersRequestOrderBy,
27+
LogAction,
28+
LogResourceType,
2629
APIKey,
2730
Application,
2831
Group,
@@ -31,12 +34,14 @@
3134
ListApplicationsResponse,
3235
ListGroupsResponse,
3336
ListJWTsResponse,
37+
ListLogsResponse,
3438
ListPermissionSetsResponse,
3539
ListPoliciesResponse,
3640
ListQuotaResponse,
3741
ListRulesResponse,
3842
ListSSHKeysResponse,
3943
ListUsersResponse,
44+
Log,
4045
PermissionSet,
4146
Policy,
4247
Quotum,
@@ -83,6 +88,7 @@
8388
unmarshal_Application,
8489
unmarshal_Group,
8590
unmarshal_JWT,
91+
unmarshal_Log,
8692
unmarshal_Policy,
8793
unmarshal_Quotum,
8894
unmarshal_SSHKey,
@@ -91,6 +97,7 @@
9197
unmarshal_ListApplicationsResponse,
9298
unmarshal_ListGroupsResponse,
9399
unmarshal_ListJWTsResponse,
100+
unmarshal_ListLogsResponse,
94101
unmarshal_ListPermissionSetsResponse,
95102
unmarshal_ListPoliciesResponse,
96103
unmarshal_ListQuotaResponse,
@@ -2102,3 +2109,106 @@ async def delete_jwt(
21022109

21032110
self._throw_on_error(res)
21042111
return None
2112+
2113+
async def list_logs(
2114+
self,
2115+
*,
2116+
order_by: ListLogsRequestOrderBy = ListLogsRequestOrderBy.CREATED_AT_ASC,
2117+
organization_id: Optional[str] = None,
2118+
page_size: Optional[int] = None,
2119+
page: Optional[int] = None,
2120+
created_after: Optional[datetime] = None,
2121+
created_before: Optional[datetime] = None,
2122+
action: LogAction = LogAction.UNKNOWN_ACTION,
2123+
resource_type: LogResourceType = LogResourceType.UNKNOWN_RESOURCE_TYPE,
2124+
search: Optional[str] = None,
2125+
) -> ListLogsResponse:
2126+
"""
2127+
2128+
Usage:
2129+
::
2130+
2131+
result = await api.list_logs()
2132+
"""
2133+
2134+
res = self._request(
2135+
"GET",
2136+
f"/iam/v1alpha1/logs",
2137+
params={
2138+
"action": action,
2139+
"created_after": created_after,
2140+
"created_before": created_before,
2141+
"order_by": order_by,
2142+
"organization_id": organization_id
2143+
or self.client.default_organization_id,
2144+
"page": page,
2145+
"page_size": page_size or self.client.default_page_size,
2146+
"resource_type": resource_type,
2147+
"search": search,
2148+
},
2149+
)
2150+
2151+
self._throw_on_error(res)
2152+
return unmarshal_ListLogsResponse(res.json())
2153+
2154+
async def list_logs_all(
2155+
self,
2156+
*,
2157+
order_by: Optional[ListLogsRequestOrderBy] = None,
2158+
organization_id: Optional[str] = None,
2159+
page_size: Optional[int] = None,
2160+
page: Optional[int] = None,
2161+
created_after: Optional[datetime] = None,
2162+
created_before: Optional[datetime] = None,
2163+
action: Optional[LogAction] = None,
2164+
resource_type: Optional[LogResourceType] = None,
2165+
search: Optional[str] = None,
2166+
) -> List[Log]:
2167+
"""
2168+
:return: :class:`List[ListLogsResponse] <List[ListLogsResponse]>`
2169+
2170+
Usage:
2171+
::
2172+
2173+
result = await api.list_logs_all()
2174+
"""
2175+
2176+
return await fetch_all_pages_async(
2177+
type=ListLogsResponse,
2178+
key="logs",
2179+
fetcher=self.list_logs,
2180+
args={
2181+
"order_by": order_by,
2182+
"organization_id": organization_id,
2183+
"page_size": page_size,
2184+
"page": page,
2185+
"created_after": created_after,
2186+
"created_before": created_before,
2187+
"action": action,
2188+
"resource_type": resource_type,
2189+
"search": search,
2190+
},
2191+
)
2192+
2193+
async def get_log(
2194+
self,
2195+
*,
2196+
log_id: str,
2197+
) -> Log:
2198+
"""
2199+
2200+
Usage:
2201+
::
2202+
2203+
result = await api.get_log(log_id="example")
2204+
"""
2205+
2206+
param_log_id = validate_path_param("log_id", log_id)
2207+
2208+
res = self._request(
2209+
"GET",
2210+
f"/iam/v1alpha1/logs/{param_log_id}",
2211+
)
2212+
2213+
self._throw_on_error(res)
2214+
return unmarshal_Log(res.json())

scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
ListApplicationsResponse,
1919
ListGroupsResponse,
2020
ListJWTsResponse,
21+
ListLogsResponse,
2122
ListPermissionSetsResponse,
2223
ListPoliciesResponse,
2324
ListQuotaResponse,
2425
ListRulesResponse,
2526
ListSSHKeysResponse,
2627
ListUsersResponse,
28+
Log,
2729
PermissionSet,
2830
Policy,
2931
Quotum,
@@ -200,6 +202,44 @@ def unmarshal_JWT(data: Any) -> JWT:
200202
return JWT(**args)
201203

202204

205+
def unmarshal_Log(data: Any) -> Log:
206+
if type(data) is not dict:
207+
raise TypeError(
208+
f"Unmarshalling the type 'Log' failed as data isn't a dictionary."
209+
)
210+
211+
args: Dict[str, Any] = {}
212+
213+
field = data.get("action", None)
214+
args["action"] = field
215+
216+
field = data.get("bearer_id", None)
217+
args["bearer_id"] = field
218+
219+
field = data.get("created_at", None)
220+
args["created_at"] = parser.isoparse(field) if type(field) is str else field
221+
222+
field = data.get("id", None)
223+
args["id"] = field
224+
225+
field = data.get("ip", None)
226+
args["ip"] = field
227+
228+
field = data.get("organization_id", None)
229+
args["organization_id"] = field
230+
231+
field = data.get("resource_id", None)
232+
args["resource_id"] = field
233+
234+
field = data.get("resource_type", None)
235+
args["resource_type"] = field
236+
237+
field = data.get("user_agent", None)
238+
args["user_agent"] = field
239+
240+
return Log(**args)
241+
242+
203243
def unmarshal_PermissionSet(data: Any) -> PermissionSet:
204244
if type(data) is not dict:
205245
raise TypeError(
@@ -485,6 +525,23 @@ def unmarshal_ListJWTsResponse(data: Any) -> ListJWTsResponse:
485525
return ListJWTsResponse(**args)
486526

487527

528+
def unmarshal_ListLogsResponse(data: Any) -> ListLogsResponse:
529+
if type(data) is not dict:
530+
raise TypeError(
531+
f"Unmarshalling the type 'ListLogsResponse' failed as data isn't a dictionary."
532+
)
533+
534+
args: Dict[str, Any] = {}
535+
536+
field = data.get("logs", None)
537+
args["logs"] = [unmarshal_Log(v) for v in field] if field is not None else None
538+
539+
field = data.get("total_count", None)
540+
args["total_count"] = field
541+
542+
return ListLogsResponse(**args)
543+
544+
488545
def unmarshal_ListPermissionSetsResponse(data: Any) -> ListPermissionSetsResponse:
489546
if type(data) is not dict:
490547
raise TypeError(

0 commit comments

Comments
 (0)