Skip to main content

A secure and flexible database management system

Project description

AccessNode Database Manager

A secure and flexible database management system that provides both SDK and API access to multiple database types.

AccessNode serves as a unified interface for database operations across PostgreSQL, MySQL, MongoDB, and SQLite, offering both direct Python integration and REST API access.

🚀 Features

Core Capabilities

  • 🗄️ Multi-database support: PostgreSQL, MySQL, MongoDB, SQLite
  • 🔐 Secure authentication: JWT tokens with encrypted credential storage
  • Async operations: Full async/await support for high performance
  • 🎯 Dual access modes: Use as Python SDK or REST API service
  • 🔄 Schema management: Dynamic schema creation, validation, and migration
  • 💾 Smart caching: Memory and Redis caching strategies
  • 🔌 Plugin architecture: Extensible for new database types

Security Features

  • Encrypted database credentials at rest
  • bcrypt password hashing
  • JWT authentication
  • CORS protection
  • Safe query execution

📦 Installation

For SDK Usage

pip install accessnode-db-manager

For Development

# Clone and install with dev dependencies
git clone <repository-url>
cd AccessNode
pip install -e ".[dev]"

🔧 Quick Start

SDK Usage (Direct Python Integration)

from accessnode import AccessNode

# Initialize database connection
db = AccessNode(
    db_type="postgres",
    database_name="your_db",
    host="localhost",
    port=5432,
    username="user",
    password="pass"
)

# Initialize the connection
await db.initialize()

# Execute raw queries
results = await db.raw_query("SELECT * FROM your_table")

# Use built-in operations
user_data = await db.get("users", {"id": 1})
new_id = await db.insert("users", {"name": "John", "email": "john@example.com"})

API Service Usage

  1. Start the server:
uvicorn main:app --reload
  1. Register and authenticate:
# Register a user
curl -X POST "http://localhost:8000/user/register" \
  -H "Content-Type: application/json" \
  -d '{"username": "testuser", "password": "testpass"}'

# Get access token
curl -X POST "http://localhost:8000/user/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=testuser&password=testpass"
  1. Set up database connection:
curl -X POST "http://localhost:8000/user/databases/setup" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my_postgres_db",
    "db_type": "postgres",
    "host": "localhost",
    "port": 5432,
    "database_name": "mydb",
    "username": "user",
    "password": "pass"
  }'

📚 Advanced Usage

Schema Management

# Enable schema enforcement
db = AccessNode(
    db_type="postgres",
    database_name="mydb",
    enforce_schemas=True,
    auto_sync=True
)

# Schema will be automatically managed
await db.initialize()

Caching

from accessnode.caching.redis_cache import RedisCache

# Initialize with Redis caching
cache = RedisCache(host="localhost", port=6379)
db = AccessNode(
    db_type="postgres",
    database_name="mydb",
    cache=cache
)

Multiple Database Types

# PostgreSQL
pg_db = AccessNode(db_type="postgres", database_name="pg_db", ...)

# MongoDB
mongo_db = AccessNode(db_type="mongodb", database_name="mongo_db", ...)

# MySQL
mysql_db = AccessNode(db_type="mysql", database_name="mysql_db", ...)

🔌 API Endpoints

Authentication

  • POST /user/register - Register a new user
  • POST /user/token - Login and get access token

Database Management

  • POST /user/databases/setup - Configure a new database connection
  • GET /user/databases - List user's database connections
  • DELETE /user/databases/{db_id} - Remove a database connection

Query Operations

  • POST /user/database/{db_id}/query - Execute database queries
  • GET /user/database/{db_id}/tables - List tables in database

Visit /docs after starting the server for interactive API documentation.

🛠️ Development

Setup

# Install dependencies
pip install -e ".[dev]"

# Set up environment variables
export POSTGRES_USER=your_user
export POSTGRES_PASSWORD=your_password
export POSTGRES_HOST=localhost
export POSTGRES_DB=accessnode_main

Testing

# Run all tests
pytest

# Run with coverage
pytest --cov=accessnode

# Run specific test file
pytest tests/test_accessnode.py -v

Code Quality

# Format code
black .

# Sort imports
isort .

# Lint code
ruff check .

# Type checking
mypy accessnode/

🏗️ Architecture

AccessNode follows a modular architecture:

  • Core Layer: Main AccessNode class and base interfaces
  • Database Layer: Database-specific handlers and connection pooling
  • Schema Layer: Dynamic schema management and validation
  • Query Layer: Cross-database query building and compilation
  • Caching Layer: Multiple caching strategies and cache-aware operations
  • API Layer: FastAPI routes and authentication
  • Security Layer: Encryption, hashing, and secure credential management

🔒 Security

  • Encrypted storage: Database credentials encrypted at rest using AES
  • Password security: bcrypt hashing for user passwords
  • Token-based auth: JWT tokens for API authentication
  • Input validation: Comprehensive input validation and sanitization
  • Connection security: Secure database connection handling

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🆘 Support

  • Documentation: Visit /docs endpoint when running the API
  • Issues: Report bugs and request features via GitHub Issues
  • Community: Join our discussions for questions and collaboration

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

accessnode-0.1.1.tar.gz (116.8 kB view details)

Uploaded Source

Built Distribution

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

accessnode-0.1.1-py3-none-any.whl (88.8 kB view details)

Uploaded Python 3

File details

Details for the file accessnode-0.1.1.tar.gz.

File metadata

  • Download URL: accessnode-0.1.1.tar.gz
  • Upload date:
  • Size: 116.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for accessnode-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3ea30e8c045a70a1bee1f51d6def567a5ffa8ac4f2bcc45e32c0a4e735ef9685
MD5 38cb59c6a2b291e556d5a9ef31b46805
BLAKE2b-256 89568786f83aabf4adc9c3c683ce3f56b6308836fc72047a0add518e67a7b95f

See more details on using hashes here.

File details

Details for the file accessnode-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: accessnode-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 88.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for accessnode-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c5f3714dc17f12c3230aafd1daa1c6a3d1ba7e9acf46f91cfbe671bbb73c2778
MD5 488233c3988974194a9ab67e7d29e682
BLAKE2b-256 ac98ba768111a7d516b2582e2c3f5f0f65167923cb91809b0c6ae6802a304ebd

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