PyGeoModel 1.0.12__tar.gz → 1.0.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/PKG-INFO +1 -1
  2. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/PyGeoModel.egg-info/PKG-INFO +1 -1
  3. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/__init__.py +1 -1
  4. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/client.py +23 -1
  5. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/results.py +1 -1
  6. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/setup.py +1 -1
  7. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/tests/test_core_api.py +41 -0
  8. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/LICENSE +0 -0
  9. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/MANIFEST.in +0 -0
  10. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/PyGeoModel.egg-info/SOURCES.txt +0 -0
  11. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/PyGeoModel.egg-info/dependency_links.txt +0 -0
  12. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/PyGeoModel.egg-info/requires.txt +0 -0
  13. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/PyGeoModel.egg-info/top_level.txt +0 -0
  14. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/README.md +0 -0
  15. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/__init__.py +0 -0
  16. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/base.py +0 -0
  17. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/constants.py +0 -0
  18. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/openModel.py +0 -0
  19. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/openUtils/__init__.py +0 -0
  20. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/openUtils/exceptions.py +0 -0
  21. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/openUtils/http_client.py +0 -0
  22. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/openUtils/mdlUtils.py +0 -0
  23. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/openUtils/parameterValidator.py +0 -0
  24. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/ogmsServer2/openUtils/stateManager.py +0 -0
  25. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/config.py +0 -0
  26. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/consensus.py +0 -0
  27. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/context.py +0 -0
  28. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/data/__init__.py +0 -0
  29. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/data/computeModel.json +0 -0
  30. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/data/modelContext.txt +0 -0
  31. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/modeler.py +0 -0
  32. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/models.py +0 -0
  33. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/notebook.py +0 -0
  34. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/qa.py +0 -0
  35. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/pygeomodel/recommendation.py +0 -0
  36. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/scripts.py +0 -0
  37. {pygeomodel-1.0.12 → pygeomodel-1.0.13}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyGeoModel
3
- Version: 1.0.12
3
+ Version: 1.0.13
4
4
  Summary: A Python package for integrating OpenGMS geographic model services.
5
5
  Home-page: https://github.com/MpLebron/PyGeoModel
6
6
  Author: Peilong Ma
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyGeoModel
3
- Version: 1.0.12
3
+ Version: 1.0.13
4
4
  Summary: A Python package for integrating OpenGMS geographic model services.
5
5
  Home-page: https://github.com/MpLebron/PyGeoModel
6
6
  Author: Peilong Ma
@@ -5,7 +5,7 @@ from .modeler import GeoModeler
5
5
  from .models import ModelInput, ModelOutput, ModelService, ModelSummary
6
6
  from .results import QAResult, RecommendationResult, TaskResult
7
7
 
8
- __version__ = "1.0.12"
8
+ __version__ = "1.0.13"
9
9
 
