Skip to main content

Open-source Reactive Python database

Project description

Skypy Skypy

Skypy - open-source reactive database.
The better way to build Python logging system!

License | | Docs

pip install skypydb # python client
# or download from the source
# git clone https://github.com/Ahen-Studio/skypy-db.git
# cd skypy-db
# pip install -r requirements.txt

Features

  • Simple: fully-documented

  • Table: create, delete, search data from tables

  • Security, Input Validation: AES-256-GCM encryption for data at rest with selective field encryption, automatic protection against SQL injection attacks

  • CLI: command line interface for managing the database

  • Observable: Dashboard with real-time data, metrics, and query inspection

  • Free & Open Source: MIT Licensed

TODO

  • code the database backend
  • improve user data security
  • code a custom cli
  • Create the dashboard using Reflex
  • write the documentation

What's next!

  • give us ideas!

Secure Implementation

  • first create a encryption key and make it available in .env file don't show this key to anyone
from skypydb.security import EncryptionManager

# Generate a secure encryption key
encryption_key = EncryptionManager.generate_key()
salt = EncryptionManager.generate_salt()
print(encryption_key) # don't show this key to anyone
print(salt) # don't show this salt to anyone
  • Use the encryption key to encrypt sensitive data
import os
import skypydb
from skypydb.errors import TableAlreadyExistsError
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

# Load encryption key from environment
encryption_key = os.getenv("ENCRYPTION_KEY") # create a encryption key and make it available in .env file before using it, don't show this key to anyone
salt_key = os.getenv("SALT_KEY") # create a salt key and make it available in .env file before using it, don't show this salt to anyone

# transform salt key to bytes
if salt_key is None:
    raise ValueError("SALT_KEY missing")
salt_bytes = salt_key.encode("utf-8")

# Create encrypted database
client = skypydb.Client(
    path="./data/secure.db",
    encryption_key=encryption_key,
    salt=salt_bytes,
    encrypted_fields=["password", "ssn", "credit_card"]  # Optional: encrypt only sensitive fields
)

# All operations work the same - encryption is transparent!
try:
    table = client.create_table("users")# Create the table.
except TableAlreadyExistsError:
    # Tables already exist, that's fine
    pass
    
table = client.get_table("users")

# Automatically encrypted
table.add(
    username=["alice"],
    email=["alice@example.com"],
    ssn=["123-45-6789"]  # only this field is if encrypted_fields is not None encrypted
)

# Data is automatically decrypted when retrieved
results = table.search(
    index="alice"# search the corresponding data by their index
)
for result in results:
    print(result)

API

  • use the api with a custom config
import skypydb
from skypydb.errors import TableAlreadyExistsError

# setup skypydb client.
client = skypydb.Client(path="./data/skypy.db", auto_start_dashboard=False)

# config to make custom table.
config = {
    "all-my-documents": {
        "title": "str",
        "user_id": str,
        "content": str,
        "id": "auto"
    },
    "all-my-documents1": {
        "title": "str",
        "user_id": str,
        "content": str,
        "id": "auto"
    },
    "all-my-documents2": {
        "title": "str",
        "user_id": str,
        "content": str,
        "id": "auto"
    },
}

# Create tables. get_table_from_config(config, table_name="all-my-documents"), delete_table_from_config(config, table_name="all-my-documents") are also available.
try:
    table = client.create_table_from_config(config)# Create all the tables present in the config.
except TableAlreadyExistsError:
    # Tables already exist, that's fine
    pass

# Retrieve the table before adding any data.
table = client.get_table_from_config(config, table_name="all-my-documents")

# Add data to a table.
table.add(
    title=["document"],
    user_id=["user123"],
    content=["this is a document"],
    id=["auto"]# ids are automatically created by the backend.
)

# Start the Dashboard (blocking mode keeps it running)
client.start_dashboard(block=True)
  • use the api without a custom config
import skypydb
from skypydb.errors import TableAlreadyExistsError

# setup skypydb client.
client = skypydb.Client(path="./data/skypy.db", auto_start_dashboard=False)

# Create table. get_table, delete_table are also available.
try:
    table = client.create_table("all-my-documents")
except TableAlreadyExistsError:
    # Tables already exist, that's fine
    pass

# Retrieve the table before adding any data.
table = client.get_table("all-my-documents")

# Add data to the table.
table.add(
    title=["document"],
    user_id=["user123"],
    content=["this is a document"],
    id=["auto"]# ids are automatically created by the backend
)

# Start the Dashboard (blocking mode keeps it running)
client.start_dashboard(block=True)

Dashboard

Start the dashboard to view your data in real time. It will remain active after your operations:

import skypydb

# Dashboard will auto-start in non-blocking mode by default
client = skypydb.Client(path="./data/skypy.db")

# Or explicitly disable auto-start and start it later with blocking mode
client = skypydb.Client(path="./data/skypy.db", auto_start_dashboard=False)

# ... your operations here ...

# Start the Dashboard (blocking mode keeps it running)
client.start_dashboard(block=True)  # Dashboard accessible at http://127.0.0.1:3000

Dashboard options:

# Change the dashboard port
client = skypydb.Client(
    path="./data/skypy.db",
    dashboard_port=8080,# Change the port of the dashboard
    auto_start_dashboard=False
)

# ... your operations here ...

# Start the Dashboard in blocking mode (keeps the program running)
client.start_dashboard(block=True)

# Or use non-blocking mode to continue with other operations
client.start_dashboard(block=False)
# Disable auto-start
client = skypydb.Client(
    path="./data/skypy.db",
    auto_start_dashboard=False
)

# Start manually later
client.start_dashboard(block=False)

# Kill the dashboard later
client.stop_dashboard()

Learn more on our Docs

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

skypydb-0.1.3.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

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

skypydb-0.1.3-py3-none-any.whl (23.0 kB view details)

Uploaded Python 3

File details

Details for the file skypydb-0.1.3.tar.gz.

File metadata

  • Download URL: skypydb-0.1.3.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skypydb-0.1.3.tar.gz
Algorithm Hash digest
SHA256 638ce15cca37574883453e634742f9dee4df31764980e9d25318a157e7cc86ba
MD5 a498949c987b11fab0dcb78f12c576cd
BLAKE2b-256 114484669aa024a4c70cc3d882d7de566d9f64e5892b8410585210ff4ce82d30

See more details on using hashes here.

Provenance

The following attestation bundles were made for skypydb-0.1.3.tar.gz:

Publisher: python-publish.yml on Ahen-Studio/skypy-db

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file skypydb-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: skypydb-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 23.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skypydb-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 235e767c93a76d62edd4dfd690ae6058a1d27ae9efc513c2c5ba9f7bbbea915d
MD5 07422b184fa29f6a92b3579d260c4a1c
BLAKE2b-256 095299eb4742fc53e0a7dcb33517a8e63afde8c6b59d12244bb6bd70191877aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for skypydb-0.1.3-py3-none-any.whl:

Publisher: python-publish.yml on Ahen-Studio/skypy-db

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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