11from dataclasses import dataclass
22from enum import Enum
3- from typing import Any , List , Set , Tuple , Union , TypeVar
3+ from typing import Any , List , Set , Tuple , Union , TypeVar , Iterable
44from unittest .mock import Base
55
66from feast .base_feature_view import BaseFeatureView
99from feast .feature_table import FeatureTable
1010from feast .feature_view import FeatureView
1111from feast .on_demand_feature_view import OnDemandFeatureView
12+ from feast .protos .feast .core .Entity_pb2 import Entity as EntityProto
13+ from feast .protos .feast .core .FeatureView_pb2 import FeatureView as FeatureViewProto
1214from feast .request_feature_view import RequestFeatureView
1315
1416
@@ -35,6 +37,7 @@ class FcoDiff:
3537 transition_type : TransitionType
3638
3739
40+ @dataclass
3841class RegistryDiff :
3942 fco_diffs : List [FcoDiff ]
4043
@@ -49,8 +52,8 @@ def add_fco_diff(self, fco_diff: FcoDiff):
4952
5053
5154def tag_objects_for_keep_delete_add (
52- existing_objs : Set [T ], desired_objs : Set [T ]
53- ) -> Tuple [Set [T ], Set [T ], Set [T ]]:
55+ existing_objs : Iterable [T ], desired_objs : Iterable [T ]
56+ ) -> Tuple [Iterable [T ], Iterable [T ], Iterable [T ]]:
5457 existing_obj_names = {e .name for e in existing_objs }
5558 desired_obj_names = {e .name for e in desired_objs }
5659
@@ -63,3 +66,23 @@ def tag_objects_for_keep_delete_add(
6366 }
6467
6568 return objs_to_keep , objs_to_delete , objs_to_add
69+
70+
71+ U = TypeVar ('U' , EntityProto , FeatureViewProto )
72+
73+
74+ def tag_proto_objects_for_keep_delete_add (
75+ existing_objs : Iterable [U ], desired_objs : Iterable [U ]
76+ ) -> Tuple [Iterable [U ], Iterable [U ], Iterable [U ]]:
77+ existing_obj_names = {e .spec .name for e in existing_objs }
78+ desired_obj_names = {e .spec .name for e in desired_objs }
79+
80+ objs_to_add = [
81+ e for e in desired_objs if e .spec .name not in existing_obj_names
82+ ]
83+ objs_to_keep = [e for e in desired_objs if e .spec .name in existing_obj_names ]
84+ objs_to_delete = [
85+ e for e in existing_objs if e .spec .name not in desired_obj_names
86+ ]
87+
88+ return objs_to_keep , objs_to_delete , objs_to_add
0 commit comments