-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathpermissions.py
More file actions
78 lines (66 loc) · 2.5 KB
/
permissions.py
File metadata and controls
78 lines (66 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from fastapi import APIRouter, Depends, Query
from feast.api.registry.rest.rest_utils import (
create_grpc_pagination_params,
create_grpc_sorting_params,
get_object_relationships,
get_pagination_params,
get_relationships_for_objects,
get_sorting_params,
grpc_call,
)
from feast.registry_server import RegistryServer_pb2
def get_permission_router(grpc_handler) -> APIRouter:
router = APIRouter()
@router.get("/permissions/{name}")
def get_permission(
name: str,
project: str = Query(...),
include_relationships: bool = Query(
False, description="Include relationships for this permission"
),
allow_cache: bool = Query(True),
):
req = RegistryServer_pb2.GetPermissionRequest(
name=name,
project=project,
allow_cache=allow_cache,
)
permission = grpc_call(grpc_handler.GetPermission, req)
result = permission
# Note: permissions may not have relationships in the traditional sense
# but we include the functionality for consistency
if include_relationships:
relationships = get_object_relationships(
grpc_handler, "permission", name, project, allow_cache
)
result["relationships"] = relationships
return result
@router.get("/permissions")
def list_permissions(
project: str = Query(...),
allow_cache: bool = Query(default=True),
include_relationships: bool = Query(
False, description="Include relationships for each permission"
),
pagination_params: dict = Depends(get_pagination_params),
sorting_params: dict = Depends(get_sorting_params),
):
req = RegistryServer_pb2.ListPermissionsRequest(
project=project,
allow_cache=allow_cache,
pagination=create_grpc_pagination_params(pagination_params),
sorting=create_grpc_sorting_params(sorting_params),
)
response = grpc_call(grpc_handler.ListPermissions, req)
permissions = response.get("permissions", [])
result = {
"permissions": permissions,
"pagination": response.get("pagination", {}),
}
if include_relationships:
relationships = get_relationships_for_objects(
grpc_handler, permissions, "permission", project, allow_cache
)
result["relationships"] = relationships
return result
return router