List all features in the registry, optionally filtered by project, feature_view, or name.
(self, request: RegistryServer_pb2.ListFeaturesRequest, context)
| 1229 | return Empty() |
| 1230 | |
| 1231 | def ListFeatures(self, request: RegistryServer_pb2.ListFeaturesRequest, context): |
| 1232 | """ |
| 1233 | List all features in the registry, optionally filtered by project, feature_view, or name. |
| 1234 | """ |
| 1235 | from feast.labeling.label_view import LabelView |
| 1236 | |
| 1237 | allow_cache = request.allow_cache if hasattr(request, "allow_cache") else True |
| 1238 | feature_views = self.proxied_registry.list_all_feature_views( |
| 1239 | project=request.project, |
| 1240 | allow_cache=allow_cache, |
| 1241 | skip_udf=True, |
| 1242 | ) |
| 1243 | permitted_fvs = permitted_resources( |
| 1244 | resources=cast(list[FeastObject], feature_views), |
| 1245 | actions=AuthzedAction.DESCRIBE, |
| 1246 | ) |
| 1247 | requested_kind = ( |
| 1248 | request.kind if hasattr(request, "kind") and request.kind else "" |
| 1249 | ) |
| 1250 | features = [] |
| 1251 | for fv in permitted_fvs: |
| 1252 | fv_name = getattr(fv, "name", None) |
| 1253 | kind = "label" if isinstance(fv, LabelView) else "feature" |
| 1254 | if requested_kind and kind != requested_kind: |
| 1255 | continue |
| 1256 | for feature in getattr(fv, "features", []): |
| 1257 | if request.feature_view and fv_name != request.feature_view: |
| 1258 | continue |
| 1259 | if request.name and feature.name != request.name: |
| 1260 | continue |
| 1261 | owner = "" |
| 1262 | created_timestamp = None |
| 1263 | last_updated_timestamp = None |
| 1264 | |
| 1265 | if hasattr(fv, "spec") and hasattr(fv.spec, "owner"): |
| 1266 | owner = getattr(fv.spec, "owner", "") |
| 1267 | |
| 1268 | if hasattr(fv, "meta"): |
| 1269 | if hasattr(fv.meta, "created_timestamp"): |
| 1270 | created_timestamp = fv.meta.created_timestamp |
| 1271 | if hasattr(fv.meta, "last_updated_timestamp"): |
| 1272 | last_updated_timestamp = fv.meta.last_updated_timestamp |
| 1273 | |
| 1274 | features.append( |
| 1275 | Feature( |
| 1276 | name=feature.name, |
| 1277 | feature_view=fv_name if fv_name is not None else "", |
| 1278 | type=str(feature.dtype) |
| 1279 | if hasattr(feature, "dtype") |
| 1280 | else str(feature.valueType), |
| 1281 | description=getattr(feature, "description", ""), |
| 1282 | owner=owner, |
| 1283 | created_timestamp=created_timestamp, |
| 1284 | last_updated_timestamp=last_updated_timestamp, |
| 1285 | tags=getattr(feature, "tags", {}), |
| 1286 | kind=kind, |
| 1287 | ) |
| 1288 | ) |
nothing calls this directly
no test coverage detected