python-didl-lite
raw JSON → 1.5.0 verified Fri May 01 auth: no python
A Python library for parsing and generating DIDL-Lite (Digital Item Declaration Language) XML, commonly used in UPnP/DLNA media servers. Current version 1.5.0, requires Python 3.10+. Released irregularly, last update in 2024.
pip install python-didl-lite Common errors
error AttributeError: module 'didl_lite' has no attribute 'DidlObject' ↓
cause Old import path: `from didl_lite.didl_lite import DidlObject`.
fix
Use
from didl_lite import DidlObject (or the specific class like DidlItem). error ValueError: Invalid class string: object.item ↓
cause The `clazz` parameter must be a fully qualified UPnP class string. 'object.item' is missing a subclass.
fix
Use a valid class like 'object.item.audioItem' or 'object.container.storageFolder'.
error xml.etree.ElementTree.ParseError: mismatched tag ↓
cause The serialized XML has mismatched tags due to incorrect object structure (e.g., missing `id` or `parent_id`).
fix
Ensure all DidlObject instances have all required attributes set before serialization.
Warnings
breaking Version 1.5.0 dropped support for Python versions older than 3.10. Code running on earlier Python versions will break. ↓
fix Upgrade Python to >=3.10 or pin to python-didl-lite<1.5.0
gotcha The `clazz` parameter is named with a 'z' (to avoid 'class' keyword) and must be a fully qualified DIDL-Lite class string (e.g., 'object.container', 'object.item.audioItem'). Incorrect class strings may cause deserialization errors or non-standard XML. ↓
fix Use the correct DIDL-Lite class strings as per UPnP specifications.
deprecated The `didl_lite.didl_lite` submodule (old import path) is deprecated since v1.0. Use `from didl_lite import ...` directly. ↓
fix Use `from didl_lite import DidlObject` instead of `from didl_lite.didl_lite import DidlObject`.
gotcha When serializing, ensure all required fields are set (e.g., `id`, `parent_id`, `title`, `clazz`, `restricted`). Missing fields may produce invalid XML that cannot be deserialized. ↓
fix Always provide all mandatory constructor arguments.
Imports
- DidlObject
from didl_lite import DidlObject - DidlItem
from didl_lite import DidlItem - DidlContainer
from didl_lite import DidlContainer - Guid
from didl_lite import Guid - Resource
from didl_lite import Resource - deserialize
from didl_lite import deserialize - serialize
from didl_lite import serialize
Quickstart
from didl_lite import DidlContainer, DidlItem, Resource, Guid, serialize, deserialize
# Create a container
container = DidlContainer(
id='0',
parent_id='-1',
title='My Container',
creator='User',
clazz='object.container',
restricted=True
)
# Create an item with a resource
item = DidlItem(
id='1',
parent_id='0',
title='Song.mp3',
creator='Artist',
clazz='object.item.audioItem.musicTrack',
restricted=True
)
item.resources.append(Resource(uri='http://example.com/song.mp3', protocol='http-get:*:audio/mpeg:*', size=12345))
# Serialize to XML string
xml_str = serialize([container, item], pretty_print=True)
print(xml_str)
# Deserialize from XML string
parsed = deserialize(xml_str)
print(parsed)