-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathfeatures.py
More file actions
97 lines (90 loc) · 3.28 KB
/
features.py
File metadata and controls
97 lines (90 loc) · 3.28 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from fastapi import APIRouter, Depends, Query
from feast.api.registry.rest.rest_utils import (
aggregate_across_projects,
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_feature_router(grpc_handler) -> APIRouter:
router = APIRouter()
@router.get("/features")
def list_features(
project: str = Query(...),
feature_view: str = Query(None),
name: str = Query(None),
include_relationships: bool = Query(
False, description="Include relationships for each feature"
),
allow_cache: bool = Query(
True, description="Allow using cached registry data (default: true)"
),
pagination_params: dict = Depends(get_pagination_params),
sorting_params: dict = Depends(get_sorting_params),
):
req = RegistryServer_pb2.ListFeaturesRequest(
project=project,
feature_view=feature_view or "",
name=name or "",
allow_cache=allow_cache,
pagination=create_grpc_pagination_params(pagination_params),
sorting=create_grpc_sorting_params(sorting_params),
)
response = grpc_call(grpc_handler.ListFeatures, req)
if include_relationships:
relationships = get_relationships_for_objects(
grpc_handler, response["features"], "feature", project, allow_cache
)
response["relationships"] = relationships
return response
@router.get("/features/{feature_view}/{name}")
def get_feature(
feature_view: str,
name: str,
project: str = Query(...),
include_relationships: bool = Query(
False, description="Include relationships for this feature"
),
):
req = RegistryServer_pb2.GetFeatureRequest(
project=project,
feature_view=feature_view,
name=name,
)
response = grpc_call(grpc_handler.GetFeature, req)
if include_relationships:
response["relationships"] = get_object_relationships(
grpc_handler, "feature", name, project
)
return response
@router.get("/features/all")
def list_features_all(
page: int = Query(1, ge=1),
limit: int = Query(50, ge=1, le=100),
sort_by: str = Query(None),
sort_order: str = Query("asc"),
include_relationships: bool = Query(
False, description="Include relationships for each feature"
),
allow_cache: bool = Query(
True, description="Allow using cached registry data (default: true)"
),
):
return aggregate_across_projects(
grpc_handler=grpc_handler,
list_method=grpc_handler.ListFeatures,
request_cls=RegistryServer_pb2.ListFeaturesRequest,
response_key="features",
object_type="feature",
include_relationships=include_relationships,
allow_cache=allow_cache,
page=page,
limit=limit,
sort_by=sort_by,
sort_order=sort_order,
)
return router