fotolab 0.20.0__tar.gz → 0.21.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.20.0 → fotolab-0.21.0}/.pre-commit-config.yaml +1 -1
  2. {fotolab-0.20.0 → fotolab-0.21.0}/.python-version +0 -1
  3. {fotolab-0.20.0 → fotolab-0.21.0}/CHANGELOG.md +13 -0
  4. {fotolab-0.20.0 → fotolab-0.21.0}/CONTRIBUTING.md +0 -1
  5. {fotolab-0.20.0 → fotolab-0.21.0}/PKG-INFO +2 -2
  6. {fotolab-0.20.0 → fotolab-0.21.0}/Pipfile.lock +82 -77
  7. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/__init__.py +1 -1
  8. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/info.py +22 -5
  9. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/watermark.py +2 -0
  10. {fotolab-0.20.0 → fotolab-0.21.0}/noxfile.py +2 -3
  11. {fotolab-0.20.0 → fotolab-0.21.0}/pyproject.toml +1 -1
  12. {fotolab-0.20.0 → fotolab-0.21.0}/.coveragerc +0 -0
  13. {fotolab-0.20.0 → fotolab-0.21.0}/.gitignore +0 -0
  14. {fotolab-0.20.0 → fotolab-0.21.0}/LICENSE.md +0 -0
  15. {fotolab-0.20.0 → fotolab-0.21.0}/Pipfile +0 -0
  16. {fotolab-0.20.0 → fotolab-0.21.0}/README.md +0 -0
  17. {fotolab-0.20.0 → fotolab-0.21.0}/docs/Makefile +0 -0
  18. {fotolab-0.20.0 → fotolab-0.21.0}/docs/make.bat +0 -0
  19. {fotolab-0.20.0 → fotolab-0.21.0}/docs/source/CHANGELOG.md +0 -0
  20. {fotolab-0.20.0 → fotolab-0.21.0}/docs/source/CONTRIBUTING.md +0 -0
  21. {fotolab-0.20.0 → fotolab-0.21.0}/docs/source/LICENSE.md +0 -0
  22. {fotolab-0.20.0 → fotolab-0.21.0}/docs/source/README.md +0 -0
  23. {fotolab-0.20.0 → fotolab-0.21.0}/docs/source/_static/logo.jpg +0 -0
  24. {fotolab-0.20.0 → fotolab-0.21.0}/docs/source/conf.py +0 -0
  25. {fotolab-0.20.0 → fotolab-0.21.0}/docs/source/index.rst +0 -0
  26. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/__main__.py +0 -0
  27. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/animate.py +0 -0
  28. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/auto.py +0 -0
  29. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/border.py +0 -0
  30. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/cli.py +0 -0
  31. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/contrast.py +0 -0
  32. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/env.py +0 -0
  33. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/montage.py +0 -0
  34. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/resize.py +0 -0
  35. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/rotate.py +0 -0
  36. {fotolab-0.20.0 → fotolab-0.21.0}/fotolab/sharpen.py +0 -0
  37. {fotolab-0.20.0 → fotolab-0.21.0}/tests/__init__.py +0 -0
  38. {fotolab-0.20.0 → fotolab-0.21.0}/tests/conftest.py +0 -0
  39. {fotolab-0.20.0 → fotolab-0.21.0}/tests/test_env.py +0 -0
  40. {fotolab-0.20.0 → fotolab-0.21.0}/tests/test_help_flag.py +0 -0
  41. {fotolab-0.20.0 → fotolab-0.21.0}/tests/test_quiet_flag.py +0 -0
@@ -15,7 +15,7 @@ repos:
15
15
  - id: trailing-whitespace
16
16
 
17
17
  - repo: https://github.com/abravalheri/validate-pyproject
18
- rev: v0.22
18
+ rev: v0.23
19
19
  hooks:
20
20
  - id: validate-pyproject
21
21
  name: validate-pyproject
@@ -1,4 +1,3 @@
1
- 3.8.20
2
1
  3.9.20
3
2
  3.10.15
