2929from pathlib import Path
3030from tempfile import TemporaryDirectory
3131
32+ import yaml
3233from lxml import html
3334from pkg_resources import DistributionNotFound
3435from pydantic import ValidationError
3738
3839from eodag import __version__ as eodag_version
3940from eodag .types .queryables import QueryablesDict
40- from eodag .utils import GENERIC_PRODUCT_TYPE
41+ from eodag .utils import GENERIC_PRODUCT_TYPE , cached_yaml_load_all
4142from tests import TEST_RESOURCES_PATH
4243from tests .context import (
4344 DEFAULT_MAX_ITEMS_PER_PAGE ,
@@ -1932,29 +1933,22 @@ def test_available_sortables(self):
19321933
19331934
19341935class TestCoreConfWithEnvVar (TestCoreBase ):
1935- @classmethod
1936- def setUpClass (cls ):
1937- super (TestCoreConfWithEnvVar , cls ).setUpClass ()
1938- cls .dag = EODataAccessGateway ()
1939- # mock os.environ to empty env
1940- cls .mock_os_environ = mock .patch .dict (os .environ , {}, clear = True )
1941- cls .mock_os_environ .start ()
1942-
1943- @classmethod
1944- def tearDownClass (cls ):
1945- super (TestCoreConfWithEnvVar , cls ).tearDownClass ()
1946- # stop os.environ
1947- cls .mock_os_environ .stop ()
1936+ def tearDown (self ):
1937+ """Teardown run after every test"""
1938+ if dag := getattr (self , "dag" , None ):
1939+ index_dir = os .path .join (dag .conf_dir , ".index" )
1940+ shutil .rmtree (index_dir )
1941+ del dag
19481942
19491943 def test_core_object_prioritize_locations_file_in_envvar (self ):
19501944 """The core object must use the locations file pointed by the EODAG_LOCS_CFG_FILE env var"""
19511945 try :
19521946 os .environ ["EODAG_LOCS_CFG_FILE" ] = os .path .join (
19531947 TEST_RESOURCES_PATH , "file_locations_override.yml"
19541948 )
1955- dag = EODataAccessGateway ()
1949+ self . dag = EODataAccessGateway ()
19561950 self .assertEqual (
1957- dag .locations_config ,
1951+ self . dag .locations_config ,
19581952 [dict (attr = "dummyattr" , name = "dummyname" , path = "dummypath.shp" )],
19591953 )
19601954 finally :
@@ -1966,11 +1960,13 @@ def test_core_object_prioritize_config_file_in_envvar(self):
19661960 os .environ ["EODAG_CFG_FILE" ] = os .path .join (
19671961 TEST_RESOURCES_PATH , "file_config_override.yml"
19681962 )
1969- dag = EODataAccessGateway ()
1963+ self . dag = EODataAccessGateway ()
19701964 # usgs priority is set to 5 in the test config overrides
1971- self .assertEqual (dag .get_preferred_provider (), ("usgs" , 5 ))
1965+ self .assertEqual (self . dag .get_preferred_provider (), ("usgs" , 5 ))
19721966 # peps outputs prefix is set to /data
1973- self .assertEqual (dag .providers_config ["peps" ].download .output_dir , "/data" )
1967+ self .assertEqual (
1968+ self .dag .providers_config ["peps" ].download .output_dir , "/data"
1969+ )
19741970 finally :
19751971 os .environ .pop ("EODAG_CFG_FILE" , None )
19761972
@@ -1980,16 +1976,46 @@ def test_core_object_prioritize_providers_file_in_envvar(self):
19801976 os .environ ["EODAG_PROVIDERS_CFG_FILE" ] = os .path .join (
19811977 TEST_RESOURCES_PATH , "file_providers_override.yml"
19821978 )
1983- dag = EODataAccessGateway ()
1979+ self . dag = EODataAccessGateway ()
19841980 # only foo_provider in conf
1985- self .assertEqual (dag .available_providers (), ["foo_provider" ])
1981+ self .assertEqual (self . dag .available_providers (), ["foo_provider" ])
19861982 self .assertEqual (
1987- dag .providers_config ["foo_provider" ].search .api_endpoint ,
1983+ self . dag .providers_config ["foo_provider" ].search .api_endpoint ,
19881984 "https://foo.bar/search" ,
19891985 )
19901986 finally :
19911987 os .environ .pop ("EODAG_PROVIDERS_CFG_FILE" , None )
19921988
1989+ def test_core_product_types_config_envvar (self ):
1990+ """product types should be loaded from file defined in env var"""
1991+ # setup providers config
1992+ config_path = os .path .join (TEST_RESOURCES_PATH , "file_providers_override.yml" )
1993+ providers_config : list [ProviderConfig ] = cached_yaml_load_all (config_path )
1994+ providers_config [0 ].products ["TEST_PRODUCT_1" ] = {"productType" : "TP1" }
1995+ providers_config [0 ].products ["TEST_PRODUCT_2" ] = {"productType" : "TP2" }
1996+ with open (
1997+ os .path .join (self .tmp_home_dir .name , "file_providers_override2.yml" ), "w"
1998+ ) as f :
1999+ f .write (yaml .dump (providers_config [0 ]))
2000+ # set env variables
2001+ os .environ ["EODAG_PROVIDERS_CFG_FILE" ] = os .path .join (
2002+ self .tmp_home_dir .name , "file_providers_override2.yml"
2003+ )
2004+ os .environ ["EODAG_PRODUCT_TYPES_CFG_FILE" ] = os .path .join (
2005+ TEST_RESOURCES_PATH , "file_product_types_override.yml"
2006+ )
2007+ # check product types
2008+ try :
2009+ self .dag = EODataAccessGateway ()
2010+ pt = self .dag .list_product_types (fetch_providers = False )
2011+ self .assertEqual (2 , len (pt ))
2012+ self .assertEqual ("TEST_PRODUCT_1" , pt [0 ]["ID" ])
2013+ self .assertEqual ("TEST_PRODUCT_2" , pt [1 ]["ID" ])
2014+ finally :
2015+ # remove env variables
2016+ os .environ .pop ("EODAG_PROVIDERS_CFG_FILE" , None )
2017+ os .environ .pop ("EODAG_PRODUCT_TYPES_CFG_FILE" , None )
2018+
19932019
19942020class TestCoreInvolvingConfDir (unittest .TestCase ):
19952021 @classmethod
0 commit comments