Skip to main content

Python library to retrieve and modify records within ARIN's database through their Reg-RWS service

Project description

pyregrws

GitHub Workflow StatusPyPICodecov

A Python library for interacting with ARIN's Reg-RWS (Registry RESTful Web Service) API. This library provides pydantic-xml models for ARIN payloads and a comprehensive REST client for CRUD operations on ARIN resources like POCs, Customers, Organizations, and Networks.

Features

  • Type-safe models: Built with pydantic-xml for robust XML serialization/deserialization
  • Complete CRUD operations: Create, read, update, and delete ARIN resources
  • Automatic manager integration: Each model type has an associated manager for API operations
  • Error handling: Built-in error response handling with proper HTTP status code mapping
  • Environment configuration: Configurable via environment variables with sensible defaults

Installation

Install from PyPI using pip:

pip install pyregrws

Or using poetry:

poetry add pyregrws

Quick Start

from regrws.api.core import Api
from regrws.models import Poc, Org, Net, Customer

# Initialize the API client
api = Api(
    base_url="https://reg.arin.net/",  # Optional, defaults to ARIN production
    api_key="your-api-key-here"           # Or set REGRWS_API_KEY env var
)

# Retrieve a POC by handle
poc = api.poc.from_handle("EXAMPLE-ARIN")
print(f"POC: {poc.first_name} {poc.last_name}")

# Create a new POC
new_poc = api.poc.create(
    contact_type="PERSON",
    first_name="John",
    last_name="Doe",
    company_name="Example Corp",
    iso3166_1={"name": "United States", "code2": "US", "code3": "USA", "e164": "1"},
    street_address=[{"line": "123 Main St"}],
    city="Anytown",
    iso3166_2="VA",
    postal_code="12345",
    phones=[{"type": {"code": "O"}, "number": "555-123-4567"}]
)

# Update and save changes
poc.city = "New City"
updated_poc = poc.save()

# Delete a resource
poc.delete()

Configuration

The library can be configured via environment variables or by passing parameters directly to the Api class:

Environment Variables

  • REGRWS_BASE_URL: Base URL for the ARIN Reg-RWS API (default: https://reg.arin.net/)
  • REGRWS_API_KEY: Your ARIN API key (required)

Warning: For testing purposes, use ARIN's Operational Test and Evaluation (OTE) environment (https://reg.ote.arin.net/) instead of the production URL. The OTE environment provides a safe sandbox that will not affect real registration data.

Direct Configuration

from regrws.api.core import Api
from regrws.settings import Settings

# Method 1: Pass parameters directly
api = Api(
    base_url="https://reg.arin.net/",
    api_key="your-api-key"
)

# Method 2: Use Settings object
settings = Settings(
    base_url="https://reg.arin.net/",
    api_key="your-api-key"
)
api = Api(settings=settings)

API Reference

Core Classes

Api

The main entry point for the library. Automatically creates manager instances for each supported model type.

api = Api(base_url=None, api_key=None, settings=None)

Attributes:

  • poc: Manager for POC operations
  • org: Manager for Organization operations
  • net: Manager for Network operations
  • customer: Manager for Customer operations

BaseManager

All model managers inherit from BaseManager and provide these methods:

  • create(**kwargs): Create a new resource
  • from_handle(handle): Retrieve a resource by handle
  • save(instance): Update an existing resource
  • delete(instance): Delete a resource

Models

All models inherit from BaseModel which provides:

  • save(): Save changes to the resource
  • delete(): Delete the resource
  • absolute_url: Get the full API URL for this resource
  • manager: Access to the associated API manager

Currently Supported Payloads

Core Resources

Ticketing

Error Handling

  • Error - API error responses

Examples

Working with POCs

# Retrieve an existing POC
poc = api.poc.from_handle("EXAMPLE-ARIN")

# Create a new person POC
person_poc = api.poc.create(
    contact_type="PERSON",
    first_name="Jane",
    last_name="Smith",
    company_name="ACME Corp",
    iso3166_1={"name": "United States", "code2": "US", "code3": "USA", "e164": "1"},
    street_address=[{"line": "456 Oak Ave"}, {"line": "Suite 100"}],
    city="Springfield",
    iso3166_2="IL", 
    postal_code="62701",
    phones=[
        {"type": {"code": "O"}, "number": "217-555-0123"},
        {"type": {"code": "F"}, "number": "217-555-0124"}
    ],
    comment=[{"line": "Technical contact for ACME Corp"}]
)

# Create a role POC
role_poc = api.poc.create(
    contact_type="ROLE",
    last_name="Network Operations Center",  # Role name goes in last_name
    company_name="ACME Corp",
    iso3166_1={"name": "United States", "code2": "US", "code3": "USA", "e164": "1"},
    street_address=[{"line": "789 Tech Dr"}],
    city="Austin",
    iso3166_2="TX",
    postal_code="78701",
    phones=[{"type": {"code": "O"}, "number": "512-555-0100"}]
)

Working with Organizations

# Retrieve an organization
org = api.org.from_handle("EXAMPLE-ARIN")

# Update organization details
org.company_name = "Updated Company Name"
updated_org = org.save()

Working with Networks

# Retrieve a network
net = api.net.from_handle("NET-192-0-2-0-1")

# Update network information
net.net_name = "UPDATED-NET-NAME"
updated_net = net.save()

Error Handling

from regrws.models import Error

try:
    poc = api.poc.from_handle("NONEXISTENT-HANDLE")
except Exception as e:
    # The library automatically handles error responses
    print(f"Error occurred: {e}")

Development

Setup

# Clone the repository
git clone https://github.com/jsenecal/pyregrws.git
cd pyregrws

# Install dependencies
poetry install

Running Tests

# Run all tests with coverage
poetry run pytest --cov -n 2 --cov-report xml --cov-report term-missing

# Run a specific test
poetry run pytest tests/test_api.py::TestAPI::test_manager_from_handle

Code Quality

# Lint code
poetry run ruff check

# Format code  
poetry run ruff format

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Add tests for your changes
  5. Ensure all tests pass and code is formatted
  6. Commit your changes (git commit -m 'Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

License

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

Links

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

pyregrws-0.2.4.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

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

pyregrws-0.2.4-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file pyregrws-0.2.4.tar.gz.

File metadata

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

File hashes

Hashes for pyregrws-0.2.4.tar.gz
Algorithm Hash digest
SHA256 0026d7642378d47b0acbebf510134f77b5807a18b83c08f1c41db71096c25b60
MD5 9e909cf019674bc4618e6546e29e6d44
BLAKE2b-256 3ce337775bdd89a25cf58fd28cee4975662a347778e2370c27f57b47ae4af261

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyregrws-0.2.4.tar.gz:

Publisher: publish.yml on jsenecal/pyregrws

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

File details

Details for the file pyregrws-0.2.4-py3-none-any.whl.

File metadata

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

File hashes

Hashes for pyregrws-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 e58b058602df8b70a6c617b327c4ce4cd426182943681fd832ea574cf84a7ade
MD5 d5541aa911624abc1b258d039e1a3049
BLAKE2b-256 ae8f2f575ac4153c2a676cffeb6f306f9c2de1c076e2b6beda030dd6cced5b57

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyregrws-0.2.4-py3-none-any.whl:

Publisher: publish.yml on jsenecal/pyregrws

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