Skip to main content

NekoConf - A cute configuration manager for your JSON and YAML configuration files

Project description

NekoConf

PyPI version Python versions License Code Coverage CI/CD

NekoConf is a configuration management system for Python applications that provides a modern web UI, real-time updates, and a simple API for integration.

Table of Contents

Features

  • Configuration Management

    • Support for YAML and JSON formats
    • Dot notation access to nested values (e.g., server.host)
    • Deep merge updates for nested configurations
    • Schema validation
  • Web UI

    • Form-based visual editor
    • JSON/YAML editors with syntax highlighting
    • Real-time updates via WebSockets
    • Dark and light theme support
  • Real-time Updates

    • Observe configuration changes with callbacks
    • Support for both synchronous and asynchronous observers
    • WebSocket-based real-time notifications
  • Developer-Friendly API

    • Simple Python API for integration
    • Type-safe configuration access
    • Async/await support
  • Authentication Support

    • Secure web UI and API with password protection

Installation

pip install nekoconf

or build from source

pip install -e .

Quick Start

Web UI

Start the web server to manage your configuration through a browser:

nekoconf server --config config.yaml

This starts a web server at http://127.0.0.1:8000 where you can view and edit your configuration.

Web UI Screenshots

NekoConf features a modern web interface with both dark and light themes:

Dark Theme

Dark Theme

Light Theme

Light Theme

Command Line Interface

# View a configuration
nekoconf get --config config.yaml server.host

# Update a value
nekoconf set --config config.yaml server.port 8080

# Delete a value
nekoconf delete --config config.yaml unused.feature

# Import from another file
nekoconf import --config config.yaml other_config.json

# Create a new empty configuration file
nekoconf init --config new_config.yaml

# Validate against a schema
nekoconf validate --config config.yaml --schema schema.json

Python API

from nekoconf import ConfigAPI

# Initialize with your configuration file
config = ConfigAPI("config.yaml")

# Get values with type safety
host = config.get_str("server.host", "localhost")
port = config.get_int("server.port", 8080)
debug = config.get_bool("server.debug", False)

# Update values
config.set("server.host", "127.0.0.1")

# Observe changes
def on_config_change(config_data):
    print("Configuration changed:", config_data)

config.observe(on_config_change)

Advanced Usage

Async Support

NekoConf supports asynchronous observers for configuration changes:

import asyncio
from nekoconf import ConfigAPI

async def async_observer(config_data):
    print("Configuration changed!")
    await asyncio.sleep(0.1)  # Async processing
    print(f"Processed: {config_data}")

async def main():
    config = ConfigAPI("config.yaml")
    config.observe(async_observer)
    
    # Make a change
    config.set("server.port", 9000)
    
    # Wait for processing
    await asyncio.sleep(0.2)

asyncio.run(main())

Schema Validation

Validate your configuration against a schema:

from nekoconf import ConfigAPI

# Initialize with a schema
config = ConfigAPI("config.yaml", schema_path="schema.json")

# Validate configuration
errors = config.validate()
if errors:
    print("Validation errors:", errors)

Bulk Updates

Update multiple values at once:

from nekoconf import ConfigAPI

config = ConfigAPI("config.yaml")

# Update multiple values with deep merge
config.update({
    "server": {
        "host": "127.0.0.1",
        "port": 9000
    }
})

Framework Integration

FastAPI Example

from fastapi import FastAPI, Depends
from nekoconf import ConfigAPI

app = FastAPI()
config = ConfigAPI("config.yaml")

def get_config():
    return config

@app.get("/api/config")
def read_config(config=Depends(get_config)):
    return config.get_all()

Flask Example

from flask import Flask
from nekoconf import ConfigAPI

app = Flask(__name__)
config = ConfigAPI("config.yaml")

# Update Flask config when NekoConf changes
def sync_flask_config(config_data):
    app.config.update(config_data)

config.observe(sync_flask_config)

Django Example

from django.apps import AppConfig
from nekoconf import ConfigAPI

