1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414import logging
15- import uuid
1615from datetime import datetime , timedelta
1716from enum import Enum
1817from pathlib import Path
4443from feast .infra .registry .registry_store import NoopRegistryStore
4544from feast .on_demand_feature_view import OnDemandFeatureView
4645from feast .project_metadata import ProjectMetadata
47- from feast .protos .feast .core .Registry_pb2 import ProjectMetadata as ProjectMetadataProto
4846from feast .protos .feast .core .Registry_pb2 import Registry as RegistryProto
4947from feast .repo_config import RegistryConfig
5048from feast .repo_contents import RepoContents
@@ -143,25 +141,6 @@ def get_registry_store_class_from_scheme(registry_path: str):
143141 return get_registry_store_class_from_type (registry_store_type )
144142
145143
146- def _get_project_metadata (
147- registry_proto : Optional [RegistryProto ], project : str
148- ) -> Optional [ProjectMetadataProto ]:
149- if not registry_proto :
150- return None
151- for pm in registry_proto .project_metadata :
152- if pm .project == project :
153- return pm
154- return None
155-
156-
157- def _init_project_metadata (cached_registry_proto : RegistryProto , project : str ):
158- new_project_uuid = f"{ uuid .uuid4 ()} "
159- usage .set_current_project_uuid (new_project_uuid )
160- cached_registry_proto .project_metadata .append (
161- ProjectMetadata (project_name = project , project_uuid = new_project_uuid ).to_proto ()
162- )
163-
164-
165144class Registry (BaseRegistry ):
166145 def apply_user_metadata (
167146 self ,
@@ -184,19 +163,25 @@ def get_user_metadata(
184163 cached_registry_proto_ttl : timedelta
185164
186165 def __new__ (
187- cls , registry_config : Optional [RegistryConfig ], repo_path : Optional [Path ]
166+ cls ,
167+ project : str ,
168+ registry_config : Optional [RegistryConfig ],
169+ repo_path : Optional [Path ],
188170 ):
189171 # We override __new__ so that we can inspect registry_config and create a SqlRegistry without callers
190172 # needing to make any changes.
191173 if registry_config and registry_config .registry_type == "sql" :
192174 from feast .infra .registry .sql import SqlRegistry
193175
194- return SqlRegistry (registry_config , repo_path )
176+ return SqlRegistry (registry_config , project , repo_path )
195177 else :
196178 return super (Registry , cls ).__new__ (cls )
197179
198180 def __init__ (
199- self , registry_config : Optional [RegistryConfig ], repo_path : Optional [Path ]
181+ self ,
182+ project : str ,
183+ registry_config : Optional [RegistryConfig ],
184+ repo_path : Optional [Path ],
200185 ):
201186 """
202187 Create the Registry object.
@@ -225,7 +210,7 @@ def __init__(
225210 )
226211
227212 def clone (self ) -> "Registry" :
228- new_registry = Registry (None , None )
213+ new_registry = Registry ("project" , None , None )
229214 new_registry .cached_registry_proto_ttl = timedelta (seconds = 0 )
230215 new_registry .cached_registry_proto = (
231216 self .cached_registry_proto .__deepcopy__ ()
@@ -243,7 +228,7 @@ def _initialize_registry(self, project: str):
243228 except FileNotFoundError :
244229 registry_proto = RegistryProto ()
245230 registry_proto .registry_schema_version = REGISTRY_SCHEMA_VERSION
246- _init_project_metadata (registry_proto , project )
231+ proto_registry_utils . init_project_metadata (registry_proto , project )
247232 self ._registry_store .update_registry_proto (registry_proto )
248233
249234 def update_infra (self , infra : Infra , project : str , commit : bool = True ):
@@ -791,7 +776,12 @@ def _prepare_registry_for_changes(self, project: str):
791776 """Prepares the Registry for changes by refreshing the cache if necessary."""
792777 try :
793778 self ._get_registry_proto (project = project , allow_cache = True )
794- if _get_project_metadata (self .cached_registry_proto , project ) is None :
779+ if (
780+ proto_registry_utils .get_project_metadata (
781+ self .cached_registry_proto , project
782+ )
783+ is None
784+ ):
795785 # Project metadata not initialized yet. Try pulling without cache
796786 self ._get_registry_proto (project = project , allow_cache = False )
797787 except FileNotFoundError :
@@ -802,8 +792,15 @@ def _prepare_registry_for_changes(self, project: str):
802792
803793 # Initialize project metadata if needed
804794 assert self .cached_registry_proto
805- if _get_project_metadata (self .cached_registry_proto , project ) is None :
806- _init_project_metadata (self .cached_registry_proto , project )
795+ if (
796+ proto_registry_utils .get_project_metadata (
797+ self .cached_registry_proto , project
798+ )
799+ is None
800+ ):
801+ proto_registry_utils .init_project_metadata (
802+ self .cached_registry_proto , project
803+ )
807804 self .commit ()
808805
809806 return self .cached_registry_proto
@@ -836,7 +833,7 @@ def _get_registry_proto(
836833 )
837834
838835 if project :
839- old_project_metadata = _get_project_metadata (
836+ old_project_metadata = proto_registry_utils . get_project_metadata (
840837 registry_proto = self .cached_registry_proto , project = project
841838 )
842839
@@ -854,13 +851,13 @@ def _get_registry_proto(
854851 if not project :
855852 return registry_proto
856853
857- project_metadata = _get_project_metadata (
854+ project_metadata = proto_registry_utils . get_project_metadata (
858855 registry_proto = registry_proto , project = project
859856 )
860857 if project_metadata :
861858 usage .set_current_project_uuid (project_metadata .project_uuid )
862859 else :
863- _init_project_metadata (registry_proto , project )
860+ proto_registry_utils . init_project_metadata (registry_proto , project )
864861 self .commit ()
865862
866863 return registry_proto
0 commit comments