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:
    # 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.tar.gz (16.4 kB view details)

Uploaded Source

File details

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

File metadata

  • Download URL: pynsd-0.1.2.tar.gz
  • Upload date:
  • Size: 16.4 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.tar.gz
Algorithm Hash digest
SHA256 0cea6682230c44ac5ede9f67c5dd84373626bff9a3f29b48ae3bdc7f9bbcf270
MD5 e25bcf98a05494f358c7241fec76cf07
BLAKE2b-256 201303c864c86f0bbd51a505c52b42c451c776b23160451913ce4171adc53aa0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynsd-0.1.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