Skip to content

Commit 28e11eb

Browse files
author
Bhargav Dodla
committed
fix: Extend FeastError and fixed integration tests
Signed-off-by: Bhargav Dodla <bdodla@expediagroup.com>
1 parent 7aeeeac commit 28e11eb

File tree

7 files changed

+13
-71
lines changed

7 files changed

+13
-71
lines changed

sdk/python/feast/errors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ def __init__(self, name, project=None):
477477
super().__init__(f"Permission {name} does not exist")
478478

479479

480-
class ProjectNotFoundException(Exception):
480+
class ProjectNotFoundException(FeastError):
481481
def __init__(self, project):
482482
super().__init__(f"Project {project} does not exist in registry")
483483

sdk/python/feast/infra/online_stores/remote.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def online_read(
112112
result_tuples.append((event_ts, feature_values_dict))
113113
return result_tuples
114114
else:
115-
error_msg = f"Unable to retrieve the online store data using feature server API. Error_code={response.status_code}, error_message={response.reason}"
115+
error_msg = f"Unable to retrieve the online store data using feature server API. Error_code={response.status_code}, error_message={response.text}"
116116
logger.error(error_msg)
117117
raise RuntimeError(error_msg)
118118

sdk/python/feast/infra/registry/registry.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ def apply_data_source(
353353
self.commit()
354354

355355
def delete_data_source(self, name: str, project: str, commit: bool = True):
356-
self._get_registry_proto(project=project, allow_cache=False)
356+
self._prepare_registry_for_changes(project)
357357
assert self.cached_registry_proto
358358

359359
for idx, data_source_proto in enumerate(
@@ -617,7 +617,7 @@ def get_stream_feature_view(
617617
)
618618

619619
def delete_feature_service(self, name: str, project: str, commit: bool = True):
620-
self._get_registry_proto(project=project, allow_cache=False)
620+
self._prepare_registry_for_changes(project)
621621
assert self.cached_registry_proto
622622

623623
for idx, feature_service_proto in enumerate(
@@ -634,7 +634,7 @@ def delete_feature_service(self, name: str, project: str, commit: bool = True):
634634
raise FeatureServiceNotFoundException(name, project)
635635

636636
def delete_feature_view(self, name: str, project: str, commit: bool = True):
637-
self._get_registry_proto(project=project, allow_cache=False)
637+
self._prepare_registry_for_changes(project)
638638
assert self.cached_registry_proto
639639

640640
for idx, existing_feature_view_proto in enumerate(
@@ -676,7 +676,7 @@ def delete_feature_view(self, name: str, project: str, commit: bool = True):
676676
raise FeatureViewNotFoundException(name, project)
677677

678678
def delete_entity(self, name: str, project: str, commit: bool = True):
679-
self._get_registry_proto(project=project, allow_cache=False)
679+
self._prepare_registry_for_changes(project)
680680
assert self.cached_registry_proto
681681

682682
for idx, existing_entity_proto in enumerate(
@@ -801,15 +801,16 @@ def list_validation_references(
801801
)
802802

803803
def delete_validation_reference(self, name: str, project: str, commit: bool = True):
804-
registry_proto = self._get_registry_proto(project=project, allow_cache=False)
804+
self._prepare_registry_for_changes(project)
805+
assert self.cached_registry_proto
805806
for idx, existing_validation_reference in enumerate(
806-
registry_proto.validation_references
807+
self.cached_registry_proto.validation_references
807808
):
808809
if (
809810
existing_validation_reference.name == name
810811
and existing_validation_reference.project == project
811812
):
812-
del registry_proto.validation_references[idx]
813+
del self.cached_registry_proto.validation_references[idx]
813814
if commit:
814815
self.commit()
815816
return
@@ -968,7 +969,7 @@ def apply_permission(
968969
self.commit()
969970

970971
def delete_permission(self, name: str, project: str, commit: bool = True):
971-
self._get_registry_proto(project=project, allow_cache=False)
972+
self._prepare_registry_for_changes(project)
972973
assert self.cached_registry_proto
973974

974975
for idx, permission_proto in enumerate(self.cached_registry_proto.permissions):
@@ -1026,7 +1027,6 @@ def delete_project(
10261027
name: str,
10271028
commit: bool = True,
10281029
):
1029-
self._get_registry_proto(project=name, allow_cache=False)
10301030
assert self.cached_registry_proto
10311031

10321032
for idx, project_proto in enumerate(self.cached_registry_proto.projects):

sdk/python/feast/infra/registry/snowflake.py

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from datetime import datetime, timedelta, timezone
66
from enum import Enum
77
from threading import Lock
8-
from typing import Any, Callable, List, Literal, Optional, Set, Union
8+
from typing import Any, Callable, List, Literal, Optional, Union
99

1010
from pydantic import ConfigDict, Field, StrictStr
1111

@@ -1101,30 +1101,6 @@ def process_project(project: Project):
11011101

11021102
return r
11031103

1104-
def _get_all_projects(self) -> Set[str]:
1105-
projects = set()
1106-
1107-
base_tables = [
1108-
"DATA_SOURCES",
1109-
"ENTITIES",
1110-
"FEATURE_VIEWS",
1111-
"ON_DEMAND_FEATURE_VIEWS",
1112-
"STREAM_FEATURE_VIEWS",
1113-
"PERMISSIONS",
1114-
]
1115-
1116-
with GetSnowflakeConnection(self.registry_config) as conn:
1117-
for table in base_tables:
1118-
query = (
1119-
f'SELECT DISTINCT project_id FROM {self.registry_path}."{table}"'
1120-
)
1121-
df = execute_snowflake_statement(conn, query).fetch_pandas_all()
1122-
1123-
for row in df.iterrows():
1124-
projects.add(row[1]["PROJECT_ID"])
1125-
1126-
return projects
1127-
11281104
def _get_last_updated_metadata(self, project: str):
11291105
with GetSnowflakeConnection(self.registry_config) as conn:
11301106
query = f"""

sdk/python/feast/infra/registry/sql.py

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from datetime import datetime, timezone
55
from enum import Enum
66
from pathlib import Path
7-
from typing import Any, Callable, Dict, List, Optional, Set, Union
7+
from typing import Any, Callable, Dict, List, Optional, Union
88

99
from pydantic import StrictInt, StrictStr
1010
from sqlalchemy import ( # type: ignore
@@ -1043,24 +1043,6 @@ def _get_last_updated_metadata(self, project: str):
10431043

10441044
return datetime.fromtimestamp(update_time, tz=timezone.utc)
10451045

1046-
def _get_all_projects(self) -> Set[str]:
1047-
projects = set()
1048-
with self.engine.begin() as conn:
1049-
for table in {
1050-
entities,
1051-
data_sources,
1052-
feature_views,
1053-
on_demand_feature_views,
1054-
stream_feature_views,
1055-
permissions,
1056-
}:
1057-
stmt = select(table)
1058-
rows = conn.execute(stmt).all()
1059-
for row in rows:
1060-
projects.add(row._mapping["project_id"])
1061-
1062-
return projects
1063-
10641046
def _get_permission(self, name: str, project: str) -> Permission:
10651047
return self._get_object(
10661048
table=permissions,

sdk/python/tests/integration/online_store/test_remote_online_store.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,6 @@ def _create_remote_client_feature_store(
187187
auth_config=auth_config,
188188
)
189189

190-
result = runner.run(["--chdir", repo_path, "apply"], cwd=temp_dir)
191-
assert result.returncode == 0
192-
193190
return FeatureStore(repo_path=repo_path)
194191

195192

sdk/python/tests/unit/permissions/auth/server/test_auth_registry_server.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import logging
21
from datetime import datetime
32

43
import assertpy
@@ -28,8 +27,6 @@
2827
from tests.utils.auth_permissions_util import get_remote_registry_store
2928
from tests.utils.http_server import check_port_open # noqa: E402
3029

31-
logger = logging.getLogger(__name__)
32-
3330

3431
@pytest.fixture
3532
def start_registry_server(
@@ -39,7 +36,6 @@ def start_registry_server(
3936
feature_store,
4037
monkeypatch,
4138
):
42-
logger.info(f"Starting Registry call at {server_port}")
4339
if "kubernetes" in auth_config:
4440
mock_utils.mock_kubernetes(request=request, monkeypatch=monkeypatch)
4541
elif "oidc" in auth_config:
@@ -53,29 +49,23 @@ def start_registry_server(
5349
assertpy.assert_that(server_port).is_not_equal_to(0)
5450

5551
print(f"Starting Registry at {server_port}")
56-
logger.info(f"{auth_config}: {server_port}: Starting Registry at {server_port}")
5752
server = start_server(
5853
feature_store,
5954
server_port,
6055
wait_for_termination=False,
6156
)
6257
print("Waiting server availability")
63-
logger.info(f"{auth_config}: {server_port}: Waiting server availability")
6458
wait_retry_backoff(
6559
lambda: (None, check_port_open("localhost", server_port)),
6660
timeout_secs=10,
6761
)
6862
print("Server started")
69-
logger.info(f"{auth_config}: {server_port}: Server started")
7063

7164
yield server
7265

7366
print("Stopping server")
74-
logger.info(f"{auth_config}: {server_port}: Stopping server")
7567
server.stop(grace=None) # Teardown server
7668

77-
# server.wait_for_termination()
78-
7969

8070
def test_registry_apis(
8171
auth_config,
@@ -86,9 +76,6 @@ def test_registry_apis(
8676
applied_permissions,
8777
):
8878
print(f"Running for\n:{auth_config}")
89-
logger.info(
90-
f"Running Perm Tests for\n:{auth_config} : {applied_permissions}: {server_port}"
91-
)
9279
remote_feature_store = get_remote_registry_store(server_port, feature_store)
9380
permissions = _test_list_permissions(remote_feature_store, applied_permissions)
9481
_test_get_entity(remote_feature_store, applied_permissions)

0 commit comments

Comments
 (0)