fotolab 0.21.0__tar.gz → 0.22.0__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.21.0 → fotolab-0.22.0}/CHANGELOG.md +16 -0
  2. {fotolab-0.21.0 → fotolab-0.22.0}/PKG-INFO +7 -4
  3. {fotolab-0.21.0 → fotolab-0.22.0}/Pipfile +1 -1
  4. {fotolab-0.21.0 → fotolab-0.22.0}/Pipfile.lock +214 -185
  5. {fotolab-0.21.0 → fotolab-0.22.0}/README.md +5 -3
  6. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/__init__.py +1 -1
  7. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/info.py +27 -4
  8. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/watermark.py +2 -9
  9. {fotolab-0.21.0 → fotolab-0.22.0}/noxfile.py +28 -6
  10. {fotolab-0.21.0 → fotolab-0.22.0}/pyproject.toml +1 -0
  11. {fotolab-0.21.0 → fotolab-0.22.0}/.coveragerc +0 -0
  12. {fotolab-0.21.0 → fotolab-0.22.0}/.gitignore +0 -0
  13. {fotolab-0.21.0 → fotolab-0.22.0}/.pre-commit-config.yaml +0 -0
  14. {fotolab-0.21.0 → fotolab-0.22.0}/.python-version +0 -0
  15. {fotolab-0.21.0 → fotolab-0.22.0}/CONTRIBUTING.md +0 -0
  16. {fotolab-0.21.0 → fotolab-0.22.0}/LICENSE.md +0 -0
  17. {fotolab-0.21.0 → fotolab-0.22.0}/docs/Makefile +0 -0
  18. {fotolab-0.21.0 → fotolab-0.22.0}/docs/make.bat +0 -0
  19. {fotolab-0.21.0 → fotolab-0.22.0}/docs/source/CHANGELOG.md +0 -0
  20. {fotolab-0.21.0 → fotolab-0.22.0}/docs/source/CONTRIBUTING.md +0 -0
  21. {fotolab-0.21.0 → fotolab-0.22.0}/docs/source/LICENSE.md +0 -0
  22. {fotolab-0.21.0 → fotolab-0.22.0}/docs/source/README.md +0 -0
  23. {fotolab-0.21.0 → fotolab-0.22.0}/docs/source/_static/logo.jpg +0 -0
  24. {fotolab-0.21.0 → fotolab-0.22.0}/docs/source/conf.py +0 -0
  25. {fotolab-0.21.0 → fotolab-0.22.0}/docs/source/index.rst +0 -0
  26. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/__main__.py +0 -0
  27. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/animate.py +0 -0
  28. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/auto.py +0 -0
  29. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/border.py +0 -0
  30. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/cli.py +0 -0
  31. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/contrast.py +0 -0
  32. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/env.py +0 -0
  33. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/montage.py +0 -0
  34. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/resize.py +0 -0
  35. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/rotate.py +0 -0
  36. {fotolab-0.21.0 → fotolab-0.22.0}/fotolab/sharpen.py +0 -0
  37. {fotolab-0.21.0 → fotolab-0.22.0}/tests/__init__.py +0 -0
  38. {fotolab-0.21.0 → fotolab-0.22.0}/tests/conftest.py +0 -0
  39. {fotolab-0.21.0 → fotolab-0.22.0}/tests/test_env.py +0 -0
  40. {fotolab-0.21.0 → fotolab-0.22.0}/tests/test_help_flag.py +0 -0
  41. {fotolab-0.21.0 → fotolab-0.22.0}/tests/test_quiet_flag.py +0 -0