class MyAppConfig(AppConfig):
    name = 'myapp'
    
    def ready(self):
        from django.conf import settings
        
        config = ConfigAPI("config.yaml")
        
        # Update Django settings when configuration changes
        def update_settings(config_data):
            for key, value in config_data.items():
                if hasattr(settings, key.upper()):
                    setattr(settings, key.upper(), value)
        
        config.observe(update_settings)

API Reference

ConfigAPI

The main interface for applications to interact with configuration:

# Core methods
config.get(key, default=None)  # Get any value
config.get_str(key, default=None)  # Get string value
config.get_int(key, default=None)  # Get integer value
config.get_bool(key, default=None)  # Get boolean value
config.get_float(key, default=None)  # Get float value
config.get_dict(key, default=None)  # Get dictionary value
config.get_list(key, default=None)  # Get list value

# Update methods
config.set(key, value)  # Set a value
config.delete(key)  # Delete a value
config.update(data, deep_merge=True)  # Update multiple values

# Observer pattern
config.observe(callback)  # Register change observer
config.stop_observing(callback)  # Remove observer

# Other operations
config.reload()  # Reload from file
config.validate()  # Validate against schema
config.get_all()  # Get entire configuration

ConfigManager

Low-level class for managing configuration files:

manager = ConfigManager("config.yaml")
manager.load()  # Load from file
manager.save()  # Save to file
manager.register_observer(callback)  # Add observer

NekoConf

Web server for managing configuration through a UI:

server = NekoConf(config_manager)
server.run(host="127.0.0.1", port=8000)

Securing the Web Interface and API

You can secure the web interface and API with password authentication:

from nekoconf import ConfigManager, NekoConf

# Create a config manager
config = ConfigManager("config.yaml")

# Create a web server with authentication
server = NekoConf(
    config_manager=config,
    username="admin",  # Default username
    password="mysecretpassword"  # Set your password here
)

# Run the server
server.run(host="0.0.0.0", port=8000)

Using the command line:

nekoconf server --config=config.yaml --username=admin --password=mysecretpassword

If no password is provided, authentication will be disabled.

API Access with Authentication

When authentication is enabled, you need to provide credentials for API access:

# Get the entire configuration
curl -u admin:mysecretpassword http://localhost:8000/api/config

# Get a specific configuration value
curl -u admin:mysecretpassword http://localhost:8000/api/config/server/host

# Update a configuration value
curl -u admin:mysecretpassword -X POST \
  -H "Content-Type: application/json" \
  -d '{"value": "new_value"}' \
  http://localhost:8000/api/config/server/host

# Reload the configuration from disk
curl -u admin:mysecretpassword -X POST http://localhost:8000/api/config/reload

Development

Set up a development environment:

git clone https://github.com/nya-foundation/nekoconf.git
cd nekoconf
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -e ".[dev]"

Run tests:

pytest
pytest --cov=nekoconf

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some 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.

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

nekoconf-0.1.4.tar.gz (46.0 kB view details)

Uploaded Source

Built Distribution

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

nekoconf-0.1.4-py3-none-any.whl (36.4 kB view details)

Uploaded Python 3

File details

Details for the file nekoconf-0.1.4.tar.gz.

File metadata

  • Download URL: nekoconf-0.1.4.tar.gz
  • Upload date:
  • Size: 46.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for nekoconf-0.1.4.tar.gz
Algorithm Hash digest
SHA256 7af9faa677310e56b908b719355e8d7710899054e28a7886450fde982870ee8d
MD5 7c590b493d549dacea6114ab8fcc463d
BLAKE2b-256 dbd94273f30db21a7e94a28a6f744da748cc800cd5a95f5a975839e73ac90e68

See more details on using hashes here.

File details

Details for the file nekoconf-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: nekoconf-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 36.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for nekoconf-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 35c7b53978cd78a1d64e81376bd87c6584569ed282c437de35a29391cdf9359c
MD5 a225985e8550b5daad8ea6b5af1f8c08
BLAKE2b-256 789af03cb6d3b7290284f13adb68e6bec6a358104cf95f7bf268792f308034c1

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