Skip to main content

lightweigh, simple, and fast declarative XML and JSON deserialization

Project description

Gelatin Extract

This is kind of like Marshmallow, but only does deserialization. What it lacks in reversibility, it makes up for in speed. Schemas are compiled in advance allowing deserialization to occur very quickly.

Motivation

I have another package called patent_client. I also do a lot with legal data, some of which is in XML, and some of which is in JSON. But there's a lot of it. And I mean a lot, so speed matters.

Quick Start

There are two main modules: gelatin_extract.json.schema and gelatin_extract.xml.schema. Those modules support defining class-style deserializers. Both start by subclassing a Schema class, and then defining attributes from the fields submodule.

JSON Deserializer Example

    from gelatin_extract.json.schema import Schema
    from gelatin_extract.json.schema import fields

    class JsonExample(Schema):
        name = fields.String()
        birthday = fields.Date("birthdate")
        deep_data = fields.Int("something.0.many.levels.deep")

    obj = {
        "name": "Johnny Appleseed",
        "birthdate": "2000-01-01",
        "something": [
            {"many": {
                "levels": {
                    "deep": 123
                }
            }}
        ]
    }

    JsonExample().deserialize(obj)
    # Returns
    {
        "name": "Johnny Appleseed",
        "birthday": datetime.date(2000, 1, 1),
        "deep_data": 123
    }

For JSON, the attributes are filled by pulling values off of the JSON object. If no path is provided, then the attribute name is used. Otherwise, a dotted string can be used to pluck an item from the JSON object.

XML Deserializer Example

    import lxml.etree as ET
    from sugar.xml.schema import Schema
    from sugar.xml.schema import fields

    class XmlExample(Schema):
        name = fields.String("./name")
        birthday = fields.Date("./birthdate")
        deep_data = fields.Int("./something/many/levels/deep")

    obj = ET.fromstring(b"""
    <xmlObject>
        <name>Johnny Appleseed</name>
        <birthdate>2000-01-01</birthdate>
        <something>
            <many>
                <levels>
                    <deep>123</deep>
                </levels>
            </many>
        </something>
    </xmlObject>
    """.strip())

    XmlExample().deserialize(obj)
    # Returns
    {
        "name": "Johnny Appleseed",
        "birthday": datetime.date(2000, 1, 1),
        "deep_data": 123
    }

For XML, the attributes are filled using XPath expressions. If no path is provided, then the entire object is passed to the field (no implicit paths). Any valid Xpath expression can be used.

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

gelatin_extract-0.1.2.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

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

gelatin_extract-0.1.2-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

File details

Details for the file gelatin_extract-0.1.2.tar.gz.

File metadata

  • Download URL: gelatin_extract-0.1.2.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.6 CPython/3.9.12 Darwin/21.5.0

File hashes

Hashes for gelatin_extract-0.1.2.tar.gz
Algorithm Hash digest
SHA256 3dfae74db296b74397eddeb5c30b97de1543db8c54f637d09f55720e2cce7b0d
MD5 b2f222b5e71687510b6247b23902f9e9
BLAKE2b-256 01c29afdf7d246cc28716bdbda7a416c14ee54e3b692376d64fdfb82941b1304

See more details on using hashes here.

File details

Details for the file gelatin_extract-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: gelatin_extract-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 16.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.6 CPython/3.9.12 Darwin/21.5.0

File hashes

Hashes for gelatin_extract-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7f51ea13339c395a872ea1cd9e38d6abea73afdb8c9fb3cee465d11b207f23f1
MD5 72e95d5fcf10e2ae295172e2fd2a705f
BLAKE2b-256 9101b91f1730678b1b4d48775129ed72bc262758aa420c9af6bb5698f955d60d

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