243 lines
		
	
	
	
		
			8.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			243 lines
		
	
	
	
		
			8.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
Metadata-Version: 2.1
 | 
						|
Name: idna
 | 
						|
Version: 2.10
 | 
						|
Summary: Internationalized Domain Names in Applications (IDNA)
 | 
						|
Home-page: https://github.com/kjd/idna
 | 
						|
Author: Kim Davies
 | 
						|
Author-email: kim@cynosure.com.au
 | 
						|
License: BSD-like
 | 
						|
Platform: UNKNOWN
 | 
						|
Classifier: Development Status :: 5 - Production/Stable
 | 
						|
Classifier: Intended Audience :: Developers
 | 
						|
Classifier: Intended Audience :: System Administrators
 | 
						|
Classifier: License :: OSI Approved :: BSD License
 | 
						|
Classifier: Operating System :: OS Independent
 | 
						|
Classifier: Programming Language :: Python
 | 
						|
Classifier: Programming Language :: Python :: 2
 | 
						|
Classifier: Programming Language :: Python :: 2.7
 | 
						|
Classifier: Programming Language :: Python :: 3
 | 
						|
Classifier: Programming Language :: Python :: 3.4
 | 
						|
Classifier: Programming Language :: Python :: 3.5
 | 
						|
Classifier: Programming Language :: Python :: 3.6
 | 
						|
Classifier: Programming Language :: Python :: 3.7
 | 
						|
Classifier: Programming Language :: Python :: 3.8
 | 
						|
Classifier: Programming Language :: Python :: Implementation :: CPython
 | 
						|
Classifier: Programming Language :: Python :: Implementation :: PyPy
 | 
						|
Classifier: Topic :: Internet :: Name Service (DNS)
 | 
						|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
 | 
						|
Classifier: Topic :: Utilities
 | 
						|
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
 | 
						|
 | 
						|
Internationalized Domain Names in Applications (IDNA)
 | 
						|
=====================================================
 | 
						|
 | 
						|
Support for the Internationalised Domain Names in Applications
 | 
						|
(IDNA) protocol as specified in `RFC 5891 <http://tools.ietf.org/html/rfc5891>`_.
 | 
						|
This is the latest version of the protocol and is sometimes referred to as
 | 
						|
“IDNA 2008”.
 | 
						|
 | 
						|
This library also provides support for Unicode Technical Standard 46,
 | 
						|
`Unicode IDNA Compatibility Processing <http://unicode.org/reports/tr46/>`_.
 | 
						|
 | 
						|
This acts as a suitable replacement for the “encodings.idna” module that
 | 
						|
comes with the Python standard library, but only supports the
 | 
						|
old, deprecated IDNA specification (`RFC 3490 <http://tools.ietf.org/html/rfc3490>`_).
 | 
						|
 | 
						|
Basic functions are simply executed:
 | 
						|
 | 
						|
.. code-block:: pycon
 | 
						|
 | 
						|
    # Python 3
 | 
						|
    >>> import idna
 | 
						|
    >>> idna.encode('ドメイン.テスト')
 | 
						|
    b'xn--eckwd4c7c.xn--zckzah'
 | 
						|
    >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
 | 
						|
    ドメイン.テスト
 | 
						|
 | 
						|
    # Python 2
 | 
						|
    >>> import idna
 | 
						|
    >>> idna.encode(u'ドメイン.テスト')
 | 
						|
    'xn--eckwd4c7c.xn--zckzah'
 | 
						|
    >>> print idna.decode('xn--eckwd4c7c.xn--zckzah')
 | 
						|
    ドメイン.テスト
 | 
						|
 | 
						|
Packages
 | 
						|
--------
 | 
						|
 | 
						|
The latest tagged release version is published in the PyPI repository:
 | 
						|
 | 
						|
.. image:: https://badge.fury.io/py/idna.svg
 | 
						|
   :target: http://badge.fury.io/py/idna
 | 
						|
 | 
						|
 | 
						|
Installation
 | 
						|
------------
 | 
						|
 | 
						|
To install this library, you can use pip:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
    $ pip install idna
 | 
						|
 | 
						|
Alternatively, you can install the package using the bundled setup script:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
    $ python setup.py install
 | 
						|
 | 
						|
