GroupDocs.Metadata for Python via .NET 26.9 Release Notes
This release upgrades the GroupDocs.Metadata engine from 26.6 to 26.8. The package now installs a groupdocs-metadata command line, reads five more archive formats — Apple Archive (AAR), GZIP, BZ2, XZ and Zstandard — and opens PowerPoint presentations again on every platform. The Linux and macOS packages no longer need libgdiplus, the package works on Python 3.5 – 3.7 again, and the embedded .NET runtime moves from 10.0.0 to 10.0.12, the latest of the twelve servicing updates Microsoft has shipped for .NET 10, nine of them security releases.
Breaking change: the 26.8 engine moved 105 format classes out of 13 sub-namespaces into their parents, and the Python package follows it. Code that imports from one of those modules — for example from groupdocs.metadata.formats.audio.ogg import OggPackage — must import from the parent instead (from groupdocs.metadata.formats.audio import OggPackage). No class or member was removed or renamed; API Changes lists every moved module. On Linux and macOS the wheels now state the oldest system they run on, so installing needs pip 20.3 or newer — see Requirements.
Full List of Changes in This Release
| Key | Category | Summary |
|---|---|---|
| METADATAPYTHON‑39 | Feature | Ship command line interface within package |
| METADATAPYTHON‑62 | Feature | Add support for reading Apple Archive (AAR), GZIP, BZ2, XZ and Zstandard archives |
| METADATAPYTHON‑63 | Enhancement | Update GroupDocs.Metadata engine from 26.6 to 26.8 |
| METADATAPYTHON‑64 | Enhancement | Update the embedded .NET runtime from 10.0.0 to 10.0.12 |
| METADATAPYTHON‑65 | Enhancement | Move the Ogg, FB2, Mobi, MSG, DNG, SVG, raw tag, CR2 and 3D format classes into their parent modules, as in the 26.8 engine |
| METADATAPYTHON‑66 | Enhancement | Remove the libgdiplus / mono-libgdiplus requirement on Linux and macOS |
| METADATAPYTHON‑67 | Enhancement | Add FileTypeFeatureSupport and the ProductFeature, SupportLevel and FormatFamily enums to the Python API |
| METADATAPYTHON‑68 | Enhancement | Add get() to indexed packages and collections, append() to IptcRecordSet, and a no-argument Rectangle() constructor |
| METADATAPYTHON‑69 | Enhancement | Publish the API reference for every module, including formats.* and standards.* |
| METADATAPYTHON‑50 | Fix | Cannot open PowerPoint presentations: DllNotFoundException for aspose.slides.drawing.capi |
| METADATAPYTHON‑51 | Fix | Reading an EXIF tag by TiffTagID fails on Python 3.5 – 3.10 |
| METADATAPYTHON‑70 | Fix | Cannot use the package on Python 3.5 – 3.7 |
| METADATAPYTHON‑71 | Fix | pip installs the package on Linux and macOS versions that cannot run it |
Major Features
Command line: groupdocs-metadata
Installing the package puts a groupdocs-metadata command on PATH (also python -m groupdocs.metadata), for shells, Make rules and CI steps:
groupdocs-metadata info photo.jpg # format, MIME type, size, pages, encryption
groupdocs-metadata show report.docx --tag person # author, editor, ... with their tags
groupdocs-metadata clean report.docx # writes report.clean.docx
groupdocs-metadata remove photo.jpg --tag person.creator -o photo-anon.jpg
groupdocs-metadata export report.pdf -o metadata.json # json, csv, xlsx, xls or xml
groupdocs-metadata list-formats
--tag takes a category (person, time, content, …) or one tag in it (person.creator), in the same form show prints. Files are read through a stream, so read-only inputs work, and clean / remove never overwrite the input unless -o names it. Every command takes --password, and --license applies a license first.
Apple Archive, GZIP, BZ2, XZ and Zstandard archives
The 26.8 engine reads the metadata of five more archive formats. Each has its own root package in groupdocs.metadata.formats.archive:
from groupdocs.metadata import Metadata
with Metadata("archive.gz") as metadata:
print(metadata.get_document_info().file_type.file_format.name) # GZIP
print(metadata.get_root_package().gzip_package.total_entries)
with Metadata("archive.aar") as metadata:
aar = metadata.get_root_package().aar_package
print(aar.total_entries)
for entry in aar.files:
print(entry.name, entry.length, entry.is_directory)
bz2_package, xz_package and zstd_package work the same way (see Known Issues for the fields that are not filled in yet). In 26.7, GZIP, BZ2 and AAR files raised NotImplementedError, and XZ and Zstandard files were misread as MP3 audio.
PowerPoint presentations open again
Opening a PowerPoint file — .pptx, .ppt, .pot and the other presentation formats — failed in 26.7 on Windows, Linux and macOS with DllNotFoundException: Unable to load … aspose.slides.drawing.capi…, because the native library the engine needs for presentations was missing from the wheel. It ships in every 26.9 wheel, and on Windows the package now loads it itself, so presentations also open under the Microsoft Store Python, which does not search PATH for native libraries.
API Changes
New classes and members
groupdocs.metadata.formats.archive:AarRootPackage,AarPackage,AarFile,GzipRootPackage,GzipPackage,Bz2RootPackage,Bz2Package,XzRootPackage,XzPackage,ZstdRootPackage,ZstdPackage.FileType.AAR,FileType.GZIP,FileType.BZ2,FileType.XZ,FileType.ZSTD, the same five members ofFileFormatandMetadataType, andFileType.AVIF.groupdocs.metadata.common:FileTypeFeatureSupport,FeatureSupport, and theProductFeature,SupportLevelandFormatFamilyenums.get()on indexed packages and collections —MetadataPackage,ExifDictionaryBasePackage,IptcRecordSet,IptcRecord,XmpLangAltand others — as an alternative topackage[key]. Theitemproperty these classes exposed could not be called and is gone.IptcRecordSet.append(), and a no-argumentRectangle()constructor.
Moved to the parent module
| Old module (26.7) | New module (26.9) | Classes |
|---|---|---|
groupdocs.metadata.formats.audio.ogg | groupdocs.metadata.formats.audio | OggPackage, OggRootPackage, OggUserComment |
groupdocs.metadata.formats.ebook.fb2 | groupdocs.metadata.formats.ebook | Fb2Author, Fb2DocumentInfo, Fb2Genre, Fb2PublishInfo, Fb2Sequence, Fb2TitleInfo |
groupdocs.metadata.formats.ebook.mobi | groupdocs.metadata.formats.ebook | MobiHeader, MobiPackage, MobiRootPackage, PDBHeader |
groupdocs.metadata.formats.fb2 | groupdocs.metadata.formats.ebook | Fb2Package |
groupdocs.metadata.formats.email.msg | groupdocs.metadata.formats.email | MsgKnownProperties |
groupdocs.metadata.formats.image.dng | groupdocs.metadata.formats.image | DngPackage, DngRootPackage |
groupdocs.metadata.formats.image.svg | groupdocs.metadata.formats.image | SvgPackage, SvgRootPackage |
groupdocs.metadata.formats.image | groupdocs.metadata.formats.raw | RawDoubleTag, RawFloatTag, RawRationalTag, RawSByteTag, RawSLongTag, RawSRationalTag, RawSShortTag, RawUndefinedTag |
groupdocs.metadata.formats.raw.tag | groupdocs.metadata.formats.raw | RawTag, RawArrayTag, RawAsciiTag, RawByteTag, RawLongTag, RawShortTag |
groupdocs.metadata.formats.raw.cr2 | groupdocs.metadata.formats.raw | 56 of its 58 classes (Cr2MakerNotePackage, Cr2CameraSettingsPackage, the Cr2…Index enums, …) |
groupdocs.metadata.formats.three_d.dae / .fbx / .gltf / .stl / .three_ds | groupdocs.metadata.formats.three_d | DaeNode, DaePackage, DaeRootPackage, the Fbx…, Gltf…, Stl… and ThreeDS… classes |
The 13 old modules are removed. Objects returned by the API are unaffected: root.ogg_package and the like return the same classes, now imported from the new modules.
Fixed
- Cannot open PowerPoint presentations (METADATAPYTHON‑50). See Major Features.
- Reading an EXIF tag by
TiffTagIDfails on Python 3.5 – 3.10 (METADATAPYTHON‑51).exif[TiffTagID.SOFTWARE]sent the enum to the engine as its name rather than its number, so the lookup failed — and the collection’s fallback then reported it asIndexError: list index out of range. Both are fixed: the enum goes through as a number, and an indexer that fails now reports the engine’s own error. - Cannot use the package on Python 3.5 – 3.7. In 26.7
import groupdocs.metadatafailed on Python 3.5 and 3.6 withSyntaxError: future feature annotations is not defined, and on Python 3.7 the first call failed withAttributeError: module 'typing' has no attribute 'get_origin'. Both work in 26.9. - pip installs the package on Linux and macOS versions that cannot run it. The 26.7 wheels were tagged
manylinux1_x86_64(glibc 2.5),macosx_10_14_x86_64andmacosx_11_0_arm64. The .NET runtime inside them needs glibc 2.27 and macOS 12, so on an older system the install succeeded and the first call failed. The 26.9 wheels are taggedmanylinux_2_27_x86_64,macosx_12_0_x86_64andmacosx_12_0_arm64, and pip refuses an older system up front. An unpinnedpip installon such a system still falls back to 26.7 or older, which keep the old tags.
Known Issues
- Page previews cannot be generated from Python yet:
PreviewOptionstakes page-stream callbacks, and passing a Python function raisesTypeError: … cannot wrap function as GroupDocs.Metadata.Options.CreatePageStream. - The GZIP, BZ2 and Zstandard packages report
nameasFile.binandsizeas 0, whatever the archive holds: the file name and size stored in a GZIP header are not read yet. The XZ package reports the uncompressed size. - On Windows, opening a presentation can fail with
The filename or extension is too longwhen the package is installed so deep that its native library’s path exceeds 260 characters — roughly, a virtual environment path longer than 170 characters. Install it closer to the drive root. Metadata(path)opens the file for writing, so a read-only file fails withPermissionRuntimeError: Access to the path … is denied. Open it as a stream instead:with open(path, "rb") as f: Metadata(f).- Opening an
.emz,.wmzor.svgzfile — compressed image formats the library does not support — leaves decompressed temporary files in the current working directory. - Files of some unsupported formats — PST, OST, ISO, DLL, CHM and others — open as MP3 audio instead of raising an unsupported-format error (METADATAPYTHON‑72). 26.7 behaves the same way.
Documentation
- Command Line Interface — new: every command, the
--tagsyntax and the exit codes. - System Requirements —
libgdiplusremoved; ICU and fontconfig on Linux; glibc 2.27+ and macOS 12+, and pip 20.3+ to install; Windows x64 only. - Installation — wheel file names for each platform with the oldest system each runs on, and the macOS Intel command.
- Troubleshooting — fontconfig, ICU, old systems and pip, read-only files, and deep install paths on Windows.
- Do I need libgdiplus? — replaces the libgdiplus installation guide.
- The
AGENTS.mdinside the package carries the command line, the platform notes and the new troubleshooting entries.
Requirements
- Python 3.5 – 3.14 (
python_requires = ">=3.5,<3.15") and pip 20.3 or newer - Linux x64 with glibc 2.27 or newer; macOS 12 or newer, Intel or Apple Silicon. On an Intel Mac, a Python built against a pre-11 macOS SDK reports the system as macOS 10.16 — use pip 24.1 or newer there, or
SYSTEM_VERSION_COMPAT=0 pip install groupdocs-metadata-net - Windows: no additional packages
- Linux: ICU and fontconfig —
apt-get install libicu-dev libfontconfig1. Without fontconfig, opening presentations and exporting to XLSX fail.libgdiplusand the Microsoft core fonts are not needed. - macOS (Intel and Apple Silicon): no additional packages
- The .NET 10.0.12 runtime is embedded in the wheel; no separate install is needed
Wheel Distribution
| Platform | Wheel |
|---|---|
| Windows x64 | groupdocs_metadata_net-26.9.0-py3-none-win_amd64.whl |
| Linux x64 | groupdocs_metadata_net-26.9.0-py3-none-manylinux_2_27_x86_64.whl |
| macOS Intel | groupdocs_metadata_net-26.9.0-py3-none-macosx_12_0_x86_64.whl |
| macOS Apple Silicon | groupdocs_metadata_net-26.9.0-py3-none-macosx_12_0_arm64.whl |
pip install groupdocs-metadata-net==26.9.0
Additional Resources
Feedback
Questions and issues are welcome on the GroupDocs.Metadata forum.