10
10
  __all__ = [
11
11
  "GeoModeler",
@@ -5,13 +5,18 @@ from __future__ import annotations
5
5
  import time
6
6
  from pathlib import Path
7
7
  from typing import Any
8
- from urllib.parse import quote
8
+ from urllib.parse import quote, urlparse, urlunparse
9
9
 
10
10
  import requests
11
11
 
12
12
  from .config import OpenGMSConfig, get_opengms_config
13
13
 
14
14
 
15
+ PUBLIC_DATA_DOWNLOAD_HOST = "geomodeling.njnu.edu.cn"
16
+ PUBLIC_DATA_DOWNLOAD_PREFIX = "/dataTransferServer"
17
+ INTERNAL_DATA_DOWNLOAD_HOSTS = {"221.224.35.86:38083"}
18
+
19
+
15
20
  class OpenGMSClient:
16
21
  """Thin client around OpenGMS model-service endpoints."""
17
22
 
@@ -105,6 +110,7 @@ def download_output_files(outputs: list[dict[str, Any]], output_dir: str | Path)
105
110
  url = output.get("url")
106
111
  if not url:
107
112
  continue
113
+ url = normalize_download_url(url)
108
114
  suffix = output.get("suffix") or "dat"
109
115
  tag = output.get("tag") or output.get("event") or f"output_{index + 1}"
110
116
  target = output_path / f"{tag}.{suffix}"
@@ -113,3 +119,19 @@ def download_output_files(outputs: list[dict[str, Any]], output_dir: str | Path)
113
119
  target.write_bytes(response.content)
114
120
  downloaded.append(str(target))
115
121
  return downloaded
122
+
123
+
124
+ def normalize_download_url(url: str) -> str:
125
+ parsed = urlparse(url)
126
+ if parsed.netloc in INTERNAL_DATA_DOWNLOAD_HOSTS and parsed.path.startswith("/data/"):
127
+ return urlunparse(
128
+ (
129
+ "https",
130
+ PUBLIC_DATA_DOWNLOAD_HOST,
131
+ f"{PUBLIC_DATA_DOWNLOAD_PREFIX}{parsed.path}",
132
+ "",
133
+ parsed.query,
134
+ parsed.fragment,
135
+ )
136
+ )
137
+ return url
@@ -30,7 +30,7 @@ class TaskResult:
30
30
  params: dict[str, Any] = field(default_factory=dict)
31
31
  uploaded_inputs: dict[str, Any] = field(default_factory=dict)
32
32
  endpoint: str | None = None
33
- pygeomodel_version: str = "1.0.10"
33
+ pygeomodel_version: str = "1.0.13"
34
34
  execution_time: float | None = None
35
35
  record_path: str | None = None
36
36
  created_at: float = field(default_factory=time.time)
@@ -11,7 +11,7 @@ def read_readme():
11
11
 
12
12
  setup(
13
13
  name="PyGeoModel",
14
- version="1.0.12",
14
+ version="1.0.13",
15
15
  author="Peilong Ma",
16
16
  author_email="mpl_gis@nnu.edu.cn",
17
17
  description="A Python package for integrating OpenGMS geographic model services.",
@@ -127,6 +127,47 @@ class CoreApiTests(unittest.TestCase):
127
127
  [str(Path(tmpdir) / "outputs" / "SolarCalculation-roofSloar.zip")],
128
128
  )
129
129
 
130
+ def test_download_rewrites_internal_data_node_urls_to_public_gateway(self):
131
+ import pygeomodel.client as client_module
132
+
133
+ requested_urls = []
134
+
135
+ class FakeResponse:
136
+ content = b"downloaded-output"
137
+
138
+ def raise_for_status(self):
139
+ return None
140
+
141
+ original_get = client_module.requests.get
142
+ try:
143
+ def fake_get(url, timeout):
144
+ requested_urls.append(url)
145
+ self.assertEqual(timeout, 120)
146
+ return FakeResponse()
147
+
148
+ client_module.requests.get = fake_get
149
+ with tempfile.TemporaryDirectory() as tmpdir:
150
+ returned = client_module.download_output_files(
151
+ [
152
+ {
153
+ "url": "http://221.224.35.86:38083/data/687d91a4-f205-4659-ae9d-dd2aed896f8c?pwd=",
154
+ "tag": "SolarCalculation-roofSloar",
155
+ "suffix": "zip",
156
+ }
157
+ ],
158
+ tmpdir,
159
+ )
160
+ self.assertEqual(Path(returned[0]).read_bytes(), b"downloaded-output")
161
+ finally:
162
+ client_module.requests.get = original_get
163
+
164
+ self.assertEqual(
165
+ requested_urls,
166
+ [
167
+ "https://geomodeling.njnu.edu.cn/dataTransferServer/data/687d91a4-f205-4659-ae9d-dd2aed896f8c?pwd="
168
+ ],
169
+ )
170
+
130
171
  def test_model_invocation_preserves_multi_child_internal_params(self):
131
172
  from pygeomodel import GeoModeler
132
173
 
File without changes
File without changes
File without changes
File without changes
File without changes