Skip to main content

Smart Objects

Project description

SmartObject

SmartObject is a tool to easily manipulate object attributes with the API commands, store and synchronize object data.

Mapped object attributes (called properties) can be automatically validated, saved, loaded, serialized and synchronized with the external services.

SmartObject looks like ORM, but it's different from ORM: object properties can be stored in storages of different type and combined together into a single data object.

Property values are automatically processed, validated and synchronized with external services if required.

Note: all SmartObject methods are thread-safe (at least they should be :)

Example:

You have a team of people with heart-rate sensors. Data for each person is stored into local JSON files, heartbeat is stored in Redis database. How to implement this with SmartObject? Just a few lines of code:

import smartobject

class Person(smartobject.SmartObject):

    def __init__(self, name):
        self.name = name
        self.load_property_map('person.yml')
        self.apply_property_map()

smartobject.define_storage(smartobject.JSONStorage())
smartobject.define_storage(smartobject.RedisStorage(), 'r1')

people = smartobject.SmartObjectFactory(Person)

# create objects with factory
people.create(name='John')
people.create(name='Jane')

# create object manually
jack = Person('Jack')

people.set_prop('John', 'sex', 'male')
people.set_prop('Jane', 'sex', 'female')
people.set_prop('Jack', { 'sex', 'male' })

people.save()
jack.save()

# add Jack to factory
people.create(obj=jack)

print('Heartbeat of Jack is: {}'.format(people.get('Jack').heartbeat)

The file person.yml is a property map for the Person object. It can be loaded from the external YAML file or specified directly, as Python dict.

The map for the above example looks like:

name:
    pk: true
sex:
    type: str
    choices:
        - male
        - female
        - other
    store: true
heartbeat:
    external: true
    store: r1

Pretty simple, isn't it? You define a map, SmartObject does the job!

Install

pip3 install smartobject

Documentation

Full documentation is available at https://smartobject.readthedocs.io/

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

smartobject-0.0.3.tar.gz (11.1 kB view hashes)

Uploaded Source

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