Python library to retrieve and modify records within ARIN's database through their Reg-RWS service
Project description
pyregrws
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 operationsorg: Manager for Organization operationsnet: Manager for Network operationscustomer: Manager for Customer operations
BaseManager
All model managers inherit from BaseManager and provide these methods:
create(**kwargs): Create a new resourcefrom_handle(handle): Retrieve a resource by handlesave(instance): Update an existing resourcedelete(instance): Delete a resource
Models
All models inherit from BaseModel which provides:
save(): Save changes to the resourcedelete(): Delete the resourceabsolute_url: Get the full API URL for this resourcemanager: Access to the associated API manager
Currently Supported Payloads
Core Resources
- POC - Point of Contact
- Customer - Customer records
- ORG - Organization records
- NET - Network records
- NET Block - Network block records
- POC Link - POC associations
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
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for your changes
- Ensure all tests pass and code is formatted
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0026d7642378d47b0acbebf510134f77b5807a18b83c08f1c41db71096c25b60
|
|
| MD5 |
9e909cf019674bc4618e6546e29e6d44
|
|
| BLAKE2b-256 |
3ce337775bdd89a25cf58fd28cee4975662a347778e2370c27f57b47ae4af261
|
Provenance
The following attestation bundles were made for pyregrws-0.2.4.tar.gz:
Publisher:
publish.yml on jsenecal/pyregrws
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyregrws-0.2.4.tar.gz -
Subject digest:
0026d7642378d47b0acbebf510134f77b5807a18b83c08f1c41db71096c25b60 - Sigstore transparency entry: 907361621
- Sigstore integration time:
-
Permalink:
jsenecal/pyregrws@41892817cf6a81e7f5d516955a81e388e287759e -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/jsenecal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@41892817cf6a81e7f5d516955a81e388e287759e -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e58b058602df8b70a6c617b327c4ce4cd426182943681fd832ea574cf84a7ade
|
|
| MD5 |
d5541aa911624abc1b258d039e1a3049
|
|
| BLAKE2b-256 |
ae8f2f575ac4153c2a676cffeb6f306f9c2de1c076e2b6beda030dd6cced5b57
|
Provenance
The following attestation bundles were made for pyregrws-0.2.4-py3-none-any.whl:
Publisher:
publish.yml on jsenecal/pyregrws
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyregrws-0.2.4-py3-none-any.whl -
Subject digest:
e58b058602df8b70a6c617b327c4ce4cd426182943681fd832ea574cf84a7ade - Sigstore transparency entry: 907361626
- Sigstore integration time:
-
Permalink:
jsenecal/pyregrws@41892817cf6a81e7f5d516955a81e388e287759e -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/jsenecal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@41892817cf6a81e7f5d516955a81e388e287759e -
Trigger Event:
release
-
Statement type: