Skip to content

Fix failing tests #100

@frankinspace

Description

@frankinspace

There are a number of tests that fail and need to be refactored. Related to #97

Once fixed, remove continue-on-error: true from the Test step in the github workflow

(base) ~/githubprojects/MAAP-Project/maap-py git:[issues/95]
poetry run pytest test/
======================================================================================== test session starts ========================================================================================
platform darwin -- Python 3.12.2, pytest-8.2.2, pluggy-1.5.0
rootdir: /Users/greguska/githubprojects/MAAP-Project/maap-py
configfile: pyproject.toml
plugins: cov-5.0.0
collected 55 items                                                                                                                                                                                  

test/test_AWS.py ....                                                                                                                                                                         [  7%]
test/test_CMR.py FFFFFFFFFFF                                                                                                                                                                  [ 27%]
test/test_DPS.py ...........F.                                                                                                                                                                [ 50%]
test/test_MAAP.py FFFF.                                                                                                                                                                       [ 60%]
test/test_Result.py .............                                                                                                                                                             [ 83%]
test/test_config_reader.py ..FFFFFFF                                                                                                                                                          [100%]

============================================================================================= FAILURES ==============================================================================================
________________________________________________________________________________ TestCMR.test_direct_granuleDownload ________________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_direct_granuleDownload>

    def test_direct_granuleDownload(self):
>       results = self.maap.downloadGranule(
            online_access_url='https://datapool.asf.alaska.edu/GRD_HD/SA/S1A_S3_GRDH_1SDH_20140615T034444_20140615T034512_001055_00107C_8977.zip',
            destination_path='./tmp'
        )

test/test_CMR.py:50: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:98: in downloadGranule
    return proxy._getHttpData(online_access_url, overwrite, final_destination)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = {}, url = 'https://datapool.asf.alaska.edu/GRD_HD/SA/S1A_S3_GRDH_1SDH_20140615T034444_20140615T034512_001055_00107C_8977.zip', overwrite = False
dest = './tmp/S1A_S3_GRDH_1SDH_20140615T034444_20140615T034512_001055_00107C_8977.zip'

    def _getHttpData(self, url, overwrite, dest):
        if overwrite or not os.path.exists(dest):
            r = requests.get(url, stream=True)
    
            # Try with a federated token if unauthorized
            if r.status_code == 401:
                if self._dps.running_in_dps:
                    dps_token_response = requests.get(
                        url=self._dps.dps_token_endpoint,
                        headers={
                            "dps-machine-token": self._dps.dps_machine_token,
                            "dps-job-id": self._dps.job_id,
                            "Accept": "application/json",
                        },
                    )
    
                    if dps_token_response:
                        # Running inside a DPS job, so call DAAC directly
                        dps_token_info = json.loads(dps_token_response.text)
                        r = requests.get(
                            url=r.url,
                            headers={
                                "Authorization": "Bearer {},Basic {}".format(
                                    dps_token_info["user_token"],
                                    dps_token_info["app_token"],
                                ),
                                "Connection": "close",
                            },
                            stream=True,
                        )
                else:
                    # Running in ADE, so call MAAP API
                    r = requests.get(
                        url=os.path.join(
                            self._cmrFileUrl,
                            urllib.parse.quote(urllib.parse.quote(url, safe="")),
                            endpoints.CMR_ALGORITHM_DATA,
                        ),
                        headers=self._apiHeader,
                        stream=True,
                    )
    
            r.raise_for_status()
            r.raw.decode_content = True
    
>           with open(dest, "wb") as f:
E           FileNotFoundError: [Errno 2] No such file or directory: './tmp/S1A_S3_GRDH_1SDH_20140615T034444_20140615T034512_001055_00107C_8977.zip'

maap/Result.py:132: FileNotFoundError
________________________________________________________________________________________ TestCMR.test_getUrl ________________________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_getUrl>

    def test_getUrl(self):
>       results = self.maap.searchGranule(page_num="1", concept_id="C1214470488-ASF", sort_key="-start_date", limit=1)

