Skip to main content

Thin wrapper around libidn2

Project description

pydn2

pydn2 is a Python binding for libidn2, the GNU implementation of the Internationalized Domain Names (IDNA) protocol (IDNA2008/TR46). This extension enables you to perform various domain name conversions—such as converting between Unicode (U-label) and ASCII-compatible (A-label) representations—and supports the full public API of libidn2.

Features

  • Conversion Functions
    • Convert Unicode domain names to their ASCII (Punycode) equivalents.
    • Convert Punycode domains back to Unicode.
    • Perform lookup conversions for registration and DNS lookup.
  • Error Handling
    • Retrieve human-readable error messages and error code names.
  • Compliance with IDNA2008/TR46
    • Uses flags to control normalization and processing (e.g. NFC, transitional/non-transitional).

Requirements

  • libidn2 Make sure libidn2 is installed on your system. On macOS with Homebrew, you can install it via:
    brew install libidn2
    
  • A C compiler that supports building Python C extensions.
  • Python 3.7–3.9 (and possibly newer versions if you update the CI matrix).

Installation

pip install pydn2

Usage

import pydn2

# Convert a Unicode domain to its ASCII (Punycode) representation:
ascii_domain = pydn2.to_ascii_8z("bücher", 0)
print(ascii_domain)  # e.g., "xn--bcher-kva"

# Convert a Punycode domain back to Unicode:
unicode_domain = pydn2.to_unicode_8z8z("xn--bcher-kva", 0)
print(unicode_domain)  # e.g., "bücher"

# You can also use flags for additional processing:
ascii_domain_transitional = pydn2.to_ascii_8z("☮️.com", pydn2.IDN2_NFC_INPUT | pydn2.IDN2_TRANSITIONAL)
print(ascii_domain_transitional)

Module Constants

The extension exposes several flag constants for controlling conversion behavior:

  • IDN2_NFC_INPUT – Apply NFC normalization on input.
  • IDN2_ALABEL_ROUNDTRIP – Apply additional round-trip conversion of A-label inputs.
  • IDN2_TRANSITIONAL – Perform Unicode TR46 transitional processing.
  • IDN2_NONTRANSITIONAL – Perform Unicode TR46 non-transitional processing (default).
  • IDN2_NO_TR46 – Disable any TR46 transitional or non-transitional processing.
  • IDN2_USE_STD3_ASCII_RULES – Use STD3 ASCII rules.

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

pydn2-0.0.4.tar.gz (4.7 kB view details)

Uploaded Source

File details

Details for the file pydn2-0.0.4.tar.gz.

File metadata

  • Download URL: pydn2-0.0.4.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for pydn2-0.0.4.tar.gz
Algorithm Hash digest
SHA256 04791bb1d5a0691662d558fd1d12798f86a39c269d9b0f39c8173c023975fbb5
MD5 1723e07e81775e67c5c01e5d27b36929
BLAKE2b-256 e67241309f9908f48a5f431b5fc8bee5e9c243aac3cde5e676930a829453d005

See more details on using hashes here.

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