forked from feast-dev/feast
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrequest_feature_view.py
More file actions
91 lines (74 loc) · 2.88 KB
/
request_feature_view.py
File metadata and controls
91 lines (74 loc) · 2.88 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
import copy
from typing import Type
from feast.base_feature_view import BaseFeatureView
from feast.data_source import RequestDataSource
from feast.feature import Feature
from feast.feature_view_projection import FeatureViewProjection
from feast.protos.feast.core.RequestFeatureView_pb2 import (
RequestFeatureView as RequestFeatureViewProto,
)
from feast.protos.feast.core.RequestFeatureView_pb2 import RequestFeatureViewSpec
from feast.usage import log_exceptions
class RequestFeatureView(BaseFeatureView):
"""
[Experimental] An RequestFeatureView defines a feature that is available from the inference request.
Args:
name: Name of the group of features.
request_data_source: Request data source that specifies the schema and features
"""
request_data_source: RequestDataSource
@log_exceptions
def __init__(
self, name: str, request_data_source: RequestDataSource,
):
"""
Creates an RequestFeatureView object.
"""
super().__init__(
name=name,
features=[
Feature(name=name, dtype=dtype)
for name, dtype in request_data_source.schema.items()
],
)
self.request_data_source = request_data_source
@property
def proto_class(self) -> Type[RequestFeatureViewProto]:
return RequestFeatureViewProto
def to_proto(self) -> RequestFeatureViewProto:
"""
Converts an request feature view object to its protobuf representation.
Returns:
A RequestFeatureViewProto protobuf.
"""
spec = RequestFeatureViewSpec(
name=self.name, request_data_source=self.request_data_source.to_proto()
)
return RequestFeatureViewProto(spec=spec)
@classmethod
def from_proto(cls, request_feature_view_proto: RequestFeatureViewProto):
"""
Creates a request feature view from a protobuf representation.
Args:
request_feature_view_proto: A protobuf representation of an request feature view.
Returns:
A RequestFeatureView object based on the request feature view protobuf.
"""
request_feature_view_obj = cls(
name=request_feature_view_proto.spec.name,
request_data_source=RequestDataSource.from_proto(
request_feature_view_proto.spec.request_data_source
),
)
# FeatureViewProjections are not saved in the RequestFeatureView proto.
# Create the default projection.
request_feature_view_obj.projection = FeatureViewProjection.from_definition(
request_feature_view_obj
)
return request_feature_view_obj
def __copy__(self):
fv = RequestFeatureView(
name=self.name, request_data_source=self.request_data_source
)
fv.projection = copy.copy(self.projection)
return fv