Skip to content

Commit dbf1ea6

Browse files
committedOct 15, 2024
fixed linting, added permission asserts
Signed-off-by: Daniele Martinoli <dmartino@redhat.com>
1 parent fb0a18f commit dbf1ea6

File tree

3 files changed

+22
-21
lines changed

3 files changed

+22
-21
lines changed
 

‎sdk/python/feast/infra/offline_stores/remote.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ def validate_data_source(
340340
)
341341

342342
api_parameters = {
343-
"data_source_name": data_source.name,
343+
"data_source_proto": str(data_source),
344344
}
345345
logger.debug(f"validating DataSource {data_source.name}")
346346
_call_put(

‎sdk/python/feast/infra/passthrough_provider.py

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
MaterializationJobStatus,
3131
MaterializationTask,
3232
)
33-
from feast.infra.offline_stores.file_source import FileSource
3433
from feast.infra.offline_stores.offline_store import RetrievalJob
3534
from feast.infra.offline_stores.offline_utils import get_offline_store_from_config
3635
from feast.infra.online_stores.helpers import get_online_store_from_config

‎sdk/python/feast/offline_server.py

+21-19
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@
44
import traceback
55
from datetime import datetime
66
from typing import Any, Dict, List, cast
7-
from feast.protos.feast.core.DataSource_pb2 import DataSource as DataSourceProto
87

98
import pyarrow as pa
109
import pyarrow.flight as fl
11-
from google.protobuf.json_format import MessageToDict, Parse
10+
from google.protobuf.json_format import Parse
1211

1312
from feast import FeatureStore, FeatureView, utils
1413
from feast.arrow_error_handler import arrow_server_error_handling_decorator
1514
from feast.data_source import DataSource
16-
from feast.errors import FeastObjectNotFoundException
1715
from feast.feature_logging import FeatureServiceLoggingSource
1816
from feast.feature_view import DUMMY_ENTITY_NAME
1917
from feast.infra.offline_stores.offline_utils import get_offline_store_from_config
@@ -30,6 +28,7 @@
3028
init_security_manager,
3129
str_to_auth_manager_type,
3230
)
31+
from feast.protos.feast.core.DataSource_pb2 import DataSource as DataSourceProto
3332
from feast.saved_dataset import SavedDatasetStorage
3433

3534
logger = logging.getLogger(__name__)
@@ -469,27 +468,30 @@ def persist(self, command: dict, key: str):
469468
traceback.print_exc()
470469
raise e
471470

472-
def validate_data_source(self, command: dict):
473-
data_source_name = command["data_source_name"]
474-
logger.debug(f"Validating data source {data_source_name}")
475-
try:
476-
data_source = self.store.registry.get_data_source(
477-
name=data_source_name, project=self.store.config.project
478-
)
479-
self.offline_store.validate_data_source(
480-
config=self.store.config,
481-
data_source=data_source,
482-
)
483-
except FeastObjectNotFoundException:
484-
logger.debug(f"DataSource {data_source_name} not found, validation skipped")
485-
486-
def get_table_column_names_and_types_from_data_source(self, command: dict):
471+
@staticmethod
472+
def _extract_data_source_from_command(command) -> DataSource:
487473
data_source_proto_str = command["data_source_proto"]
488-
logger.debug(f"Fetching table columns metadata from {data_source_proto_str}")
474+
logger.debug(f"Extracted data_source_proto {data_source_proto_str}")
489475
data_source_proto = DataSourceProto()
490476
Parse(data_source_proto_str, data_source_proto)
491477
data_source = DataSource.from_proto(data_source_proto)
492478
logger.debug(f"Converted to DataSource {data_source}")
479+
return data_source
480+
481+
def validate_data_source(self, command: dict):
482+
data_source = OfflineServer._extract_data_source_from_command(command)
483+
logger.debug(f"Validating data source {data_source.name}")
484+
assert_permissions(data_source, actions=[AuthzedAction.READ_OFFLINE])
485+
486+
self.offline_store.validate_data_source(
487+
config=self.store.config,
488+
data_source=data_source,
489+
)
490+
491+
def get_table_column_names_and_types_from_data_source(self, command: dict):
492+
data_source = OfflineServer._extract_data_source_from_command(command)
493+
logger.debug(f"Fetching table columns metadata from {data_source.name}")
494+
assert_permissions(data_source, actions=[AuthzedAction.READ_OFFLINE])
493495

494496
column_names_and_types = data_source.get_table_column_names_and_types(
495497
self.store.config

0 commit comments

Comments
 (0)