From 66a1a93b061704fc3f99edb2585623f3e9f469c7 Mon Sep 17 00:00:00 2001 From: Arpit Jain Date: Thu, 18 Jun 2026 03:09:32 +0900 Subject: [PATCH] Fix point query formatting for small coordinates Signed-off-by: Arpit Jain --- cmr/queries.py | 13 ++++++++++++- tests/test_granule.py | 6 ++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cmr/queries.py b/cmr/queries.py index 1cf0f69..db4c162 100644 --- a/cmr/queries.py +++ b/cmr/queries.py @@ -4,6 +4,7 @@ from abc import abstractmethod from collections import defaultdict +from decimal import Decimal from datetime import date, datetime, timezone from inspect import getmembers, ismethod from re import search @@ -625,7 +626,17 @@ def point(self, lon: FloatLike, lat: FloatLike) -> Self: if "point" not in self.params: self.params["point"] = [] - self.params["point"].append(f"{lon},{lat}") + # CMR rejects scientific notation in point query parameters. + lon_as_str = format(Decimal(str(lon)), "f") + lat_as_str = format(Decimal(str(lat)), "f") + + if "." not in lon_as_str: + lon_as_str += ".0" + + if "." not in lat_as_str: + lat_as_str += ".0" + + self.params["point"].append(f"{lon_as_str},{lat_as_str}") return self diff --git a/tests/test_granule.py b/tests/test_granule.py index fbf188f..9a61496 100644 --- a/tests/test_granule.py +++ b/tests/test_granule.py @@ -505,6 +505,12 @@ def test_valid_parameters(self): self.assertEqual(query.params["version"], "003") self.assertEqual(query.params["point"], ["-100.0,42.0"]) + def test_point_avoids_scientific_notation(self): + query = GranuleQuery().short_name("FOO").point(42, 0.00001) + + self.assertEqual(query.params["point"], ["42.0,0.00001"]) + self.assertIn("point[]=42.0,0.00001", query._build_url()) + def test_invalid_parameters(self): query = GranuleQuery()