Photo-Composition-Designer 0.0.7__py3-none-any.whl

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 (40) hide show
  1. Photo_Composition_Designer/__init__.py +0 -0
  2. Photo_Composition_Designer/__main__.py +8 -0
  3. Photo_Composition_Designer/_version.py +34 -0
  4. Photo_Composition_Designer/cli/__init__.py +0 -0
  5. Photo_Composition_Designer/cli/__main__.py +8 -0
  6. Photo_Composition_Designer/cli/cli.py +106 -0
  7. Photo_Composition_Designer/common/Anniversaries.py +93 -0
  8. Photo_Composition_Designer/common/Locations.py +87 -0
  9. Photo_Composition_Designer/common/MoonPhase.py +85 -0
  10. Photo_Composition_Designer/common/Photo.py +113 -0
  11. Photo_Composition_Designer/common/__init__.py +0 -0
  12. Photo_Composition_Designer/common/logging.py +216 -0
  13. Photo_Composition_Designer/config/__init__.py +0 -0
  14. Photo_Composition_Designer/config/config.py +321 -0
  15. Photo_Composition_Designer/core/__init__.py +0 -0
  16. Photo_Composition_Designer/core/base.py +383 -0
  17. Photo_Composition_Designer/gui/GuiLogWriter.py +79 -0
  18. Photo_Composition_Designer/gui/__init__.py +0 -0
  19. Photo_Composition_Designer/gui/__main__.py +8 -0
  20. Photo_Composition_Designer/gui/gui.py +565 -0
  21. Photo_Composition_Designer/image/CalendarRenderer.py +319 -0
  22. Photo_Composition_Designer/image/CollageRenderer.py +433 -0
  23. Photo_Composition_Designer/image/DescriptionRenderer.py +74 -0
  24. Photo_Composition_Designer/image/MapRenderer.py +101 -0
  25. Photo_Composition_Designer/image/__init__.py +0 -0
  26. Photo_Composition_Designer/tools/DescriptionsFileGenerator.py +44 -0
  27. Photo_Composition_Designer/tools/GeoPlotter.py +211 -0
  28. Photo_Composition_Designer/tools/Helpers.py +18 -0
  29. Photo_Composition_Designer/tools/ImageDistributor.py +153 -0
  30. Photo_Composition_Designer/tools/__init__.py +0 -0
  31. __init__.py +0 -0
  32. firewall_handler.py +198 -0
  33. main.py +146 -0
  34. path_handler.py +10 -0
  35. photo_composition_designer-0.0.7.dist-info/METADATA +205 -0
  36. photo_composition_designer-0.0.7.dist-info/RECORD +40 -0
  37. photo_composition_designer-0.0.7.dist-info/WHEEL +5 -0
  38. photo_composition_designer-0.0.7.dist-info/entry_points.txt +3 -0
  39. photo_composition_designer-0.0.7.dist-info/licenses/LICENSE +24 -0
  40. photo_composition_designer-0.0.7.dist-info/top_level.txt +5 -0
