fotolab 0.16.5__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.5 → fotolab-0.16.7}/.pre-commit-config.yaml +2 -2
  2. {fotolab-0.16.5 → fotolab-0.16.7}/CHANGELOG.md +13 -0
  3. {fotolab-0.16.5 → fotolab-0.16.7}/CONTRIBUTING.md +3 -0
  4. {fotolab-0.16.5 → fotolab-0.16.7}/PKG-INFO +6 -3
  5. {fotolab-0.16.5 → fotolab-0.16.7}/Pipfile.lock +122 -114
  6. {fotolab-0.16.5 → fotolab-0.16.7}/README.md +5 -2
  7. {fotolab-0.16.5 → fotolab-0.16.7}/docs/source/conf.py +1 -1
  8. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/__init__.py +1 -1
  9. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/cli.py +1 -0
  10. {fotolab-0.16.5 → fotolab-0.16.7}/noxfile.py +23 -1
  11. {fotolab-0.16.5 → fotolab-0.16.7}/.coveragerc +0 -0
  12. {fotolab-0.16.5 → fotolab-0.16.7}/.gitignore +0 -0
  13. {fotolab-0.16.5 → fotolab-0.16.7}/.python-version +0 -0
  14. {fotolab-0.16.5 → fotolab-0.16.7}/LICENSE.md +0 -0
  15. {fotolab-0.16.5 → fotolab-0.16.7}/Pipfile +0 -0
  16. {fotolab-0.16.5 → fotolab-0.16.7}/docs/Makefile +0 -0
  17. {fotolab-0.16.5 → fotolab-0.16.7}/docs/make.bat +0 -0
  18. {fotolab-0.16.5 → fotolab-0.16.7}/docs/source/CHANGELOG.md +0 -0
  19. {fotolab-0.16.5 → fotolab-0.16.7}/docs/source/CONTRIBUTING.md +0 -0
  20. {fotolab-0.16.5 → fotolab-0.16.7}/docs/source/LICENSE.md +0 -0
  21. {fotolab-0.16.5 → fotolab-0.16.7}/docs/source/README.md +0 -0
  22. {fotolab-0.16.5 → fotolab-0.16.7}/docs/source/_static/logo.jpg +0 -0
  23. {fotolab-0.16.5 → fotolab-0.16.7}/docs/source/index.rst +0 -0
  24. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/__main__.py +0 -0
  25. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/animate.py +0 -0
  26. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/auto.py +0 -0
  27. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/border.py +0 -0
  28. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/contrast.py +0 -0
  29. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/env.py +0 -0
  30. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/info.py +0 -0
  31. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/montage.py +0 -0
  32. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/resize.py +0 -0
  33. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/rotate.py +0 -0
  34. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/sharpen.py +0 -0
  35. {fotolab-0.16.5 → fotolab-0.16.7}/fotolab/watermark.py +0 -0
  36. {fotolab-0.16.5 → fotolab-0.16.7}/pyproject.toml +0 -0
  37. {fotolab-0.16.5 → fotolab-0.16.7}/tests/__init__.py +0 -0
  38. {fotolab-0.16.5 → fotolab-0.16.7}/tests/conftest.py +0 -0
  39. {fotolab-0.16.5 → fotolab-0.16.7}/tests/test_env.py +0 -0
  40. {fotolab-0.16.5 → fotolab-0.16.7}/tests/test_help_flag.py +0 -0
  41. {fotolab-0.16.5 → 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,19 @@ 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
+
10
23
  ## v0.16.5 (2024-06-16)
11
24
 
12
25
  - Bump, sort, and remove unused deps
@@ -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.5
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
@@ -96,19 +96,19 @@
96
96
  "develop": {
97
97
  "alabaster": {
98
98
  "hashes": [
99
- "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65",
100
- "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"
99
+ "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3",
100
+ "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"
101
101
  ],
102
- "markers": "python_version >= '3.9'",
103
- "version": "==0.7.16"
102
+ "markers": "python_version >= '3.6'",
103
+ "version": "==0.7.13"
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": [
@@ -251,61 +251,61 @@
251
251
  "toml"
252
252
  ],
253
253
  "hashes": [
254
- "sha256:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523",
255
- "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f",
256
- "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d",
257
- "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb",
258
- "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0",
259
- "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c",
260
- "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98",
261
- "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83",
262
- "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8",
263
- "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7",
264
- "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac",
265
- "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84",
266
- "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb",
267
- "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3",
268
- "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884",
269
- "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614",
270
- "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd",
271
- "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807",
272
- "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd",
273
- "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8",
274
- "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc",
275
- "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db",
276
- "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0",
277
- "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08",
278
- "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232",
279
- "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d",
280
- "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a",
281
- "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1",
282
- "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286",
283
- "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303",
284
- "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341",
285
- "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84",
286
- "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45",
287
- "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc",
288
- "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec",
289
- "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd",
290
- "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155",
291
- "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52",
292
- "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d",
293
- "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485",
294
- "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31",
295
- "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d",
296
- "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d",
297
- "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d",
298
- "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85",
299
- "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce",
300
- "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb",
301
- "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974",
302
- "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24",
303
- "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56",
304
- "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9",
305
- "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"
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
306
  ],
307
307
  "markers": "python_version >= '3.8'",
308
- "version": "==7.5.3"
308
+ "version": "==7.5.4"
309
309
  },
310
310
  "distlib": {
311
311
  "hashes": [
@@ -316,11 +316,11 @@
316
316
  },
317
317
  "docutils": {
318
318
  "hashes": [
319
- "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f",
320
- "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"
319
+ "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6",
320
+ "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"
321
321
  ],
322
- "markers": "python_version >= '3.9'",
323
- "version": "==0.21.2"
322
+ "markers": "python_version >= '3.7'",
323
+ "version": "==0.20.1"
324
324
  },
325
325
  "exceptiongroup": {
326
326
  "hashes": [
@@ -341,19 +341,19 @@
341
341
  },
342
342
  "filelock": {
343
343
  "hashes": [
344
- "sha256:58a2549afdf9e02e10720eaa4d4470f56386d7a6f72edd7d0596337af8ed7ad8",
345
- "sha256:71b3102950e91dfc1bb4209b64be4dc8854f40e5f534428d8684f953ac847fac"
344
+ "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb",
345
+ "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"
346
346
  ],
347
347
  "markers": "python_version >= '3.8'",
348
- "version": "==3.15.1"
348
+ "version": "==3.15.4"
349
349
  },
350
350
  "flake8": {
351
351
  "hashes": [
352
- "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132",
353
- "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"
352
+ "sha256:2e416edcc62471a64cea09353f4e7bdba32aeb079b6e360554c659a122b1bc6a",
353
+ "sha256:48a07b626b55236e0fb4784ee69a465fbf59d79eec1f5b4785c3d3bc57d17aa5"
354
354
  ],
355
355
  "markers": "python_full_version >= '3.8.1'",
356
- "version": "==7.0.0"
356
+ "version": "==7.1.0"
357
357
  },
358
358
  "flake8-docstrings": {
359
359
  "hashes": [
@@ -429,12 +429,12 @@
429
429
  },
430
430
  "importlib-metadata": {
431
431
  "hashes": [
432
- "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570",
433
- "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"
432
+ "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f",
433
+ "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"
434
434
  ],
435
435
  "index": "pypi",
436
436
  "markers": "python_version >= '3.8'",
437
- "version": "==7.1.0"
437
+ "version": "==8.0.0"
438
438
  },
439
439
  "iniconfig": {
440
440
  "hashes": [
@@ -678,20 +678,20 @@
678
678
  },
679
679
  "pre-commit": {
680
680
  "hashes": [
681
- "sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a",
682
- "sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5"
681
+ "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32",
682
+ "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"
683
683
  ],
684
684
  "index": "pypi",
685
- "markers": "python_version >= '3.9'",
686
- "version": "==3.7.1"
685
+ "markers": "python_version >= '3.8'",
686
+ "version": "==3.5.0"
687
687
  },
688
688
  "pycodestyle": {
689
689
  "hashes": [
690
- "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f",
691
- "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"
690
+ "sha256:442f950141b4f43df752dd303511ffded3a04c2b6fb7f65980574f0c31e6e79c",
691
+ "sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4"
692
692
  ],
693
693
  "markers": "python_version >= '3.8'",
694
- "version": "==2.11.1"
694
+ "version": "==2.12.0"
695
695
  },
696
696
  "pydocstyle": {
697
697
  "hashes": [
@@ -753,6 +753,14 @@
753
753
  "markers": "python_version >= '3.8'",
754
754
  "version": "==3.6.1"
755
755
  },
756
+ "pytz": {
757
+ "hashes": [
758
+ "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812",
759
+ "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"
760
+ ],
761
+ "markers": "python_version < '3.9'",
762
+ "version": "==2024.1"
763
+ },
756
764
  "pyyaml": {
757
765
  "hashes": [
758
766
  "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5",
@@ -834,21 +842,21 @@
834
842
  },
835
843
  "sphinx": {
836
844
  "hashes": [
837
- "sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3",
838
- "sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc"
845
+ "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f",
846
+ "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"
839
847
  ],
840
848
  "index": "pypi",
841
- "markers": "python_version >= '3.9'",
842
- "version": "==7.3.7"
849
+ "markers": "python_version >= '3.8'",
850
+ "version": "==7.1.2"
843
851
  },
844
852
  "sphinx-autodoc-typehints": {
845
853
  "hashes": [
846
- "sha256:0072b65f5ab2818c229d6d6c2cc993770af55d36bb7bfb16001e2fce4d14880c",
847
- "sha256:22427d74786274add2b6d4afccb8b3c8c1843f48a704550f15a35fd948f8a4de"
854
+ "sha256:60ed1e3b2c970acc0aa6e877be42d48029a9faec7378a17838716cacd8c10b12",
855
+ "sha256:f73ae89b43a799e587e39266672c1075b2ef783aeb382d3ebed77c38a3fc0149"
848
856
  ],
849
857
  "index": "pypi",
850
- "markers": "python_version >= '3.9'",
851
- "version": "==2.1.1"
858
+ "markers": "python_version >= '3.8'",
859
+ "version": "==2.0.1"
852
860
  },
853
861
  "sphinx-copybutton": {
854
862
  "hashes": [
@@ -861,27 +869,27 @@
861
869
  },
862
870
  "sphinxcontrib-applehelp": {
863
871
  "hashes": [
864
- "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619",
865
- "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"
872
+ "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228",
873
+ "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"
866
874
  ],
867
- "markers": "python_version >= '3.9'",
868
- "version": "==1.0.8"
875
+ "markers": "python_version >= '3.8'",
876
+ "version": "==1.0.4"
869
877
  },
870
878
  "sphinxcontrib-devhelp": {
871
879
  "hashes": [
872
- "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f",
873
- "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"
880
+ "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e",
881
+ "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"
874
882
  ],
875
- "markers": "python_version >= '3.9'",
876
- "version": "==1.0.6"
883
+ "markers": "python_version >= '3.5'",
884
+ "version": "==1.0.2"
877
885
  },
878
886
  "sphinxcontrib-htmlhelp": {
879
887
  "hashes": [
880
- "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015",
881
- "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"
888
+ "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff",
889
+ "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"
882
890
  ],
883
- "markers": "python_version >= '3.9'",
884
- "version": "==2.0.5"
891
+ "markers": "python_version >= '3.8'",
892
+ "version": "==2.0.1"
885
893
  },
886
894
  "sphinxcontrib-jsmath": {
887
895
  "hashes": [
@@ -893,19 +901,19 @@
893
901
  },
894
902
  "sphinxcontrib-qthelp": {
895
903
  "hashes": [
896
- "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6",
897
- "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"
904
+ "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72",
905
+ "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"
898
906
  ],
899
- "markers": "python_version >= '3.9'",
900
- "version": "==1.0.7"
907
+ "markers": "python_version >= '3.5'",
908
+ "version": "==1.0.3"
901
909
  },
902
910
  "sphinxcontrib-serializinghtml": {
903
911
  "hashes": [
904
- "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7",
905
- "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"
912
+ "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd",
913
+ "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"
906
914
  ],
907
- "markers": "python_version >= '3.9'",
908
- "version": "==1.1.10"
915
+ "markers": "python_version >= '3.5'",
916
+ "version": "==1.1.5"
909
917
  },
910
918
  "tomli": {
911
919
  "hashes": [
@@ -918,19 +926,19 @@
918
926
  },
919
927
  "urllib3": {
920
928
  "hashes": [
921
- "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d",
922
- "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"
929
+ "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472",
930
+ "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"
923
931
  ],
924
932
  "markers": "python_version >= '3.8'",
925
- "version": "==2.2.1"
933
+ "version": "==2.2.2"
926
934
  },
927
935
  "virtualenv": {
928
936
  "hashes": [
929
- "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c",
930
- "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"
937
+ "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a",
938
+ "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"
931
939
  ],
932
940
  "markers": "python_version >= '3.7'",
933
- "version": "==20.26.2"
941
+ "version": "==20.26.3"
934
942
  },
935
943
  "zipp": {
936
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.5"
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
@@ -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