nds-mapviewer 2026.3.2.dev141__tar.gz → 2026.3.2.dev143__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 (31) hide show
  1. {nds_mapviewer-2026.3.2.dev141/src/nds_mapviewer.egg-info → nds_mapviewer-2026.3.2.dev143}/PKG-INFO +7 -1
  2. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/README.md +6 -0
  3. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143/src/nds_mapviewer.egg-info}/PKG-INFO +7 -1
  4. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/config.py +6 -0
  5. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/viewer.py +2 -1
  6. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/tests/test_config.py +19 -0
  7. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/tests/test_viewer.py +1 -0
  8. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/.gitignore +0 -0
  9. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/CHANGELOG.md +0 -0
  10. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/pyproject.toml +0 -0
  11. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/setup.cfg +0 -0
  12. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/setup.py +0 -0
  13. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/nds_mapviewer.egg-info/SOURCES.txt +0 -0
  14. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/nds_mapviewer.egg-info/dependency_links.txt +0 -0
  15. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/nds_mapviewer.egg-info/entry_points.txt +0 -0
  16. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/nds_mapviewer.egg-info/requires.txt +0 -0
  17. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/nds_mapviewer.egg-info/top_level.txt +0 -0
  18. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/__init__.py +0 -0
  19. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/browser.py +0 -0
  20. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/cli.py +0 -0
  21. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/clipboard.py +0 -0
  22. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/container_runtime.py +0 -0
  23. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/docker_client.py +0 -0
  24. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/exceptions.py +0 -0
  25. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/tui.py +0 -0
  26. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/src/ndslive/mapviewer/ui.py +0 -0
  27. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/tests/conftest.py +0 -0
  28. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/tests/test_cli.py +0 -0
  29. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/tests/test_clipboard.py +0 -0
  30. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/tests/test_docker_client.py +0 -0
  31. {nds_mapviewer-2026.3.2.dev141 → nds_mapviewer-2026.3.2.dev143}/tests/test_tui.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nds-mapviewer
3
- Version: 2026.3.2.dev141
3
+ Version: 2026.3.2.dev143
4
4
  Summary: CLI to run the NDS MapViewer Docker container for visualizing map data (NDS.Live, GeoJSON, and more)
5
5
  Author-email: NDS Association <support@nds-association.org>
6
6
  License: Proprietary
@@ -127,6 +127,12 @@ The run screen shows, below the info banner, the source you passed (a config
127
127
  file or a directly-given data-source path such as a `*.ndslive` filestore) and
128
128
  the mapped config that was generated and mounted into the container.
129
129
 
130
+ That mapped YAML is a disposable, one-way transformed copy. Map-preset catalogs
131
+ configured under `erdblick.mapPresets` are passed through, but the browser marks
132
+ their management surface read-only in CLI-launched sessions; edits are not written
133
+ back to the original host config. Edit the host YAML and let the normal config sync
134
+ reload it instead.
135
+
130
136
  ## Editions
131
137
 
132
138
  | Edition | Formats | Access |
@@ -94,6 +94,12 @@ The run screen shows, below the info banner, the source you passed (a config
94
94
  file or a directly-given data-source path such as a `*.ndslive` filestore) and
95
95
  the mapped config that was generated and mounted into the container.
96
96
 
97
+ That mapped YAML is a disposable, one-way transformed copy. Map-preset catalogs
98
+ configured under `erdblick.mapPresets` are passed through, but the browser marks
99
+ their management surface read-only in CLI-launched sessions; edits are not written
100
+ back to the original host config. Edit the host YAML and let the normal config sync
101
+ reload it instead.
102
+
97
103
  ## Editions
98
104
 
99
105
  | Edition | Formats | Access |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nds-mapviewer
3
- Version: 2026.3.2.dev141
3
+ Version: 2026.3.2.dev143
4
4
  Summary: CLI to run the NDS MapViewer Docker container for visualizing map data (NDS.Live, GeoJSON, and more)
5
5
  Author-email: NDS Association <support@nds-association.org>
