diff --git a/uwsift/tests/test_satpy_import.py b/uwsift/tests/test_satpy_import.py index 36831464..32684dc4 100644 --- a/uwsift/tests/test_satpy_import.py +++ b/uwsift/tests/test_satpy_import.py @@ -1,14 +1,18 @@ import importlib -import importlib.util import os import subprocess import sys from ast import literal_eval from typing import Union +from unittest.mock import create_autospec import appdirs import pytest +from uwsift.common import Info, Kind +from uwsift.workspace.importer import aImporter +from uwsift.workspace.metadatabase import Product + def get_python_path() -> str: process = subprocess.run([sys.executable, "--version"], stdout=subprocess.PIPE, check=True) @@ -57,3 +61,51 @@ def check_uwsift_paths(xdg_config_home: Union[str, None], base_config_dir: str) sift_tmp_config_dir = os.path.join(tmp_config_dir, relative_config_dir) os.makedirs(sift_tmp_config_dir) check_uwsift_paths(tmp_config_dir, sift_tmp_config_dir) + + +def test_scene_obj_transfer(): + + dummy_test_path = "TEST:/PATH/" + + class SceneDummy(object): + def __init__(self): + pass + + class ImporterDummy(aImporter): + def __init__(self, source_paths, workspace_cwd, database_session, **kwargs): + ImporterDummy.kw_args_passed_on = kwargs + + def is_relevant(cls, source_path=None, source_uri=None): # dummy implementation of abstract method + return True + + def merge_resources(self): # dummy implementation of abstract method + return [] + + def merge_products(self): # dummy implementation of abstract method + return [] + + def begin_import_products(self, *product_ids): # dummy implementation of abstract method + pass + + def release_resources(self): # dummy implementation of abstract method + pass + + class ResourceDummy(object): + format = ImporterDummy + path = dummy_test_path + + scene_dummy = SceneDummy() + + kwargs = {"scenes": {tuple([dummy_test_path]): scene_dummy}} + + mocked_prod = create_autospec(Product, instance=True) + mocked_prod.resource = [ResourceDummy()] + mocked_prod.info = {"_satpy_id": "DUMMY", Info.KIND: Kind.IMAGE} + aImporter.from_product(mocked_prod, "", "", **kwargs) + assert "scenes" not in ImporterDummy.kw_args_passed_on + assert ImporterDummy.kw_args_passed_on["scene"] == scene_dummy + + mocked_prod.info = {"_satpy_id": "DUMMY", Info.KIND: Kind.UNKNOWN} + aImporter.from_product(mocked_prod, "", "", **kwargs) + assert "scenes" in ImporterDummy.kw_args_passed_on + assert "scene" not in ImporterDummy.kw_args_passed_on diff --git a/uwsift/workspace/importer.py b/uwsift/workspace/importer.py index 8e33ef74..6525975a 100644 --- a/uwsift/workspace/importer.py +++ b/uwsift/workspace/importer.py @@ -311,10 +311,12 @@ def from_product(cls, prod: Product, workspace_cwd, database_session, **kwargs): # For an unknown reason reusing the scene breaks for FCI data, # # this Importer data reading magic is too confused. - if prod.info[Info.KIND] in (Kind.POINTS, Kind.LINES, Kind.VECTORS): + if prod.info[Info.KIND] in (Kind.POINTS, Kind.LINES, Kind.VECTORS, Kind.IMAGE): del kwargs["scenes"] kwargs["scene"] = scn + LOG.debug(f'Product is of Kind "{prod.info[Info.KIND]}"') + # TODO: ignore mypy error for now because in the future aImporter should be merged with SatpyImporter return cls(paths, workspace_cwd=workspace_cwd, database_session=database_session, **kwargs) # type: ignore @@ -458,10 +460,10 @@ def __init__(self, source_paths, workspace_cwd, database_session, **kwargs): self.reader = reader self.resampling_info = kwargs.get("resampling_info") self.scn = kwargs.get("scene") - self.merge_target = kwargs.get("merge_target") if self.scn is None: reader_kwargs = get_reader_kwargs_dict([self.reader]) self.scn = Scene(filenames={self.reader: self.filenames}, reader_kwargs=reader_kwargs) + self.merge_target = kwargs.get("merge_target") self._resources = [] # DataID filters self.product_filters = {}