fotolab 0.17.0__tar.gz → 0.18.2__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.
- {fotolab-0.17.0 → fotolab-0.18.2}/.pre-commit-config.yaml +4 -4
- {fotolab-0.17.0 → fotolab-0.18.2}/.python-version +1 -1
- {fotolab-0.17.0 → fotolab-0.18.2}/CHANGELOG.md +17 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/PKG-INFO +3 -2
- {fotolab-0.17.0 → fotolab-0.18.2}/Pipfile.lock +259 -253
- {fotolab-0.17.0 → fotolab-0.18.2}/README.md +2 -1
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/__init__.py +1 -1
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/auto.py +2 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/cli.py +1 -1
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/env.py +1 -3
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/info.py +11 -5
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/watermark.py +62 -27
- {fotolab-0.17.0 → fotolab-0.18.2}/.coveragerc +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/.gitignore +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/CONTRIBUTING.md +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/LICENSE.md +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/Pipfile +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/Makefile +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/make.bat +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/source/CHANGELOG.md +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/source/CONTRIBUTING.md +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/source/LICENSE.md +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/source/README.md +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/source/_static/logo.jpg +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/source/conf.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/docs/source/index.rst +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/__main__.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/animate.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/border.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/contrast.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/montage.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/resize.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/rotate.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/fotolab/sharpen.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/noxfile.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/pyproject.toml +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/tests/__init__.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/tests/conftest.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/tests/test_env.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/tests/test_help_flag.py +0 -0
- {fotolab-0.17.0 → fotolab-0.18.2}/tests/test_quiet_flag.py +0 -0
@@ -2,7 +2,7 @@
|
|
2
2
|
# See https://pre-commit.com/hooks.html for more hooks
|
3
3
|
repos:
|
4
4
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
5
|
-
rev:
|
5
|
+
rev: v5.0.0
|
6
6
|
hooks:
|
7
7
|
- id: check-case-conflict
|
8
8
|
- id: check-merge-conflict
|
@@ -15,7 +15,7 @@ repos:
|
|
15
15
|
- id: trailing-whitespace
|
16
16
|
|
17
17
|
- repo: https://github.com/abravalheri/validate-pyproject
|
18
|
-
rev: v0.
|
18
|
+
rev: v0.20.2
|
19
19
|
hooks:
|
20
20
|
- id: validate-pyproject
|
21
21
|
name: validate-pyproject
|
@@ -45,7 +45,7 @@ repos:
|
|
45
45
|
- --py=312
|
46
46
|
|
47
47
|
- repo: https://github.com/psf/black
|
48
|
-
rev: 24.
|
48
|
+
rev: 24.10.0
|
49
49
|
hooks:
|
50
50
|
- id: black
|
51
51
|
language_version: python3.12
|
@@ -58,7 +58,7 @@ repos:
|
|
58
58
|
- --target-version=py312
|
59
59
|
|
60
60
|
- repo: https://github.com/asottile/blacken-docs
|
61
|
-
rev: 1.
|
61
|
+
rev: 1.19.0
|
62
62
|
hooks:
|
63
63
|
- id: blacken-docs
|
64
64
|
additional_dependencies:
|
@@ -7,6 +7,23 @@ and this project adheres to [0-based versioning](https://0ver.org/).
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## v0.18.2 (2024-10-13)
|
11
|
+
|
12
|
+
- Bump deps and `pre-commit` hooks
|
13
|
+
- Refactor watermark an image
|
14
|
+
|
15
|
+
## v0.18.1 (2024-10-06)
|
16
|
+
|
17
|
+
- Bump deps and Python version in `pyenv`
|
18
|
+
- Use `prog` field in `argparse` when show program version
|
19
|
+
- Set watermark text default to lowercase
|
20
|
+
|
21
|
+
## v0.18.0 (2024-09-29)
|
22
|
+
|
23
|
+
- Add `--camera` flag to `watermark` subcommand to use camera's metadata as text
|
24
|
+
- Add `--lowercase` flag to `watermark` subcommand to use lowercase the watermark text
|
25
|
+
- Bump deps and `pre-commit` hooks
|
26
|
+
|
10
27
|
## v0.17.0 (2024-09-22)
|
11
28
|
|
12
29
|
- Bump Python versions for `pyenv`
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fotolab
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.18.2
|
4
4
|
Summary: A console program that manipulate images.
|
5
5
|
Keywords: photography,photo
|
6
6
|
Author-email: Kian-Meng Ang <kianmeng@cpan.org>
|
@@ -328,7 +328,7 @@ fotolab watermark -h
|
|
328
328
|
usage: fotolab watermark [-h] [-t WATERMARK_TEXT]
|
329
329
|
[-p {top-left,top-right,bottom-left,bottom-right}]
|
330
330
|
[-pd PADDING] [-fs FONT_SIZE] [-fc FONT_COLOR]
|
331
|
-
[-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR]
|
331
|
+
[-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR] [--camera]
|
332
332
|
IMAGE_FILENAMES [IMAGE_FILENAMES ...]
|
333
333
|
|
334
334
|
positional arguments:
|
@@ -355,6 +355,7 @@ options:
|
|
355
355
|
-oc OUTLINE_COLOR, --outline-color OUTLINE_COLOR
|
356
356
|
set the outline color of the watermark text (default:
|
357
357
|
'black')
|
358
|
+
--camera use camera metadata as watermark
|
358
359
|
```
|
359
360
|
|
360
361
|
<!--help-watermark !-->
|
@@ -115,11 +115,11 @@
|
|
115
115
|
},
|
116
116
|
"argcomplete": {
|
117
117
|
"hashes": [
|
118
|
-
"sha256:
|
119
|
-
"sha256:
|
118
|
+
"sha256:1a1d148bdaa3e3b93454900163403df41448a248af01b6e849edc5ac08e6c363",
|
119
|
+
"sha256:eb1ee355aa2557bd3d0145de7b06b2a45b0ce461e1e7813f5d066039ab4177b4"
|
120
120
|
],
|
121
121
|
"markers": "python_version >= '3.8'",
|
122
|
-
"version": "==3.5.
|
122
|
+
"version": "==3.5.1"
|
123
123
|
},
|
124
124
|
"astor": {
|
125
125
|
"hashes": [
|
@@ -155,99 +155,114 @@
|
|
155
155
|
},
|
156
156
|
"charset-normalizer": {
|
157
157
|
"hashes": [
|
158
|
-
"sha256:
|
159
|
-
"sha256:
|
160
|
-
"sha256:
|
161
|
-
"sha256:
|
162
|
-
"sha256:
|
163
|
-
"sha256:
|
164
|
-
"sha256:
|
165
|
-
"sha256:
|
166
|
-
"sha256:
|
167
|
-
"sha256:
|
168
|
-
"sha256:
|
169
|
-
"sha256:
|
170
|
-
"sha256:
|
171
|
-
"sha256:
|
172
|
-
"sha256:
|
173
|
-
"sha256:
|
174
|
-
"sha256:
|
175
|
-
"sha256:
|
176
|
-
"sha256:
|
177
|
-
"sha256:
|
178
|
-
"sha256:
|
179
|
-
"sha256:
|
180
|
-
"sha256:
|
181
|
-
"sha256:
|
182
|
-
"sha256:
|
183
|
-
"sha256:
|
184
|
-
"sha256:
|
185
|
-
"sha256:
|
186
|
-
"sha256:
|
187
|
-
"sha256:
|
188
|
-
"sha256:
|
189
|
-
"sha256:
|
190
|
-
"sha256:
|
191
|
-
"sha256:
|
192
|
-
"sha256:
|
193
|
-
"sha256:
|
194
|
-
"sha256:
|
195
|
-
"sha256:
|
196
|
-
"sha256:
|
197
|
-
"sha256:
|
198
|
-
"sha256:
|
199
|
-
"sha256:
|
200
|
-
"sha256:
|
201
|
-
"sha256:
|
202
|
-
"sha256:
|
203
|
-
"sha256:
|
204
|
-
"sha256:
|
205
|
-
"sha256:
|
206
|
-
"sha256:
|
207
|
-
"sha256:
|
208
|
-
"sha256:
|
209
|
-
"sha256:
|
210
|
-
"sha256:
|
211
|
-
"sha256:
|
212
|
-
"sha256:
|
213
|
-
"sha256:
|
214
|
-
"sha256:
|
215
|
-
"sha256:
|
216
|
-
"sha256:
|
217
|
-
"sha256:
|
218
|
-
"sha256:
|
219
|
-
"sha256:
|
220
|
-
"sha256:
|
221
|
-
"sha256:
|
222
|
-
"sha256:
|
223
|
-
"sha256:
|
224
|
-
"sha256:
|
225
|
-
"sha256:
|
226
|
-
"sha256:
|
227
|
-
"sha256:
|
228
|
-
"sha256:
|
229
|
-
"sha256:
|
230
|
-
"sha256:
|
231
|
-
"sha256:
|
232
|
-
"sha256:
|
233
|
-
"sha256:
|
234
|
-
"sha256:
|
235
|
-
"sha256:
|
236
|
-
"sha256:
|
237
|
-
"sha256:
|
238
|
-
"sha256:
|
239
|
-
"sha256:
|
240
|
-
"sha256:
|
241
|
-
"sha256:
|
242
|
-
"sha256:
|
243
|
-
"sha256:
|
244
|
-
"sha256:
|
245
|
-
"sha256:
|
246
|
-
"sha256:
|
247
|
-
"sha256:
|
158
|
+
"sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621",
|
159
|
+
"sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6",
|
160
|
+
"sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8",
|
161
|
+
"sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912",
|
162
|
+
"sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c",
|
163
|
+
"sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b",
|
164
|
+
"sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d",
|
165
|
+
"sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d",
|
166
|
+
"sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95",
|
167
|
+
"sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e",
|
168
|
+
"sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565",
|
169
|
+
"sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64",
|
170
|
+
"sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab",
|
171
|
+
"sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be",
|
172
|
+
"sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e",
|
173
|
+
"sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907",
|
174
|
+
"sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0",
|
175
|
+
"sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2",
|
176
|
+
"sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62",
|
177
|
+
"sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62",
|
178
|
+
"sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23",
|
179
|
+
"sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc",
|
180
|
+
"sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284",
|
181
|
+
"sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca",
|
182
|
+
"sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455",
|
183
|
+
"sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858",
|
184
|
+
"sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b",
|
185
|
+
"sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594",
|
186
|
+
"sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc",
|
187
|
+
"sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db",
|
188
|
+
"sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b",
|
189
|
+
"sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea",
|
190
|
+
"sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6",
|
191
|
+
"sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920",
|
192
|
+
"sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749",
|
193
|
+
"sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7",
|
194
|
+
"sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd",
|
195
|
+
"sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99",
|
196
|
+
"sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242",
|
197
|
+
"sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee",
|
198
|
+
"sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129",
|
199
|
+
"sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2",
|
200
|
+
"sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51",
|
201
|
+
"sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee",
|
202
|
+
"sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8",
|
203
|
+
"sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b",
|
204
|
+
"sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613",
|
205
|
+
"sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742",
|
206
|
+
"sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe",
|
207
|
+
"sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3",
|
208
|
+
"sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5",
|
209
|
+
"sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631",
|
210
|
+
"sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7",
|
211
|
+
"sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15",
|
212
|
+
"sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c",
|
213
|
+
"sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea",
|
214
|
+
"sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417",
|
215
|
+
"sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250",
|
216
|
+
"sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88",
|
217
|
+
"sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca",
|
218
|
+
"sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa",
|
219
|
+
"sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99",
|
220
|
+
"sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149",
|
221
|
+
"sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41",
|
222
|
+
"sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574",
|
223
|
+
"sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0",
|
224
|
+
"sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f",
|
225
|
+
"sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d",
|
226
|
+
"sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654",
|
227
|
+
"sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3",
|
228
|
+
"sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19",
|
229
|
+
"sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90",
|
230
|
+
"sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578",
|
231
|
+
"sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9",
|
232
|
+
"sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1",
|
233
|
+
"sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51",
|
234
|
+
"sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719",
|
235
|
+
"sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236",
|
236
|
+
"sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a",
|
237
|
+
"sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c",
|
238
|
+
"sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade",
|
239
|
+
"sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944",
|
240
|
+
"sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc",
|
241
|
+
"sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6",
|
242
|
+
"sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6",
|
243
|
+
"sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27",
|
244
|
+
"sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6",
|
245
|
+
"sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2",
|
246
|
+
"sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12",
|
247
|
+
"sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf",
|
248
|
+
"sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114",
|
249
|
+
"sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7",
|
250
|
+
"sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf",
|
251
|
+
"sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d",
|
252
|
+
"sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b",
|
253
|
+
"sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed",
|
254
|
+
"sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03",
|
255
|
+
"sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4",
|
256
|
+
"sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67",
|
257
|
+
"sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365",
|
258
|
+
"sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a",
|
259
|
+
"sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748",
|
260
|
+
"sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b",
|
261
|
+
"sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079",
|
262
|
+
"sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"
|
248
263
|
],
|
249
264
|
"markers": "python_full_version >= '3.7.0'",
|
250
|
-
"version": "==3.
|
265
|
+
"version": "==3.4.0"
|
251
266
|
},
|
252
267
|
"colorlog": {
|
253
268
|
"hashes": [
|
@@ -262,88 +277,78 @@
|
|
262
277
|
"toml"
|
263
278
|
],
|
264
279
|
"hashes": [
|
265
|
-
"sha256:
|
266
|
-
"sha256:
|
267
|
-
"sha256:
|
268
|
-
"sha256:
|
269
|
-
"sha256:
|
270
|
-
"sha256:
|
271
|
-
"sha256:
|
272
|
-
"sha256:
|
273
|
-
"sha256:
|
274
|
-
"sha256:
|
275
|
-
"sha256:
|
276
|
-
"sha256:
|
277
|
-
"sha256:
|
278
|
-
"sha256:
|
279
|
-
"sha256:
|
280
|
-
"sha256:
|
281
|
-
"sha256:
|
282
|
-
"sha256:
|
283
|
-
"sha256:
|
284
|
-
"sha256:
|
285
|
-
"sha256:
|
286
|
-
"sha256:
|
287
|
-
"sha256:
|
288
|
-
"sha256:
|
289
|
-
"sha256:
|
290
|
-
"sha256:
|
291
|
-
"sha256:
|
292
|
-
"sha256:
|
293
|
-
"sha256:
|
294
|
-
"sha256:
|
295
|
-
"sha256:
|
296
|
-
"sha256:
|
297
|
-
"sha256:
|
298
|
-
"sha256:
|
299
|
-
"sha256:
|
300
|
-
"sha256:
|
301
|
-
"sha256:
|
302
|
-
"sha256:
|
303
|
-
"sha256:
|
304
|
-
"sha256:
|
305
|
-
"sha256:
|
306
|
-
"sha256:
|
307
|
-
"sha256:
|
308
|
-
"sha256:
|
309
|
-
"sha256:
|
310
|
-
"sha256:
|
311
|
-
"sha256:
|
312
|
-
"sha256:
|
313
|
-
"sha256:
|
314
|
-
"sha256:
|
315
|
-
"sha256:
|
316
|
-
"sha256:
|
317
|
-
"sha256:
|
318
|
-
"sha256:
|
319
|
-
"sha256:
|
320
|
-
"sha256:
|
321
|
-
"sha256:
|
322
|
-
"sha256:
|
323
|
-
"sha256:
|
324
|
-
"sha256:
|
325
|
-
"sha256:
|
326
|
-
"sha256:
|
327
|
-
"sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7",
|
328
|
-
"sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5",
|
329
|
-
"sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02",
|
330
|
-
"sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c",
|
331
|
-
"sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df",
|
332
|
-
"sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3",
|
333
|
-
"sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a",
|
334
|
-
"sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959",
|
335
|
-
"sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234",
|
336
|
-
"sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"
|
280
|
+
"sha256:078a87519057dacb5d77e333f740708ec2a8f768655f1db07f8dfd28d7a005f0",
|
281
|
+
"sha256:087932079c065d7b8ebadd3a0160656c55954144af6439886c8bcf78bbbcde7f",
|
282
|
+
"sha256:0bbae11c138585c89fb4e991faefb174a80112e1a7557d507aaa07675c62e66b",
|
283
|
+
"sha256:0ff2ef83d6d0b527b5c9dad73819b24a2f76fdddcfd6c4e7a4d7e73ecb0656b4",
|
284
|
+
"sha256:12179eb0575b8900912711688e45474f04ab3934aaa7b624dea7b3c511ecc90f",
|
285
|
+
"sha256:1e5e92e3e84a8718d2de36cd8387459cba9a4508337b8c5f450ce42b87a9e760",
|
286
|
+
"sha256:2186369a654a15628e9c1c9921409a6b3eda833e4b91f3ca2a7d9f77abb4987c",
|
287
|
+
"sha256:21c0ea0d4db8a36b275cb6fb2437a3715697a4ba3cb7b918d3525cc75f726304",
|
288
|
+
"sha256:24500f4b0e03aab60ce575c85365beab64b44d4db837021e08339f61d1fbfe52",
|
289
|
+
"sha256:2b636a301e53964550e2f3094484fa5a96e699db318d65398cfba438c5c92171",
|
290
|
+
"sha256:343056c5e0737487a5291f5691f4dfeb25b3e3c8699b4d36b92bb0e586219d14",
|
291
|
+
"sha256:35a51598f29b2a19e26d0908bd196f771a9b1c5d9a07bf20be0adf28f1ad4f77",
|
292
|
+
"sha256:39d3b964abfe1519b9d313ab28abf1d02faea26cd14b27f5283849bf59479ff5",
|
293
|
+
"sha256:3ec528ae69f0a139690fad6deac8a7d33629fa61ccce693fdd07ddf7e9931fba",
|
294
|
+
"sha256:47ccb6e99a3031ffbbd6e7cc041e70770b4fe405370c66a54dbf26a500ded80b",
|
295
|
+
"sha256:4eea60c79d36a8f39475b1af887663bc3ae4f31289cd216f514ce18d5938df40",
|
296
|
+
"sha256:536f77f2bf5797983652d1d55f1a7272a29afcc89e3ae51caa99b2db4e89d658",
|
297
|
+
"sha256:5ed69befa9a9fc796fe015a7040c9398722d6b97df73a6b608e9e275fa0932b0",
|
298
|
+
"sha256:62ab4231c01e156ece1b3a187c87173f31cbeee83a5e1f6dff17f288dca93345",
|
299
|
+
"sha256:667952739daafe9616db19fbedbdb87917eee253ac4f31d70c7587f7ab531b4e",
|
300
|
+
"sha256:69f251804e052fc46d29d0e7348cdc5fcbfc4861dc4a1ebedef7e78d241ad39e",
|
301
|
+
"sha256:6c2ba1e0c24d8fae8f2cf0aeb2fc0a2a7f69b6d20bd8d3749fd6b36ecef5edf0",
|
302
|
+
"sha256:6e85830eed5b5263ffa0c62428e43cb844296f3b4461f09e4bdb0d44ec190bc2",
|
303
|
+
"sha256:7571e8bbecc6ac066256f9de40365ff833553e2e0c0c004f4482facb131820ef",
|
304
|
+
"sha256:7781f4f70c9b0b39e1b129b10c7d43a4e0c91f90c60435e6da8288efc2b73438",
|
305
|
+
"sha256:7926d8d034e06b479797c199747dd774d5e86179f2ce44294423327a88d66ca7",
|
306
|
+
"sha256:7b80fbb0da3aebde102a37ef0138aeedff45997e22f8962e5f16ae1742852676",
|
307
|
+
"sha256:7fca4a92c8a7a73dee6946471bce6d1443d94155694b893b79e19ca2a540d86e",
|
308
|
+
"sha256:84c4315577f7cd511d6250ffd0f695c825efe729f4205c0340f7004eda51191f",
|
309
|
+
"sha256:8d9c5d13927d77af4fbe453953810db766f75401e764727e73a6ee4f82527b3e",
|
310
|
+
"sha256:9681516288e3dcf0aa7c26231178cc0be6cac9705cac06709f2353c5b406cfea",
|
311
|
+
"sha256:97df87e1a20deb75ac7d920c812e9326096aa00a9a4b6d07679b4f1f14b06c90",
|
312
|
+
"sha256:9bcd51eeca35a80e76dc5794a9dd7cb04b97f0e8af620d54711793bfc1fbba4b",
|
313
|
+
"sha256:9c6b0c1cafd96213a0327cf680acb39f70e452caf8e9a25aeb05316db9c07f89",
|
314
|
+
"sha256:a5f81e68aa62bc0cfca04f7b19eaa8f9c826b53fc82ab9e2121976dc74f131f3",
|
315
|
+
"sha256:a663b180b6669c400b4630a24cc776f23a992d38ce7ae72ede2a397ce6b0f170",
|
316
|
+
"sha256:a7b2e437fbd8fae5bc7716b9c7ff97aecc95f0b4d56e4ca08b3c8d8adcaadb84",
|
317
|
+
"sha256:a867d26f06bcd047ef716175b2696b315cb7571ccb951006d61ca80bbc356e9e",
|
318
|
+
"sha256:aa68a6cdbe1bc6793a9dbfc38302c11599bbe1837392ae9b1d238b9ef3dafcf1",
|
319
|
+
"sha256:ab31fdd643f162c467cfe6a86e9cb5f1965b632e5e65c072d90854ff486d02cf",
|
320
|
+
"sha256:ad4ef1c56b47b6b9024b939d503ab487231df1f722065a48f4fc61832130b90e",
|
321
|
+
"sha256:b92f9ca04b3e719d69b02dc4a69debb795af84cb7afd09c5eb5d54b4a1ae2191",
|
322
|
+
"sha256:bb21bac7783c1bf6f4bbe68b1e0ff0d20e7e7732cfb7995bc8d96e23aa90fc7b",
|
323
|
+
"sha256:bf4eeecc9e10f5403ec06138978235af79c9a79af494eb6b1d60a50b49ed2869",
|
324
|
+
"sha256:bfde025e2793a22efe8c21f807d276bd1d6a4bcc5ba6f19dbdfc4e7a12160909",
|
325
|
+
"sha256:c37faddc8acd826cfc5e2392531aba734b229741d3daec7f4c777a8f0d4993e5",
|
326
|
+
"sha256:c71965d1ced48bf97aab79fad56df82c566b4c498ffc09c2094605727c4b7e36",
|
327
|
+
"sha256:c9192925acc33e146864b8cf037e2ed32a91fdf7644ae875f5d46cd2ef086a5f",
|
328
|
+
"sha256:c9df1950fb92d49970cce38100d7e7293c84ed3606eaa16ea0b6bc27175bb667",
|
329
|
+
"sha256:cdfcf2e914e2ba653101157458afd0ad92a16731eeba9a611b5cbb3e7124e74b",
|
330
|
+
"sha256:d03a060ac1a08e10589c27d509bbdb35b65f2d7f3f8d81cf2fa199877c7bc58a",
|
331
|
+
"sha256:d20c3d1f31f14d6962a4e2f549c21d31e670b90f777ef4171be540fb7fb70f02",
|
332
|
+
"sha256:e4ee15b267d2dad3e8759ca441ad450c334f3733304c55210c2a44516e8d5530",
|
333
|
+
"sha256:e8ea055b3ea046c0f66217af65bc193bbbeca1c8661dc5fd42698db5795d2627",
|
334
|
+
"sha256:ebabdf1c76593a09ee18c1a06cd3022919861365219ea3aca0247ededf6facd6",
|
335
|
+
"sha256:ebc94fadbd4a3f4215993326a6a00e47d79889391f5659bf310f55fe5d9f581c",
|
336
|
+
"sha256:ed5ac02126f74d190fa2cc14a9eb2a5d9837d5863920fa472b02eb1595cdc925",
|
337
|
+
"sha256:f01e53575f27097d75d42de33b1b289c74b16891ce576d767ad8c48d17aeb5e0",
|
338
|
+
"sha256:f361296ca7054f0936b02525646b2731b32c8074ba6defab524b79b2b7eeac72",
|
339
|
+
"sha256:f9035695dadfb397bee9eeaf1dc7fbeda483bf7664a7397a629846800ce6e276",
|
340
|
+
"sha256:fcad7d5d2bbfeae1026b395036a8aa5abf67e8038ae7e6a25c7d0f88b10a8e6a",
|
341
|
+
"sha256:ff797320dcbff57caa6b2301c3913784a010e13b1f6cf4ab3f563f3c5e7919db"
|
337
342
|
],
|
338
|
-
"markers": "python_version >= '3.
|
339
|
-
"version": "==7.6.
|
343
|
+
"markers": "python_version >= '3.9'",
|
344
|
+
"version": "==7.6.2"
|
340
345
|
},
|
341
346
|
"distlib": {
|
342
347
|
"hashes": [
|
343
|
-
"sha256:
|
344
|
-
"sha256:
|
348
|
+
"sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87",
|
349
|
+
"sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"
|
345
350
|
],
|
346
|
-
"version": "==0.3.
|
351
|
+
"version": "==0.3.9"
|
347
352
|
},
|
348
353
|
"docutils": {
|
349
354
|
"hashes": [
|
@@ -493,69 +498,70 @@
|
|
493
498
|
},
|
494
499
|
"markupsafe": {
|
495
500
|
"hashes": [
|
496
|
-
"sha256:
|
497
|
-
"sha256:
|
498
|
-
"sha256:
|
499
|
-
"sha256:
|
500
|
-
"sha256:
|
501
|
-
"sha256:
|
502
|
-
"sha256:
|
503
|
-
"sha256:
|
504
|
-
"sha256:
|
505
|
-
"sha256:
|
506
|
-
"sha256:
|
507
|
-
"sha256:
|
508
|
-
"sha256:
|
509
|
-
"sha256:
|
510
|
-
"sha256:
|
511
|
-
"sha256:
|
512
|
-
"sha256:
|
513
|
-
"sha256:
|
514
|
-
"sha256:
|
515
|
-
"sha256:
|
516
|
-
"sha256:
|
517
|
-
"sha256:
|
518
|
-
"sha256:
|
519
|
-
"sha256:
|
520
|
-
"sha256:
|
521
|
-
"sha256:
|
522
|
-
"sha256:
|
523
|
-
"sha256:
|
524
|
-
"sha256:
|
525
|
-
"sha256:
|
526
|
-
"sha256:
|
527
|
-
"sha256:
|
528
|
-
"sha256:
|
529
|
-
"sha256:
|
530
|
-
"sha256:
|
531
|
-
"sha256:
|
532
|
-
"sha256:
|
533
|
-
"sha256:
|
534
|
-
"sha256:
|
535
|
-
"sha256:
|
536
|
-
"sha256:
|
537
|
-
"sha256:
|
538
|
-
"sha256:
|
539
|
-
"sha256:
|
540
|
-
"sha256:
|
541
|
-
"sha256:
|
542
|
-
"sha256:
|
543
|
-
"sha256:
|
544
|
-
"sha256:
|
545
|
-
"sha256:
|
546
|
-
"sha256:
|
547
|
-
"sha256:
|
548
|
-
"sha256:
|
549
|
-
"sha256:
|
550
|
-
"sha256:
|
551
|
-
"sha256:
|
552
|
-
"sha256:
|
553
|
-
"sha256:
|
554
|
-
"sha256:
|
555
|
-
"sha256:
|
501
|
+
"sha256:0778de17cff1acaeccc3ff30cd99a3fd5c50fc58ad3d6c0e0c4c58092b859396",
|
502
|
+
"sha256:0f84af7e813784feb4d5e4ff7db633aba6c8ca64a833f61d8e4eade234ef0c38",
|
503
|
+
"sha256:17b2aea42a7280db02ac644db1d634ad47dcc96faf38ab304fe26ba2680d359a",
|
504
|
+
"sha256:242d6860f1fd9191aef5fae22b51c5c19767f93fb9ead4d21924e0bcb17619d8",
|
505
|
+
"sha256:244dbe463d5fb6d7ce161301a03a6fe744dac9072328ba9fc82289238582697b",
|
506
|
+
"sha256:26627785a54a947f6d7336ce5963569b5d75614619e75193bdb4e06e21d447ad",
|
507
|
+
"sha256:2a4b34a8d14649315c4bc26bbfa352663eb51d146e35eef231dd739d54a5430a",
|
508
|
+
"sha256:2ae99f31f47d849758a687102afdd05bd3d3ff7dbab0a8f1587981b58a76152a",
|
509
|
+
"sha256:312387403cd40699ab91d50735ea7a507b788091c416dd007eac54434aee51da",
|
510
|
+
"sha256:3341c043c37d78cc5ae6e3e305e988532b072329639007fd408a476642a89fd6",
|
511
|
+
"sha256:33d1c36b90e570ba7785dacd1faaf091203d9942bc036118fab8110a401eb1a8",
|
512
|
+
"sha256:3e683ee4f5d0fa2dde4db77ed8dd8a876686e3fc417655c2ece9a90576905344",
|
513
|
+
"sha256:3ffb4a8e7d46ed96ae48805746755fadd0909fea2306f93d5d8233ba23dda12a",
|
514
|
+
"sha256:40621d60d0e58aa573b68ac5e2d6b20d44392878e0bfc159012a5787c4e35bc8",
|
515
|
+
"sha256:40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5",
|
516
|
+
"sha256:45d42d132cff577c92bfba536aefcfea7e26efb975bd455db4e6602f5c9f45e7",
|
517
|
+
"sha256:48488d999ed50ba8d38c581d67e496f955821dc183883550a6fbc7f1aefdc170",
|
518
|
+
"sha256:4935dd7883f1d50e2ffecca0aa33dc1946a94c8f3fdafb8df5c330e48f71b132",
|
519
|
+
"sha256:4c2d64fdba74ad16138300815cfdc6ab2f4647e23ced81f59e940d7d4a1469d9",
|
520
|
+
"sha256:4c8817557d0de9349109acb38b9dd570b03cc5014e8aabf1cbddc6e81005becd",
|
521
|
+
"sha256:4ffaaac913c3f7345579db4f33b0020db693f302ca5137f106060316761beea9",
|
522
|
+
"sha256:5a4cb365cb49b750bdb60b846b0c0bc49ed62e59a76635095a179d440540c346",
|
523
|
+
"sha256:62fada2c942702ef8952754abfc1a9f7658a4d5460fabe95ac7ec2cbe0d02abc",
|
524
|
+
"sha256:67c519635a4f64e495c50e3107d9b4075aec33634272b5db1cde839e07367589",
|
525
|
+
"sha256:6a54c43d3ec4cf2a39f4387ad044221c66a376e58c0d0e971d47c475ba79c6b5",
|
526
|
+
"sha256:7044312a928a66a4c2a22644147bc61a199c1709712069a344a3fb5cfcf16915",
|
527
|
+
"sha256:730d86af59e0e43ce277bb83970530dd223bf7f2a838e086b50affa6ec5f9295",
|
528
|
+
"sha256:800100d45176652ded796134277ecb13640c1a537cad3b8b53da45aa96330453",
|
529
|
+
"sha256:80fcbf3add8790caddfab6764bde258b5d09aefbe9169c183f88a7410f0f6dea",
|
530
|
+
"sha256:82b5dba6eb1bcc29cc305a18a3c5365d2af06ee71b123216416f7e20d2a84e5b",
|
531
|
+
"sha256:852dc840f6d7c985603e60b5deaae1d89c56cb038b577f6b5b8c808c97580f1d",
|
532
|
+
"sha256:8ad4ad1429cd4f315f32ef263c1342166695fad76c100c5d979c45d5570ed58b",
|
533
|
+
"sha256:8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4",
|
534
|
+
"sha256:93e8248d650e7e9d49e8251f883eed60ecbc0e8ffd6349e18550925e31bd029b",
|
535
|
+
"sha256:973a371a55ce9ed333a3a0f8e0bcfae9e0d637711534bcb11e130af2ab9334e7",
|
536
|
+
"sha256:9ba25a71ebf05b9bb0e2ae99f8bc08a07ee8e98c612175087112656ca0f5c8bf",
|
537
|
+
"sha256:a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f",
|
538
|
+
"sha256:a4792d3b3a6dfafefdf8e937f14906a51bd27025a36f4b188728a73382231d91",
|
539
|
+
"sha256:a7420ceda262dbb4b8d839a4ec63d61c261e4e77677ed7c66c99f4e7cb5030dd",
|
540
|
+
"sha256:ad91738f14eb8da0ff82f2acd0098b6257621410dcbd4df20aaa5b4233d75a50",
|
541
|
+
"sha256:b6a387d61fe41cdf7ea95b38e9af11cfb1a63499af2759444b99185c4ab33f5b",
|
542
|
+
"sha256:b954093679d5750495725ea6f88409946d69cfb25ea7b4c846eef5044194f583",
|
543
|
+
"sha256:bbde71a705f8e9e4c3e9e33db69341d040c827c7afa6789b14c6e16776074f5a",
|
544
|
+
"sha256:beeebf760a9c1f4c07ef6a53465e8cfa776ea6a2021eda0d0417ec41043fe984",
|
545
|
+
"sha256:c91b394f7601438ff79a4b93d16be92f216adb57d813a78be4446fe0f6bc2d8c",
|
546
|
+
"sha256:c97ff7fedf56d86bae92fa0a646ce1a0ec7509a7578e1ed238731ba13aabcd1c",
|
547
|
+
"sha256:cb53e2a99df28eee3b5f4fea166020d3ef9116fdc5764bc5117486e6d1211b25",
|
548
|
+
"sha256:cbf445eb5628981a80f54087f9acdbf84f9b7d862756110d172993b9a5ae81aa",
|
549
|
+
"sha256:d06b24c686a34c86c8c1fba923181eae6b10565e4d80bdd7bc1c8e2f11247aa4",
|
550
|
+
"sha256:d98e66a24497637dd31ccab090b34392dddb1f2f811c4b4cd80c230205c074a3",
|
551
|
+
"sha256:db15ce28e1e127a0013dfb8ac243a8e392db8c61eae113337536edb28bdc1f97",
|
552
|
+
"sha256:db842712984e91707437461930e6011e60b39136c7331e971952bb30465bc1a1",
|
553
|
+
"sha256:e24bfe89c6ac4c31792793ad9f861b8f6dc4546ac6dc8f1c9083c7c4f2b335cd",
|
554
|
+
"sha256:e81c52638315ff4ac1b533d427f50bc0afc746deb949210bc85f05d4f15fd772",
|
555
|
+
"sha256:e9393357f19954248b00bed7c56f29a25c930593a77630c719653d51e7669c2a",
|
556
|
+
"sha256:ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729",
|
557
|
+
"sha256:f31ae06f1328595d762c9a2bf29dafd8621c7d3adc130cbb46278079758779ca",
|
558
|
+
"sha256:f94190df587738280d544971500b9cafc9b950d32efcb1fba9ac10d84e6aa4e6",
|
559
|
+
"sha256:fa7d686ed9883f3d664d39d5a8e74d3c5f63e603c2e3ff0abcba23eac6542635",
|
560
|
+
"sha256:fb532dd9900381d2e8f48172ddc5a59db4c445a11b9fab40b3b786da40d3b56b",
|
561
|
+
"sha256:fe32482b37b4b00c7a52a07211b479653b7fe4f22b2e481b9a9b099d8a430f2f"
|
556
562
|
],
|
557
|
-
"markers": "python_version >= '3.
|
558
|
-
"version": "==
|
563
|
+
"markers": "python_version >= '3.9'",
|
564
|
+
"version": "==3.0.1"
|
559
565
|
},
|
560
566
|
"mccabe": {
|
561
567
|
"hashes": [
|
@@ -600,12 +606,12 @@
|
|
600
606
|
},
|
601
607
|
"nox": {
|
602
608
|
"hashes": [
|
603
|
-
"sha256:
|
604
|
-
"sha256:
|
609
|
+
"sha256:1d36f309a0a2a853e9bccb76bbef6bb118ba92fa92674d15604ca99adeb29eab",
|
610
|
+
"sha256:7aa9dc8d1c27e9f45ab046ffd1c3b2c4f7c91755304769df231308849ebded95"
|
605
611
|
],
|
606
612
|
"index": "pypi",
|
607
|
-
"markers": "python_version >= '3.
|
608
|
-
"version": "==2024.
|
613
|
+
"markers": "python_version >= '3.8'",
|
614
|
+
"version": "==2024.10.9"
|
609
615
|
},
|
610
616
|
"packaging": {
|
611
617
|
"hashes": [
|
@@ -720,12 +726,12 @@
|
|
720
726
|
},
|
721
727
|
"pre-commit": {
|
722
728
|
"hashes": [
|
723
|
-
"sha256:
|
724
|
-
"sha256:
|
729
|
+
"sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2",
|
730
|
+
"sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"
|
725
731
|
],
|
726
732
|
"index": "pypi",
|
727
733
|
"markers": "python_version >= '3.9'",
|
728
|
-
"version": "==
|
734
|
+
"version": "==4.0.1"
|
729
735
|
},
|
730
736
|
"pycodestyle": {
|
731
737
|
"hashes": [
|
@@ -878,21 +884,21 @@
|
|
878
884
|
},
|
879
885
|
"sphinx": {
|
880
886
|
"hashes": [
|
881
|
-
"sha256:
|
882
|
-
"sha256:
|
887
|
+
"sha256:65e0ee8f76c9cbfd53ec8466ac8c87a73f9ed911767a8ef36c3bf3c522242bcd",
|
888
|
+
"sha256:84db3c819ed4ae63c6b1847f64576fcffe9d4f40670eefffcd215f9abc992393"
|
883
889
|
],
|
884
890
|
"index": "pypi",
|
885
891
|
"markers": "python_version >= '3.10'",
|
886
|
-
"version": "==8.
|
892
|
+
"version": "==8.1.1"
|
887
893
|
},
|
888
894
|
"sphinx-autodoc-typehints": {
|
889
895
|
"hashes": [
|
890
|
-
"sha256:
|
891
|
-
"sha256:
|
896
|
+
"sha256:259e1026b218d563d72743f417fcc25906a9614897fe37f91bd8d7d58f748c3b",
|
897
|
+
"sha256:53def4753239683835b19bfa8b68c021388bd48a096efcb02cdab508ece27363"
|
892
898
|
],
|
893
899
|
"index": "pypi",
|
894
900
|
"markers": "python_version >= '3.10'",
|
895
|
-
"version": "==2.
|
901
|
+
"version": "==2.5.0"
|
896
902
|
},
|
897
903
|
"sphinx-copybutton": {
|
898
904
|
"hashes": [
|
@@ -953,12 +959,12 @@
|
|
953
959
|
},
|
954
960
|
"tomli": {
|
955
961
|
"hashes": [
|
956
|
-
"sha256:
|
957
|
-
"sha256:
|
962
|
+
"sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38",
|
963
|
+
"sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
|
958
964
|
],
|
959
965
|
"index": "pypi",
|
960
|
-
"markers": "python_version >= '3.
|
961
|
-
"version": "==2.0.
|
966
|
+
"markers": "python_version >= '3.8'",
|
967
|
+
"version": "==2.0.2"
|
962
968
|
},
|
963
969
|
"urllib3": {
|
964
970
|
"hashes": [
|
@@ -970,11 +976,11 @@
|
|
970
976
|
},
|
971
977
|
"virtualenv": {
|
972
978
|
"hashes": [
|
973
|
-
"sha256:
|
974
|
-
"sha256:
|
979
|
+
"sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48",
|
980
|
+
"sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2"
|
975
981
|
],
|
976
982
|
"markers": "python_version >= '3.7'",
|
977
|
-
"version": "==20.26.
|
983
|
+
"version": "==20.26.6"
|
978
984
|
},
|
979
985
|
"zipp": {
|
980
986
|
"hashes": [
|
@@ -306,7 +306,7 @@ fotolab watermark -h
|
|
306
306
|
usage: fotolab watermark [-h] [-t WATERMARK_TEXT]
|
307
307
|
[-p {top-left,top-right,bottom-left,bottom-right}]
|
308
308
|
[-pd PADDING] [-fs FONT_SIZE] [-fc FONT_COLOR]
|
309
|
-
[-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR]
|
309
|
+
[-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR] [--camera]
|
310
310
|
IMAGE_FILENAMES [IMAGE_FILENAMES ...]
|
311
311
|
|
312
312
|
positional arguments:
|
@@ -333,6 +333,7 @@ options:
|
|
333
333
|
-oc OUTLINE_COLOR, --outline-color OUTLINE_COLOR
|
334
334
|
set the outline color of the watermark text (default:
|
335
335
|
'black')
|
336
|
+
--camera use camera metadata as watermark
|
336
337
|
```
|
337
338
|
|
338
339
|
<!--help-watermark !-->
|
@@ -67,6 +67,8 @@ def run(args: argparse.Namespace) -> None:
|
|
67
67
|
"outline_width": 2,
|
68
68
|
"outline_color": "black",
|
69
69
|
"padding": 15,
|
70
|
+
"camera": False,
|
71
|
+
"lowercase": False,
|
70
72
|
}
|
71
73
|
combined_args = argparse.Namespace(**vars(args), **extra_args)
|
72
74
|
combined_args.overwrite = True
|
@@ -34,7 +34,7 @@ def build_subparser(subparsers) -> None:
|
|
34
34
|
env_parser.set_defaults(func=run)
|
35
35
|
|
36
36
|
|
37
|
-
def run(
|
37
|
+
def run(_args: argparse.Namespace) -> None:
|
38
38
|
"""Run env subcommand.
|
39
39
|
|
40
40
|
Args:
|
@@ -43,8 +43,6 @@ def run(args: argparse.Namespace) -> None:
|
|
43
43
|
Returns:
|
44
44
|
None
|
45
45
|
"""
|
46
|
-
log.debug(args)
|
47
|
-
|
48
46
|
sys_version = sys.version.replace("\n", "")
|
49
47
|
print(
|
50
48
|
f"fotolab: {__version__}",
|
@@ -58,16 +58,22 @@ def run(args: argparse.Namespace) -> None:
|
|
58
58
|
"""
|
59
59
|
log.debug(args)
|
60
60
|
|
61
|
-
|
61
|
+
exif_tags = extract_exif_tags(args.image.filename)
|
62
|
+
tag_name_width = max(map(len, exif_tags))
|
63
|
+
for tag_name, tag_value in exif_tags.items():
|
64
|
+
print(f"{tag_name:<{tag_name_width}}: {tag_value}")
|
65
|
+
|
66
|
+
|
67
|
+
def extract_exif_tags(image_filename: str, sort: bool = False) -> dict:
|
68
|
+
"""Extract Exif metadata from image."""
|
69
|
+
image = Image.open(image_filename)
|
62
70
|
exif = image._getexif()
|
63
71
|
info = {ExifTags.TAGS.get(tag_id): exif.get(tag_id) for tag_id in exif}
|
64
72
|
|
65
73
|
filtered_info = {
|
66
74
|
key: value for key, value in info.items() if key is not None
|
67
75
|
}
|
68
|
-
if
|
76
|
+
if sort:
|
69
77
|
filtered_info = dict(sorted(filtered_info.items()))
|
70
78
|
|
71
|
-
|
72
|
-
for tag_name, tag_value in filtered_info.items():
|
73
|
-
print(f"{tag_name:<{tag_name_width}}: {tag_value}")
|
79
|
+
return filtered_info
|
@@ -22,6 +22,7 @@ import math
|
|
22
22
|
from PIL import Image, ImageColor, ImageDraw, ImageFont
|
23
23
|
|
24
24
|
from fotolab import save_image
|
25
|
+
from fotolab.info import extract_exif_tags
|
25
26
|
|
26
27
|
log = logging.getLogger(__name__)
|
27
28
|
|
@@ -126,12 +127,29 @@ def build_subparser(subparsers) -> None:
|
|
126
127
|
metavar="OUTLINE_COLOR",
|
127
128
|
)
|
128
129
|
|
130
|
+
watermark_parser.add_argument(
|
131
|
+
"--camera",
|
132
|
+
default=False,
|
133
|
+
action="store_true",
|
134
|
+
dest="camera",
|
135
|
+
help="use camera metadata as watermark",
|
136
|
+
)
|
137
|
+
|
138
|
+
watermark_parser.add_argument(
|
139
|
+
"-l",
|
140
|
+
"--lowercase",
|
141
|
+
default=True,
|
142
|
+
action="store_true",
|
143
|
+
dest="lowercase",
|
144
|
+
help="lowercase the watermark text",
|
145
|
+
)
|
146
|
+
|
129
147
|
|
130
148
|
def run(args: argparse.Namespace) -> None:
|
131
149
|
"""Run watermark subcommand.
|
132
150
|
|
133
151
|
Args:
|
134
|
-
|
152
|
+
args (argparse.Namespace): Config from command line arguments
|
135
153
|
|
136
154
|
Returns:
|
137
155
|
None
|
@@ -139,37 +157,54 @@ def run(args: argparse.Namespace) -> None:
|
|
139
157
|
log.debug(args)
|
140
158
|
|
141
159
|
for image_filename in args.image_filenames:
|
142
|
-
|
143
|
-
watermarked_image
|
160
|
+
watermarked_image = watermark_image(image_filename, args)
|
161
|
+
save_image(args, watermarked_image, image_filename, "watermark")
|
144
162
|
|
145
|
-
draw = ImageDraw.Draw(watermarked_image)
|
146
163
|
|
147
|
-
|
148
|
-
|
164
|
+
def watermark_image(image_filename, args):
|
165
|
+
"""Watermark the image."""
|
166
|
+
original_image = Image.open(image_filename)
|
167
|
+
watermarked_image = original_image.copy()
|
149
168
|
|
150
|
-
|
151
|
-
xy=(0, 0), text=args.text, font=font
|
152
|
-
)
|
153
|
-
text_width = right - left
|
154
|
-
text_height = bottom - top
|
155
|
-
(position_x, position_y) = calc_position(
|
156
|
-
watermarked_image,
|
157
|
-
text_width,
|
158
|
-
text_height,
|
159
|
-
args.position,
|
160
|
-
calc_padding(original_image, args),
|
161
|
-
)
|
169
|
+
draw = ImageDraw.Draw(watermarked_image)
|
162
170
|
|
163
|
-
|
164
|
-
|
165
|
-
args.text,
|
166
|
-
font=font,
|
167
|
-
fill=(*ImageColor.getrgb(args.font_color), 128),
|
168
|
-
stroke_width=calc_font_outline_width(original_image, args),
|
169
|
-
stroke_fill=(*ImageColor.getrgb(args.outline_color), 128),
|
170
|
-
)
|
171
|
+
font = ImageFont.load_default(calc_font_size(original_image, args))
|
172
|
+
log.debug("default font: %s", " ".join(font.getname()))
|
171
173
|
|
172
|
-
|
174
|
+
text = args.text
|
175
|
+
if args.camera and camera_metadata(image_filename):
|
176
|
+
text = camera_metadata(image_filename)
|
177
|
+
|
178
|
+
if args.lowercase:
|
179
|
+
text = text.lower()
|
180
|
+
|
181
|
+
(left, top, right, bottom) = draw.textbbox(xy=(0, 0), text=text, font=font)
|
182
|
+
text_width = right - left
|
183
|
+
text_height = bottom - top
|
184
|
+
(position_x, position_y) = calc_position(
|
185
|
+
watermarked_image,
|
186
|
+
text_width,
|
187
|
+
text_height,
|
188
|
+
args.position,
|
189
|
+
calc_padding(original_image, args),
|
190
|
+
)
|
191
|
+
|
192
|
+
draw.text(
|
193
|
+
(position_x, position_y),
|
194
|
+
text,
|
195
|
+
font=font,
|
196
|
+
fill=(*ImageColor.getrgb(args.font_color), 128),
|
197
|
+
stroke_width=calc_font_outline_width(original_image, args),
|
198
|
+
stroke_fill=(*ImageColor.getrgb(args.outline_color), 128),
|
199
|
+
)
|
200
|
+
return watermarked_image
|
201
|
+
|
202
|
+
|
203
|
+
def camera_metadata(image_filename):
|
204
|
+
"""Extract camera and model metadata."""
|
205
|
+
exif_tags = extract_exif_tags(image_filename)
|
206
|
+
metadata = f'{exif_tags["Make"]} {exif_tags["Model"]}'
|
207
|
+
return metadata.strip()
|
173
208
|
|
174
209
|
|
175
210
|
def calc_font_size(image, args) -> int:
|
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
|