@@ -7,6 +7,22 @@ and this project adheres to [0-based versioning](https://0ver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## v0.22.0 (2024-12-08)
11
+
12
+ - Add `--datetime` to `info` subcommand
13
+ - Add `--no-lowercase` to `watermark` subcommand
14
+ - Bump deps
15
+ - Support major, minor, micro release for `release` job in `nox`
16
+ - Update help message in readme
17
+ - Use `camera_data` from `info` subcommand in `watermark` subcommand
18
+
19
+ ## v0.21.1 (2024-12-01)
20
+
21
+ - Add requires-python field to project
22
+ - Bump deps
23
+ - Check whether photo have metadata
24
+ - Update Pipfile to Python 3.9
25
+
10
26
  ## v0.21.0 (2024-11-24)
11
27
 
12
28
  - Add `--camera` flag to `info` subcommand
@@ -1,9 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fotolab
3
- Version: 0.21.0
3
+ Version: 0.22.0
4
4
  Summary: A console program that manipulate images.
5
5
  Keywords: photography,photo
6
6
  Author-email: Kian-Meng Ang <kianmeng@cpan.org>
7
+ Requires-Python: >=3.9
7
8
  Description-Content-Type: text/markdown
8
9
  Classifier: Development Status :: 3 - Alpha
9
10
  Classifier: Environment :: Console
@@ -205,7 +206,7 @@ fotolab info -h
205
206
  <!--help-info !-->
206
207
 
207
208
  ```console
208
- usage: fotolab info [-h] [-s] IMAGE_FILENAME
209
+ usage: fotolab info [-h] [-s] [--camera] IMAGE_FILENAME
209
210
 
210
211
  positional arguments:
211
212
  IMAGE_FILENAME set the image filename
@@ -213,6 +214,7 @@ positional arguments:
213
214
  options:
214
215
  -h, --help show this help message and exit
215
216
  -s, --sort show image info by sorted field name
217
+ --camera show the camera maker details
216
218
  ```
217
219
 
218
220
  <!--help-info !-->
@@ -325,7 +327,7 @@ usage: fotolab watermark [-h] [-t WATERMARK_TEXT]
325
327
  [-p {top-left,top-right,bottom-left,bottom-right}]
326
328
  [-pd PADDING] [-fs FONT_SIZE] [-fc FONT_COLOR]
327
329
  [-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR] [--camera]
328
- [-l]
330
+ [-l | --lowercase | --no-lowercase]
329
331
  IMAGE_FILENAMES [IMAGE_FILENAMES ...]
330
332
 
331
333
  positional arguments:
@@ -353,7 +355,8 @@ options:
353
355
  set the outline color of the watermark text (default:
354
356
  'black')
355
357
  --camera use camera metadata as watermark
356
- -l, --lowercase lowercase the watermark text
358
+ -l, --lowercase, --no-lowercase
359
+ lowercase the watermark text
357
360
  ```
358
361
 
359
362
  <!--help-watermark !-->
@@ -28,4 +28,4 @@ sphinx-copybutton = "*"
28
28
  tomli = "*"
29
29
 
30
30
  [requires]
31
- python_version = "3.8"
31
+ python_version = "3.9"
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "_meta": {
3
3
  "hash": {
4
- "sha256": "8d7307a0ff05c5de6ef45cc8bc2e1bf6c18b97ccf3a911c31ce0dd9a77feab08"
4
+ "sha256": "0a76818192d0f36d59673b525a42ef562d0678471a6ec325a562062019c84c4b"
5
5
  },
6
6
  "pipfile-spec": 6,
7
7
  "requires": {
8
- "python_version": "3.8"
8
+ "python_version": "3.9"
9
9
  },
10
10
  "sources": [
11
11
  {
@@ -16,102 +16,101 @@
16
16
  ]
17
17
  },
18
18
  "default": {
19
+ "fotolab": {
20
+ "file": ".",
21
+ "markers": "python_version >= '3.9'"
22
+ },
19
23
  "pillow": {
20
24
  "hashes": [
21
- "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885",
22
- "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea",
23
- "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df",
24
- "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5",
25
- "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c",
26
- "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d",
27
- "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd",
28
- "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06",
29
- "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908",
30
- "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a",
31
- "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be",
32
- "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0",
33
- "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b",
34
- "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80",
35
- "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a",
36
- "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e",
37
- "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9",
38
- "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696",
39
- "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b",
40
- "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309",
41
- "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e",
42
- "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab",
43
- "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d",
44
- "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060",
45
- "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d",
46
- "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d",
47
- "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4",
48
- "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3",
49
- "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6",
50
- "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb",
51
- "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94",
52
- "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b",
53
- "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496",
54
- "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0",
55
- "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319",
56
- "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b",
57
- "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856",
58
- "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef",
59
- "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680",
60
- "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b",
61
- "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42",
62
- "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e",
63
- "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597",
64
- "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a",
65
- "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8",
66
- "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3",
67
- "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736",
68
- "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da",
69
- "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126",
70
- "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd",
71
- "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5",
72
- "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b",
73
- "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026",
74
- "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b",
75
- "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc",
76
- "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46",
77
- "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2",
78
- "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c",
79
- "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe",
80
- "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984",
81
- "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a",
82
- "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70",
83
- "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca",
84
- "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b",
85
- "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91",
86
- "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3",
87
- "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84",
88
- "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1",
89
- "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5",
90
- "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be",
91
- "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f",
92
- "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc",
93
- "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9",
94
- "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e",
95
- "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141",
96
- "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef",
97
- "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22",
98
- "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27",
99
- "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e",
100
- "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"
25
+ "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7",
26
+ "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5",
27
+ "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903",
28
+ "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2",
29
+ "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38",
30
+ "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2",
31
+ "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9",
32
+ "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f",
33
+ "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc",
34
+ "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8",
35
+ "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d",
36
+ "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2",
37
+ "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316",
38
+ "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a",
39
+ "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25",
40
+ "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd",
41
+ "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba",
42
+ "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc",
43
+ "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273",
44
+ "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa",
45
+ "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a",
46
+ "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b",
47
+ "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a",
48
+ "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae",
49
+ "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291",
50
+ "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97",
51
+ "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06",
52
+ "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904",
53
+ "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b",
54
+ "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b",
55
+ "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8",
56
+ "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527",
57
+ "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947",
58
+ "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb",
59
+ "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003",
60
+ "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5",
61
+ "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f",
62
+ "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739",
63
+ "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944",
64
+ "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830",
65
+ "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f",
66
+ "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3",
67
+ "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4",
68
+ "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84",
69
+ "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7",
70
+ "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6",
71
+ "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6",
72
+ "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9",
73
+ "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de",
74
+ "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4",
75
+ "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47",
76
+ "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd",
77
+ "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50",
78
+ "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c",
79
+ "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086",
80
+ "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba",
81
+ "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306",
82
+ "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699",
83
+ "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e",
84
+ "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488",
85
+ "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa",
86
+ "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2",
87
+ "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3",
88
+ "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9",
89
+ "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923",
90
+ "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2",
91
+ "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790",
92
+ "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734",
93
+ "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916",
94
+ "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1",
95
+ "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f",
96
+ "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798",
97
+ "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb",
98
+ "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2",
99
+ "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"
101
100
  ],
102
101
  "index": "pypi",
103
- "markers": "python_version >= '3.8'",
104
- "version": "==10.4.0"
102
+ "markers": "python_version >= '3.9'",
103
+ "version": "==11.0.0"
105
104
  }
106
105
  },
107
106
  "develop": {
108
107
  "alabaster": {
109
108
  "hashes": [
110
- "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e",
111
- "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"
109
+ "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65",
110
+ "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"
112
111
  ],
113
- "markers": "python_version >= '3.10'",
114
- "version": "==1.0.0"
112
+ "markers": "python_version >= '3.9'",
113
+ "version": "==0.7.16"
115
114
  },
116
115
  "argcomplete": {
117
116
  "hashes": [
@@ -277,71 +276,71 @@
277
276
  "toml"
278
277
  ],
279
278
  "hashes": [
280
- "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376",
281
- "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9",
282
- "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111",
283
- "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172",
284
- "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491",
285
- "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546",
286
- "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2",
287
- "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11",
288
- "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08",
289
- "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c",
290
- "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2",
291
- "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963",
292
- "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613",
293
- "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0",
294
- "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db",
295
- "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf",
296
- "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73",
297
- "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117",
298
- "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1",
299
- "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e",
300
- "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522",
301
- "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25",
302
- "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc",
303
- "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea",
304
- "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52",
305
- "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a",
306
- "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07",
307
- "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06",
308
- "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa",
309
- "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901",
310
- "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b",
311
- "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17",
312
- "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0",
313
- "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21",
314
- "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19",
315
- "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5",
316
- "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51",
317
- "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3",
318
- "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3",
319
- "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f",
320
- "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076",
321
- "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a",
322
- "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718",
323
- "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba",
324
- "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e",
325
- "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27",
326
- "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e",
327
- "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09",
328
- "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e",
329
- "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70",
330
- "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f",
331
- "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72",
332
- "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a",
333
- "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef",
334
- "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b",
335
- "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b",
336
- "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f",
337
- "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806",
338
- "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b",
339
- "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1",
340
- "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c",
341
- "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858"
279
+ "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5",
280
+ "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf",
281
+ "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb",
282
+ "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638",
283
+ "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4",
284
+ "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc",
285
+ "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed",
286
+ "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a",
287
+ "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d",
288
+ "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649",
289
+ "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c",
290
+ "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b",
291
+ "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4",
292
+ "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443",
293
+ "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83",
294
+ "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee",
295
+ "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e",
296
+ "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e",
297
+ "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3",
298
+ "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0",
299
+ "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb",
300
+ "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076",
301
+ "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb",
302
+ "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787",
303
+ "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1",
304
+ "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e",
305
+ "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce",
306
+ "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801",
307
+ "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764",
308
+ "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365",
309
+ "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf",
310
+ "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6",
311
+ "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71",
312
+ "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002",
313
+ "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4",
314
+ "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c",
315
+ "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8",
316
+ "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4",
317
+ "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146",
318
+ "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc",
319
+ "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea",
320
+ "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4",
321
+ "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad",
322
+ "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28",
323
+ "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451",
324
+ "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50",
325
+ "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779",
326
+ "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63",
327
+ "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e",
328
+ "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc",
329
+ "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022",
330
+ "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d",
331
+ "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94",
332
+ "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b",
333
+ "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d",
334
+ "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331",
335
+ "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a",
336
+ "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0",
337
+ "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee",
338
+ "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92",
339
+ "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a",
340
+ "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9"
342
341
  ],
343
342
  "markers": "python_version >= '3.9'",
344
- "version": "==7.6.4"
343
+ "version": "==7.6.8"
345
344
  },
346
345
  "distlib": {
347
346
  "hashes": [
@@ -436,16 +435,16 @@
436
435
  "version": "==0.21.0"
437
436
  },
438
437
  "fotolab": {
439
- "editable": true,
440
- "path": "."
438
+ "file": ".",
439
+ "markers": "python_version >= '3.9'"
441
440
  },
442
441
  "identify": {
443
442
  "hashes": [
444
- "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0",
445
- "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"
443
+ "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02",
444
+ "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"
446
445
  ],
447
- "markers": "python_version >= '3.8'",
448
- "version": "==2.6.1"
446
+ "markers": "python_version >= '3.9'",
447
+ "version": "==2.6.3"
449
448
  },
450
449
  "idna": {
451
450
  "hashes": [
@@ -589,12 +588,12 @@
589
588
  },
590
589
  "myst-parser": {
591
590
  "hashes": [
592
- "sha256:851c9dfb44e36e56d15d05e72f02b80da21a9e0d07cba96baf5e2d476bb91531",
593
- "sha256:b9317997552424448c6096c2558872fdb6f81d3ecb3a40ce84a7518798f3f28d"
591
+ "sha256:6457aaa33a5d474aca678b8ead9b3dc298e89c68e67012e73146ea6fd54babf1",
592
+ "sha256:88f0cb406cb363b077d176b51c476f62d60604d68a8dcdf4832e080441301a87"
594
593
  ],
595
594
  "index": "pypi",
596
- "markers": "python_version >= '3.10'",
597
- "version": "==4.0.0"
595
+ "markers": "python_version >= '3.8'",
596
+ "version": "==3.0.1"
598
597
  },
599
598
  "nodeenv": {
600
599
  "hashes": [
@@ -615,11 +614,11 @@
615
614
  },
616
615
  "packaging": {
617
616
  "hashes": [
618
- "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002",
619
- "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"
617
+ "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759",
618
+ "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"
620
619
  ],
621
620
  "markers": "python_version >= '3.8'",
622
- "version": "==24.1"
621
+ "version": "==24.2"
623
622
  },
624
623
  "pillow": {
625
624
  "hashes": [
@@ -762,12 +761,12 @@
762
761
  },
763
762
  "pytest": {
764
763
  "hashes": [
765
- "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181",
766
- "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"
764
+ "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6",
765
+ "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"
767
766
  ],
768
767
  "index": "pypi",
769
768
  "markers": "python_version >= '3.8'",
770
- "version": "==8.3.3"
769
+ "version": "==8.3.4"
771
770
  },
772
771
  "pytest-cov": {
773
772
  "hashes": [
@@ -879,21 +878,21 @@
879
878
  },
880
879
  "sphinx": {
881
880
  "hashes": [
882
- "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2",
883
- "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927"
881
+ "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe",
882
+ "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"
884
883
  ],
885
884
  "index": "pypi",
886
- "markers": "python_version >= '3.10'",
887
- "version": "==8.1.3"
885
+ "markers": "python_version >= '3.9'",
886
+ "version": "==7.4.7"
888
887
  },
889
888
  "sphinx-autodoc-typehints": {
890
889
  "hashes": [
891
- "sha256:259e1026b218d563d72743f417fcc25906a9614897fe37f91bd8d7d58f748c3b",
892
- "sha256:53def4753239683835b19bfa8b68c021388bd48a096efcb02cdab508ece27363"
890
+ "sha256:3098e2c6d0ba99eacd013eb06861acc9b51c6e595be86ab05c08ee5506ac0c67",
891
+ "sha256:535c78ed2d6a1bad393ba9f3dfa2602cf424e2631ee207263e07874c38fde084"
893
892
  ],
894
893
  "index": "pypi",
895
- "markers": "python_version >= '3.10'",
896
- "version": "==2.5.0"
894
+ "markers": "python_version >= '3.9'",
895
+ "version": "==2.3.0"
897
896
  },
898
897
  "sphinx-copybutton": {
899
898
  "hashes": [
@@ -954,12 +953,42 @@
954
953
  },
955
954
  "tomli": {
956
955
  "hashes": [
957
- "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38",
958
- "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
956
+ "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6",
957
+ "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd",
958
+ "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c",
959
+ "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b",
960
+ "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8",
961
+ "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6",
962
+ "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77",
963
+ "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff",
964
+ "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea",
965
+ "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192",
966
+ "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249",
967
+ "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee",
968
+ "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4",
969
+ "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98",
970
+ "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8",
971
+ "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4",
972
+ "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281",
973
+ "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744",
974
+ "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69",
975
+ "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13",
976
+ "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140",
977
+ "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e",
978
+ "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e",
979
+ "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc",
980
+ "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff",
981
+ "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec",
982
+ "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2",
983
+ "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222",
984
+ "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106",
985
+ "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272",
986
+ "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a",
987
+ "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"
959
988
  ],
960
989
  "index": "pypi",
961
990
  "markers": "python_version >= '3.8'",
962
- "version": "==2.0.2"
991
+ "version": "==2.2.1"
963
992
  },
964
993
  "urllib3": {
965
994
  "hashes": [
@@ -971,19 +1000,19 @@
971
1000
  },
972
1001
  "virtualenv": {
973
1002
  "hashes": [
974
- "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba",
975
- "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"
1003
+ "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0",
1004
+ "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"
976
1005
  ],
977
1006
  "markers": "python_version >= '3.8'",
978
- "version": "==20.27.1"
1007
+ "version": "==20.28.0"
979
1008
  },
980
1009
  "zipp": {
981
1010
  "hashes": [
982
- "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350",
983
- "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"
1011
+ "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4",
1012
+ "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"
984
1013
  ],
985
- "markers": "python_version >= '3.8'",
986
- "version": "==3.20.2"
1014
+ "markers": "python_version >= '3.9'",
1015
+ "version": "==3.21.0"
987
1016
  }
988
1017
  }
989
1018
  }
@@ -183,7 +183,7 @@ fotolab info -h
183
183
  <!--help-info !-->
184
184
 
185
185
  ```console
186
- usage: fotolab info [-h] [-s] IMAGE_FILENAME
186
+ usage: fotolab info [-h] [-s] [--camera] IMAGE_FILENAME
187
187
 
188
188
  positional arguments:
189
189
  IMAGE_FILENAME set the image filename
@@ -191,6 +191,7 @@ positional arguments:
191
191
  options:
192
192
  -h, --help show this help message and exit
193
193
  -s, --sort show image info by sorted field name
194
+ --camera show the camera maker details
194
195
  ```
195
196
 
196
197
  <!--help-info !-->
@@ -303,7 +304,7 @@ usage: fotolab watermark [-h] [-t WATERMARK_TEXT]
303
304
  [-p {top-left,top-right,bottom-left,bottom-right}]
304
305
  [-pd PADDING] [-fs FONT_SIZE] [-fc FONT_COLOR]
305
306
  [-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR] [--camera]
306
- [-l]
307
+ [-l | --lowercase | --no-lowercase]
307
308
  IMAGE_FILENAMES [IMAGE_FILENAMES ...]
308
309
 
309
310
  positional arguments:
@@ -331,7 +332,8 @@ options:
331
332
  set the outline color of the watermark text (default:
332
333
  'black')
333
334
  --camera use camera metadata as watermark
334
- -l, --lowercase lowercase the watermark text
335
+ -l, --lowercase, --no-lowercase
336
+ lowercase the watermark text
335
337
  ```
336
338
 
337
339
  <!--help-watermark !-->
@@ -21,7 +21,7 @@ import subprocess
21
21
  import sys
22
22
  from pathlib import Path
23
23
 
24
- __version__ = "0.21.0"
24
+ __version__ = "0.22.0"
25
25
 
26
26
  log = logging.getLogger(__name__)
27
27
 
@@ -54,6 +54,14 @@ def build_subparser(subparsers) -> None:
54
54
  help="show the camera maker details",
55
55
  )
