fotolab 0.16.4__tar.gz → 0.16.7__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.16.4 → fotolab-0.16.7}/.pre-commit-config.yaml +2 -2
- {fotolab-0.16.4 → fotolab-0.16.7}/CHANGELOG.md +18 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/CONTRIBUTING.md +3 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/PKG-INFO +6 -3
- {fotolab-0.16.4 → fotolab-0.16.7}/Pipfile +3 -4
- {fotolab-0.16.4 → fotolab-0.16.7}/Pipfile.lock +81 -129
- {fotolab-0.16.4 → fotolab-0.16.7}/README.md +5 -2
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/conf.py +1 -1
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/__init__.py +1 -1
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/cli.py +1 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/watermark.py +2 -3
- {fotolab-0.16.4 → fotolab-0.16.7}/noxfile.py +23 -1
- {fotolab-0.16.4 → fotolab-0.16.7}/.coveragerc +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/.gitignore +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/.python-version +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/LICENSE.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/Makefile +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/make.bat +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/CHANGELOG.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/CONTRIBUTING.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/LICENSE.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/README.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/_static/logo.jpg +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/index.rst +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/__main__.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/animate.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/auto.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/border.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/contrast.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/env.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/info.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/montage.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/resize.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/rotate.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/sharpen.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/pyproject.toml +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/tests/__init__.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/tests/conftest.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/tests/test_env.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/tests/test_help_flag.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.7}/tests/test_quiet_flag.py +0 -0
@@ -77,7 +77,7 @@ repos:
|
|
77
77
|
language_version: python3.12
|
78
78
|
|
79
79
|
- repo: https://github.com/PyCQA/flake8
|
80
|
-
rev: 7.
|
80
|
+
rev: 7.1.0
|
81
81
|
hooks:
|
82
82
|
- id: flake8
|
83
83
|
language_version: python3.12
|
@@ -107,7 +107,7 @@ repos:
|
|
107
107
|
- --disable=R0801,W0212
|
108
108
|
|
109
109
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
110
|
-
rev: v1.10.
|
110
|
+
rev: v1.10.1
|
111
111
|
hooks:
|
112
112
|
- id: mypy
|
113
113
|
exclude: docs/
|
@@ -7,6 +7,24 @@ and this project adheres to [0-based versioning](https://0ver.org/).
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## v0.16.7 (2024-06-30)
|
11
|
+
|
12
|
+
- Bump deps and `pre-commit` hooks
|
13
|
+
- Reuse `venv` for `doc` session in `nox`
|
14
|
+
- Tally program description in doc and program
|
15
|
+
- Update `nox` sessions list to contributing doc
|
16
|
+
|
17
|
+
## v0.16.6 (2024-06-23)
|
18
|
+
|
19
|
+
- Add `readme` session to `nox`
|
20
|
+
- Bump deps and `pre-commit` hooks
|
21
|
+
- Set CLI program name explicitly
|
22
|
+
|
23
|
+
## v0.16.5 (2024-06-16)
|
24
|
+
|
25
|
+
- Bump, sort, and remove unused deps
|
26
|
+
- Load and use default system font when watermarking
|
27
|
+
|
10
28
|
## v0.16.4 (2024-06-09)
|
11
29
|
|
12
30
|
- Add `deps` session to `nox`
|
@@ -58,6 +58,9 @@ nox -l
|
|
58
58
|
* test-3.12 -> Runs test.
|
59
59
|
* cov -> Runs test coverage.
|
60
60
|
* doc -> Build doc with sphinx.
|
61
|
+
* readme -> Update console help menu to readme.
|
62
|
+
|
63
|
+
sessions marked with * are selected, sessions marked with - are skipped.
|
61
64
|
```
|
62
65
|
|
63
66
|
## Create a Pull Request
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fotolab
|
3
|
-
Version: 0.16.
|
3
|
+
Version: 0.16.7
|
4
4
|
Summary: A console program that manipulate images.
|
5
5
|
Keywords: photography,photo
|
6
6
|
Author-email: Kian-Meng Ang <kianmeng@cpan.org>
|
@@ -56,10 +56,11 @@ python -m pip install -e git+https://github.com/kianmeng/fotolab.git
|
|
56
56
|
fotolab -h
|
57
57
|
```
|
58
58
|
|
59
|
+
<!--help !-->
|
60
|
+
|
59
61
|
```console
|
60
62
|
usage: fotolab [-h] [-o] [-op] [-od OUTPUT_DIR] [-q] [-v] [-d] [-V]
|
61
|
-
{animate,auto,border,contrast,info,resize,rotate,montage,sharpen,watermark,env}
|
62
|
-
...
|
63
|
+
{animate,auto,border,contrast,info,resize,rotate,montage,sharpen,watermark,env} ...
|
63
64
|
|
64
65
|
A console program to manipulate photos.
|
65
66
|
|
@@ -94,6 +95,8 @@ optional arguments:
|
|
94
95
|
-V, --version show program's version number and exit
|
95
96
|
```
|
96
97
|
|
98
|
+
<!--help !-->
|
99
|
+
|
97
100
|
### fotolab animate
|
98
101
|
|
99
102
|
```console
|
@@ -14,19 +14,18 @@ flake8-pytest-style = "*"
|
|
14
14
|
flake8-simplify = "*"
|
15
15
|
fotolab = {editable = true, path = "."}
|
16
16
|
importlib-metadata = "*"
|
17
|
+
myst-parser = "*"
|
18
|
+
nox = "*"
|
17
19
|
pre-commit = "*"
|
18
20
|
pytest = "*"
|
19
21
|
pytest-cov = "*"
|
20
22
|
pytest-randomly = "*"
|
21
23
|
pytest-xdist = "*"
|
22
24
|
scripttest = "*"
|
23
|
-
tomli = "*"
|
24
|
-
tox-pyenv = "*"
|
25
|
-
nox = "*"
|
26
25
|
sphinx = "*"
|
27
|
-
myst-parser = "*"
|
28
26
|
sphinx-autodoc-typehints = "*"
|
29
27
|
sphinx-copybutton = "*"
|
28
|
+
tomli = "*"
|
30
29
|
|
31
30
|
[requires]
|
32
31
|
python_version = "3.8"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"_meta": {
|
3
3
|
"hash": {
|
4
|
-
"sha256": "
|
4
|
+
"sha256": "8d7307a0ff05c5de6ef45cc8bc2e1bf6c18b97ccf3a911c31ce0dd9a77feab08"
|
5
5
|
},
|
6
6
|
"pipfile-spec": 6,
|
7
7
|
"requires": {
|
@@ -104,11 +104,11 @@
|
|
104
104
|
},
|
105
105
|
"argcomplete": {
|
106
106
|
"hashes": [
|
107
|
-
"sha256:
|
108
|
-
"sha256:
|
107
|
+
"sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5",
|
108
|
+
"sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f"
|
109
109
|
],
|
110
110
|
"markers": "python_version >= '3.8'",
|
111
|
-
"version": "==3.
|
111
|
+
"version": "==3.4.0"
|
112
112
|
},
|
113
113
|
"astor": {
|
114
114
|
"hashes": [
|
@@ -126,14 +126,6 @@
|
|
126
126
|
"markers": "python_version >= '3.8'",
|
127
127
|
"version": "==2.15.0"
|
128
128
|
},
|
129
|
-
"cachetools": {
|
130
|
-
"hashes": [
|
131
|
-
"sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945",
|
132
|
-
"sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"
|
133
|
-
],
|
134
|
-
"markers": "python_version >= '3.7'",
|
135
|
-
"version": "==5.3.3"
|
136
|
-
},
|
137
129
|
"certifi": {
|
138
130
|
"hashes": [
|
139
131
|
"sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516",
|
@@ -150,14 +142,6 @@
|
|
150
142
|
"markers": "python_version >= '3.8'",
|
151
143
|
"version": "==3.4.0"
|
152
144
|
},
|
153
|
-
"chardet": {
|
154
|
-
"hashes": [
|
155
|
-
"sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7",
|
156
|
-
"sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"
|
157
|
-
],
|
158
|
-
"markers": "python_version >= '3.7'",
|
159
|
-
"version": "==5.2.0"
|
160
|
-
},
|
161
145
|
"charset-normalizer": {
|
162
146
|
"hashes": [
|
163
147
|
"sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027",
|
@@ -254,14 +238,6 @@
|
|
254
238
|
"markers": "python_full_version >= '3.7.0'",
|
255
239
|
"version": "==3.3.2"
|
256
240
|
},
|
257
|
-
"colorama": {
|
258
|
-
"hashes": [
|
259
|
-
"sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44",
|
260
|
-
"sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"
|
261
|
-
],
|
262
|
-
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'",
|
263
|
-
"version": "==0.4.6"
|
264
|
-
},
|
265
241
|
"colorlog": {
|
266
242
|
"hashes": [
|
267
243
|
"sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44",
|
@@ -275,61 +251,61 @@
|
|
275
251
|
"toml"
|
276
252
|
],
|
277
253
|
"hashes": [
|
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:
|
328
|
-
"sha256:
|
329
|
-
"sha256:
|
330
|
-
],
|
331
|
-
"markers": "python_version >= '3.8'",
|
332
|
-
"version": "==7.5.
|
254
|
+
"sha256:018a12985185038a5b2bcafab04ab833a9a0f2c59995b3cec07e10074c78635f",
|
255
|
+
"sha256:02ff6e898197cc1e9fa375581382b72498eb2e6d5fc0b53f03e496cfee3fac6d",
|
256
|
+
"sha256:042183de01f8b6d531e10c197f7f0315a61e8d805ab29c5f7b51a01d62782747",
|
257
|
+
"sha256:1014fbf665fef86cdfd6cb5b7371496ce35e4d2a00cda501cf9f5b9e6fced69f",
|
258
|
+
"sha256:1137f46adb28e3813dec8c01fefadcb8c614f33576f672962e323b5128d9a68d",
|
259
|
+
"sha256:16852febd96acd953b0d55fc842ce2dac1710f26729b31c80b940b9afcd9896f",
|
260
|
+
"sha256:2174e7c23e0a454ffe12267a10732c273243b4f2d50d07544a91198f05c48f47",
|
261
|
+
"sha256:2214ee920787d85db1b6a0bd9da5f8503ccc8fcd5814d90796c2f2493a2f4d2e",
|
262
|
+
"sha256:3257fdd8e574805f27bb5342b77bc65578e98cbc004a92232106344053f319ba",
|
263
|
+
"sha256:3684bc2ff328f935981847082ba4fdc950d58906a40eafa93510d1b54c08a66c",
|
264
|
+
"sha256:3a6612c99081d8d6134005b1354191e103ec9705d7ba2754e848211ac8cacc6b",
|
265
|
+
"sha256:3d7564cc09dd91b5a6001754a5b3c6ecc4aba6323baf33a12bd751036c998be4",
|
266
|
+
"sha256:44da56a2589b684813f86d07597fdf8a9c6ce77f58976727329272f5a01f99f7",
|
267
|
+
"sha256:5013ed890dc917cef2c9f765c4c6a8ae9df983cd60dbb635df8ed9f4ebc9f555",
|
268
|
+
"sha256:54317c2b806354cbb2dc7ac27e2b93f97096912cc16b18289c5d4e44fc663233",
|
269
|
+
"sha256:56b4eafa21c6c175b3ede004ca12c653a88b6f922494b023aeb1e836df953ace",
|
270
|
+
"sha256:581ea96f92bf71a5ec0974001f900db495488434a6928a2ca7f01eee20c23805",
|
271
|
+
"sha256:5cd64adedf3be66f8ccee418473c2916492d53cbafbfcff851cbec5a8454b136",
|
272
|
+
"sha256:5df54843b88901fdc2f598ac06737f03d71168fd1175728054c8f5a2739ac3e4",
|
273
|
+
"sha256:65e528e2e921ba8fd67d9055e6b9f9e34b21ebd6768ae1c1723f4ea6ace1234d",
|
274
|
+
"sha256:6aae5cce399a0f065da65c7bb1e8abd5c7a3043da9dceb429ebe1b289bc07806",
|
275
|
+
"sha256:6cfb5a4f556bb51aba274588200a46e4dd6b505fb1a5f8c5ae408222eb416f99",
|
276
|
+
"sha256:7076b4b3a5f6d2b5d7f1185fde25b1e54eb66e647a1dfef0e2c2bfaf9b4c88c8",
|
277
|
+
"sha256:73ca8fbc5bc622e54627314c1a6f1dfdd8db69788f3443e752c215f29fa87a0b",
|
278
|
+
"sha256:79b356f3dd5b26f3ad23b35c75dbdaf1f9e2450b6bcefc6d0825ea0aa3f86ca5",
|
279
|
+
"sha256:7a892be37ca35eb5019ec85402c3371b0f7cda5ab5056023a7f13da0961e60da",
|
280
|
+
"sha256:8192794d120167e2a64721d88dbd688584675e86e15d0569599257566dec9bf0",
|
281
|
+
"sha256:820bc841faa502e727a48311948e0461132a9c8baa42f6b2b84a29ced24cc078",
|
282
|
+
"sha256:8f894208794b164e6bd4bba61fc98bf6b06be4d390cf2daacfa6eca0a6d2bb4f",
|
283
|
+
"sha256:a04e990a2a41740b02d6182b498ee9796cf60eefe40cf859b016650147908029",
|
284
|
+
"sha256:a44963520b069e12789d0faea4e9fdb1e410cdc4aab89d94f7f55cbb7fef0353",
|
285
|
+
"sha256:a6bb74ed465d5fb204b2ec41d79bcd28afccf817de721e8a807d5141c3426638",
|
286
|
+
"sha256:ab73b35e8d109bffbda9a3e91c64e29fe26e03e49addf5b43d85fc426dde11f9",
|
287
|
+
"sha256:aea072a941b033813f5e4814541fc265a5c12ed9720daef11ca516aeacd3bd7f",
|
288
|
+
"sha256:b1ccf5e728ccf83acd313c89f07c22d70d6c375a9c6f339233dcf792094bcbf7",
|
289
|
+
"sha256:b385d49609f8e9efc885790a5a0e89f2e3ae042cdf12958b6034cc442de428d3",
|
290
|
+
"sha256:b3d45ff86efb129c599a3b287ae2e44c1e281ae0f9a9bad0edc202179bcc3a2e",
|
291
|
+
"sha256:b4a474f799456e0eb46d78ab07303286a84a3140e9700b9e154cfebc8f527016",
|
292
|
+
"sha256:b95c3a8cb0463ba9f77383d0fa8c9194cf91f64445a63fc26fb2327e1e1eb088",
|
293
|
+
"sha256:c5986ee7ea0795a4095ac4d113cbb3448601efca7f158ec7f7087a6c705304e4",
|
294
|
+
"sha256:cdd31315fc20868c194130de9ee6bfd99755cc9565edff98ecc12585b90be882",
|
295
|
+
"sha256:cef4649ec906ea7ea5e9e796e68b987f83fa9a718514fe147f538cfeda76d7a7",
|
296
|
+
"sha256:d05c16cf4b4c2fc880cb12ba4c9b526e9e5d5bb1d81313d4d732a5b9fe2b9d53",
|
297
|
+
"sha256:d2e344d6adc8ef81c5a233d3a57b3c7d5181f40e79e05e1c143da143ccb6377d",
|
298
|
+
"sha256:d45d3cbd94159c468b9b8c5a556e3f6b81a8d1af2a92b77320e887c3e7a5d080",
|
299
|
+
"sha256:db14f552ac38f10758ad14dd7b983dbab424e731588d300c7db25b6f89e335b5",
|
300
|
+
"sha256:dbc5958cb471e5a5af41b0ddaea96a37e74ed289535e8deca404811f6cb0bc3d",
|
301
|
+
"sha256:ddbd2f9713a79e8e7242d7c51f1929611e991d855f414ca9996c20e44a895f7c",
|
302
|
+
"sha256:e16f3d6b491c48c5ae726308e6ab1e18ee830b4cdd6913f2d7f77354b33f91c8",
|
303
|
+
"sha256:e2afe743289273209c992075a5a4913e8d007d569a406ffed0bd080ea02b0633",
|
304
|
+
"sha256:e564c2cf45d2f44a9da56f4e3a26b2236504a496eb4cb0ca7221cd4cc7a9aca9",
|
305
|
+
"sha256:ed550e7442f278af76d9d65af48069f1fb84c9f745ae249c1a183c1e9d1b025c"
|
306
|
+
],
|
307
|
+
"markers": "python_version >= '3.8'",
|
308
|
+
"version": "==7.5.4"
|
333
309
|
},
|
334
310
|
"distlib": {
|
335
311
|
"hashes": [
|
@@ -365,19 +341,19 @@
|
|
365
341
|
},
|
366
342
|
"filelock": {
|
367
343
|
"hashes": [
|
368
|
-
"sha256:
|
369
|
-
"sha256:
|
344
|
+
"sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb",
|
345
|
+
"sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"
|
370
346
|
],
|
371
347
|
"markers": "python_version >= '3.8'",
|
372
|
-
"version": "==3.
|
348
|
+
"version": "==3.15.4"
|
373
349
|
},
|
374
350
|
"flake8": {
|
375
351
|
"hashes": [
|
376
|
-
"sha256:
|
377
|
-
"sha256:
|
352
|
+
"sha256:2e416edcc62471a64cea09353f4e7bdba32aeb079b6e360554c659a122b1bc6a",
|
353
|
+
"sha256:48a07b626b55236e0fb4784ee69a465fbf59d79eec1f5b4785c3d3bc57d17aa5"
|
378
354
|
],
|
379
355
|
"markers": "python_full_version >= '3.8.1'",
|
380
|
-
"version": "==7.
|
356
|
+
"version": "==7.1.0"
|
381
357
|
},
|
382
358
|
"flake8-docstrings": {
|
383
359
|
"hashes": [
|
@@ -453,12 +429,12 @@
|
|
453
429
|
},
|
454
430
|
"importlib-metadata": {
|
455
431
|
"hashes": [
|
456
|
-
"sha256:
|
457
|
-
"sha256:
|
432
|
+
"sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f",
|
433
|
+
"sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"
|
458
434
|
],
|
459
435
|
"index": "pypi",
|
460
436
|
"markers": "python_version >= '3.8'",
|
461
|
-
"version": "==
|
437
|
+
"version": "==8.0.0"
|
462
438
|
},
|
463
439
|
"iniconfig": {
|
464
440
|
"hashes": [
|
@@ -602,11 +578,11 @@
|
|
602
578
|
},
|
603
579
|
"packaging": {
|
604
580
|
"hashes": [
|
605
|
-
"sha256:
|
606
|
-
"sha256:
|
581
|
+
"sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002",
|
582
|
+
"sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"
|
607
583
|
],
|
608
|
-
"markers": "python_version >= '3.
|
609
|
-
"version": "==24.
|
584
|
+
"markers": "python_version >= '3.8'",
|
585
|
+
"version": "==24.1"
|
610
586
|
},
|
611
587
|
"pillow": {
|
612
588
|
"hashes": [
|
@@ -711,11 +687,11 @@
|
|
711
687
|
},
|
712
688
|
"pycodestyle": {
|
713
689
|
"hashes": [
|
714
|
-
"sha256:
|
715
|
-
"sha256:
|
690
|
+
"sha256:442f950141b4f43df752dd303511ffded3a04c2b6fb7f65980574f0c31e6e79c",
|
691
|
+
"sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4"
|
716
692
|
],
|
717
693
|
"markers": "python_version >= '3.8'",
|
718
|
-
"version": "==2.
|
694
|
+
"version": "==2.12.0"
|
719
695
|
},
|
720
696
|
"pydocstyle": {
|
721
697
|
"hashes": [
|
@@ -741,14 +717,6 @@
|
|
741
717
|
"markers": "python_version >= '3.8'",
|
742
718
|
"version": "==2.18.0"
|
743
719
|
},
|
744
|
-
"pyproject-api": {
|
745
|
-
"hashes": [
|
746
|
-
"sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538",
|
747
|
-
"sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675"
|
748
|
-
],
|
749
|
-
"markers": "python_version >= '3.8'",
|
750
|
-
"version": "==1.6.1"
|
751
|
-
},
|
752
720
|
"pytest": {
|
753
721
|
"hashes": [
|
754
722
|
"sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343",
|
@@ -956,37 +924,21 @@
|
|
956
924
|
"markers": "python_version >= '3.7'",
|
957
925
|
"version": "==2.0.1"
|
958
926
|
},
|
959
|
-
"tox": {
|
960
|
-
"hashes": [
|
961
|
-
"sha256:53a092527d65e873e39213ebd4bd027a64623320b6b0326136384213f95b7076",
|
962
|
-
"sha256:f00a5dc4222b358e69694e47e3da0227ac41253509bca9f45aa8f012053e8d9d"
|
963
|
-
],
|
964
|
-
"markers": "python_version >= '3.8'",
|
965
|
-
"version": "==4.15.1"
|
966
|
-
},
|
967
|
-
"tox-pyenv": {
|
968
|
-
"hashes": [
|
969
|
-
"sha256:916c2213577aec0b3b5452c5bfb32fd077f3a3196f50a81ad57d7ef3fc2599e4",
|
970
|
-
"sha256:e470c18af115fe52eeff95e7e3cdd0793613eca19709966fc2724b79d55246cb"
|
971
|
-
],
|
972
|
-
"index": "pypi",
|
973
|
-
"version": "==1.1.0"
|
974
|
-
},
|
975
927
|
"urllib3": {
|
976
928
|
"hashes": [
|
977
|
-
"sha256:
|
978
|
-
"sha256:
|
929
|
+
"sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472",
|
930
|
+
"sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"
|
979
931
|
],
|
980
932
|
"markers": "python_version >= '3.8'",
|
981
|
-
"version": "==2.2.
|
933
|
+
"version": "==2.2.2"
|
982
934
|
},
|
983
935
|
"virtualenv": {
|
984
936
|
"hashes": [
|
985
|
-
"sha256:
|
986
|
-
"sha256:
|
937
|
+
"sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a",
|
938
|
+
"sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"
|
987
939
|
],
|
988
940
|
"markers": "python_version >= '3.7'",
|
989
|
-
"version": "==20.26.
|
941
|
+
"version": "==20.26.3"
|
990
942
|
},
|
991
943
|
"zipp": {
|
992
944
|
"hashes": [
|
@@ -34,10 +34,11 @@ python -m pip install -e git+https://github.com/kianmeng/fotolab.git
|
|
34
34
|
fotolab -h
|
35
35
|
```
|
36
36
|
|
37
|
+
<!--help !-->
|
38
|
+
|
37
39
|
```console
|
38
40
|
usage: fotolab [-h] [-o] [-op] [-od OUTPUT_DIR] [-q] [-v] [-d] [-V]
|
39
|
-
{animate,auto,border,contrast,info,resize,rotate,montage,sharpen,watermark,env}
|
40
|
-
...
|
41
|
+
{animate,auto,border,contrast,info,resize,rotate,montage,sharpen,watermark,env} ...
|
41
42
|
|
42
43
|
A console program to manipulate photos.
|
43
44
|
|
@@ -72,6 +73,8 @@ optional arguments:
|
|
72
73
|
-V, --version show program's version number and exit
|
73
74
|
```
|
74
75
|
|
76
|
+
<!--help !-->
|
77
|
+
|
75
78
|
### fotolab animate
|
76
79
|
|
77
80
|
```console
|
@@ -40,7 +40,7 @@ html_theme = "alabaster"
|
|
40
40
|
html_static_path = ["_static"]
|
41
41
|
html_theme_options = {
|
42
42
|
"logo": "logo.jpg",
|
43
|
-
"description": "A console program
|
43
|
+
"description": "A console program to manipulates photos.",
|
44
44
|
"github_user": "kianmeng",
|
45
45
|
"github_repo": "fotolab",
|
46
46
|
"github_banner": True,
|
@@ -68,6 +68,7 @@ def setup_logging(args: argparse.Namespace) -> None:
|
|
68
68
|
def build_parser() -> argparse.ArgumentParser:
|
69
69
|
"""Build the CLI parser."""
|
70
70
|
parser = argparse.ArgumentParser(
|
71
|
+
prog="fotolab",
|
71
72
|
description=__doc__,
|
72
73
|
formatter_class=lambda prog: argparse.RawTextHelpFormatter(
|
73
74
|
prog, max_help_position=20
|
@@ -144,9 +144,8 @@ def run(args: argparse.Namespace) -> None:
|
|
144
144
|
|
145
145
|
draw = ImageDraw.Draw(watermarked_image)
|
146
146
|
|
147
|
-
font = ImageFont.
|
148
|
-
|
149
|
-
)
|
147
|
+
font = ImageFont.load_default(calc_font_size(original_image, args))
|
148
|
+
log.debug("default font: %s", " ".join(font.getname()))
|
150
149
|
|
151
150
|
(left, top, right, bottom) = draw.textbbox(
|
152
151
|
xy=(0, 0), text=args.text, font=font
|
@@ -14,8 +14,12 @@
|
|
14
14
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
15
15
|
|
16
16
|
"""Nox configuration."""
|
17
|
+
from io import StringIO
|
18
|
+
|
17
19
|
import nox
|
18
20
|
|
21
|
+
from fotolab.cli import build_parser
|
22
|
+
|
19
23
|
|
20
24
|
@nox.session()
|
21
25
|
def deps(session: nox.Session) -> None:
|
@@ -55,8 +59,26 @@ def cov(session: nox.Session) -> None:
|
|
55
59
|
)
|
56
60
|
|
57
61
|
|
58
|
-
@nox.session(python="3.12")
|
62
|
+
@nox.session(python="3.12", reuse_venv=True)
|
59
63
|
def doc(session: nox.Session) -> None:
|
60
64
|
"""Build doc with sphinx."""
|
61
65
|
session.run("pipenv", "install", "--dev", external=True)
|
62
66
|
session.run("sphinx-build", "docs/source/", "docs/build/html")
|
67
|
+
|
68
|
+
|
69
|
+
@nox.session(python="3.12", reuse_venv=True)
|
70
|
+
def readme(_session: nox.Session) -> None:
|
71
|
+
"""Update console help menu to readme."""
|
72
|
+
with open("README.md", "r+", encoding="utf8") as f:
|
73
|
+
content = f.read()
|
74
|
+
marker = content.split("<!--help !-->")[1]
|
75
|
+
|
76
|
+
buffer = StringIO()
|
77
|
+
parser = build_parser()
|
78
|
+
parser.print_help(file=buffer)
|
79
|
+
|
80
|
+
help_message = f"\n\n```console\n{buffer.getvalue()}```\n\n"
|
81
|
+
readme_md = content.replace(marker, help_message)
|
82
|
+
|
83
|
+
f.seek(0)
|
84
|
+
f.write(readme_md)
|
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
|