Skip to main content

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.

Release files for gelatin-extract 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gelatin-extract 0.1.2
File Size Uploaded
gelatin_extract-0.1.2.tar.gz 11.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gelatin-extract 0.1.2
File Interpreter ABI Platform
gelatin_extract-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size:28.3 kB

Release files / gelatin_extract-0.1.2.tar.gz

Download URL gelatin_extract-0.1.2.tar.gz
Size 11.9 kB
Tags Source
SHA-256 checksum
How to use checksums
3dfae74db296b74397eddeb5c30b97de1543db8c54f637d09f55720e2cce7b0d
BLAKE2b-256 checksum
How to use checksums
01c29afdf7d246cc28716bdbda7a416c14ee54e3b692376d64fdfb82941b1304
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.6 CPython/3.9.12 Darwin/21.5.0

Release files / gelatin_extract-0.1.2-py3-none-any.whl

Download URL gelatin_extract-0.1.2-py3-none-any.whl
Size 16.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7f51ea13339c395a872ea1cd9e38d6abea73afdb8c9fb3cee465d11b207f23f1
BLAKE2b-256 checksum
How to use checksums
9101b91f1730678b1b4d48775129ed72bc262758aa420c9af6bb5698f955d60d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.6 CPython/3.9.12 Darwin/21.5.0

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page