Skip to main content

searchable json database with persistence

Project description

json_database

Searchable, persistent Python dict database backed by JSON files — for those times when SQL is overkill.

Unit Tests codecov PyPI PyPI - Python Version License: MIT

Install

pip install json_database

Encryption features additionally require pycryptodomex:

pip install json_database pycryptodomex

Quick Start

from json_database import JsonStorage, JsonDatabase
from json_database.search import Query

# Persistent dict
with JsonStorage("/tmp/config.json") as cfg:
    cfg["host"] = "localhost"
    cfg["port"] = 5432
# auto-saved on exit

# Searchable list-of-records
with JsonDatabase("users", "/tmp/users.jsondb") as db:
    db.add_item({"name": "Alice", "role": "admin"})
    db.add_item({"name": "Bob",   "role": "user"})

admins = db.search_by_value("role", "admin")

# Fluent query builder
results = Query(db).equal("role", "user").build()

Features

  • Pure Python, minimal dependencies (combo_lock only)
  • Persistent dict (JsonStorage) and list-of-records database (JsonDatabase)
  • Recursive search by key and key/value pair, with optional fuzzy matching
  • Fluent Query builder for multi-condition filtering
  • AES-256-GCM encryption at rest (EncryptedJsonStorage)
  • XDG Base Directory compliant variants for Linux applications
  • File locking via combo_lock for safe concurrent access
  • Supports commented JSON files (// and # line comments)
  • Arbitrary Python objects stored via automatic jsonify_recursively conversion
  • HiveMind plugin (hivemind-json-db-plugin) for voice assistant integration

Configuration / Key Options

Class Default path Use for
JsonStorage(path) user-specified any persistent dict
JsonStorageXDG(name) ~/.cache/json_database/{name}.json cache / temp data
JsonConfigXDG(name) ~/.config/json_database/{name}.json app settings
JsonDatabaseXDG(name) ~/.local/share/json_database/{name}.jsondb persistent records
EncryptedJsonStorage(key, path) user-specified sensitive data at rest

Note: Item IDs in JsonDatabase are stable list indices. add_item and append return the zero-based slot index of the new item. Removing an item tombstones its slot rather than shifting subsequent IDs, so an ID obtained from add_item or get_item_id remains valid for the lifetime of the database file. Tombstoned slots are invisible to iteration, search, __contains__, and __len__; accessing one via db[item_id] raises InvalidItemID.

Warning: Encryption keys longer than 16 bytes are silently truncated to 16 bytes. Always use exactly 16 bytes.

Documentation

HiveMind Integration

This project includes a native hivemind-plugin-manager integration (>=0.5.0), providing JSON-backed storage for HiveMind client credentials and permissions via the hivemind-json-db-plugin entry point.

The storage layer is schema-less: the entire Client.__dict__ is persisted per record, so new Client fields (e.g. the metadata dict added in plugin-manager 0.5.0) round-trip transparently without changes here. See Architecture → HiveMind Plugin for the storage shape and the deep-copy aliasing contract.

License

MIT

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

json_database-0.10.2a1.tar.gz (47.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

json_database-0.10.2a1-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file json_database-0.10.2a1.tar.gz.

File metadata

  • Download URL: json_database-0.10.2a1.tar.gz
  • Upload date:
  • Size: 47.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for json_database-0.10.2a1.tar.gz
Algorithm Hash digest
SHA256 0dc7932743665a356c89dcb771d03d2af9aab2de095bc08da757a628bb3848b4
MD5 96401e460abac1df6fd0fc64a46be5aa
BLAKE2b-256 ea347c749b6d06e73972dfabbd72b2131128de27fd0e4cc05d078004039a8294

See more details on using hashes here.

File details

Details for the file json_database-0.10.2a1-py3-none-any.whl.

File metadata

File hashes

Hashes for json_database-0.10.2a1-py3-none-any.whl
Algorithm Hash digest
SHA256 69600f08a7b47fcedf8ad35fa0ae07fbc0cd68b7476852368e95642b249af459
MD5 b4fbc54ffca8786f8287561630b63c9a
BLAKE2b-256 e1b5fa76e0886b0c945cb8d9007d0629192e78bbcdf927b39ae3cdb78183297c

See more details on using hashes here.

Supported by

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