This library works with Python 2.7 and Python 3.4 or later.
 | 
						|
 | 
						|
 | 
						|
Usage
 | 
						|
-----
 | 
						|
 | 
						|
For typical usage, the ``encode`` and ``decode`` functions will take a domain
 | 
						|
name argument and perform a conversion to A-labels or U-labels respectively.
 | 
						|
 | 
						|
.. code-block:: pycon
 | 
						|
 | 
						|
    # Python 3
 | 
						|
    >>> import idna
 | 
						|
    >>> idna.encode('ドメイン.テスト')
 | 
						|
    b'xn--eckwd4c7c.xn--zckzah'
 | 
						|
    >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
 | 
						|
    ドメイン.テスト
 | 
						|
 | 
						|
You may use the codec encoding and decoding methods using the
 | 
						|
``idna.codec`` module:
 | 
						|
 | 
						|
.. code-block:: pycon
 | 
						|
 | 
						|
    # Python 2
 | 
						|
    >>> import idna.codec
 | 
						|
    >>> print u'домена.испытание'.encode('idna')
 | 
						|
    xn--80ahd1agd.xn--80akhbyknj4f
 | 
						|
    >>> print 'xn--80ahd1agd.xn--80akhbyknj4f'.decode('idna')
 | 
						|
    домена.испытание
 | 
						|
 | 
						|
Conversions can be applied at a per-label basis using the ``ulabel`` or ``alabel``
 | 
						|
functions if necessary:
 | 
						|
 | 
						|
.. code-block:: pycon
 | 
						|
 | 
						|
    # Python 2
 | 
						|
    >>> idna.alabel(u'测试')
 | 
						|
    'xn--0zwm56d'
 | 
						|
 | 
						|
