fotolab 0.21.0__tar.gz → 0.21.1__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.21.0 → fotolab-0.21.1}/CHANGELOG.md +7 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/PKG-INFO +2 -1
- {fotolab-0.21.0 → fotolab-0.21.1}/Pipfile +1 -1
- {fotolab-0.21.0 → fotolab-0.21.1}/Pipfile.lock +79 -84
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/__init__.py +1 -1
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/info.py +11 -4
- {fotolab-0.21.0 → fotolab-0.21.1}/pyproject.toml +1 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/.coveragerc +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/.gitignore +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/.pre-commit-config.yaml +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/.python-version +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/CONTRIBUTING.md +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/LICENSE.md +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/README.md +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/Makefile +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/make.bat +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/source/CHANGELOG.md +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/source/CONTRIBUTING.md +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/source/LICENSE.md +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/source/README.md +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/source/_static/logo.jpg +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/source/conf.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/docs/source/index.rst +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/__main__.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/animate.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/auto.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/border.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/cli.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/contrast.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/env.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/montage.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/resize.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/rotate.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/sharpen.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/fotolab/watermark.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/noxfile.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/tests/__init__.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/tests/conftest.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/tests/test_env.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/tests/test_help_flag.py +0 -0
- {fotolab-0.21.0 → fotolab-0.21.1}/tests/test_quiet_flag.py +0 -0
@@ -7,6 +7,13 @@ and this project adheres to [0-based versioning](https://0ver.org/).
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## v0.21.1 (2024-12-01)
|
11
|
+
|
12
|
+
- Add requires-python field to project
|
13
|
+
- Bump deps
|
14
|
+
- Check whether photo have metadata
|
15
|
+
- Update Pipfile to Python 3.9
|
16
|
+
|
10
17
|
## v0.21.0 (2024-11-24)
|
11
18
|
|
12
19
|
- Add `--camera` flag to `info` subcommand
|
@@ -1,9 +1,10 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fotolab
|
3
|
-
Version: 0.21.
|
3
|
+
Version: 0.21.1
|
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
|
@@ -1,11 +1,11 @@
|
|
1
1
|
{
|
2
2
|
"_meta": {
|
3
3
|
"hash": {
|
4
|
-
"sha256": "
|
4
|
+
"sha256": "0a76818192d0f36d59673b525a42ef562d0678471a6ec325a562062019c84c4b"
|
5
5
|
},
|
6
6
|
"pipfile-spec": 6,
|
7
7
|
"requires": {
|
8
|
-
"python_version": "3.
|
8
|
+
"python_version": "3.9"
|
9
9
|
},
|
10
10
|
"sources": [
|
11
11
|
{
|
@@ -18,90 +18,85 @@
|
|
18
18
|
"default": {
|
19
19
|
"pillow": {
|
20
20
|
"hashes": [
|
21
|
-
"sha256:
|
22
|
-
"sha256:
|
23
|
-
"sha256:
|
24
|
-
"sha256:
|
25
|
-
"sha256:
|
26
|
-
"sha256:
|
27
|
-
"sha256:
|
28
|
-
"sha256:
|
29
|
-
"sha256:
|
30
|
-
"sha256:
|
31
|
-
"sha256:
|
32
|
-
"sha256:
|
33
|
-
"sha256:
|
34
|
-
"sha256:
|
35
|
-
"sha256:
|
36
|
-
"sha256:
|
37
|
-
"sha256:
|
38
|
-
"sha256:
|
39
|
-
"sha256:
|
40
|
-
"sha256:
|
41
|
-
"sha256:
|
42
|
-
"sha256:
|
43
|
-
"sha256:
|
44
|
-
"sha256:
|
45
|
-
"sha256:
|
46
|
-
"sha256:
|
47
|
-
"sha256:
|
48
|
-
"sha256:
|
49
|
-
"sha256:
|
50
|
-
"sha256:
|
51
|
-
"sha256:
|
52
|
-
"sha256:
|
53
|
-
"sha256:
|
54
|
-
"sha256:
|
55
|
-
"sha256:
|
56
|
-
"sha256:
|
57
|
-
"sha256:
|
58
|
-
"sha256:
|
59
|
-
"sha256:
|
60
|
-
"sha256:
|
61
|
-
"sha256:
|
62
|
-
"sha256:
|
63
|
-
"sha256:
|
64
|
-
"sha256:
|
65
|
-
"sha256:
|
66
|
-
"sha256:
|
67
|
-
"sha256:
|
68
|
-
"sha256:
|
69
|
-
"sha256:
|
70
|
-
"sha256:
|
71
|
-
"sha256:
|
72
|
-
"sha256:
|
73
|
-
"sha256:
|
74
|
-
"sha256:
|
75
|
-
"sha256:
|
76
|
-
"sha256:
|
77
|
-
"sha256:
|
78
|
-
"sha256:
|
79
|
-
"sha256:
|
80
|
-
"sha256:
|
81
|
-
"sha256:
|
82
|
-
"sha256:
|
83
|
-
"sha256:
|
84
|
-
"sha256:
|
85
|
-
"sha256:
|
86
|
-
"sha256:
|
87
|
-
"sha256:
|
88
|
-
"sha256:
|
89
|
-
"sha256:
|
90
|
-
"sha256:
|
91
|
-
"sha256:
|
92
|
-
"sha256:
|
93
|
-
"sha256:
|
94
|
-
"sha256:
|
95
|
-
"sha256:
|
96
|
-
"sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef",
|
97
|
-
"sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22",
|
98
|
-
"sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27",
|
99
|
-
"sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e",
|
100
|
-
"sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"
|
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"
|
101
96
|
],
|
102
97
|
"index": "pypi",
|
103
|
-
"markers": "python_version >= '3.
|
104
|
-
"version": "==
|
98
|
+
"markers": "python_version >= '3.9'",
|
99
|
+
"version": "==11.0.0"
|
105
100
|
}
|
106
101
|
},
|
107
102
|
"develop": {
|
@@ -69,16 +69,23 @@ def run(args: argparse.Namespace) -> None:
|
|
69
69
|
print(camera_metadata(args.image_filename))
|
70
70
|
else:
|
71
71
|
exif_tags = extract_exif_tags(args.image_filename)
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
if exif_tags:
|
73
|
+
tag_name_width = max(map(len, exif_tags))
|
74
|
+
for tag_name, tag_value in exif_tags.items():
|
75
|
+
print(f"{tag_name:<{tag_name_width}}: {tag_value}")
|
76
|
+
else:
|
77
|
+
print("No metadata found!")
|
75
78
|
|
76
79
|
|
77
80
|
def extract_exif_tags(image_filename: str, sort: bool = False) -> dict:
|
78
81
|
"""Extract Exif metadata from image."""
|
79
82
|
image = Image.open(image_filename)
|
80
83
|
exif = image._getexif()
|
81
|
-
|
84
|
+
log.debug(exif)
|
85
|
+
|
86
|
+
info = {}
|
87
|
+
if exif:
|
88
|
+
info = {ExifTags.TAGS.get(tag_id): exif.get(tag_id) for tag_id in exif}
|
82
89
|
|
83
90
|
filtered_info = {
|
84
91
|
key: value for key, value in info.items() if key is not None
|
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
|
File without changes
|
File without changes
|
File without changes
|