Skip to main content

Library to connect and call command against new NSD >=4 control api.

Project description

pynsd

PyPI License Python Version Code style: black

A modern Python client for the NSD (Name Server Daemon) control interface, providing type-safe access to NSD's control API.

Features

  • Full support for NSD 4.x control protocol
  • Type hints for better IDE support and code quality
  • Context manager support for safe resource handling
  • Comprehensive error handling with custom exceptions
  • Support for both synchronous and asynchronous operations
  • Parsed response objects with easy access to response data

Installation

pip install pynsd

Basic Usage

Connecting to NSD

import pynsd

# Basic connection with default settings (localhost:8953)
with pynsd.Client(
    client_cert='/etc/nsd/nsd_control.pem',
    client_key='/etc/nsd/nsd_control.key',
    host='127.0.0.1',
    port=8953
) as client:
    # ...

# For self-signed certificates without hostname verification
with pynsd.Client(
    client_cert='/etc/nsd/nsd_control.pem',
    client_key='/etc/nsd/nsd_control.key',
    host='nsd.example.com',
    port=8953,
    ssl_verify=False  # Disable SSL certificate verification
) as client:
    # Get server status
    status = client.status()
    print(f"NSD is running with {status.data.get('num_zones', 0)} zones")

Common Operations

# Add a zone
result = client.add_zone('example.com.', 'example.com.zone')
print(f"Added zone: {result.msg}")

# Get zone status
status = client.zonestatus('example.com.')
print(f"Zone status: {status.data}")

# Reload configuration
client.reload()

# Get server statistics
stats = client.stats_noreset()
print(f"Queries: {stats.data.get('num_query', 0)}")

Error Handling

from pynsd import NSDCommandError, NSDConnectionError

try:
    client.add_zone('invalid.zone', 'nonexistent.zone')
except NSDCommandError as e:
    print(f"Command failed: {e}")
except NSDConnectionError as e:
    print(f"Connection error: {e}")

Advanced Usage

Using Raw Commands

# Using raw command API
response = client.request('addzone', ('example.org.', 'example.org.zone'))
if response.is_success():
    print("Zone added successfully")

Custom Timeout

# Set custom timeout for operations (in seconds)
client = pynsd.Client(
    client_cert='cert.pem',
    client_key='key.pem',
    timeout=10.0
)

Development

Setup

  1. Clone the repository:

    git clone https://github.com/greensec/pynsd.git
    cd pynsd
    
  2. Install development dependencies:

    pip install -e .[dev]
    

Running Tests

make test

Code Quality

make validate  # Runs formatting, linting, and type checking

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

See Also

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

pynsd-0.1.2.2.tar.gz (16.7 kB view details)

Uploaded Source

File details

Details for the file pynsd-0.1.2.2.tar.gz.

File metadata

  • Download URL: pynsd-0.1.2.2.tar.gz
  • Upload date:
  • Size: 16.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pynsd-0.1.2.2.tar.gz
Algorithm Hash digest
SHA256 34fc7465ddf2449c5faddf41a69062eb34e375cfe45a464d4efa072c0070f779
MD5 1150f178a1dfb5195bf0ad95e57508bd
BLAKE2b-256 51cc25174fe6ec6e988f6fb1fa2d7358803b0b56b320e9deeefdf00d31e0d0e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynsd-0.1.2.2.tar.gz:

Publisher: publish-to-pypi.yml on greensec/pynsd

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