tilemap-editor 3.1.2__tar.gz → 3.1.3__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.
- {tilemap_editor-3.1.2/src/tilemap_editor.egg-info → tilemap_editor-3.1.3}/PKG-INFO +1 -1
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/pyproject.toml +1 -1
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/editor.py +1 -1
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/settings.py +4 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3/src/tilemap_editor.egg-info}/PKG-INFO +1 -1
- tilemap_editor-3.1.3/tests/test_project_paths.py +145 -0
- tilemap_editor-3.1.2/tests/test_project_paths.py +0 -73
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/LICENSE +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/MANIFEST.in +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/README.md +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/arrow-down.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/check.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/checked.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/close.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/duplicate.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/error.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/file.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/filedead.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/fit.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/folder.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/grid.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/image.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/info.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/load.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/loop.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/pan.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/pause.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/pencil.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/play.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/plus.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/radio.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/reset.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/save.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/stop.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/tilemap.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/tileset.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/unchecked.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/warning.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/zoomin.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/icons/zoomout.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/setup.cfg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/configs/themes.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/constants.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/event_map.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/layers.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/main.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/character_collision/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/character_collision/editor.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/character_collision/models.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/character_collision/protocols.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/character_collision/shape_editor.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/character_collision/standalone.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/editor.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/models.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/protocols.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/standalone.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/__main__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/clipboard_util.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/editor.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/frame_picker.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/models.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/preview.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/protocols.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/runtime_load.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/standalone.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/timeline.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/validation.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/tileset_collision/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/tileset_collision/collision_painter.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/tileset_collision/editor.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/tileset_collision/models.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/tileset_collision/protocols.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/tileset_collision/standalone.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/standalone_automap.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/standalone_error_console.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/standalone_filemanager.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/standalone_image_viewer.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/__main__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/ToolMove.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/arrow-down.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/check.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/checked.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/close.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/duplicate.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/error.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/file.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/filedead.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/fit.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/folder.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/grid.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/image.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/info.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/load.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/loop.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/pan.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/pause.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/pencil.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/play.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/plus.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/radio.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/reset.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/save.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/stop.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/tilemap.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/tileset.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/unchecked.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/warning.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/zoomin.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/zoomout.svg +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/cli.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/main.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor.egg-info/SOURCES.txt +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor.egg-info/dependency_links.txt +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor.egg-info/entry_points.txt +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor.egg-info/requires.txt +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor.egg-info/top_level.txt +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/ttypes/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/ttypes/tilemap.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/editor_preference.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/error_handler.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/font_manager.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/history.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/icon_manager.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/icons_cache.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/log_capture.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/project_paths.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/serialization.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/standalone.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/utils/validation.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/__init__.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/automap_models.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/autotile_template.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/autotiler.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/filemanager.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/input.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/layer_selector.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/mapsetup.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/regex_automap_designer.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/tile_grid.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/tile_selector.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/collision_layer_mask.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/collision_layer_sidebar.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/draw_utils.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/fileinput.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/layer_type_dialog.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/menubar.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/mode_indicator.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/notification.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/property_editor.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/region_selector.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/status_bar.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/theme.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/tileset_type_dialog.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/toolbar.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/widgets/ui/tooltip.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/tests/test_collision_layer_mask.py +0 -0
- {tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/tests/test_collision_layer_sidebar.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tilemap-editor"
|
|
7
|
-
version = "3.1.
|
|
7
|
+
version = "3.1.3"
|
|
8
8
|
description = "Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -117,7 +117,7 @@ def _load_project_config() -> tuple[Path, Path, dict]:
|
|
|
117
117
|
data_root = base_path / data_path
|
|
118
118
|
|
|
119
119
|
if not data_root.exists():
|
|
120
|
-
raise RuntimeError(f"Data directory not found: {data_root}. Run 'tilemap-editor init' to create project structure.")
|
|
120
|
+
raise RuntimeError(f"Data directory not found: {data_root}. Run 'tilemap-editor init' to create the project structure.")
|
|
121
121
|
|
|
122
122
|
# Initialize error_handler with proper paths
|
|
123
123
|
log_root = data_root / "logs"
|
|
@@ -42,6 +42,10 @@ def init_settings(generate_main: bool = False) -> None:
|
|
|
42
42
|
|
|
43
43
|
print(f"Created settings.json at {settings_file}")
|
|
44
44
|
|
|
45
|
+
data_dir = base_path / settings["data_path"]
|
|
46
|
+
data_dir.mkdir(parents=True, exist_ok=True)
|
|
47
|
+
print(f"Created data directory: {data_dir}")
|
|
48
|
+
|
|
45
49
|
if generate_main:
|
|
46
50
|
generate_main_file()
|
|
47
51
|
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
import tempfile
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from unittest import mock
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
import sys
|
|
10
|
+
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
|
11
|
+
|
|
12
|
+
from utils.project_paths import to_project_path, resolve_project_path
|
|
13
|
+
from tilemap_editor.settings import init_settings
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@pytest.fixture
|
|
17
|
+
def tmp_base():
|
|
18
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
19
|
+
yield Path(tmp)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@pytest.fixture
|
|
23
|
+
def tmp_with_file(tmp_base):
|
|
24
|
+
target = tmp_base / "subdir" / "file.png"
|
|
25
|
+
target.parent.mkdir(parents=True)
|
|
26
|
+
target.touch()
|
|
27
|
+
return tmp_base, target
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class TestToProjectPath:
|
|
31
|
+
def test_relative_to_base(self, tmp_with_file):
|
|
32
|
+
base, target = tmp_with_file
|
|
33
|
+
assert to_project_path(target, base) == "subdir/file.png"
|
|
34
|
+
|
|
35
|
+
def test_absolute_input(self, tmp_base):
|
|
36
|
+
target = tmp_base / "file.png"
|
|
37
|
+
target.touch()
|
|
38
|
+
assert to_project_path(str(target), tmp_base) == "file.png"
|
|
39
|
+
|
|
40
|
+
def test_outside_base_directory(self, tmp_base):
|
|
41
|
+
base = tmp_base / "project"
|
|
42
|
+
base.mkdir()
|
|
43
|
+
outside = tmp_base / "outside" / "file.png"
|
|
44
|
+
outside.parent.mkdir(parents=True)
|
|
45
|
+
outside.touch()
|
|
46
|
+
|
|
47
|
+
result = to_project_path(outside, base)
|
|
48
|
+
assert ".." in result
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class TestResolveProjectPath:
|
|
52
|
+
def test_resolves_relative_to_base(self, tmp_base):
|
|
53
|
+
target = tmp_base / "subdir" / "file.png"
|
|
54
|
+
target.parent.mkdir(parents=True)
|
|
55
|
+
target.touch()
|
|
56
|
+
|
|
57
|
+
result = resolve_project_path("subdir/file.png", tmp_base, must_exist=True)
|
|
58
|
+
assert result == target.resolve()
|
|
59
|
+
|
|
60
|
+
def test_resolves_via_fallback(self, tmp_base):
|
|
61
|
+
base = tmp_base / "project"
|
|
62
|
+
base.mkdir()
|
|
63
|
+
fallback = tmp_base / "maps"
|
|
64
|
+
fallback.mkdir()
|
|
65
|
+
target = fallback / "assets" / "file.png"
|
|
66
|
+
target.parent.mkdir(parents=True)
|
|
67
|
+
target.touch()
|
|
68
|
+
|
|
69
|
+
stored = "assets/file.png"
|
|
70
|
+
result = resolve_project_path(stored, base, fallback_roots=[fallback], must_exist=True)
|
|
71
|
+
assert result == target.resolve()
|
|
72
|
+
|
|
73
|
+
def test_returns_first_candidate_when_not_exist(self, tmp_base):
|
|
74
|
+
stored = "nonexistent/file.png"
|
|
75
|
+
result = resolve_project_path(stored, tmp_base)
|
|
76
|
+
assert result == (tmp_base / stored).resolve()
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class TestInitSettings:
|
|
80
|
+
def test_creates_settings_json_and_data_dir(self):
|
|
81
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
82
|
+
tmp_path = Path(tmp).resolve()
|
|
83
|
+
orig_cwd = Path.cwd()
|
|
84
|
+
os.chdir(str(tmp_path))
|
|
85
|
+
try:
|
|
86
|
+
with mock.patch("builtins.input", return_value=str(tmp_path)):
|
|
87
|
+
init_settings()
|
|
88
|
+
|
|
89
|
+
settings_file = tmp_path / "settings.json"
|
|
90
|
+
assert settings_file.exists()
|
|
91
|
+
|
|
92
|
+
with open(settings_file) as f:
|
|
93
|
+
cfg = json.load(f)
|
|
94
|
+
assert cfg["base_path"] == str(tmp_path)
|
|
95
|
+
assert cfg["data_path"] == "data"
|
|
96
|
+
|
|
97
|
+
data_dir = tmp_path / "data"
|
|
98
|
+
assert data_dir.is_dir()
|
|
99
|
+
finally:
|
|
100
|
+
os.chdir(str(orig_cwd))
|
|
101
|
+
|
|
102
|
+
def test_uses_current_dir_as_default_base(self):
|
|
103
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
104
|
+
tmp_path = Path(tmp).resolve()
|
|
105
|
+
orig_cwd = Path.cwd()
|
|
106
|
+
os.chdir(str(tmp_path))
|
|
107
|
+
try:
|
|
108
|
+
with mock.patch("builtins.input", return_value=""):
|
|
109
|
+
init_settings()
|
|
110
|
+
|
|
111
|
+
settings_file = tmp_path / "settings.json"
|
|
112
|
+
assert settings_file.exists()
|
|
113
|
+
|
|
114
|
+
with open(settings_file) as f:
|
|
115
|
+
cfg = json.load(f)
|
|
116
|
+
assert Path(cfg["base_path"]).resolve() == tmp_path
|
|
117
|
+
finally:
|
|
118
|
+
os.chdir(str(orig_cwd))
|
|
119
|
+
|
|
120
|
+
def test_aborts_if_settings_already_exists(self):
|
|
121
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
122
|
+
tmp_path = Path(tmp).resolve()
|
|
123
|
+
(tmp_path / "settings.json").touch()
|
|
124
|
+
orig_cwd = Path.cwd()
|
|
125
|
+
os.chdir(str(tmp_path))
|
|
126
|
+
try:
|
|
127
|
+
with mock.patch("builtins.input", return_value=str(tmp_path)):
|
|
128
|
+
with pytest.raises(RuntimeError, match="already exists"):
|
|
129
|
+
init_settings()
|
|
130
|
+
finally:
|
|
131
|
+
os.chdir(str(orig_cwd))
|
|
132
|
+
|
|
133
|
+
def test_creates_main_file_when_flag_set(self):
|
|
134
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
135
|
+
tmp_path = Path(tmp).resolve()
|
|
136
|
+
orig_cwd = Path.cwd()
|
|
137
|
+
os.chdir(str(tmp_path))
|
|
138
|
+
try:
|
|
139
|
+
with mock.patch("builtins.input", return_value=str(tmp_path)):
|
|
140
|
+
init_settings(generate_main=True)
|
|
141
|
+
|
|
142
|
+
src_main = tmp_path / "src" / "main.py"
|
|
143
|
+
assert src_main.exists()
|
|
144
|
+
finally:
|
|
145
|
+
os.chdir(str(orig_cwd))
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import tempfile
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
|
|
4
|
-
import sys
|
|
5
|
-
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
|
6
|
-
|
|
7
|
-
from utils.project_paths import to_project_path, resolve_project_path
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class TestToProjectPath:
|
|
11
|
-
def test_relative_to_base(self):
|
|
12
|
-
with tempfile.TemporaryDirectory() as tmp:
|
|
13
|
-
base = Path(tmp)
|
|
14
|
-
target = base / "subdir" / "file.png"
|
|
15
|
-
target.parent.mkdir(parents=True)
|
|
16
|
-
target.touch()
|
|
17
|
-
|
|
18
|
-
result = to_project_path(target, base)
|
|
19
|
-
assert result == "subdir/file.png"
|
|
20
|
-
|
|
21
|
-
def test_absolute_input(self):
|
|
22
|
-
with tempfile.TemporaryDirectory() as tmp:
|
|
23
|
-
base = Path(tmp)
|
|
24
|
-
target = base / "file.png"
|
|
25
|
-
target.touch()
|
|
26
|
-
|
|
27
|
-
result = to_project_path(str(target), base)
|
|
28
|
-
assert result == "file.png"
|
|
29
|
-
|
|
30
|
-
def test_outside_base_directory(self):
|
|
31
|
-
with tempfile.TemporaryDirectory() as tmp:
|
|
32
|
-
base = Path(tmp) / "project"
|
|
33
|
-
base.mkdir()
|
|
34
|
-
outside = Path(tmp) / "outside" / "file.png"
|
|
35
|
-
outside.parent.mkdir(parents=True)
|
|
36
|
-
outside.touch()
|
|
37
|
-
|
|
38
|
-
result = to_project_path(outside, base)
|
|
39
|
-
assert ".." in result
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class TestResolveProjectPath:
|
|
43
|
-
def test_resolves_relative_to_base(self):
|
|
44
|
-
with tempfile.TemporaryDirectory() as tmp:
|
|
45
|
-
base = Path(tmp)
|
|
46
|
-
target = base / "subdir" / "file.png"
|
|
47
|
-
target.parent.mkdir(parents=True)
|
|
48
|
-
target.touch()
|
|
49
|
-
|
|
50
|
-
stored = "subdir/file.png"
|
|
51
|
-
result = resolve_project_path(stored, base, must_exist=True)
|
|
52
|
-
assert result == target.resolve()
|
|
53
|
-
|
|
54
|
-
def test_resolves_via_fallback(self):
|
|
55
|
-
with tempfile.TemporaryDirectory() as tmp:
|
|
56
|
-
base = Path(tmp) / "project"
|
|
57
|
-
base.mkdir()
|
|
58
|
-
fallback = Path(tmp) / "maps"
|
|
59
|
-
fallback.mkdir()
|
|
60
|
-
target = fallback / "assets" / "file.png"
|
|
61
|
-
target.parent.mkdir(parents=True)
|
|
62
|
-
target.touch()
|
|
63
|
-
|
|
64
|
-
stored = "assets/file.png"
|
|
65
|
-
result = resolve_project_path(stored, base, fallback_roots=[fallback], must_exist=True)
|
|
66
|
-
assert result == target.resolve()
|
|
67
|
-
|
|
68
|
-
def test_returns_first_candidate_when_not_exist(self):
|
|
69
|
-
with tempfile.TemporaryDirectory() as tmp:
|
|
70
|
-
base = Path(tmp)
|
|
71
|
-
stored = "nonexistent/file.png"
|
|
72
|
-
result = resolve_project_path(stored, base)
|
|
73
|
-
assert result == (base / stored).resolve()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf
RENAMED
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf
RENAMED
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/character_collision/shape_editor.py
RENAMED
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/__init__.py
RENAMED
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/editor.py
RENAMED
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/models.py
RENAMED
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/protocols.py
RENAMED
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/object_tileset_collision/standalone.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/sprite_animation/clipboard_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/plugins/tileset_collision/collision_painter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor/assets/icons/arrow-down.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.1.2 → tilemap_editor-3.1.3}/src/tilemap_editor.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|