Skip to main content

a dead-simple Object-XML mapper for Python

Project description

Let’s face it: xml is a fact of modern life. I’d even go so far as to say that it’s good at what is does. But that doesn’t mean it’s easy to work with and it doesn’t mean that we have to like it. Most of the time, XML just needs to get out of the way and let you do some actual work instead of writing code to traverse and manipulate yet another DOM.

The dexml module takes the obvious mapping between XML tags and Python objects and lets you capture that as cleanly as possible. Loosely inspired by Django’s ORM, you write simple class definitions to define the expected structure of your XML document. Like so:

>>> import dexml
>>> from dexml import fields
>>> class Person(dexml.Model):
...   name = fields.String()
...   age = fields.Integer(tagname='age')

Then you can parse an XML document into an object like this:

>>> p = Person.parse("<Person name='Foo McBar'><age>42</age></Person>")
>>> p.name
u'Foo McBar'
>>> p.age
42

And you can render an object into an XML document like this:

>>> p = Person(name="Handsome B. Wonderful",age=36)
>>> p.render()
'<?xml version="1.0" ?><Person name="Handsome B. Wonderful"><age>36</age></Person>'

Malformed documents will raise a ParseError:

>>> p = Person.parse("<Person><age>92</age></Person>")
Traceback (most recent call last):
    ...
ParseError: required field not found: 'name'

Of course, it gets more interesting when you nest Model definitions, like this:

>>> class Group(dexml.Model):
...   name = fields.String(attrname="name")
...   members = fields.List(Person)
...
>>> g = Group(name="Monty Python")
>>> g.members.append(Person(name="John Cleese",age=69))
>>> g.members.append(Person(name="Terry Jones",age=67))
>>> g.render(fragment=True)
'<Group name="Monty Python"><Person name="John Cleese"><age>69</age></Person><Person name="Terry Jones"><age>67</age></Person></Group>'

There’s support for XML namespaces, default field values, case-insensitive parsing, and more fun stuff. Check out the documentation on the following classes for more details:

Model:

the base class for objects that map into XML

Field:

the base class for individual model fields

Meta:

meta-information about how to parse/render a model

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dexml3-2.0.0.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dexml3-2.0.0-py3-none-any.whl (23.2 kB view details)

Uploaded Python 3

File details

Details for the file dexml3-2.0.0.tar.gz.

File metadata

  • Download URL: dexml3-2.0.0.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for dexml3-2.0.0.tar.gz
Algorithm Hash digest
SHA256 49f26d29bf8ed2aa88251ce2cd81e8382a0fd797615b0e1ee5f89c951343dc4e
MD5 b98dad9b8bd34670357e7b96c001cb2f
BLAKE2b-256 06bdfb52dd4f8a3be97361a815c489891eb733160db7bd4186ec3a91ec11378e

See more details on using hashes here.

File details

Details for the file dexml3-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: dexml3-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 23.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for dexml3-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8435b86a1790a828d8b2433c2445e9e420185f4cb7be8f5f4858a3cfd12654e3
MD5 075195f4775e0c8ca32f9e975e389c86
BLAKE2b-256 e52381dbd0a0b80c6837e009a3634997d42158f140699c7e787b7992aade3aa7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page