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.
- Photo_Composition_Designer/__init__.py +0 -0
- Photo_Composition_Designer/__main__.py +8 -0
- Photo_Composition_Designer/_version.py +34 -0
- Photo_Composition_Designer/cli/__init__.py +0 -0
- Photo_Composition_Designer/cli/__main__.py +8 -0
- Photo_Composition_Designer/cli/cli.py +106 -0
- Photo_Composition_Designer/common/Anniversaries.py +93 -0
- Photo_Composition_Designer/common/Locations.py +87 -0
- Photo_Composition_Designer/common/MoonPhase.py +85 -0
- Photo_Composition_Designer/common/Photo.py +113 -0
- Photo_Composition_Designer/common/__init__.py +0 -0
- Photo_Composition_Designer/common/logging.py +216 -0
- Photo_Composition_Designer/config/__init__.py +0 -0
- Photo_Composition_Designer/config/config.py +321 -0
- Photo_Composition_Designer/core/__init__.py +0 -0
- Photo_Composition_Designer/core/base.py +383 -0
- Photo_Composition_Designer/gui/GuiLogWriter.py +79 -0
- Photo_Composition_Designer/gui/__init__.py +0 -0
- Photo_Composition_Designer/gui/__main__.py +8 -0
- Photo_Composition_Designer/gui/gui.py +565 -0
- Photo_Composition_Designer/image/CalendarRenderer.py +319 -0
- Photo_Composition_Designer/image/CollageRenderer.py +433 -0
- Photo_Composition_Designer/image/DescriptionRenderer.py +74 -0
- Photo_Composition_Designer/image/MapRenderer.py +101 -0
- Photo_Composition_Designer/image/__init__.py +0 -0
- Photo_Composition_Designer/tools/DescriptionsFileGenerator.py +44 -0
- Photo_Composition_Designer/tools/GeoPlotter.py +211 -0
- Photo_Composition_Designer/tools/Helpers.py +18 -0
- Photo_Composition_Designer/tools/ImageDistributor.py +153 -0
- Photo_Composition_Designer/tools/__init__.py +0 -0
- __init__.py +0 -0
- firewall_handler.py +198 -0
- main.py +146 -0
- path_handler.py +10 -0
- photo_composition_designer-0.0.7.dist-info/METADATA +205 -0
- photo_composition_designer-0.0.7.dist-info/RECORD +40 -0
- photo_composition_designer-0.0.7.dist-info/WHEEL +5 -0
- photo_composition_designer-0.0.7.dist-info/entry_points.txt +3 -0
- photo_composition_designer-0.0.7.dist-info/licenses/LICENSE +24 -0
- 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,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
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/actions)
|
|
42
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/releases)
|
|
43
|
+
[](https://Photo-Composition-Designer.readthedocs.io/en/stable/)
|
|
44
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/blob/main/LICENSE)
|
|
45
|
+
[](https://github.com/pamagister/Photo-Composition-Designer/issues)
|
|
46
|
+
[](https://pypi.org/project/Photo-Composition-Designer/)
|
|
47
|
+
[](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,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>
|