Skip to main content

Tiny python module to automaticallymap dictionaries to python objects.

Project description

FlowerField

Tiny python module to automatically map dictionaries to python objects.

Installation

Pypi

Install with python's package manager:

pip install flowerfield

Git

pip intall git+https://github.com/cmd410/flowerfield.git

Or...

...or just copy flowerfield directory into your project, this module doesn't depend on anything

Usage

This library is stupid simple to use:

from flowerfield import Scheme, Field, ListField
from enum import Enum


class FlowerType(str, Enum):
    DANDELION = 'Dandelion'
    SUNFLOWER = 'Sunflower'
    ROSE = 'Rose'


class MyThing(Scheme, root=True):
    pass


class Flower(MyThing):
    color = Field(str, tuple)
    type = Field(str, validator=FlowerType)


class Pot(MyThing):
    flowers = ListField(Flower)
    watered = Field(bool)


print(MyThing.from_dict(
        {
            'flowers': [
                    {'color': '#fa21aa',
                     'type': 'Dandelion'},
                    {'color': '#daf1ad',
                     'type': 'Sunflower'},
                    {'color': '#ffaadd',
                     'type': 'Rose'}
            ],
            'watered': False
        }
    )
)

# Output:
# Pot(flowers=[Flower(type=<FlowerType.DANDELION: 'Dandelion'>, color='#fa21aa'), Flower(type=<FlowerType.SUNFLOWER: 'Sunflower'>, color='#daf1ad'), Flower(type=<FlowerType.ROSE: 'Rose'>, color='#ffaadd')], watered=False)

First we create a class MyThing which inherits from Scheme and has a keyword parameter root. This parameter is a boolean which, when true means that this class will be used to map its children. Root Schemes are a way to organize you schemes into some categories that you want to match dictionaries against. Root schemes never participate in the match themselves, adding fields to them is pointless.

Scheme is a root itself, so when you call Scheme.from_dict(some_dictionary) it will return most suitable scheme object from ALL its children that exist in you program.

Next we create Flower and Pot class and add some fields to them. Field class, optionally accepts type of the field it will check against when set. You can give more than one type as tuple. Schemes as fields type automatically map every dictionary that is given to that field. You can make Optional fields by passing type(None) into Field.

Flower class has a validator in type field. Validators are callables that accept value of the field and return validated value or raise an exception.

Then we call MyThing.from_dict(...) and it automatically creates a Pot with Flowers inside of it based the dict we gave it. Isn't that nice?

You can, of course, call from_dict on non-root scheme but it will only map this concrete scheme.

How it determines what schema to use?

When deciding to what class to map a dictionary it goes through following steps:

  1. Get keys from dictionary
  2. Go through subclasses and check how much of fields names intersect with dictionary keys
  3. Choose a structure which has the most keys in it.

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

flowerfield-0.5.1.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

flowerfield-0.5.1-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file flowerfield-0.5.1.tar.gz.

File metadata

  • Download URL: flowerfield-0.5.1.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for flowerfield-0.5.1.tar.gz
Algorithm Hash digest
SHA256 e6c8e90403791aecb808a6e4481b66e36237702876980251dd416aa7a0c881e4
MD5 bb347670ea5982be9c9844f5a6dad4b1
BLAKE2b-256 990efcb85b1b706bf2bcb7cb2c76119d27bbf6f94c8d19c51d104d0077468c48

See more details on using hashes here.

File details

Details for the file flowerfield-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: flowerfield-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 5.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for flowerfield-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f471995f2b8a6bc568cf7858ee83e9e2785e09d6b886a0a0a3660cbe0d6f14fe
MD5 9d5f39d3cb80185cf73a478513aec429
BLAKE2b-256 7b006b637ddf72de0698d1603d4ce5834b14f22ac992d909c5926db722339593

See more details on using hashes here.

Supported by

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