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
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9e50acde21a82a2fb98e3bd3e34c3fffd2695f8dec23aa9ee07be87b3556b3d |
|
MD5 | a3d4362812ef501a16e6700d7a97efea |
|
BLAKE2b-256 | d357627b3328d6af43be5abb66b58f690cb9a4b3a136da023b88ffb19e3d8d02 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | c0ba659acac171c0cc9c8d40a519ddd0686d8c0404ecf3b67ebcc27219000cfb |
|
MD5 | ac9496453f6e862bb69e4e71aa89792b |
|
BLAKE2b-256 | e8d99347ad6b2134d817d6a164af93995225c202decb856405580bef67831193 |