Skip to main content

A tiny dictionary-like file storage system.

Project description

peridata

peridata is a simple, tiny (<4KB!) data storage system using JSON and files, meant to be easy to use, strict on typing, and to allow easy migrations via changing properties.

usage

Create a property dictionary:

from peridata import Property, PersistentStorage

epic_property_dict = {"nuclear_bombs": Property[int](default=1)}

Then, create a PersistentStorage instance:

ps = PersistentStorage(epic_property_dict, Path(".") / "data" / "makesurethisisafileloc.json")

You can then use it like a dictionary; however, adding new keys will error, and typing is checked:

print(ps["nuclear_bombs"]) # Output: 1 (since it's the default set earlier)
# Wait, we're British. That's it, we're invading France.
ps["nuclear_bombs"] -= 1
print(ps["nuclear_bombs"]) # Output: 0
# I'm gonna make a complex amount of nuclear bombs.
ps["nuclear_bombs"] = 2+1j # TypeError: Invalid type for property 'nuclear_bombs'. Expected int, got complex
# Fine, I'll try to store my tea in here, then.
ps["tea"] = Tea(Tea.Brand.YORKSHIRE, quantity=10000).serialize() # KeyError: 'Invalid property: tea'

The data is automatically saved to the file location:

// in data/makesurethisisafileloc.json
{
  "nuclear_bombs": 0
}

And, loading the PersistentStorage again will take that instead of the default:

epic_property_dict = {"nuclear_bombs": Property[int](default=1)} # The properties stay the same.
ps = PersistentStorage(epic_property_dict, Path(".") / "data" / "makesurethisisafileloc.json") # The file location is also the same.
print(ps["nuclear_bombs"]) # Output: 0

You can also protect data; then, if you use write_unprivileged, you will get an error on writing:

epic_property_dict = {"nuclear_bombs": Property[int](default=1),
                      "tea": Property[str](default=Tea(Tea.Brand.YORKSHIRE, quantity=1).serialize(), protected=True)} # The library will manage setting new dictionary values, if you add them.
ps = PersistentStorage(epic_property_dict, Path(".") / "data" / "makesurethisisafileloc.json") # The file location still the same.
ps.write_unprivileged("nuclear_bombs", 100) # This works, since by default protected=False.
# I'm gonna annoy this brit so hard.
ps.write_unprivileged("tea", Coffee().serialize()) # PermissionError: The property 'tea' is protected and cannot be modified from write_unprivileged().

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

peridata-1.1.0.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

peridata-1.1.0-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file peridata-1.1.0.tar.gz.

File metadata

  • Download URL: peridata-1.1.0.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.1.dev0+g94f810c.d20240510 CPython/3.12.6

File hashes

Hashes for peridata-1.1.0.tar.gz
Algorithm Hash digest
SHA256 b9e50acde21a82a2fb98e3bd3e34c3fffd2695f8dec23aa9ee07be87b3556b3d
MD5 a3d4362812ef501a16e6700d7a97efea
BLAKE2b-256 d357627b3328d6af43be5abb66b58f690cb9a4b3a136da023b88ffb19e3d8d02

See more details on using hashes here.

File details

Details for the file peridata-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: peridata-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.1.dev0+g94f810c.d20240510 CPython/3.12.6

File hashes

Hashes for peridata-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0ba659acac171c0cc9c8d40a519ddd0686d8c0404ecf3b67ebcc27219000cfb
MD5 ac9496453f6e862bb69e4e71aa89792b
BLAKE2b-256 e8d99347ad6b2134d817d6a164af93995225c202decb856405580bef67831193

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