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.
Files changed (41) hide show
  1. {fotolab-0.16.4 → fotolab-0.16.7}/.pre-commit-config.yaml +2 -2
  2. {fotolab-0.16.4 → fotolab-0.16.7}/CHANGELOG.md +18 -0
  3. {fotolab-0.16.4 → fotolab-0.16.7}/CONTRIBUTING.md +3 -0
  4. {fotolab-0.16.4 → fotolab-0.16.7}/PKG-INFO +6 -3
  5. {fotolab-0.16.4 → fotolab-0.16.7}/Pipfile +3 -4
  6. {fotolab-0.16.4 → fotolab-0.16.7}/Pipfile.lock +81 -129
  7. {fotolab-0.16.4 → fotolab-0.16.7}/README.md +5 -2
  8. {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/conf.py +1 -1
  9. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/__init__.py +1 -1
  10. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/cli.py +1 -0
  11. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/watermark.py +2 -3
  12. {fotolab-0.16.4 → fotolab-0.16.7}/noxfile.py +23 -1
  13. {fotolab-0.16.4 → fotolab-0.16.7}/.coveragerc +0 -0
  14. {fotolab-0.16.4 → fotolab-0.16.7}/.gitignore +0 -0
  15. {fotolab-0.16.4 → fotolab-0.16.7}/.python-version +0 -0
  16. {fotolab-0.16.4 → fotolab-0.16.7}/LICENSE.md +0 -0
  17. {fotolab-0.16.4 → fotolab-0.16.7}/docs/Makefile +0 -0
  18. {fotolab-0.16.4 → fotolab-0.16.7}/docs/make.bat +0 -0
  19. {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/CHANGELOG.md +0 -0
  20. {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/CONTRIBUTING.md +0 -0
  21. {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/LICENSE.md +0 -0
  22. {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/README.md +0 -0
  23. {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/_static/logo.jpg +0 -0
  24. {fotolab-0.16.4 → fotolab-0.16.7}/docs/source/index.rst +0 -0
  25. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/__main__.py +0 -0
  26. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/animate.py +0 -0
  27. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/auto.py +0 -0
  28. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/border.py +0 -0
  29. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/contrast.py +0 -0
  30. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/env.py +0 -0
  31. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/info.py +0 -0
  32. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/montage.py +0 -0
  33. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/resize.py +0 -0
  34. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/rotate.py +0 -0
  35. {fotolab-0.16.4 → fotolab-0.16.7}/fotolab/sharpen.py +0 -0
  36. {fotolab-0.16.4 → fotolab-0.16.7}/pyproject.toml +0 -0
  37. {fotolab-0.16.4 → fotolab-0.16.7}/tests/__init__.py +0 -0
  38. {fotolab-0.16.4 → fotolab-0.16.7}/tests/conftest.py +0 -0
  39. {fotolab-0.16.4 → fotolab-0.16.7}/tests/test_env.py +0 -0
  40. {fotolab-0.16.4 → fotolab-0.16.7}/tests/test_help_flag.py +0 -0
  41. {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.0.0
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.0
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.4
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": "4f784fe9160dddc3047490325741ec793ad3af059b402e2a6f1e214802f26902"
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:c168c3723482c031df3c207d4ba8fa702717ccb9fc0bfe4117166c1f537b4a54",
108
- "sha256:fd03ff4a5b9e6580569d34b273f741e85cd9e072f3feeeee3eba4891c70eda62"
107
+ "sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5",
108
+ "sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f"
109
109
  ],
110
110
  "markers": "python_version >= '3.8'",
111
- "version": "==3.3.0"
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:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523",
279
- "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f",
280
- "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d",
281
- "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb",
282
- "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0",
283
- "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c",
284
- "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98",
285
- "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83",
286
- "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8",
287
- "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7",
288
- "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac",
289
- "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84",
290
- "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb",
291
- "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3",
292
- "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884",
293
- "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614",
294
- "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd",
295
- "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807",
296
- "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd",
297
- "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8",
298
- "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc",
299
- "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db",
300
- "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0",
301
- "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08",
302
- "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232",
303
- "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d",
304
- "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a",
305
- "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1",
306
- "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286",
307
- "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303",
308
- "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341",
309
- "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84",
310
- "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45",
311
- "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc",
312
- "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec",
313
- "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd",
314
- "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155",
315
- "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52",
316
- "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d",
317
- "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485",
318
- "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31",
319
- "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d",
320
- "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d",
321
- "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d",
322
- "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85",
323
- "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce",
324
- "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb",
325
- "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974",
326
- "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24",
327
- "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56",
328
- "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9",
329
- "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"
330
- ],
331
- "markers": "python_version >= '3.8'",
332
- "version": "==7.5.3"
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:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f",
369
- "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"
344
+ "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb",
345
+ "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"
370
346
  ],
371
347
  "markers": "python_version >= '3.8'",
372
- "version": "==3.14.0"
348
+ "version": "==3.15.4"
373
349
  },
374
350
  "flake8": {
375
351
  "hashes": [
376
- "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132",
377
- "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"
352
+ "sha256:2e416edcc62471a64cea09353f4e7bdba32aeb079b6e360554c659a122b1bc6a",
353
+ "sha256:48a07b626b55236e0fb4784ee69a465fbf59d79eec1f5b4785c3d3bc57d17aa5"
378
354
  ],
379
355
  "markers": "python_full_version >= '3.8.1'",
380
- "version": "==7.0.0"
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:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570",
457
- "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"
432
+ "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f",
433
+ "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"
458
434
  ],
459
435
  "index": "pypi",
460
436
  "markers": "python_version >= '3.8'",
461
- "version": "==7.1.0"
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:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5",
606
- "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"
581
+ "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002",
582
+ "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"
607
583
  ],
608
- "markers": "python_version >= '3.7'",
609
- "version": "==24.0"
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:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f",
715
- "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"
690
+ "sha256:442f950141b4f43df752dd303511ffded3a04c2b6fb7f65980574f0c31e6e79c",
691
+ "sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4"
716
692
  ],
717
693
  "markers": "python_version >= '3.8'",
718
- "version": "==2.11.1"
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:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d",
978
- "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"
929
+ "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472",
930
+ "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"
979
931
  ],
980
932
  "markers": "python_version >= '3.8'",
981
- "version": "==2.2.1"
933
+ "version": "==2.2.2"
982
934
  },
983
935
  "virtualenv": {
984
936
  "hashes": [
985
- "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c",
986
- "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"
937
+ "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a",
938
+ "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"
987
939
  ],
988
940
  "markers": "python_version >= '3.7'",
989
- "version": "==20.26.2"
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 that manipulates photos.",
43
+ "description": "A console program to manipulates photos.",
44
44
  "github_user": "kianmeng",
45
45
  "github_repo": "fotolab",
46
46
  "github_banner": True,
@@ -21,7 +21,7 @@ import subprocess
21
21
  import sys
22
22
  from pathlib import Path
23
23
 
24
- __version__ = "0.16.4"
24
+ __version__ = "0.16.7"
25
25
 
26
26
  log = logging.getLogger(__name__)
27
27
 
@@ -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.truetype(
148
- "arial.ttf", calc_font_size(original_image, args)
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