Skip to main content

File-based ORM for dataclasses.

Project description

Datafiles: A file-based ORM for dataclasses

Datafiles is a bidirectional serialization library for Python dataclasses that automatically synchronizes object instances to the filesystem using type annotations. It supports a variety of file formats with round-trip preservation of formatting and comments, where possible.

Travis CI AppVeyor Coveralls PyPI Version PyPI License

Usage

Take an existing dataclass such as this example from the documentation:

from dataclasses import dataclass

@dataclass
class InventoryItem:
    """Class for keeping track of an item in inventory."""

    name: str
    unit_price: float
    quantity_on_hand: int = 0

    def total_cost(self) -> float:
        return self.unit_price * self.quantity_on_hand

and replace the decorator, including a directory pattern to synchronize instances:

from datafiles import datafile

@datafile("inventory/items/{self.name}.yml")
class InventoryItem:
    """Class for keeping track of an item in inventory."""
    
    name: str
    unit_price: float
    quantity_on_hand: int = 0

    def total_cost(self) -> float:
        return self.unit_price * self.quantity_on_hand

Then, work with instances of the class as normal:

>>> item = InventoryItem("widget", 3)
# inventory/items/widget.yml

unit_price: 3.0

Changes to the object are automatically saved to the filesystem:

>>> item.quantity_on_hand += 100
# inventory/items/widget.yml

unit_price: 3.0
quantity_on_hand: 100

Changes to the filesystem are automatically reflected in the object:

# inventory/items/widget.yml

unit_price: 2.5  # was 3.0
quantity_on_hand: 100
>>> item.unit_price
2.5

Demo: Jupyter Notebook

Installation

Because datafiles relies on dataclasses and type annotations, Python 3.7+ is required. Install it directly into an activated virtual environment:

$ pip install datafiles

or add it to your Poetry project:

$ poetry add datafiles

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

datafiles-0.1a10.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

datafiles-0.1a10-py3-none-any.whl (50.0 kB view details)

Uploaded Python 3

File details

Details for the file datafiles-0.1a10.tar.gz.

File metadata

  • Download URL: datafiles-0.1a10.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.10 CPython/3.7.1 Darwin/18.2.0

File hashes

Hashes for datafiles-0.1a10.tar.gz
Algorithm Hash digest
SHA256 90617fe2c882d1649797896584d7f00b56f700925476171578ca0bd12f05da8e
MD5 bfac0cf897a2fffa21066393150dcd8e
BLAKE2b-256 6b9d5a36a5900e024cded9b711751c52be403c2cc8dd42c9d86f0257a0ab9873

See more details on using hashes here.

File details

Details for the file datafiles-0.1a10-py3-none-any.whl.

File metadata

  • Download URL: datafiles-0.1a10-py3-none-any.whl
  • Upload date:
  • Size: 50.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.10 CPython/3.7.1 Darwin/18.2.0

File hashes

Hashes for datafiles-0.1a10-py3-none-any.whl
Algorithm Hash digest
SHA256 93f08ce1bccfec672eb86f7cb253b04b7f25de5ee7d593713aea27d93742e785
MD5 182c825c55ceb5db69018a9e36bbf521
BLAKE2b-256 9a22fcbfc632b9f41de1fd0dfb80a0a0f6a7c9aed7f244bc439d9aa5d1bb221c

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