4
3
  3.11.10
@@ -7,6 +7,19 @@ and this project adheres to [0-based versioning](https://0ver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## v0.21.0 (2024-11-24)
11
+
12
+ - Add `--camera` flag to `info` subcommand
13
+ - Drop support for Python 3.8
14
+ - Resolve variables not initiated warnings
15
+ - Update pypi classifier
16
+
17
+ ## v0.20.1 (2024-11-17)
18
+
19
+ - Bump deps and `pre-commit` hooks
20
+ - Bump deps using minimum supported Python version in `nox`
21
+ - Remove duplicate `nox_session` decorator in `nox`
22
+
10
23
  ## v0.20.0 (2024-11-10)
11
24
 
12
25
  - Add `-l` or `--canvas-color` option to set color to extended canvas
@@ -51,7 +51,6 @@ nox -l
51
51
  ...
52
52
  * deps -> Update pre-commit hooks and deps.
53
53
  * lint -> Run pre-commit tasks.
54
- * test-3.8 -> Run test.
55
54
  * test-3.9 -> Run test.
56
55
  * test-3.10 -> Run test.
57
56
  * test-3.11 -> Run test.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fotolab
3
- Version: 0.20.0
3
+ Version: 0.21.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>
@@ -9,11 +9,11 @@ Classifier: Development Status :: 3 - Alpha
9
9
  Classifier: Environment :: Console
10
10
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
11
11
  Classifier: Programming Language :: Python :: 3 :: Only
12
- Classifier: Programming Language :: Python :: 3.8
13
12
  Classifier: Programming Language :: Python :: 3.9
14
13
  Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
16
15
  Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Programming Language :: Python
18
18
  Requires-Dist: pillow
19
19
  Project-URL: Changelog, https://github.com/kianmeng/fotolab/blob/master/CHANGELOG.md
@@ -18,85 +18,90 @@
18
18
  "default": {
19
19
  "pillow": {
20
20
  "hashes": [
21
- "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7",
22
- "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5",
23
- "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903",
24
- "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2",
25
- "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38",
26
- "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2",
27
- "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9",
28
- "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f",
29
- "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc",
30
- "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8",
31
- "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d",
32
- "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2",
33
- "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316",
34
- "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a",
35
- "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25",
36
- "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd",
37
- "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba",
38
- "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc",
39
- "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273",
40
- "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa",
41
- "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a",
42
- "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b",
43
- "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a",
44
- "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae",
45
- "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291",
46
- "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97",
47
- "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06",
48
- "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904",
49
- "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b",
50
- "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b",
51
- "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8",
52
- "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527",
53
- "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947",
54
- "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb",
55
- "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003",
56
- "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5",
57
- "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f",
58
- "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739",
59
- "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944",
60
- "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830",
61
- "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f",
62
- "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3",
63
- "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4",
64
- "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84",
65
- "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7",
66
- "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6",
67
- "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6",
68
- "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9",
69
- "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de",
70
- "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4",
71
- "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47",
72
- "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd",
73
- "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50",
74
- "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c",
75
- "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086",
76
- "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba",
77
- "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306",
78
- "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699",
79
- "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e",
80
- "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488",
81
- "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa",
82
- "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2",
83
- "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3",
84
- "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9",
85
- "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923",
86
- "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2",
87
- "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790",
88
- "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734",
89
- "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916",
90
- "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1",
91
- "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f",
92
- "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798",
93
- "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb",
94
- "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2",
95
- "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"
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"
96
101
  ],
97
102
  "index": "pypi",
98
- "markers": "python_version >= '3.9'",
99
- "version": "==11.0.0"
103
+ "markers": "python_version >= '3.8'",
104
+ "version": "==10.4.0"
100
105
  }
101
106
  },
102
107
  "develop": {
@@ -21,7 +21,7 @@ import subprocess
21
21
  import sys
22
22
  from pathlib import Path
23
23
 
24
- __version__ = "0.20.0"
24
+ __version__ = "0.21.0"
25
25
 
26
26
  log = logging.getLogger(__name__)
27
27
 
@@ -46,6 +46,14 @@ def build_subparser(subparsers) -> None:
46
46
  help="show image info by sorted field name",
47
47
  )
48
48
 
49
+ info_parser.add_argument(
50
+ "--camera",
51
+ default=False,
52
+ action="store_true",
53
+ dest="camera",
54
+ help="show the camera maker details",
55
+ )
56
+
49
57
 
50
58
  def run(args: argparse.Namespace) -> None:
51
59
  """Run info subcommand.
@@ -57,11 +65,13 @@ def run(args: argparse.Namespace) -> None:
57
65
  None
58
66
  """
59
67
  log.debug(args)
60
-
61
- exif_tags = extract_exif_tags(args.image.filename)
62
- tag_name_width = max(map(len, exif_tags))
63
- for tag_name, tag_value in exif_tags.items():
64
- print(f"{tag_name:<{tag_name_width}}: {tag_value}")
68
+ if args.camera:
69
+ print(camera_metadata(args.image_filename))
70
+ else:
71
+ 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}")
65
75
 
