IPTCInfo3 2.3.1__tar.gz → 2.4.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.
@@ -20,5 +20,8 @@ __pycache__
20
20
  # pipfile stuff
21
21
  Pipfile.lock
22
22
 
23
+ # uv stuff
24
+ uv.lock
25
+
23
26
  # virtualenvs
24
27
  .venv/
@@ -1,3 +1,18 @@
1
+ ## 2.4.0
2
+
3
+ ### New Features
4
+ - Added 19 missing Application Record (record 2) fields per IPTC IIM 4.1: object type/attribute reference (3, 4), audio block (150–154), document IDs (184–188), PhotoMechanic prefs (221), classify state (225), similarity index (228), document notes/history (230, 231), EXIF camera info (232), catalog sets (255). These previously surfaced as `nonstandard_N`.
5
+ - Note: `custom1–custom20` (datasets 200–219) left unchanged for backward compatibility, even though 200–202 are Object Preview fields per spec.
6
+
7
+ ---
8
+
9
+ ## 2.3.2
10
+
11
+ ### New Features
12
+ - Added `'creator'` alias for `'by-line'` (dataset 80) per IPTC Core — `info['creator']` now works for reading and writing (idea from adityamulik's PR #34, corrected: raw dataset 1 does not exist in IIM)
13
+
14
+ ---
15
+
1
16
  ## 2.3.1
2
17
 
3
18
  ### Compatibility
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: IPTCInfo3
3
- Version: 2.3.1
3
+ Version: 2.4.0
4
4
  Summary: Extract and modify IPTC metadata from JPEG images
5
5
  Project-URL: Homepage, https://github.com/jamesacampbell/iptcinfo3
6
6
  Project-URL: Repository, https://github.com/jamesacampbell/iptcinfo3
@@ -26,9 +26,9 @@ Classifier: Topic :: Multimedia :: Graphics
26
26
  Classifier: Topic :: Utilities
27
27
  Requires-Python: >=3.10
28
28
  Provides-Extra: dev
29
- Requires-Dist: pytest-cov>=4.0; extra == 'dev'
29
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
30
30
  Requires-Dist: pytest-watch>=4.2; extra == 'dev'
31
- Requires-Dist: pytest>=7.0; extra == 'dev'
31
+ Requires-Dist: pytest>=8.0; extra == 'dev'
32
32
  Description-Content-Type: text/x-rst
33
33
 
34
34
  ``IPTCINFO 3``
@@ -26,7 +26,7 @@ import tempfile
26
26
  from struct import pack, unpack
27
27
  import json
28
28
 
29
- __version__ = '2.3.1'
29
+ __version__ = '2.4.0'
30
30
  __author__ = 'Gulácsi, Tamás'
31
31
  __updated_by__ = 'Campbell, James'
32
32
 
@@ -445,6 +445,8 @@ def collect_adobe_parts(data):
445
445
  # are in %listdatasets below.
446
446
  c_datasets = {
447
447
  # 0: 'record version', # skip -- binary data
448
+ 3: 'object type reference',
449
+ 4: 'object attribute reference',
448
450
  5: 'object name',
449
451
  7: 'edit status',
450
452
  8: 'editorial update',
@@ -492,6 +494,23 @@ c_datasets = {
492
494
  130: 'image type',
493
495
  131: 'image orientation',
494
496
  135: 'language identifier',
497
+ 150: 'audio type',
498
+ 151: 'audio sampling rate',
499
+ 152: 'audio sampling resolution',
500
+ 153: 'audio duration',
501
+ 154: 'audio outcue',
502
+ 184: 'job id',
503
+ 185: 'master document id',
504
+ 186: 'short document id',
505
+ 187: 'unique document id',
506
+ 188: 'owner id',
507
+ 221: 'prefs', # PhotoMechanic preferences
508
+ 225: 'classify state',
509
+ 228: 'similarity index',
510
+ 230: 'document notes',
511
+ 231: 'document history',
512
+ 232: 'exif camera info',
513
+ 255: 'catalog sets', # written by iView MediaPro
495
514
  200: 'custom1', # These are NOT STANDARD, but are used by
496
515
  201: 'custom2', # Fotostation. Use at your own risk. They're
497
516
  202: 'custom3', # here in case you need to store some special
@@ -554,6 +573,10 @@ class IPTCData(dict):
554
573
  # Alias for compatibility with gThumb/exiftool
555
574
  elif isinstance(key, str) and key.lower() == 'destination':
556
575
  return 103 # Maps to 'original transmission reference'
576
+ # Alias per IPTC Core: 'creator' is stored as 'by-line' (dataset 80).
577
+ # (Closes adityamulik's PR #34 idea; raw dataset 1 does not exist in IIM.)
578
+ elif isinstance(key, str) and key.lower() == 'creator':
579
+ return 80 # Maps to 'by-line'
557
580
  elif key.startswith(cls.c_cust_pre) and key[len(cls.c_cust_pre):].isdigit():
558
581
  # example: nonstandard_69 -> 69
559
582
  return int(key[len(cls.c_cust_pre):])
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "IPTCInfo3"
7
- version = "2.3.1"
7
+ version = "2.4.0"
8
8
  description = "Extract and modify IPTC metadata from JPEG images"
9
9
  readme = "README.rst"
10
10
  license = { text = "Artistic-1.0 OR GPL-1.0-or-later" }
@@ -41,8 +41,8 @@ Issues = "https://github.com/jamesacampbell/iptcinfo3/issues"
41
41
 
42
42
  [project.optional-dependencies]
43
43
  dev = [
44
- "pytest>=7.0",
45
- "pytest-cov>=4.0",
44
+ "pytest>=8.0",
45
+ "pytest-cov>=5.0",
46
46
  "pytest-watch>=4.2",
47
47
  ]
48
48
 
File without changes
File without changes