test/test_CMR.py:87: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:71: in searchGranule
    results = self._CMR.get_search_results(url=self.config.search_granule_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>VYS...stId><HostId>V335NTUUcB839Chra5bK0DCyJlPRxC++rm4dIZwKr1+ZMQwNAgHaFI4HFiVdVEc1SO5EySMl+F0Z4MN33mR/Vw==</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x12082ee80>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
___________________________________________________________________________________ TestCMR.test_granuleDownload ____________________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_granuleDownload>

    def test_granuleDownload(self):
>       results = self.maap.searchGranule(
            granule_ur=self._test_ur)

test/test_CMR.py:32: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:71: in searchGranule
    results = self._CMR.get_search_results(url=self.config.search_granule_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>VYS...stId><HostId>Y7X4tybk2DynhO8qlU9zEvaJAkbW2V7uMROOrbRrnItvdSdVpXAAROqNCDNG4UGae6aM35Ab9wR3oG+dDqpGNg==</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x12082f380>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
_____________________________________________________________________________ TestCMR.test_granuleDownloadExternalDAAC ______________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_granuleDownloadExternalDAAC>

    def test_granuleDownloadExternalDAAC(self):
        # results = self.maap.searchGranule(
        #     collection_concept_id='C1200231010-NASA_MAAP')
    
        results = self.maap.searchGranule(
            cmr_host='cmr.earthdata.nasa.gov',
            collection_concept_id='C2067521974-ORNL_CLOUD',
            granule_ur='GEDI_L3_Land_Surface_Metrics.GEDI03_elev_lowestmode_stddev_2019108_2020106_001_08.tif')
    
>       download = results[0].getData()
E       IndexError: list index out of range

test/test_CMR.py:46: IndexError
___________________________________________________________________________________ TestCMR.test_searchCollection ___________________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_searchCollection>

    def test_searchCollection(self):
>       results = self.maap.searchCollection(
            instrument=self._test_instrument_name_uavsar)

test/test_CMR.py:77: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:130: in searchCollection
    results = self._CMR.get_search_results(url=self.config.search_collection_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>S72...stId><HostId>e725uNtCcMbqIXYp/t42PMaFYdFgfV+I8Ti5Kc84mI0Ts8otcOX/IJdTBuhIVHaa31S3ja4CLPG8yI4oRACa/Q==</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x12082fec0>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
_________________________________________________________________________________ TestCMR.test_searchFromEarthdata __________________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_searchFromEarthdata>

    def test_searchFromEarthdata(self):
>       results = self.maap.searchCollection(
            instrument="LVIS|UAVSAR",
            platform="AIRCRAFT|B-200|COMPUTERS",
            data_center="MAAP Data Management Team|ORNL_DAAC")

test/test_CMR.py:70: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:130: in searchCollection
    results = self._CMR.get_search_results(url=self.config.search_collection_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>S72...stId><HostId>Eqmw09AQAZCCMA4r2QA8tLqjvRJWYmqtk80UIxX6rjkZnXGeJ+JCo3kgjfxFB9kpnCftURiu90FwVGJUHaVBOw==</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x12082f380>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
_______________________________________________________________________________ TestCMR.test_searchGranuleByGranuleUR _______________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_searchGranuleByGranuleUR>

    def test_searchGranuleByGranuleUR(self):
>       results = self.maap.searchGranule(
            granule_ur=self._test_ur)

test/test_CMR.py:27: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:71: in searchGranule
    results = self._CMR.get_search_results(url=self.config.search_granule_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>S72...K1RM2</RequestId><HostId>jJJj3u2XwRx8Gfq93KxEA0CB4yR8ITPRJob9fhbcwe3THS3qJUfiwoXhh++kH9sPdMmQOTKnpNk=</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x12082ee80>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
_________________________________________________________________________ TestCMR.test_searchGranuleByInstrumentAndSiteName _________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_searchGranuleByInstrumentAndSiteName>

    def test_searchGranuleByInstrumentAndSiteName(self):
>       results = self.maap.searchGranule(
            instrument=self._test_instrument_name_lvis,
            site_name=self._test_site_name)

test/test_CMR.py:58: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:71: in searchGranule
    results = self._CMR.get_search_results(url=self.config.search_granule_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>JT3...Q9KHV</RequestId><HostId>FxXr+lrYXKQl2JHapV0fDcE/gMaeTUFN2RP0wwg9IzhZStW8ExWD9VxYUYeKTXys8C1KtwPCLNk=</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x12082e840>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
_______________________________________________________________________ TestCMR.test_searchGranuleByInstrumentAndTrackNumber ________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_searchGranuleByInstrumentAndTrackNumber>

    def test_searchGranuleByInstrumentAndTrackNumber(self):
>       results = self.maap.searchGranule(
            instrument=self._test_instrument_name_uavsar,
            track_number=self._test_track_number,
            polarization='HH')

test/test_CMR.py:20: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:71: in searchGranule
    results = self._CMR.get_search_results(url=self.config.search_granule_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>JT3...H0V3T</RequestId><HostId>K2suwvVBKKtPhHcUUH4ki4cALpf42AcX1fZx7mPuLew23IdLYBczMj8jvvt6h3QBcMmRdw+XBMk=</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x1208b0180>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
___________________________________________________________________________ TestCMR.test_searchGranuleWithPipeDelimiters ____________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_searchGranuleWithPipeDelimiters>

    def test_searchGranuleWithPipeDelimiters(self):
>       results = self.maap.searchGranule(
            instrument="LVIS|UAVSAR",
            platform="AIRCRAFT")

test/test_CMR.py:64: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:71: in searchGranule
    results = self._CMR.get_search_results(url=self.config.search_granule_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>JT3...4Y3D1</RequestId><HostId>fX4LwJQILEu8v2jz+bxI8gLH8O+ogFmXweHETG0yLlZeokU4JGe20LdjztasPIyTrsIUyO6kqEQ=</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x1208b0400>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
______________________________________________________________________________ TestCMR.test_searchGranuleWithWildcards ______________________________________________________________________________

self = <test.test_CMR.TestCMR testMethod=test_searchGranuleWithWildcards>

    def test_searchGranuleWithWildcards(self):
>       results = self.maap.searchGranule(collection_concept_id="C1200110748-NASA_MAAP",
                                              readable_granule_name='*185*')

test/test_CMR.py:82: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:71: in searchGranule
    results = self._CMR.get_search_results(url=self.config.search_granule_url, limit=limit, **kwargs)
maap/utils/CMR.py:41: in get_search_results
    page = ET.XML(unparsed_page)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>JT3...3GYDX</RequestId><HostId>sBFlA7w0vXTmkApJ6o7R/+zd2ACtuVHTKGCqab2MJBg82o63suMb3Pwq6Gur2zpIvd0N4MkKiUw=</HostId></Error>'
parser = <xml.etree.ElementTree.XMLParser object at 0x12082e840>

    def XML(text, parser=None):
        """Parse XML document from string constant.
    
        This function can be used to embed "XML Literals" in Python code.
    
        *text* is a string containing XML data, *parser* is an
        optional parser instance, defaulting to the standard XMLParser.
    
        Returns an Element instance.
    
        """
        if not parser:
            parser = XMLParser(target=TreeBuilder())
>       parser.feed(text)
E       xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39

/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/xml/etree/ElementTree.py:1330: ParseError
__________________________________________________________________________________ TestDPS.test_registerAlgorithm ___________________________________________________________________________________

self = <test.test_DPS.TestDPS testMethod=test_registerAlgorithm>

    def test_registerAlgorithm(self):
>       self.maap.register_algorithm_from_yaml_file("dps_test_algo_config.yaml")

test/test_DPS.py:23: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:157: in register_algorithm_from_yaml_file
    algo_config = algorithm_utils.read_yaml_file(file_path)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

algo_yaml = 'dps_test_algo_config.yaml'

    def read_yaml_file(algo_yaml):
        algo_config = dict()
>       with open(algo_yaml, 'r') as fr:
E       FileNotFoundError: [Errno 2] No such file or directory: 'dps_test_algo_config.yaml'

maap/utils/algorithm_utils.py:17: FileNotFoundError
___________________________________________________________________________________ TestMAAP.test_edc_credentials ___________________________________________________________________________________

self = <test.test_MAAP.TestMAAP testMethod=test_edc_credentials>

    def test_edc_credentials(self):
>       results = self.maap.aws.earthdata_s3_credentials('https://data.lpdaac.earthdatacloud.nasa.gov/s3credentials');

test/test_MAAP.py:73: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/AWS.py:62: in earthdata_s3_credentials
    response.raise_for_status()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Response [403]>

    def raise_for_status(self):
        """Raises :class:`HTTPError`, if one occurred."""
    
        http_error_msg = ""
        if isinstance(self.reason, bytes):
            # We attempt to decode utf-8 first because some servers
            # choose to localize their reason strings. If the string
            # isn't utf-8, we fall back to iso-8859-1 for all other
            # encodings. (See PR #3538)
            try:
                reason = self.reason.decode("utf-8")
            except UnicodeDecodeError:
                reason = self.reason.decode("iso-8859-1")
        else:
            reason = self.reason
    
        if 400 <= self.status_code < 500:
            http_error_msg = (
                f"{self.status_code} Client Error: {reason} for url: {self.url}"
            )
    
        elif 500 <= self.status_code < 600:
            http_error_msg = (
                f"{self.status_code} Server Error: {reason} for url: {self.url}"
            )
    
        if http_error_msg:
>           raise HTTPError(http_error_msg, response=self)
E           requests.exceptions.HTTPError: 403 Client Error: FORBIDDEN for url: https://api.maap-project.org/api/members/self/awsAccess/edcCredentials/https%253A%252F%252Fdata.lpdaac.earthdatacloud.nasa.gov%252Fs3credentials

../../../Library/Caches/pypoetry/virtualenvs/maap-py-5b7ungGG-py3.12/lib/python3.12/site-packages/requests/models.py:1024: HTTPError
____________________________________________________________________________________ TestMAAP.test_executeQuery _____________________________________________________________________________________

self = <test.test_MAAP.TestMAAP testMethod=test_executeQuery>

    def test_executeQuery(self):
>       response = self.maap.executeQuery(
            src={
                "Collection": {
                    "ShortName": "GEDI Cal/Val Field Data_1",
                    "VersionId": "001"
                }
            },
            query={
                "bbox": [
                -122.6,
                38.4,
                -122.5,
                38.5
                ],
                "fields": ['project', 'plot', 'p.geom']
            }
        )
E       AttributeError: 'MAAP' object has no attribute 'executeQuery'

test/test_MAAP.py:77: AttributeError
__________________________________________________________________________________ TestMAAP.test_genFromEarthdata ___________________________________________________________________________________

self = <test.test_MAAP.TestMAAP testMethod=test_genFromEarthdata>

    def test_genFromEarthdata(self):
        input = """
            {
             "p": "C1200015068-NASA_MAAP!C1200090707-NASA_MAAP!C1200015148-NASA_MAAP",
             "pg": [
              {
               "exclude": {
                "echo_granule_id": [
                 "G1200015109-NASA_MAAP",
                 "G1200015110-NASA_MAAP"
                ]
               }
              }
             ],
             "m": "-87.55224609375!75.30249023437501!0!1!0!0,2",
             "processing_level_id_h": [
              "1A",
              "1B",
              "2",
              "4"
             ],
             "instrument_h": [
              "LVIS",
              "UAVSAR"
             ],
             "platform_h": [
              "AIRCRAFT",
              "B-200",
              "COMPUTERS"
             ],
             "data_center_h": [
              "MAAP Data Management Team"
             ],
             "bounding_box": "-35.4375,-55.6875,-80.4375,37.6875"
            }
        """
    
        var_name = 'maapVar'
>       testResult = self.maap.getCallFromEarthdataQuery(query=input, variable_name=var_name)

test/test_MAAP.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:109: in getCallFromEarthdataQuery
    return self._CMR.generateGranuleCallFromEarthDataRequest(query, variable_name, limit)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <maap.utils.CMR.CMR object at 0x1208eac30>
query = '\n            {\n             "p": "C1200015068-NASA_MAAP!C1200090707-NASA_MAAP!C1200015148-NASA_MAAP",\n            ...ent Team"\n             ],\n             "bounding_box": "-35.4375,-55.6875,-80.4375,37.6875"\n            }\n        '
variable_name = 'maapVar', limit = 1000

    def generateGranuleCallFromEarthDataRequest(self, query, variable_name='maap', limit=1000):
        """
            Generate a literal string to use for calling the MAAP API
    
            :param query: a Json-formatted string from an Earthdata search-style query. See: https://github.com/MAAP-Project/earthdata-search/blob/master/app/controllers/collections_controller.rb
            :param variable_name: the name of the MAAP variable to qualify the search call
            :param limit: the max records to return
            :return: string in the form of a MAAP API call
            """
        y = json.loads(query)
    
        params = []
    
        for key, value in y.items():
            if key.endswith("_h"):
                params.append(key[:-2] + "=\"" + "|".join(value) + "\"")
            elif key == "bounding_box":
                params.append(key + "=\"" + value + "\"")
            elif key == "p":
                params.append("collection_concept_id=\"" + value.replace("!", "|") + "\"")
            elif key == "pg":
>               params.append("readable_granule_name=\"" + '|'.join(value[0]['readable_granule_name'])
                              .replace('"', '\\"') + "\"")
E               KeyError: 'readable_granule_name'

maap/utils/CMR.py:127: KeyError
_____________________________________________________________________________________ TestMAAP.test_getProfile ______________________________________________________________________________________

self = <test.test_MAAP.TestMAAP testMethod=test_getProfile>

    def test_getProfile(self):
        results = self.maap.profile.account_info()
    
>       self.assertTrue(results['id'] > 0)
E       TypeError: 'NoneType' object is not subscriptable

test/test_MAAP.py:17: TypeError
____________________________________________________________________________ TestConfig.test_get_config_url_with_scheme _____________________________________________________________________________

self = <test.test_config_reader.TestConfig testMethod=test_get_config_url_with_scheme>

    def test_get_config_url_with_scheme(self):
        maap_host = "https://api.maap-project.org/"
        config_url = config_reader._get_config_url(maap_host)
>       self.assertEqual("https://api.maap-project.org/api/environment/config", config_url)
E       AssertionError: 'https://api.maap-project.org/api/environment/config' != 'https://api.maap-project.org/config'
E       - https://api.maap-project.org/api/environment/config
E       ?                              ----------------
E       + https://api.maap-project.org/config

test/test_config_reader.py:22: AssertionError
___________________________________________________________________________ TestConfig.test_get_config_url_without_scheme ___________________________________________________________________________

self = <test.test_config_reader.TestConfig testMethod=test_get_config_url_without_scheme>

    def test_get_config_url_without_scheme(self):
        maap_host = "api.maap-project.org"
        config_url = config_reader._get_config_url(maap_host)
>       self.assertEqual("https://api.maap-project.org/api/environment/config", config_url)
E       AssertionError: 'https://api.maap-project.org/api/environment/config' != 'http://api.maap-project.org/config'
E       - https://api.maap-project.org/api/environment/config
E       ?     -                        ----------------
E       + http://api.maap-project.org/config

test/test_config_reader.py:33: AssertionError
_________________________________________________________________________________ TestConfig.test_read_conf_default _________________________________________________________________________________

self = <test.test_config_reader.TestConfig testMethod=test_read_conf_default>

    def test_read_conf_default(self):
        maap = MAAP()
>       conf = MaapConfig()
E       TypeError: MaapConfig.__init__() missing 1 required positional argument: 'maap_host'

test/test_config_reader.py:72: TypeError
_________________________________________________________________________________ TestConfig.test_read_conf_env_var _________________________________________________________________________________

self = <test.test_config_reader.TestConfig testMethod=test_read_conf_env_var>

    def test_read_conf_env_var(self):
        os.environ.setdefault("MAAP_API_HOST", "api.dit.maap-project.org")
        maap = MAAP()
        conf = maap.config
        print(dir(maap.config))
>       conf = MaapConfig()
E       TypeError: MaapConfig.__init__() missing 1 required positional argument: 'maap_host'

test/test_config_reader.py:60: TypeError
--------------------------------------------------------------------------------------- Captured stdout call ----------------------------------------------------------------------------------------
['_MaapConfig__config', '_PROXY_GRANTING_TICKET', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_api_endpoint', 'algorithm_build', 'algorithm_register', 'aws_access_key', 'aws_access_secret', 'content_type', 'dps_job', 'edc_credentials', 'get', 'indexed_attributes', 'maap_api_root', 'maap_host', 'maap_token', 'mapbox_token', 'mas_algo', 'member', 'member_dps_token', 'page_size', 'requester_pays', 's3_signed_url', 's3_user_upload_bucket', 's3_user_upload_dir', 'search_collection_url', 'search_granule_url', 'tiler_endpoint', 'wmts', 'workspace_bucket_credentials']
_______________________________________________________________________________ TestConfig.test_read_conf_hosted_api ________________________________________________________________________________

self = <test.test_config_reader.TestConfig testMethod=test_read_conf_hosted_api>

    def test_read_conf_hosted_api(self):
>       maap = MAAP(maap_host="api.dit.maap-project.org")

test/test_config_reader.py:51: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:31: in __init__
    self.config = MaapConfig(maap_host=maap_host)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <maap.config_reader.MaapConfig object at 0x1230c81d0>, maap_host = 'api.dit.maap-project.org'

    def __init__(self, maap_host):
        self.__config = _get_client_config(maap_host)
        self.maap_host = maap_host
>       self.maap_api_root = self.__config.get("service").get("maap_api_root")
E       AttributeError: 'NoneType' object has no attribute 'get'

maap/config_reader.py:75: AttributeError
----------------------------------------------------------------------------------------- Captured log call -----------------------------------------------------------------------------------------
ERROR    maap.config_reader:config_reader.py:68 Unable to read maap config from api: 404 Client Error: NOT FOUND for url: https://api.dit.maap-project.org/config
______________________________________________________________________ TestConfig.test_read_conf_localhost_without_scheme_api _______________________________________________________________________

self = <test.test_config_reader.TestConfig testMethod=test_read_conf_localhost_without_scheme_api>

    def test_read_conf_localhost_without_scheme_api(self):
>       maap = MAAP(maap_host="localhost:5000")

test/test_config_reader.py:64: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
maap/maap.py:31: in __init__
    self.config = MaapConfig(maap_host=maap_host)
maap/config_reader.py:73: in __init__
    self.__config = _get_client_config(maap_host)
maap/config_reader.py:59: in _get_client_config
    config_url = _get_config_url(maap_host)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

maap_host = 'localhost:5000'

    def _get_config_url(maap_host):
        # This is added to remove the assumption of scheme specially for local dev testing
        # also maintains backwards compatibility for user to use MAAP("api.maap-project.org")
        base_url = urlparse(maap_host)
        maap_api_config_endpoint = os.getenv("MAAP_API_CONFIG_ENDPOINT", "api/environment/config")
        supported_schemes = ("http", "https")
        if base_url.scheme and base_url.scheme not in supported_schemes:
>           raise ValueError(f"Unsupported scheme for MAAP API host: {base_url.scheme!r}. Must be one of: {', '.join(map(repr, supported_schemes))}.")
E           ValueError: Unsupported scheme for MAAP API host: 'localhost'. Must be one of: 'http', 'https'.

maap/config_reader.py:27: ValueError
______________________________________________________________________________ TestConfig.test_read_conf_uninitialized ______________________________________________________________________________

self = <test.test_config_reader.TestConfig testMethod=test_read_conf_uninitialized>

    def test_read_conf_uninitialized(self):
        with TestConfig().assertRaises(expected_exception=EnvironmentError, msg="Successfully raised exception") as err:
>           MaapConfig()
E           TypeError: MaapConfig.__init__() missing 1 required positional argument: 'maap_host'

test/test_config_reader.py:79: TypeError
========================================================================================= warnings summary ==========================================================================================
test/test_Result.py: 16 warnings
  /Users/greguska/Library/Caches/pypoetry/virtualenvs/maap-py-5b7ungGG-py3.12/lib/python3.12/site-packages/botocore/auth.py:419: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
    datetime_now = datetime.datetime.utcnow()

test/test_Result.py::test_getData_s3_url_with_fallback_in_order
test/test_Result.py::test_getData_s3_url_with_fallback_in_order
test/test_Result.py::test_getData_s3_with_multiple_fallbacks
test/test_Result.py::test_getData_s3_with_multiple_fallbacks
  /Users/greguska/Library/Caches/pypoetry/virtualenvs/maap-py-5b7ungGG-py3.12/lib/python3.12/site-packages/botocore/endpoint.py:172: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
    response_received_timestamp = datetime.datetime.utcnow()

test/test_Result.py::test_getData_s3_url_with_fallback_in_order
test/test_Result.py::test_getData_s3_url_with_fallback_in_order
test/test_Result.py::test_getData_s3_with_multiple_fallbacks
test/test_Result.py::test_getData_s3_with_multiple_fallbacks
  /Users/greguska/Library/Caches/pypoetry/virtualenvs/maap-py-5b7ungGG-py3.12/lib/python3.12/site-packages/botocore/endpoint.py:155: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
    local_timestamp = datetime.datetime.utcnow()

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
====================================================================================== short test summary info ======================================================================================
FAILED test/test_CMR.py::TestCMR::test_direct_granuleDownload - FileNotFoundError: [Errno 2] No such file or directory: './tmp/S1A_S3_GRDH_1SDH_20140615T034444_20140615T034512_001055_00107C_8977.zip'
FAILED test/test_CMR.py::TestCMR::test_getUrl - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_CMR.py::TestCMR::test_granuleDownload - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_CMR.py::TestCMR::test_granuleDownloadExternalDAAC - IndexError: list index out of range
FAILED test/test_CMR.py::TestCMR::test_searchCollection - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_CMR.py::TestCMR::test_searchFromEarthdata - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_CMR.py::TestCMR::test_searchGranuleByGranuleUR - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_CMR.py::TestCMR::test_searchGranuleByInstrumentAndSiteName - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_CMR.py::TestCMR::test_searchGranuleByInstrumentAndTrackNumber - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_CMR.py::TestCMR::test_searchGranuleWithPipeDelimiters - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_CMR.py::TestCMR::test_searchGranuleWithWildcards - xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 39
FAILED test/test_DPS.py::TestDPS::test_registerAlgorithm - FileNotFoundError: [Errno 2] No such file or directory: 'dps_test_algo_config.yaml'
FAILED test/test_MAAP.py::TestMAAP::test_edc_credentials - requests.exceptions.HTTPError: 403 Client Error: FORBIDDEN for url: https://api.maap-project.org/api/members/self/awsAccess/edcCredentials/https%253A%252F%252Fdata.lpdaac.earthdatacloud.nasa.g...
FAILED test/test_MAAP.py::TestMAAP::test_executeQuery - AttributeError: 'MAAP' object has no attribute 'executeQuery'
FAILED test/test_MAAP.py::TestMAAP::test_genFromEarthdata - KeyError: 'readable_granule_name'
FAILED test/test_MAAP.py::TestMAAP::test_getProfile - TypeError: 'NoneType' object is not subscriptable
FAILED test/test_config_reader.py::TestConfig::test_get_config_url_with_scheme - AssertionError: 'https://api.maap-project.org/api/environment/config' != 'https://api.maap-project.org/config'
FAILED test/test_config_reader.py::TestConfig::test_get_config_url_without_scheme - AssertionError: 'https://api.maap-project.org/api/environment/config' != 'http://api.maap-project.org/config'
FAILED test/test_config_reader.py::TestConfig::test_read_conf_default - TypeError: MaapConfig.__init__() missing 1 required positional argument: 'maap_host'
FAILED test/test_config_reader.py::TestConfig::test_read_conf_env_var - TypeError: MaapConfig.__init__() missing 1 required positional argument: 'maap_host'
FAILED test/test_config_reader.py::TestConfig::test_read_conf_hosted_api - AttributeError: 'NoneType' object has no attribute 'get'
FAILED test/test_config_reader.py::TestConfig::test_read_conf_localhost_without_scheme_api - ValueError: Unsupported scheme for MAAP API host: 'localhost'. Must be one of: 'http', 'https'.
FAILED test/test_config_reader.py::TestConfig::test_read_conf_uninitialized - TypeError: MaapConfig.__init__() missing 1 required positional argument: 'maap_host'
============================================================================ 23 failed, 32 passed, 24 warnings in 8.02s =============================================================================

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions