fotolab 0.16.4__tar.gz → 0.16.6__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.6}/.pre-commit-config.yaml +1 -1
- {fotolab-0.16.4 → fotolab-0.16.6}/CHANGELOG.md +11 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/PKG-INFO +6 -3
- {fotolab-0.16.4 → fotolab-0.16.6}/Pipfile +3 -4
- {fotolab-0.16.4 → fotolab-0.16.6}/Pipfile.lock +60 -116
- {fotolab-0.16.4 → fotolab-0.16.6}/README.md +5 -2
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/__init__.py +1 -1
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/cli.py +1 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/watermark.py +2 -3
- {fotolab-0.16.4 → fotolab-0.16.6}/noxfile.py +22 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/.coveragerc +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/.gitignore +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/.python-version +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/CONTRIBUTING.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/LICENSE.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/Makefile +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/make.bat +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/source/CHANGELOG.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/source/CONTRIBUTING.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/source/LICENSE.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/source/README.md +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/source/_static/logo.jpg +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/source/conf.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/docs/source/index.rst +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/__main__.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/animate.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/auto.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/border.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/contrast.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/env.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/info.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/montage.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/resize.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/rotate.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/fotolab/sharpen.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/pyproject.toml +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/tests/__init__.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/tests/conftest.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/tests/test_env.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/tests/test_help_flag.py +0 -0
- {fotolab-0.16.4 → fotolab-0.16.6}/tests/test_quiet_flag.py +0 -0
@@ -7,6 +7,17 @@ and this project adheres to [0-based versioning](https://0ver.org/).
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## v0.16.6 (2024-06-23)
|
11
|
+
|
12
|
+
- Add `readme` session to `nox`
|
13
|
+
- Bump deps and `pre-commit` hooks
|
14
|
+
- Set CLI program name explicitly
|
15
|
+
|
16
|
+
## v0.16.5 (2024-06-16)
|
17
|
+
|
18
|
+
- Bump, sort, and remove unused deps
|
19
|
+
- Load and use default system font when watermarking
|
20
|
+
|
10
21
|
## v0.16.4 (2024-06-09)
|
11
22
|
|
12
23
|
- Add `deps` session to `nox`
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fotolab
|
3
|
-
Version: 0.16.
|
3
|
+
Version: 0.16.6
|
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": {
|
@@ -96,19 +96,19 @@
|
|
96
96
|
"develop": {
|
97
97
|
"alabaster": {
|
98
98
|
"hashes": [
|
99
|
-
"sha256:
|
100
|
-
"sha256:
|
99
|
+
"sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65",
|
100
|
+
"sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"
|
101
101
|
],
|
102
|
-
"markers": "python_version >= '3.
|
103
|
-
"version": "==0.7.
|
102
|
+
"markers": "python_version >= '3.9'",
|
103
|
+
"version": "==0.7.16"
|
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",
|
@@ -340,11 +316,11 @@
|
|
340
316
|
},
|
341
317
|
"docutils": {
|
342
318
|
"hashes": [
|
343
|
-
"sha256:
|
344
|
-
"sha256:
|
319
|
+
"sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f",
|
320
|
+
"sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"
|
345
321
|
],
|
346
|
-
"markers": "python_version >= '3.
|
347
|
-
"version": "==0.
|
322
|
+
"markers": "python_version >= '3.9'",
|
323
|
+
"version": "==0.21.2"
|
348
324
|
},
|
349
325
|
"exceptiongroup": {
|
350
326
|
"hashes": [
|
@@ -365,19 +341,19 @@
|
|
365
341
|
},
|
366
342
|
"filelock": {
|
367
343
|
"hashes": [
|
368
|
-
"sha256:
|
369
|
-
"sha256:
|
344
|
+
"sha256:58a2549afdf9e02e10720eaa4d4470f56386d7a6f72edd7d0596337af8ed7ad8",
|
345
|
+
"sha256:71b3102950e91dfc1bb4209b64be4dc8854f40e5f534428d8684f953ac847fac"
|
370
346
|
],
|
371
347
|
"markers": "python_version >= '3.8'",
|
372
|
-
"version": "==3.
|
348
|
+
"version": "==3.15.1"
|
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": [
|
@@ -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": [
|
@@ -702,20 +678,20 @@
|
|
702
678
|
},
|
703
679
|
"pre-commit": {
|
704
680
|
"hashes": [
|
705
|
-
"sha256:
|
706
|
-
"sha256:
|
681
|
+
"sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a",
|
682
|
+
"sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5"
|
707
683
|
],
|
708
684
|
"index": "pypi",
|
709
|
-
"markers": "python_version >= '3.
|
710
|
-
"version": "==3.
|
685
|
+
"markers": "python_version >= '3.9'",
|
686
|
+
"version": "==3.7.1"
|
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",
|
@@ -785,14 +753,6 @@
|
|
785
753
|
"markers": "python_version >= '3.8'",
|
786
754
|
"version": "==3.6.1"
|
787
755
|
},
|
788
|
-
"pytz": {
|
789
|
-
"hashes": [
|
790
|
-
"sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812",
|
791
|
-
"sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"
|
792
|
-
],
|
793
|
-
"markers": "python_version < '3.9'",
|
794
|
-
"version": "==2024.1"
|
795
|
-
},
|
796
756
|
"pyyaml": {
|
797
757
|
"hashes": [
|
798
758
|
"sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5",
|
@@ -874,21 +834,21 @@
|
|
874
834
|
},
|
875
835
|
"sphinx": {
|
876
836
|
"hashes": [
|
877
|
-
"sha256:
|
878
|
-
"sha256:
|
837
|
+
"sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3",
|
838
|
+
"sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc"
|
879
839
|
],
|
880
840
|
"index": "pypi",
|
881
|
-
"markers": "python_version >= '3.
|
882
|
-
"version": "==7.
|
841
|
+
"markers": "python_version >= '3.9'",
|
842
|
+
"version": "==7.3.7"
|
883
843
|
},
|
884
844
|
"sphinx-autodoc-typehints": {
|
885
845
|
"hashes": [
|
886
|
-
"sha256:
|
887
|
-
"sha256:
|
846
|
+
"sha256:143e22dbb096cc39f1559d3accbe423e5fbf04d02849d6564e6471b5616bbd97",
|
847
|
+
"sha256:a21f0120d8657545ad5ec269d7276b0718c367c8ff2fa8ad8767ddf2c660b909"
|
888
848
|
],
|
889
849
|
"index": "pypi",
|
890
|
-
"markers": "python_version >= '3.
|
891
|
-
"version": "==2.0
|
850
|
+
"markers": "python_version >= '3.9'",
|
851
|
+
"version": "==2.2.0"
|
892
852
|
},
|
893
853
|
"sphinx-copybutton": {
|
894
854
|
"hashes": [
|
@@ -901,27 +861,27 @@
|
|
901
861
|
},
|
902
862
|
"sphinxcontrib-applehelp": {
|
903
863
|
"hashes": [
|
904
|
-
"sha256:
|
905
|
-
"sha256:
|
864
|
+
"sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619",
|
865
|
+
"sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"
|
906
866
|
],
|
907
|
-
"markers": "python_version >= '3.
|
908
|
-
"version": "==1.0.
|
867
|
+
"markers": "python_version >= '3.9'",
|
868
|
+
"version": "==1.0.8"
|
909
869
|
},
|
910
870
|
"sphinxcontrib-devhelp": {
|
911
871
|
"hashes": [
|
912
|
-
"sha256:
|
913
|
-
"sha256:
|
872
|
+
"sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f",
|
873
|
+
"sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"
|
914
874
|
],
|
915
|
-
"markers": "python_version >= '3.
|
916
|
-
"version": "==1.0.
|
875
|
+
"markers": "python_version >= '3.9'",
|
876
|
+
"version": "==1.0.6"
|
917
877
|
},
|
918
878
|
"sphinxcontrib-htmlhelp": {
|
919
879
|
"hashes": [
|
920
|
-
"sha256:
|
921
|
-
"sha256:
|
880
|
+
"sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015",
|
881
|
+
"sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"
|
922
882
|
],
|
923
|
-
"markers": "python_version >= '3.
|
924
|
-
"version": "==2.0.
|
883
|
+
"markers": "python_version >= '3.9'",
|
884
|
+
"version": "==2.0.5"
|
925
885
|
},
|
926
886
|
"sphinxcontrib-jsmath": {
|
927
887
|
"hashes": [
|
@@ -933,19 +893,19 @@
|
|
933
893
|
},
|
934
894
|
"sphinxcontrib-qthelp": {
|
935
895
|
"hashes": [
|
936
|
-
"sha256:
|
937
|
-
"sha256:
|
896
|
+
"sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6",
|
897
|
+
"sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"
|
938
898
|
],
|
939
|
-
"markers": "python_version >= '3.
|
940
|
-
"version": "==1.0.
|
899
|
+
"markers": "python_version >= '3.9'",
|
900
|
+
"version": "==1.0.7"
|
941
901
|
},
|
942
902
|
"sphinxcontrib-serializinghtml": {
|
943
903
|
"hashes": [
|
944
|
-
"sha256:
|
945
|
-
"sha256:
|
904
|
+
"sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7",
|
905
|
+
"sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"
|
946
906
|
],
|
947
|
-
"markers": "python_version >= '3.
|
948
|
-
"version": "==1.1.
|
907
|
+
"markers": "python_version >= '3.9'",
|
908
|
+
"version": "==1.1.10"
|
949
909
|
},
|
950
910
|
"tomli": {
|
951
911
|
"hashes": [
|
@@ -956,29 +916,13 @@
|
|
956
916
|
"markers": "python_version >= '3.7'",
|
957
917
|
"version": "==2.0.1"
|
958
918
|
},
|
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
919
|
"urllib3": {
|
976
920
|
"hashes": [
|
977
|
-
"sha256:
|
978
|
-
"sha256:
|
921
|
+
"sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472",
|
922
|
+
"sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"
|
979
923
|
],
|
980
924
|
"markers": "python_version >= '3.8'",
|
981
|
-
"version": "==2.2.
|
925
|
+
"version": "==2.2.2"
|
982
926
|
},
|
983
927
|
"virtualenv": {
|
984
928
|
"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
|
@@ -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:
|
@@ -60,3 +64,21 @@ 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
|
File without changes
|
File without changes
|