66
76
 
67
77
  def extract_exif_tags(image_filename: str, sort: bool = False) -> dict:
@@ -77,3 +87,10 @@ def extract_exif_tags(image_filename: str, sort: bool = False) -> dict:
77
87
  filtered_info = dict(sorted(filtered_info.items()))
78
88
 
79
89
  return filtered_info
90
+
91
+
92
+ def camera_metadata(image_filename):
93
+ """Extract camera and model metadata."""
94
+ exif_tags = extract_exif_tags(image_filename)
95
+ metadata = f'{exif_tags["Make"]} {exif_tags["Model"]}'
96
+ return metadata.strip()
@@ -244,6 +244,8 @@ def calc_padding(image, args) -> int:
244
244
 
245
245
  def calc_position(image, text_width, text_height, position, padding) -> tuple:
246
246
  """Calculate the boundary coordinates of the watermark text."""
247
+ (position_x, position_y) = (0, 0)
248
+
247
249
  if position == "top-left":
248
250
  position_x = 0 + padding
249
251
  position_y = 0 + padding
@@ -24,7 +24,7 @@ import nox
24
24
  from packaging.version import Version
25
25
 
26
26
 
27
- @nox.session()
27
+ @nox.session(python="3.9")
28
28
  def deps(session: nox.Session) -> None:
29
29
  """Update pre-commit hooks and deps."""
30
30
  session.install("pre-commit", "pipenv")
@@ -32,7 +32,6 @@ def deps(session: nox.Session) -> None:
32
32
  session.run("pipenv", "update", env={"PIPENV_VERBOSITY": "-1"})
33
33
 
34
34
 
35
- @nox.session()
36
35
  @nox.session(python="3.13")
37
36
  def lint(session: nox.Session) -> None:
38
37
  """Run pre-commit tasks.
@@ -45,7 +44,7 @@ def lint(session: nox.Session) -> None:
45
44
  session.run("pre-commit", "run", "--all-files", *session.posargs)
46
45
 
47
46
 
48
- @nox.session(python=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"])
47
+ @nox.session(python=["3.9", "3.10", "3.11", "3.12", "3.13"])
49
48
  def test(session: nox.Session) -> None:
50
49
  """Run test."""
51
50
  _pipenv_install(session)
@@ -12,11 +12,11 @@ classifiers = [
12
12
  "Environment :: Console",
13
13
  "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
14
14
  "Programming Language :: Python :: 3 :: Only",
15
- "Programming Language :: Python :: 3.8",
16
15
  "Programming Language :: Python :: 3.9",
17
16
  "Programming Language :: Python :: 3.10",
18
17
  "Programming Language :: Python :: 3.11",
19
18
  "Programming Language :: Python :: 3.12",
19
+ "Programming Language :: Python :: 3.13",
20
20
  "Programming Language :: Python",
21
21
  ]
22
22
  dynamic = ["version", "description"]
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