Skip to content

Commit 6d051d6

Browse files
authored
Merge pull request #170 from python-astrodynamics/feature/parse-types-metadata
Fix parse_types with metadata=True
2 parents d22e259 + ea421f8 commit 6d051d6

3 files changed

Lines changed: 21 additions & 1 deletion

File tree

‎newsfragments/170.fixed.rst‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
``parse_types=True`` now works together with ``metadata=True`` in :meth:`~spacetrack.base.SpaceTrackClient.generic_request` and the request class methods; previously the metadata-wrapped response made it fail after the request had succeeded.

‎src/spacetrack/base.py‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,11 @@ def generic_request(
752752
def _parse_types(data, predicates):
753753
predicate_map = {p.name: p for p in predicates}
754754

755-
for obj in data:
755+
# With metadata=true, the rows are wrapped in a dict alongside the
756+
# request metadata.
757+
rows = data.get("data", []) if isinstance(data, Mapping) else data
758+
759+
for obj in rows:
756760
for key, value in obj.items():
757761
if key.lower() in predicate_map:
758762
obj[key] = predicate_map[key.lower()].parse(value)

‎tests/test_spacetrack.py‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,21 @@ def test_parse_types(client, httpx2_mock, mock_auth):
857857
assert "parse_types" in exc_info.value.args[0]
858858

859859

860+
def test_parse_types_metadata(client, httpx2_mock, mock_auth, mock_gp_predicates):
861+
httpx2_mock.add_response(
862+
method="GET",
863+
url=api_url("basicspacedata/query/class/gp/metadata/true"),
864+
json={
865+
"request_metadata": {"DataSize": "1"},
866+
"data": [{"LAUNCH_DATE": "2017-01-01"}],
867+
},
868+
)
869+
870+
result = client.gp(parse_types=True, metadata=True)
871+
872+
assert result["data"][0]["LAUNCH_DATE"] == dt.date(2017, 1, 1)
873+
874+
860875
def test_params(httpx2_mock, mock_auth):
861876
data = b"hello\n"
862877
httpx2_mock.add_response(

0 commit comments

Comments
 (0)