Skip to main content

NIC.RU API Python library

Project description

NIC.RU API Python library

This library provides interfaces for managing DNS zones and records for the DNS service NIC.RU (Ru-Center).

Installation

Using pip:

pip install nic-api

If you want to use this module in your project, add nic-api to its dependencies.

Usage

Initialization

To start using the API, you should get an OAuth application login and a password from NIC.RU. Here is the registration page: https://www.nic.ru/manager/oauth.cgi?step=oauth.app_register

Create an instance of nic_api.DnsApi and provide the obtained credentials:

from nic_api import DnsApi
app_login = "your_application_login"
app_password = "your_application_secret"
api = DnsApi(app_login, app_password)

Authentication

Call the DnsApi.get_token() method with the username and the password for your NIC.RU account:

api.get_token(
    username="Your_account/NIC-D",
    password="Your_password",
)

Now you are ready to use the API.

Till the token is valid, you don't need to provide neither client username or password to access the API – just create an instance of the DnsApi class with the same OAuth config, and pass the cached token as token parameter:

api = DnsApi(app_login, app_password, token)

If you have a valid refresh token, you can get a new access token with it:

api.refresh_token(refresh_token)

You can add a callback method to save the token somewhere outside of the DnsApi object. Use the token_updater_clb parameter for that.

Viewing services and DNS zones

In the NIC.RU, DNS zones are located in “services”:

api.services()

Usually there is only one service per account. To view available zones in the service MY_SERVICE call DnsApi.zones():

api.zones("MY_SERVICE")

Always check if there are any uncommitted changes in the zone before making any modifications – your commit would apply all unsaved changes!

Getting DNS records

For viewing or modifying records, you need to specify both service and DNS zone name:

api.records("MY_SERIVCE", "example.com")

Creating a record

To add a record, create an instance of one of the nic_api.models.DNSRecord subclasses, i.e. ARecord:

from nic_api.models import ARecord
record_www = ARecord(name="www", a="8.8.8.8", ttl=3600)

Add this record to the zone and commit the changes:

api.add_record(record_www, "MY_SERVICE", "example.com")
api.commit("MY_SERVICE", "example.com")

Deleting a record

Every record in the zone has an unique ID, and it's accessible via DNSRecord.id property. When you got the ID, pass it to the DnsApi.delete_record() method:

api.delete_record(100000, "MY_SERVICE", "example.com")
api.commit("MY_SERVICE", "example.com")

Do not forget to commit the changes afterwards.

Default service and zone

The service and zone parameters can be optional in all DnsApi methods, if you set default_service and default_zone properties:

api.default_service = "MY_SERVICE"
api.default_zone = "example.com"

api.delete_record(100000)  # service or zone are not required now
api.commit()               # the same for commit() method

Internationalized domain names

For using IDNs, you need to encode parameters with Punycode before passing them to the classes or methods, with the only exception of idn_name argument. In Python 3.7+ this is done via calling .encode("idna").decode() methods on the str object:

record_idn = ARecord(a="192.168.0.1", name="тест".encode("idna").decode())
api.add_record(record_idn, "MY_SERVICE", "example.com")
api.commit("MY_SERVICE", "example.com")

For working with top-level IDNs, use the same approach:

api.records("MY_SERIVCE", "мой-домен.рф".encode("idna").decode())

# or:
api.default_service = "MY_SERVICE"
api.default_zone = "мой-домен.рф".encode("idna").decode()
api.records()

Note for Python old versions' users

Python 2.7 was EOLed on 2020-01-01, and Python 3.7 is going to be EOLed on 2023-06-27, so the 1.x.x release branch of nic-api is going to only support active Python releases. If you still need old Python version support, please use 0.x.x releases of nic-api. These versions would still receive bugfixes, but no enhancements.

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

nic_api-1.0.1.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

nic_api-1.0.1-py3-none-any.whl (23.2 kB view details)

Uploaded Python 3

File details

Details for the file nic_api-1.0.1.tar.gz.

File metadata

  • Download URL: nic_api-1.0.1.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for nic_api-1.0.1.tar.gz
Algorithm Hash digest
SHA256 b2476ad9f3423744bf7d27acd0448ffb1c6d3733bdb998760be1c3d29ebbf6d6
MD5 0cb4d26a191827ef5828d09f5063797e
BLAKE2b-256 2afd62ebe5e963abca76ec32a800e8fa0054eeb0d46959ca10fff0d22fb05e3a

See more details on using hashes here.

File details

Details for the file nic_api-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: nic_api-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 23.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for nic_api-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b98fc1bb9fef2a5246e71be94bfb197e1f1d424c96f6b0063418f55fc996823b
MD5 750d704562335a7db43561479ac80cac
BLAKE2b-256 feb2be8d7b9b6537aadd5d37ddd452a0b3ff9d08f91dcbe7df050da39829808b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page