56
56
 
57
+ info_parser.add_argument(
58
+ "--datetime",
59
+ default=False,
60
+ action="store_true",
61
+ dest="datetime",
62
+ help="show the datetime",
63
+ )
64
+
57
65
 
58
66
  def run(args: argparse.Namespace) -> None:
59
67
  """Run info subcommand.
@@ -67,18 +75,27 @@ def run(args: argparse.Namespace) -> None:
67
75
  log.debug(args)
68
76
  if args.camera:
69
77
  print(camera_metadata(args.image_filename))
78
+ if args.datetime:
79
+ print(datetime(args.image_filename))
70
80
  else:
71
81
  exif_tags = extract_exif_tags(args.image_filename)
72
- tag_name_width = max(map(len, exif_tags))
73
- for tag_name, tag_value in exif_tags.items():
74
- print(f"{tag_name:<{tag_name_width}}: {tag_value}")
82
+ if exif_tags:
83
+ tag_name_width = max(map(len, exif_tags))
84
+ for tag_name, tag_value in exif_tags.items():
85
+ print(f"{tag_name:<{tag_name_width}}: {tag_value}")
86
+ else:
87
+ print("No metadata found!")
75
88
 
76
89
 
77
90
  def extract_exif_tags(image_filename: str, sort: bool = False) -> dict:
78
91
  """Extract Exif metadata from image."""
79
92
  image = Image.open(image_filename)
80
93
  exif = image._getexif()
81
- info = {ExifTags.TAGS.get(tag_id): exif.get(tag_id) for tag_id in exif}
94
+ log.debug(exif)
95
+
96
+ info = {}
97
+ if exif:
98
+ info = {ExifTags.TAGS.get(tag_id): exif.get(tag_id) for tag_id in exif}
82
99
 
83
100
  filtered_info = {
84
101
  key: value for key, value in info.items() if key is not None
@@ -89,6 +106,12 @@ def extract_exif_tags(image_filename: str, sort: bool = False) -> dict:
89
106
  return filtered_info
90
107
 
91
108
 
109
+ def datetime(image_filename):
110
+ """Extract datetime metadata."""
111
+ exif_tags = extract_exif_tags(image_filename)
112
+ return exif_tags["DateTime"]
113
+
114
+
92
115
  def camera_metadata(image_filename):
93
116
  """Extract camera and model metadata."""
94
117
  exif_tags = extract_exif_tags(image_filename)
@@ -22,7 +22,7 @@ import math
22
22
  from PIL import Image, ImageColor, ImageDraw, ImageFont
23
23
 
24
24
  from fotolab import save_image
25
- from fotolab.info import extract_exif_tags
25
+ from fotolab.info import camera_metadata
26
26
 
27
27
  log = logging.getLogger(__name__)
28
28
 
@@ -139,7 +139,7 @@ def build_subparser(subparsers) -> None:
139
139
  "-l",
140
140
  "--lowercase",
141
141
  default=True,
142
- action="store_true",
142
+ action=argparse.BooleanOptionalAction,
143
143
  dest="lowercase",
144
144
  help="lowercase the watermark text",
145
145
  )
@@ -200,13 +200,6 @@ def watermark_image(image_filename, args):
200
200
  return watermarked_image
201
201
 
202
202
 
203
- def camera_metadata(image_filename):
204
- """Extract camera and model metadata."""
205
- exif_tags = extract_exif_tags(image_filename)
206
- metadata = f'{exif_tags["Make"]} {exif_tags["Model"]}'
207
- return metadata.strip()
208
-
209
-
210
203
  def calc_font_size(image, args) -> int:
211
204
  """Calculate the font size based on the width of the image."""
212
205
  width, _height = image.size
@@ -118,8 +118,15 @@ def readme(session: nox.Session) -> None:
118
118
 
119
119
 
120
120
  @nox.session(python="3.13", reuse_venv=True)
121
- def release(_session: nox.Session) -> None:
122
- """Bump release."""
121
+ def release(session: nox.Session) -> None:
122
+ """Bump release.
123
+
124
+ To set which part of version explicitly:
125
+
126
+ nox -s release -- major
127
+ nox -s release -- minor
128
+ nox -s release -- micro (default)
129
+ """
123
130
  with open("fotolab/__init__.py", "r", encoding="utf8") as f:
124
131
  tree = ast.parse(f.read())
125
132
  current_version = None
@@ -134,11 +141,26 @@ def release(_session: nox.Session) -> None:
134
141
  raise ValueError("Missing __version__ variable in __init__.py")
135
142
 
136
143
  before_version = Version(current_version)
137
- after_version = (
138
- f"{before_version.major}."
139
- f"{before_version.minor}."
140
- f"{before_version.micro + 1}"
144
+
145
+ (major, minor, micro) = (
146
+ before_version.major,
147
+ before_version.minor,
148
+ before_version.micro,
141
149
  )
150
+ if "major" in session.posargs:
151
+ major = major + 1
152
+ minor = 0
153
+ micro = 0
154
+
155
+ if "minor" in session.posargs:
156
+ minor = minor + 1
157
+ micro = 0
158
+
159
+ if "micro" in session.posargs or session.posargs == []:
160
+ micro = micro + 1
161
+
162
+ after_version = f"{major}.{minor}.{micro}"
163
+
142
164
  _search_and_replace(
143
165
  "fotolab/__init__.py", str(before_version), after_version
144
166
  )
@@ -5,6 +5,7 @@ build-backend = "flit_core.buildapi"
5
5
  [project]
6
6
  name = "fotolab"
7
7
  authors = [{name = "Kian-Meng Ang", email = "kianmeng@cpan.org"}]
8
+ requires-python = ">=3.9"
8
9
  readme = "README.md"
9
10
  license = {file = "LICENSE.md"}
10
11
  classifiers = [
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