-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Labels
bugSomething isn't workingSomething isn't working
Description
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
Labels
bugSomething isn't workingSomething isn't working