Get a single feature by project, feature_view, and name.
(self, request: RegistryServer_pb2.GetFeatureRequest, context)
| 1296 | ) |
| 1297 | |
| 1298 | def GetFeature(self, request: RegistryServer_pb2.GetFeatureRequest, context): |
| 1299 | """ |
| 1300 | Get a single feature by project, feature_view, and name. |
| 1301 | """ |
| 1302 | from feast.labeling.label_view import LabelView |
| 1303 | |
| 1304 | allow_cache = getattr(request, "allow_cache", True) |
| 1305 | feature_views = self.proxied_registry.list_all_feature_views( |
| 1306 | project=request.project, |
| 1307 | allow_cache=allow_cache, |
| 1308 | ) |
| 1309 | permitted_fvs = permitted_resources( |
| 1310 | resources=cast(list[FeastObject], feature_views), |
| 1311 | actions=AuthzedAction.DESCRIBE, |
| 1312 | ) |
| 1313 | for fv in permitted_fvs: |
| 1314 | fv_name = getattr(fv, "name", None) |
| 1315 | for feature in getattr(fv, "features", []): |
| 1316 | if fv_name == request.feature_view and feature.name == request.name: |
| 1317 | owner = "" |
| 1318 | created_timestamp = None |
| 1319 | last_updated_timestamp = None |
| 1320 | |
| 1321 | if hasattr(fv, "spec") and hasattr(fv.spec, "owner"): |
| 1322 | owner = getattr(fv.spec, "owner", "") |
| 1323 | |
| 1324 | if hasattr(fv, "meta"): |
| 1325 | if hasattr(fv.meta, "created_timestamp"): |
| 1326 | created_timestamp = fv.meta.created_timestamp |
| 1327 | if hasattr(fv.meta, "last_updated_timestamp"): |
| 1328 | last_updated_timestamp = fv.meta.last_updated_timestamp |
| 1329 | |
| 1330 | return Feature( |
| 1331 | name=feature.name, |
| 1332 | feature_view=fv_name if fv_name is not None else "", |
| 1333 | type=str(feature.dtype) |
| 1334 | if hasattr(feature, "dtype") |
| 1335 | else str(feature.valueType), |
| 1336 | description=getattr(feature, "description", ""), |
| 1337 | owner=owner, |
| 1338 | created_timestamp=created_timestamp, |
| 1339 | last_updated_timestamp=last_updated_timestamp, |
| 1340 | tags=getattr(feature, "tags", {}), |
| 1341 | kind="label" if isinstance(fv, LabelView) else "feature", |
| 1342 | ) |
| 1343 | raise FeastObjectNotFoundException( |
| 1344 | f"Feature {request.name} not found in feature view {request.feature_view} in project {request.project}" |
| 1345 | ) |
| 1346 | |
| 1347 | |
| 1348 | def start_server( |
nothing calls this directly
no test coverage detected