Skip to content

Commit aa5c98f

Browse files
Merge branch 'main' into dependabot/pip/requests-2.33.0
2 parents f54be7e + b63066b commit aa5c98f

9 files changed

Lines changed: 473 additions & 16 deletions

File tree

agents.md

Lines changed: 449 additions & 0 deletions
Large diffs are not rendered by default.

docs/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ mkdocstrings-python==0.7.1
4646
# via mkdocstrings
4747
packaging==21.3
4848
# via mkdocs
49-
pymdown-extensions==10.16.1
49+
pymdown-extensions==10.21.3
5050
# via mkdocstrings
5151
pyparsing==3.0.9
5252
# via packaging

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ readme = "README.md"
1616
requires-python = '>=3.10'
1717
dependencies = [
1818
"requests==2.33.0",
19+
"urllib3>=1.21.1,<3",
20+
"charset-normalizer>=2.0.0,<4.0.0",
1921
"types-requests==2.32.0.20241016",
2022
"tabulate==0.9.0",
2123
"types-tabulate==0.9.0.20240106",

src/geonoderest/geonodeobject.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,15 @@ def list(self, **kwargs) -> Optional[Dict]:
4848
return None
4949
return r[self.JSON_OBJECT_NAME]
5050

51-
def __parse_pk_string__(self, pk: str) -> List[int]:
51+
def __parse_pk_string__(self, pk) -> List[int]:
5252
"""
5353
differentiate between pk range, pk list or single pk
5454
5555
Args:
5656
pk (str): pk of the object, as string with range or list or single pk
5757
"""
5858

59+
pk = str(pk)
5960
# pk range: 5-10
6061
if "-" in pk:
6162
try:

src/geonoderest/maps.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from geonoderest.cmdprint import print_json, json_decode_error_handler
99
from geonoderest.datasets import GeonodeDatasetsHandler
10-
from geonoderest.geonodeobject import GeonodeObjectHandler
10+
from geonoderest.resources import GeonodeResourceHandler
1111
from geonoderest.geonodetypes import (
1212
GeonodeCmdOutListKey,
1313
GeonodeCmdOutDictKey,
@@ -17,7 +17,7 @@
1717
OGC_WCS_LINK_TYPE = "OGC:WCS"
1818

1919

20-
class GeonodeMapsHandler(GeonodeObjectHandler):
20+
class GeonodeMapsHandler(GeonodeResourceHandler):
2121
ENDPOINT_NAME = JSON_OBJECT_NAME = "maps"
2222
SINGULAR_RESOURCE_NAME = "map"
2323

src/geonoderest/resources.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class GeonodeResourceHandler(GeonodeObjectHandler):
2929
GeonodeCmdOutListKey(key="detail_url"),
3030
]
3131

32+
def delete(self, pk: int, **kwargs):
33+
return self.http_delete(endpoint=f"resources/{pk}/delete")
34+
3235
def cmd_metadata(
3336
self, pk: int, metadata_type: str = DEFAULT_METADATA_TYPE, **kwargs
3437
):

tests/test_datasets.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,24 @@ def test_patch(self, mock_http_patch):
2222
self.assertTrue(result["success"])
2323

2424
@patch.object(GeonodeDatasetsHandler, "http_delete")
25-
def test_delete_uses_typed_endpoint(self, mock_http_delete):
26-
"""Ensure delete only targets datasets, not generic resources endpoint."""
25+
def test_delete_uses_resources_endpoint(self, mock_http_delete):
26+
"""datasets API does not allow DELETE — delete must use resources/{pk}/delete."""
2727
mock_http_delete.return_value = {}
2828
handler = GeonodeDatasetsHandler(env={})
2929
handler.delete(pk=5)
30-
mock_http_delete.assert_called_once_with(endpoint="datasets/5/")
30+
mock_http_delete.assert_called_once_with(endpoint="resources/5/delete")
3131

3232
@patch.object(GeonodeDatasetsHandler, "http_delete")
33-
def test_delete_range_uses_typed_endpoint(self, mock_http_delete):
34-
"""Ensure range delete only calls dataset endpoint for each pk in range."""
33+
def test_delete_range_uses_resources_endpoint(self, mock_http_delete):
34+
"""datasets API does not allow DELETE — range delete must use resources endpoint."""
3535
mock_http_delete.return_value = {}
3636
handler = GeonodeDatasetsHandler(env={})
3737
for pk in range(1, 4):
3838
handler.delete(pk=pk)
3939
calls = [c.kwargs["endpoint"] for c in mock_http_delete.call_args_list]
40-
self.assertEqual(calls, ["datasets/1/", "datasets/2/", "datasets/3/"])
40+
self.assertEqual(
41+
calls, ["resources/1/delete", "resources/2/delete", "resources/3/delete"]
42+
)
4143

4244

4345
if __name__ == "__main__":

tests/test_documents.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ def test_patch(self, mock_http_patch):
2424
self.assertTrue(result["success"])
2525

2626
@patch.object(GeonodeDocumentsHandler, "http_delete")
27-
def test_delete_uses_typed_endpoint(self, mock_http_delete):
28-
"""Ensure delete only targets documents, not generic resources endpoint."""
27+
def test_delete_uses_resources_endpoint(self, mock_http_delete):
28+
"""documents API does not allow DELETE — delete must use resources/{pk}/delete."""
2929
mock_http_delete.return_value = {}
3030
handler = GeonodeDocumentsHandler(env={})
3131
handler.delete(pk=7)
32-
mock_http_delete.assert_called_once_with(endpoint="documents/7/")
32+
mock_http_delete.assert_called_once_with(endpoint="resources/7/delete")
3333

3434

3535
if __name__ == "__main__":

tests/test_maps.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ def test_patch(self, mock_http_patch):
1919
self.assertTrue(result["success"])
2020

2121
@patch.object(GeonodeMapsHandler, "http_delete")
22-
def test_delete_uses_typed_endpoint(self, mock_http_delete):
23-
"""Ensure delete only targets maps, not generic resources endpoint."""
22+
def test_delete_uses_resources_endpoint(self, mock_http_delete):
23+
"""maps API does not allow DELETE — delete must use resources/{pk}/delete."""
2424
mock_http_delete.return_value = {}
2525
handler = GeonodeMapsHandler(env={})
2626
handler.delete(pk=5)
27-
mock_http_delete.assert_called_once_with(endpoint="maps/5/")
27+
mock_http_delete.assert_called_once_with(endpoint="resources/5/delete")
2828

2929

3030
if __name__ == "__main__":

0 commit comments

Comments
 (0)