6
6
  License: Proprietary
@@ -127,6 +127,12 @@ The run screen shows, below the info banner, the source you passed (a config
127
127
  file or a directly-given data-source path such as a `*.ndslive` filestore) and
128
128
  the mapped config that was generated and mounted into the container.
129
129
 
130
+ That mapped YAML is a disposable, one-way transformed copy. Map-preset catalogs
131
+ configured under `erdblick.mapPresets` are passed through, but the browser marks
132
+ their management surface read-only in CLI-launched sessions; edits are not written
133
+ back to the original host config. Edit the host YAML and let the normal config sync
134
+ reload it instead.
135
+
130
136
  ## Editions
131
137
 
132
138
  | Edition | Formats | Access |
@@ -268,6 +268,7 @@ def transform_config(
268
268
  config: dict[str, Any],
269
269
  base_dir: str | Path | None = None,
270
270
  existing_volumes: list[VolumeMount] | None = None,
271
+ ephemeral: bool = False,
271
272
  ) -> TransformedConfig:
272
273
  """
273
274
  Transform a MapViewer config for Docker execution.
@@ -280,6 +281,11 @@ def transform_config(
280
281
  import copy
281
282
 
282
283
  transformed = copy.deepcopy(config)
284
+ if ephemeral:
285
+ erdblick = transformed.setdefault("erdblick", {})
286
+ if not isinstance(erdblick, dict):
287
+ raise ConfigError("erdblick must be an object before launcher metadata can be added")
288
+ erdblick["_configEphemeral"] = True
283
289
  existing_by_host: dict[tuple[Path, str], str] = {}
284
290
  used_container_paths: set[str] = set()
285
291
  for volume in existing_volumes or []:
@@ -265,7 +265,7 @@ class MapViewer:
265
265
  str(self._config_path) if self._config_path else None,
266
266
  )
267
267
 
268
- return transform_config(config, base_dir=config_base_dir)
268
+ return transform_config(config, base_dir=config_base_dir, ephemeral=True)
269
269
 
270
270
  def _ensure_image(self, pull: bool = True) -> str:
271
271
  """Ensure the Docker image is available, pulling if needed."""
@@ -496,6 +496,7 @@ class MapViewer:
496
496
  config,
497
497
  base_dir=source_file.parent,
498
498
  existing_volumes=active_volumes,
499
+ ephemeral=True,
499
500
  )
500
501
  missing_mounts = self._unmounted_volumes(
501
502
  transformed.volumes,
@@ -241,6 +241,25 @@ class TestTransformConfigLocalhostUri:
241
241
  class TestTransformConfig:
242
242
  """Tests for transform_config()."""
243
243
 
244
+ @pytest.mark.parametrize("catalog", [[], [{
245
+ "id": "network",
246
+ "name": "Network",
247
+ "enabled": True,
248
+ "layerPresets": [{
249
+ "layerId": "Lane",
250
+ "styleId": "Lanes",
251
+ "presetId": "topology",
252
+ }],
253
+ }]])
254
+ def test_map_presets_round_trip_without_asset_mounts(self, catalog):
255
+ config = {"sources": [], "erdblick": {"mapPresets": catalog}}
256
+
257
+ result = transform_config(config, ephemeral=True)
258
+
259
+ assert result.config["erdblick"]["mapPresets"] == catalog
260
+ assert result.config["erdblick"]["_configEphemeral"] is True
261
+ assert result.volumes == []
262
+
244
263
  def test_http_only_no_volumes(self):
245
264
  """HTTP-only config produces no volume mounts."""
246
265
  config = {
@@ -136,6 +136,7 @@ class TestMapViewerConfigTransformation:
136
136
 
137
137
  assert transformed.config is not None
138
138
  assert transformed.volumes == []
139
+ assert transformed.config["erdblick"]["_configEphemeral"] is True
139
140
  assert mv.original_config is not None
140
141
 
141
142
  def test_load_and_transform_local_path(self, sample_config_with_local_path):