main.py ADDED
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Unified entry point for CLI and GUI application.
4
+ Automatically detects whether to run CLI or GUI based on how the application is started.
5
+ """
6
+
7
+ import os
8
+ import sys
9
+
10
+ import Photo_Composition_Designer.cli.cli as _force_cli_import
11
+ import Photo_Composition_Designer.gui.gui as _force_gui_import
12
+
13
+
14
+ def is_console_attached():
15
+ """
16
+ Check if the application is running in a console environment.
17
+ Returns True if launched from console, False if launched via double-click.
18
+ """
19
+ try:
20
+ # On Windows, check if we have a console attached
21
+ if os.name == "nt":
22
+ import ctypes
23
+
24
+ kernel32 = ctypes.windll.kernel32
25
+ # GetConsoleWindow returns 0 if no console is attached
26
+ console_window = kernel32.GetConsoleWindow()
27
+ if console_window == 0:
28
+ return False
29
+
30
+ # Check if the console was created by this process
31
+ # (indicates double-click launch with console auto-created)
32
+ process_list = kernel32.GetConsoleProcessList(None, 0)
33
+ if process_list <= 1:
34
+ return False
35
+
36
+ return True
37
+ else:
38
+ # On Unix-like systems (macOS, Linux), check multiple indicators
39
+ # Check if stdout is a terminal
40
+ if not sys.stdout.isatty():
41
+ return False
42
+
43
+ # Additional check for macOS: Check if we're running in a .app bundle
44
+ if sys.platform == "darwin":
45
+ # If we're in a .app bundle, we're likely launched via double-click
46
+ executable_path = sys.executable
47
+ if ".app/" in executable_path:
48
+ # We're in an app bundle, check if we have a real terminal
49
+ # by checking if TERM environment variable is set
50
+ return os.environ.get("TERM") is not None
51
+
52
+ return True
53
+ except Exception as ex:
54
+ # Fallback: assume GUI if we can't determine
55
+ print(ex)
56
+ return False
57
+
58
+
59
+ def has_command_line_args():
60
+ """Check if command line arguments (beyond script name) are provided."""
61
+ return len(sys.argv) > 1
62
+
63
+
64
+ def main():
65
+ """Main entry point that decides between CLI and GUI."""
66
+
67
+ # Force CLI mode if command line arguments are provided
68
+ if has_command_line_args():
69
+ run_cli()
70
+ return
71
+
72
+ # Check if we're in a console environment
73
+ if is_console_attached():
74
+ # We're in a console - offer choice or default to CLI
75
+ print("Python Template Project")
76
+ print("=" * 50)
77
+ print("Detected console environment.")
78
+ print("Options:")
79
+ print(" 1. Run CLI interface (default)")
80
+ print(" 2. Run GUI interface")
81
+ print(" 3. Show help")
82
+ print()
83
+
84
+ try:
85
+ choice = input("Select option [1]: ").strip()
86
+ if choice == "2":
87
+ run_gui()
88
+ elif choice == "3":
89
+ show_help()
90
+ else:
91
+ run_cli()
92
+ except (KeyboardInterrupt, EOFError):
93
+ print("\nExiting...")
94
+ sys.exit(0)
95
+ else:
96
+ # Launched via double-click - start GUI
97
+ run_gui()
98
+
99
+
100
+ def run_cli():
101
+ """Launch the CLI interface."""
102
+ try:
103
+ _force_cli_import.main()
104
+ except ImportError as e:
105
+ print(f"Error importing CLI module: {e}")
106
+ sys.exit(1)
107
+ except Exception as e:
108
+ print(f"Error running CLI: {e}")
109
+ sys.exit(1)
110
+
111
+
112
+ def run_gui():
113
+ try:
114
+ _force_gui_import.main()
115
+ except Exception as e:
116
+ print(f"Error running GUI: {e}")
117
+ print("Falling back to CLI interface...")
118
+ run_cli()
119
+
120
+
121
+ def show_help():
122
+ """Show help information."""
123
+ print("""
124
+ Unified Application
125
+
126
+ Usage:
127
+ When launched from console:
128
+ - Without arguments: Interactive mode selection
129
+ - With arguments: Direct CLI mode
130
+
131
+ When launched via double-click:
132
+ - Automatically starts GUI interface
133
+
134
+ Command Line Arguments:
135
+ Run with any CLI arguments to force CLI mode.
136
+
137
+ Examples:
138
+ python main.py --help # Shows CLI help
139
+ python main.py # Interactive mode selection
140
+ double-click main.exe # Starts GUI
141
+
142
+ """)
143
+
144
+
145
+ if __name__ == "__main__":
146
+ main()
path_handler.py ADDED
@@ -0,0 +1,10 @@
1
+ import sys
2
+ from pathlib import Path
3
+
4
+
5
+ def get_base_path() -> Path:
6
+ if hasattr(sys, "_MEIPASS"):
7
+ base = Path(sys._MEIPASS) # beim gebauten Executable
8
+ else:
9
+ base = Path(__file__).resolve().parent.parent
10
+ return base
@@ -0,0 +1,205 @@
1
+ Metadata-Version: 2.4
2
+ Name: Photo-Composition-Designer
3
+ Version: 0.0.7
4
+ Summary: Feature-rich Python project template for Photo-Composition-Designer.
5
+ Author: pamagister
6
+ Requires-Python: <3.12,>=3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: astral>=3.2
10
+ Requires-Dist: config-cli-gui>=0.2.7
11
+ Requires-Dist: exifread>=3.5.1
12
+ Requires-Dist: geopandas>=1.1.1
13
+ Requires-Dist: holidays>=0.84
14
+ Requires-Dist: matplotlib>=3.10.7
15
+ Requires-Dist: pillow>=12.0.0
16
+ Requires-Dist: pytz>=2025.2
17
+ Requires-Dist: shapely>=2.1.1
18
+ Provides-Extra: dev
19
+ Requires-Dist: pytest>=8.4.0; extra == "dev"
20
+ Requires-Dist: pytest-mock>=3.14.1; extra == "dev"
21
+ Requires-Dist: coverage>=7.8.2; extra == "dev"
22
+ Requires-Dist: flake8>=7.2.0; extra == "dev"
23
+ Requires-Dist: black>=25.1.0; extra == "dev"
24
+ Requires-Dist: isort>=6.0.1; extra == "dev"
25
+ Requires-Dist: pytest-cov>=6.1.1; extra == "dev"
26
+ Requires-Dist: mypy>=1.16.0; extra == "dev"
27
+ Requires-Dist: gitchangelog>=3.0.4; extra == "dev"
28
+ Requires-Dist: pyinstaller>=5.8; extra == "dev"
29
+ Requires-Dist: pre-commit>=4.2.0; extra == "dev"
30
+ Requires-Dist: ruff>=0.11.13; extra == "dev"
31
+ Provides-Extra: docs
32
+ Requires-Dist: mkdocs>=1.6.1; extra == "docs"
33
+ Requires-Dist: mkdocs-awesome-nav>=2.6.1; extra == "docs"
34
+ Requires-Dist: pygments>=2.19.1; extra == "docs"
35
+ Dynamic: license-file
36
+
37
+ # Welcome to Photo-Composition-Designer
38
+
39
+ A feature-rich Python project template with with auto-generated CLI, GUI and parameterized configuration.
40
+
41
+ [![Github CI Status](https://github.com/pamagister/Photo-Composition-Designer/actions/workflows/main.yml/badge.svg)](https://github.com/pamagister/Photo-Composition-Designer/actions)
42
+ [![GitHub release](https://img.shields.io/github/v/release/pamagister/Photo-Composition-Designer)](https://github.com/pamagister/Photo-Composition-Designer/releases)
43
+ [![Read the Docs](https://readthedocs.org/projects/Photo-Composition-Designer/badge/?version=stable)](https://Photo-Composition-Designer.readthedocs.io/en/stable/)
44
+ [![License](https://img.shields.io/github/license/pamagister/Photo-Composition-Designer)](https://github.com/pamagister/Photo-Composition-Designer/blob/main/LICENSE)
45
+ [![GitHub issues](https://img.shields.io/github/issues/pamagister/Photo-Composition-Designer)](https://github.com/pamagister/Photo-Composition-Designer/issues)
46
+ [![PyPI](https://img.shields.io/pypi/v/Photo-Composition-Designer)](https://pypi.org/project/Photo-Composition-Designer/)
47
+ [![Downloads](https://pepy.tech/badge/Photo-Composition-Designer)](https://pepy.tech/project/Photo-Composition-Designer/)
48
+
49
+
50
+ This template provides a solid foundation for your next Python project, incorporating best practices for testing, automation, and distribution. It streamlines the development process with a comprehensive set of pre-configured tools and workflows, allowing you to focus on writing code.
51
+
52
+ ---
53
+
54
+ ## How to use this template
55
+
56
+ Getting started on developing your own project based on this template
57
+
58
+ > **DO NOT FORK**
59
+ > This project is meant to be used from **[Use this template](https://github.com/pamagister/Photo-Composition-Designer/generate)** feature.
60
+
61
+ ---
62
+
63
+ 1. **Create a new repository using GitHub template**
64
+ Click on **[Use this template](https://github.com/pamagister/Photo-Composition-Designer/generate)**.
65
+
66
+ 2. **Give a name to your project**
67
+ For example: `my-python-project`
68
+ *(Hyphens may be used as project name; they are converted during renaming internally to underscores for packages.)*
69
+
70
+ 3. **Set write permissions**
71
+ Go to: `Repository -> Settings -> Actions -> General -> Workflow permissions`
72
+ Select: `Read and write permissions`, then click **Save**.
73
+
74
+ 4. **Trigger rename workflow**
75
+ Navigate to `Actions` tab → Select **Rename Action** → Run workflow on the `main` branch.
76
+
77
+ 5. **Wait for the workflow to finish**
78
+
79
+ 6. **Clone the repository**
80
+ Run:
81
+ ```bash
82
+ git clone [your-github-url]
83
+ ```
84
+
85
+ 7. **Open the project in your IDE**
86
+
87
+ 8. **Install dependencies and create virtual environment**
88
+ Run:
89
+
90
+ ```bash
91
+ make install
92
+ ```
93
+
94
+ 9. **Configure your IDE**
95
+ Set `.venv` as the local Python virtual environment.
96
+
97
+ 10. **Adjust project metadata**
98
+ Modify `pyproject.toml` (e.g., project description, authors, license, etc.)
99
+
100
+ 11. **Clean up template scripts**
101
+ Delete the files:
102
+
103
+ * `rename_project.yml`
104
+ * `rename_project.sh`
105
+
106
+ 12. **Format your codebase**
107
+ Run:
108
+
109
+ ```bash
110
+ make fmt
111
+ ```
112
+
113
+ This will auto-format your files and reorder imports (based on any name changes).
114
+
115
+ 13. **Enable pre-commit hooks**
116
+ Run:
117
+
118
+ ```bash
119
+ uv run pre-commit install
120
+ ```
121
+
122
+ 14. **Add repository to ReadTheDocs**
123
+ Visit: [https://app.readthedocs.org/dashboard/import/](https://app.readthedocs.org/dashboard/import/)
124
+
125
+ 15. **Configure PyPI publishing**
126
+
127
+ * Generate a **PyPI API token** from your PyPI account.
128
+ * Go to **GitHub → Settings → Secrets and variables → Actions**.
129
+ * Add the secret as `PYPI_API_TOKEN`.
130
+
131
+ 16. **Release your first version**
132
+ Run:
133
+
134
+ ```bash
135
+ make release
136
+ ```
137
+
138
+ ---
139
+
140
+ ## Feature overview
141
+
142
+ * 📦 **Package Management:** Utilizes [uv](https://docs.astral.sh/uv/getting-started/), an extremely fast Python package manager, with dependencies managed in `pyproject.toml`.
143
+ * ✅ **Code Formatting and Linting:** Pre-commit hook with the [RUFF auto-formatter](https://docs.astral.sh/ruff/) to ensure consistent code style.
144
+ * 🧪 **Testing:** Unit testing framework with [pytest](https://docs.pytest.org/en/latest/).
145
+ * 📊 **Code coverage reports** using [codecov](https://about.codecov.io/sign-up/)
146
+ * 🔄 **CI/CD:** [GitHub Actions](https://github.com/features/actions) for automated builds (Windows, macOS), unit tests, and code checks.
147
+ * 💾 **Automated Builds:** GitHub pipeline for automatically building a Windows executable and a macOS installer.
148
+ * 💬 **Parameter-Driven Automation:**
149
+ * Automatic generation of a configuration file from parameter definitions.
150
+ * Automatic generation of a Command-Line Interface (CLI) from the same parameters.
151
+ * Automatic generation of CLI API documentation.
152
+ * Automatic generation of change log using **gitchangelog** to keep a HISTORY.md file up to date.
153
+ * 📃 **Documentation:** Configuration for publishing documentation on [Read the Docs](https://about.readthedocs.com/) using [mkdocs](https://www.mkdocs.org/) .
154
+ * 🖼️ **Minimalist GUI:** Comes with a basic GUI based on [tkinker](https://tkdocs.com/tutorial/index.html) that includes an auto-generated settings menu based on your defined parameters.
155
+ * 🖥️ **Workflow Automation:** A `Makefile` is included to simplify and automate common development tasks.
156
+ * 🛳️ **Release pipeline:** Automated releases unsing the Makefile `make release` command, which creates a new tag and pushes it to the remote repo. The `release` pipeline will automatically create a new release on GitHub and trigger a release on [PyPI](https://pypi.org.
157
+ * **[setuptools](https://pypi.org/project/setuptools/)** is used to package the project and manage dependencies.
158
+ * **[setuptools-scm](https://pypi.org/project/setuptools-scm/)** is used to automatically generate the `_version.py` file from the `pyproject.toml` file.
159
+
160
+ ---
161
+
162
+ ## Installation
163
+
164
+ Get an impression of how your own project could be installed and look like.
165
+
166
+ Download from [PyPI](https://pypi.org/).
167
+
168
+ 💾 For more installation options see [install](getting-started/install.md).
169
+
170
+ ```bash
171
+ pip install Photo-Composition-Designer
172
+ ```
173
+
174
+ Run GUI from command line
175
+
176
+ ```bash
177
+ Photo-Composition-Designer-gui
178
+ ```
179
+
180
+ Run application from command line using CLI
181
+
182
+ ```bash
183
+ python -m Photo_Composition_Designer.cli [OPTIONS] path/to/file
184
+ ```
185
+
186
+ ```bash
187
+ Photo-Composition-Designer-cli [OPTIONS] path/to/file
188
+ ```
189
+
190
+ ---
191
+
192
+ ## Troubleshooting
193
+
194
+ ### Problems with release pipeline
195
+
196
+ If you get this error below:
197
+ ```bash
198
+ /home/runner/work/_temp/xxxx_xxx.sh: line 1: .github/release_message.sh: Permission denied
199
+ ```
200
+
201
+ You have to run these commands in your IDE Terminal or the git bash and then push the changes.
202
+ ```bash
203
+ git update-index --chmod=+x ./.github/release_message.sh
204
+ ```
205
+
@@ -0,0 +1,40 @@
1
+ __init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ firewall_handler.py,sha256=qT0dInkeKHulpCQD2x3HH7_lMxz4lwdkIPxEvBSl3No,7336
3
+ main.py,sha256=j5R0od1hnX6oBvbj6Zq1sG8gIi_e6dMxAGFChnkACx0,4240
4
+ path_handler.py,sha256=bH0yfH3rMNO0EmdJSG3R7rnxDF3bEAlALkQNWujn3dc,242
5
+ Photo_Composition_Designer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ Photo_Composition_Designer/__main__.py,sha256=0lpgWd0a9e4OSMh-q-xHRRcciy6LH9wY1kkdzvirHII,198
7
+ Photo_Composition_Designer/_version.py,sha256=AV58KqMkBGaCvmPdbd3g9huyNXfIVxjw8QbCMdaeivU,704
8
+ Photo_Composition_Designer/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ Photo_Composition_Designer/cli/__main__.py,sha256=qnGkoNNbhnvLTA24X8YTEDxRqDbNEAzgjp9Ki_JYIhs,184
10
+ Photo_Composition_Designer/cli/cli.py,sha256=59fVRDCJMdty9QU3nseVDnzxYIdwh6Gvn__E3YzwdT0,3401
11
+ Photo_Composition_Designer/common/Anniversaries.py,sha256=jO0HeGjffoqOg1xzSLhGgzm2JRYyAccFNpbO_z3ryok,3184
12
+ Photo_Composition_Designer/common/Locations.py,sha256=1CKMorFmsvBjUoiC8I6djuB0b7In7UxBTfNiVPUOMSU,2676
13
+ Photo_Composition_Designer/common/MoonPhase.py,sha256=QUVtRJ5fCz7wNDXzxBUDEUDkiii1dfZydtAyzJh0m5o,2570
14
+ Photo_Composition_Designer/common/Photo.py,sha256=ZnOunPCRJLrTph4ZY73yQF3kb7LV8GH1t10s_YE3O8E,4341
15
+ Photo_Composition_Designer/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ Photo_Composition_Designer/common/logging.py,sha256=sHFQaSkh8QgxfU8cC0CgEqL0XTIpU9e8nX_kGPz8Jpc,6735
17
+ Photo_Composition_Designer/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ Photo_Composition_Designer/config/config.py,sha256=QFT-ZtwIQjMxCJlXqNLjarPjcKkED_8GUHq6ilqjjq4,8794
19
+ Photo_Composition_Designer/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ Photo_Composition_Designer/core/base.py,sha256=CyfC688ySC4n5og1LAplM_o9jgQkGbYEquqM9hfgiJE,15755
21
+ Photo_Composition_Designer/gui/GuiLogWriter.py,sha256=g5bCuNVMOmNhRpj92UcNaP8tKZnueAJ9FAqj3wXAYjc,3337
22
+ Photo_Composition_Designer/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ Photo_Composition_Designer/gui/__main__.py,sha256=5AaiBxNCAKWcuSQFcQ_lsEQfEsXm6BA5-i5MScdf30c,184
24
+ Photo_Composition_Designer/gui/gui.py,sha256=qchl9DPL0cS9OFDYHjopDefP8RKH6A5KkjXHOcTDHhM,21966
25
+ Photo_Composition_Designer/image/CalendarRenderer.py,sha256=7IWzQd0D6dJSpjMdKEUOhwsDpSOc8yoRNo22Xka_4wU,11285
26
+ Photo_Composition_Designer/image/CollageRenderer.py,sha256=aEGuImseG7rPYGG_jzLDkOsapBysHEKvCNp3rhurjLE,18387
27
+ Photo_Composition_Designer/image/DescriptionRenderer.py,sha256=ggBQ8vojH8Ew9jVSpzRsztAbF_3lFW5FcoLddqRNaxg,2330
28
+ Photo_Composition_Designer/image/MapRenderer.py,sha256=iN6juM36U6NRRAewWVHtq6XAQcUb6Wa02_6ygb89e18,3566
29
+ Photo_Composition_Designer/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ Photo_Composition_Designer/tools/DescriptionsFileGenerator.py,sha256=oqf7UHnZXS0jxt1ldH4WMFyhj76rtGB1-wxYpKdQkrE,1602
31
+ Photo_Composition_Designer/tools/GeoPlotter.py,sha256=C6P5Eg4TMGWKl42v3lFwdiIoVDL1VDvsNiIplipaMt8,7557
32
+ Photo_Composition_Designer/tools/Helpers.py,sha256=Y8Rzd-AKYSMtb8nYvhJPUKsfpM5SlyDXY7J94so7kys,625
33
+ Photo_Composition_Designer/tools/ImageDistributor.py,sha256=N0HXdEhU_tQ0pEtDG-BoVDT7YqRgwwE3zFaJP99z0Es,6215
34
+ Photo_Composition_Designer/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ photo_composition_designer-0.0.7.dist-info/licenses/LICENSE,sha256=awOCsWJ58m_2kBQwBUGWejVqZm6wuRtCL2hi9rfa0X4,1211
36
+ photo_composition_designer-0.0.7.dist-info/METADATA,sha256=qtLaz5q_6TnC4aRuUyblaIe8A2to6dDyo_x328h82jo,8105
37
+ photo_composition_designer-0.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
38
+ photo_composition_designer-0.0.7.dist-info/entry_points.txt,sha256=c16Hfm7f80Yanlj5DrAHBOhQFKdwSTpvNwpLs9SXx48,160
39
+ photo_composition_designer-0.0.7.dist-info/top_level.txt,sha256=1xcheY5VsWVQVziMEIWiue01-lcsoAMd7ZIWWBlS3QY,71
40
+ photo_composition_designer-0.0.7.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ Photo-Composition-Designer = Photo_Composition_Designer.cli.cli:main
3
+ Photo-Composition-Designer-gui = Photo_Composition_Designer.gui.gui:main
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <https://unlicense.org>
@@ -0,0 +1,5 @@
1
+ Photo_Composition_Designer
2
+ __init__
3
+ firewall_handler
4
+ main
5
+ path_handler