Compatibility Mapping (UTS #46)
 | 
						|
+++++++++++++++++++++++++++++++
 | 
						|
 | 
						|
As described in `RFC 5895 <http://tools.ietf.org/html/rfc5895>`_, the IDNA
 | 
						|
specification no longer normalizes input from different potential ways a user
 | 
						|
may input a domain name. This functionality, known as a “mapping”, is now
 | 
						|
considered by the specification to be a local user-interface issue distinct
 | 
						|
from IDNA conversion functionality.
 | 
						|
 | 
						|
This library provides one such mapping, that was developed by the Unicode
 | 
						|
Consortium. Known as `Unicode IDNA Compatibility Processing <http://unicode.org/reports/tr46/>`_,
 | 
						|
it provides for both a regular mapping for typical applications, as well as
 | 
						|
a transitional mapping to help migrate from older IDNA 2003 applications.
 | 
						|
 | 
						|
For example, “Königsgäßchen” is not a permissible label as *LATIN CAPITAL
 | 
						|
LETTER K* is not allowed (nor are capital letters in general). UTS 46 will
 | 
						|
convert this into lower case prior to applying the IDNA conversion.
 | 
						|
 | 
						|
.. code-block:: pycon
 | 
						|
 | 
						|
    # Python 3
 | 
						|
    >>> import idna
 | 
						|
    >>> idna.encode(u'Königsgäßchen')
 | 
						|
    ...
 | 
						|
    idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed
 | 
						|
    >>> idna.encode('Königsgäßchen', uts46=True)
 | 
						|
    b'xn--knigsgchen-b4a3dun'
 | 
						|
    >>> print(idna.decode('xn--knigsgchen-b4a3dun'))
 | 
						|
    königsgäßchen
 | 
						|
 | 
						|
Transitional processing provides conversions to help transition from the older
 | 
						|
2003 standard to the current standard. For example, in the original IDNA
 | 
						|
specification, the *LATIN SMALL LETTER SHARP S* (ß) was converted into two
 | 
						|
*LATIN SMALL LETTER S* (ss), whereas in the current IDNA specification this
 | 
						|
conversion is not performed.
 | 
						|
 | 
						|
.. code-block:: pycon
 | 
						|
 | 
						|
    # Python 2
 | 
						|
    >>> idna.encode(u'Königsgäßchen', uts46=True, transitional=True)
 | 
						|
    'xn--knigsgsschen-lcb0w'
 | 
						|
 | 
						|
Implementors should use transitional processing with caution, only in rare
 | 
						|
cases where conversion from legacy labels to current labels must be performed
 | 
						|
(i.e. IDNA implementations that pre-date 2008). For typical applications
 | 
						|
that just need to convert labels, transitional processing is unlikely to be
 | 
						|
beneficial and could produce unexpected incompatible results.
 | 
						|
 | 
						|
``encodings.idna`` Compatibility
 | 
						|
++++++++++++++++++++++++++++++++
 | 
						|
 | 
						|
Function calls from the Python built-in ``encodings.idna`` module are
 | 
						|
mapped to their IDNA 2008 equivalents using the ``idna.compat`` module.
 | 
						|
Simply substitute the ``import`` clause in your code to refer to the
 | 
						|
new module name.
 | 
						|
 | 
						|
Exceptions
 | 
						|
----------
 | 
						|
 | 
						|
All errors raised during the conversion following the specification should
 | 
						|
raise an exception derived from the ``idna.IDNAError`` base class.
 | 
						|
 | 
						|
More specific exceptions that may be generated as ``idna.IDNABidiError``
 | 
						|
when the error reflects an illegal combination of left-to-right and right-to-left
 | 
						|
characters in a label; ``idna.InvalidCodepoint`` when a specific codepoint is
 | 
						|
an illegal character in an IDN label (i.e. INVALID); and ``idna.InvalidCodepointContext``
 | 
						|
when the codepoint is illegal based on its positional context (i.e. it is CONTEXTO
 | 
						|
or CONTEXTJ but the contextual requirements are not satisfied.)
 | 
						|
 | 
						|
Building and Diagnostics
 | 
						|
------------------------
 | 
						|
 | 
						|
The IDNA and UTS 46 functionality relies upon pre-calculated lookup tables for
 | 
						|
performance. These tables are derived from computing against eligibility criteria
 | 
						|
in the respective standards. These tables are computed using the command-line
 | 
						|
script ``tools/idna-data``.
 | 
						|
 | 
						|
This tool will fetch relevant tables from the Unicode Consortium and perform the
 | 
						|
required calculations to identify eligibility. It has three main modes:
 | 
						|
 | 
						|
* ``idna-data make-libdata``. Generates ``idnadata.py`` and ``uts46data.py``,
 | 
						|
  the pre-calculated lookup tables using for IDNA and UTS 46 conversions. Implementors
 | 
						|
  who wish to track this library against a different Unicode version may use this tool
 | 
						|
  to manually generate a different version of the ``idnadata.py`` and ``uts46data.py``
 | 
						|
  files.
 | 
						|
 | 
						|
* ``idna-data make-table``. Generate a table of the IDNA disposition
 | 
						|
  (e.g. PVALID, CONTEXTJ, CONTEXTO) in the format found in Appendix B.1 of RFC
 | 
						|
  5892 and the pre-computed tables published by `IANA <http://iana.org/>`_.
 | 
						|
 | 
						|
* ``idna-data U+0061``. Prints debugging output on the various properties
 | 
						|
  associated with an individual Unicode codepoint (in this case, U+0061), that are
 | 
						|
  used to assess the IDNA and UTS 46 status of a codepoint. This is helpful in debugging
 | 
						|
  or analysis.
 | 
						|
 | 
						|
The tool accepts a number of arguments, described using ``idna-data -h``. Most notably,
 | 
						|
the ``--version`` argument allows the specification of the version of Unicode to use
 | 
						|
in computing the table data. For example, ``idna-data --version 9.0.0 make-libdata``
 | 
						|
will generate library data against Unicode 9.0.0.
 | 
						|
 | 
						|
Note that this script requires Python 3, but all generated library data will work
 | 
						|
in Python 2.7.
 | 
						|
 | 
						|
 | 
						|
Testing
 | 
						|
-------
 | 
						|
 | 
						|
The library has a test suite based on each rule of the IDNA specification, as
 | 
						|
well as tests that are provided as part of the Unicode Technical Standard 46,
 | 
						|
`Unicode IDNA Compatibility Processing <http://unicode.org/reports/tr46/>`_.
 | 
						|
 | 
						|
The tests are run automatically on each commit at Travis CI:
 | 
						|
 | 
						|
.. image:: https://travis-ci.org/kjd/idna.svg?branch=master
 | 
						|
   :target: https://travis-ci.org/kjd/idna
 | 
						|
 | 
						|
 |