Skip to content

Commit dfb029d

Browse files
author
Tsotne Tabidze
authored
Add datastore namespace option in configs (#1581)
Signed-off-by: Tsotne Tabidze <tsotne@tecton.ai>
1 parent 6e243b8 commit dfb029d

3 files changed

Lines changed: 17 additions & 11 deletions

File tree

sdk/python/feast/infra/gcp.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,21 @@
3636

3737
class GcpProvider(Provider):
3838
_gcp_project_id: Optional[str]
39+
_namespace: Optional[str]
3940

4041
def __init__(self, config: RepoConfig):
4142
assert isinstance(config.online_store, DatastoreOnlineStoreConfig)
42-
assert config.offline_store is not None
43-
if config and config.online_store and config.online_store.project_id:
44-
self._gcp_project_id = config.online_store.project_id
45-
else:
46-
self._gcp_project_id = None
43+
self._gcp_project_id = config.online_store.project_id
44+
self._namespace = config.online_store.namespace
4745

46+
assert config.offline_store is not None
4847
self.offline_store = get_offline_store_from_config(config.offline_store)
4948

5049
def _initialize_client(self):
5150
try:
52-
if self._gcp_project_id is not None:
53-
return datastore.Client(self._gcp_project_id)
54-
else:
55-
return datastore.Client()
51+
return datastore.Client(
52+
project=self._gcp_project_id, namespace=self._namespace
53+
)
5654
except DefaultCredentialsError as e:
5755
raise FeastProviderLoginError(
5856
str(e)

sdk/python/feast/repo_config.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class DatastoreOnlineStoreConfig(FeastBaseModel):
3535
project_id: Optional[StrictStr] = None
3636
""" (optional) GCP Project Id """
3737

38+
namespace: Optional[StrictStr] = None
39+
""" (optional) Datastore namespace """
40+
3841

3942
OnlineStoreConfig = Union[DatastoreOnlineStoreConfig, SqliteOnlineStoreConfig]
4043

@@ -138,7 +141,7 @@ def _validate_online_store_config(cls, values):
138141
elif online_store_type == "datastore":
139142
DatastoreOnlineStoreConfig(**values["online_store"])
140143
else:
141-
raise ValidationError(f"Invalid online store type {online_store_type}")
144+
raise ValueError(f"Invalid online store type {online_store_type}")
142145
except ValidationError as e:
143146
raise ValidationError(
144147
[ErrorWrapper(e, loc="online_store")], model=SqliteOnlineStoreConfig,

sdk/python/tests/test_offline_online_store_consistency.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717
from feast.feature import Feature
1818
from feast.feature_store import FeatureStore
1919
from feast.feature_view import FeatureView
20-
from feast.repo_config import RepoConfig, SqliteOnlineStoreConfig
20+
from feast.repo_config import (
21+
DatastoreOnlineStoreConfig,
22+
RepoConfig,
23+
SqliteOnlineStoreConfig,
24+
)
2125
from feast.value_type import ValueType
2226

2327

@@ -98,6 +102,7 @@ def prep_bq_fs_and_fv(
98102
registry=str(Path(repo_dir_name) / "registry.db"),
99103
project=f"test_bq_correctness_{str(uuid.uuid4()).replace('-', '')}",
100104
provider="gcp",
105+
online_store=DatastoreOnlineStoreConfig(namespace="integration_test"),
101106
)
102107
fs = FeatureStore(config=config)
103108
fs.apply([fv, e])

0 commit comments

Comments
 (0)