METADATA 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. Metadata-Version: 2.1
  2. Name: idna
  3. Version: 3.10
  4. Summary: Internationalized Domain Names in Applications (IDNA)
  5. Author-email: Kim Davies <kim+pypi@gumleaf.org>
  6. Requires-Python: >=3.6
  7. Description-Content-Type: text/x-rst
  8. Classifier: Development Status :: 5 - Production/Stable
  9. Classifier: Intended Audience :: Developers
  10. Classifier: Intended Audience :: System Administrators
  11. Classifier: License :: OSI Approved :: BSD License
  12. Classifier: Operating System :: OS Independent
  13. Classifier: Programming Language :: Python
  14. Classifier: Programming Language :: Python :: 3
  15. Classifier: Programming Language :: Python :: 3 :: Only
  16. Classifier: Programming Language :: Python :: 3.6
  17. Classifier: Programming Language :: Python :: 3.7
  18. Classifier: Programming Language :: Python :: 3.8
  19. Classifier: Programming Language :: Python :: 3.9
  20. Classifier: Programming Language :: Python :: 3.10
  21. Classifier: Programming Language :: Python :: 3.11
  22. Classifier: Programming Language :: Python :: 3.12
  23. Classifier: Programming Language :: Python :: 3.13
  24. Classifier: Programming Language :: Python :: Implementation :: CPython
  25. Classifier: Programming Language :: Python :: Implementation :: PyPy
  26. Classifier: Topic :: Internet :: Name Service (DNS)
  27. Classifier: Topic :: Software Development :: Libraries :: Python Modules
  28. Classifier: Topic :: Utilities
  29. Requires-Dist: ruff >= 0.6.2 ; extra == "all"
  30. Requires-Dist: mypy >= 1.11.2 ; extra == "all"
  31. Requires-Dist: pytest >= 8.3.2 ; extra == "all"
  32. Requires-Dist: flake8 >= 7.1.1 ; extra == "all"
  33. Project-URL: Changelog, https://github.com/kjd/idna/blob/master/HISTORY.rst
  34. Project-URL: Issue tracker, https://github.com/kjd/idna/issues
  35. Project-URL: Source, https://github.com/kjd/idna
  36. Provides-Extra: all
  37. Internationalized Domain Names in Applications (IDNA)
  38. =====================================================
  39. Support for the Internationalized Domain Names in
  40. Applications (IDNA) protocol as specified in `RFC 5891
  41. <https://tools.ietf.org/html/rfc5891>`_. This is the latest version of
  42. the protocol and is sometimes referred to as “IDNA 2008”.
  43. This library also provides support for Unicode Technical
  44. Standard 46, `Unicode IDNA Compatibility Processing
  45. <https://unicode.org/reports/tr46/>`_.
  46. This acts as a suitable replacement for the “encodings.idna”
  47. module that comes with the Python standard library, but which
  48. only supports the older superseded IDNA specification (`RFC 3490
  49. <https://tools.ietf.org/html/rfc3490>`_).
  50. Basic functions are simply executed:
  51. .. code-block:: pycon
  52. >>> import idna
  53. >>> idna.encode('ドメイン.テスト')
  54. b'xn--eckwd4c7c.xn--zckzah'
  55. >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
  56. ドメイン.テスト
  57. Installation
  58. ------------
  59. This package is available for installation from PyPI:
  60. .. code-block:: bash
  61. $ python3 -m pip install idna
  62. Usage
  63. -----
  64. For typical usage, the ``encode`` and ``decode`` functions will take a
  65. domain name argument and perform a conversion to A-labels or U-labels
  66. respectively.
  67. .. code-block:: pycon
  68. >>> import idna
  69. >>> idna.encode('ドメイン.テスト')
  70. b'xn--eckwd4c7c.xn--zckzah'
  71. >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
  72. ドメイン.テスト
  73. You may use the codec encoding and decoding methods using the
  74. ``idna.codec`` module:
  75. .. code-block:: pycon
  76. >>> import idna.codec
  77. >>> print('домен.испытание'.encode('idna2008'))
  78. b'xn--d1acufc.xn--80akhbyknj4f'
  79. >>> print(b'xn--d1acufc.xn--80akhbyknj4f'.decode('idna2008'))
  80. домен.испытание
  81. Conversions can be applied at a per-label basis using the ``ulabel`` or
  82. ``alabel`` functions if necessary:
  83. .. code-block:: pycon
  84. >>> idna.alabel('测试')
  85. b'xn--0zwm56d'
  86. Compatibility Mapping (UTS #46)
  87. +++++++++++++++++++++++++++++++
  88. As described in `RFC 5895 <https://tools.ietf.org/html/rfc5895>`_, the
  89. IDNA specification does not normalize input from different potential
  90. ways a user may input a domain name. This functionality, known as
  91. a “mapping”, is considered by the specification to be a local
  92. user-interface issue distinct from IDNA conversion functionality.
  93. This library provides one such mapping that was developed by the
  94. Unicode Consortium. Known as `Unicode IDNA Compatibility Processing
  95. <https://unicode.org/reports/tr46/>`_, it provides for both a regular
  96. mapping for typical applications, as well as a transitional mapping to
  97. help migrate from older IDNA 2003 applications. Strings are
  98. preprocessed according to Section 4.4 “Preprocessing for IDNA2008”
  99. prior to the IDNA operations.
  100. For example, “Königsgäßchen” is not a permissible label as *LATIN
  101. CAPITAL LETTER K* is not allowed (nor are capital letters in general).
  102. UTS 46 will convert this into lower case prior to applying the IDNA
  103. conversion.
  104. .. code-block:: pycon
  105. >>> import idna
  106. >>> idna.encode('Königsgäßchen')
  107. ...
  108. idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed
  109. >>> idna.encode('Königsgäßchen', uts46=True)
  110. b'xn--knigsgchen-b4a3dun'
  111. >>> print(idna.decode('xn--knigsgchen-b4a3dun'))
  112. königsgäßchen
  113. Transitional processing provides conversions to help transition from
  114. the older 2003 standard to the current standard. For example, in the
  115. original IDNA specification, the *LATIN SMALL LETTER SHARP S* (ß) was
  116. converted into two *LATIN SMALL LETTER S* (ss), whereas in the current
  117. IDNA specification this conversion is not performed.
  118. .. code-block:: pycon
  119. >>> idna.encode('Königsgäßchen', uts46=True, transitional=True)
  120. 'xn--knigsgsschen-lcb0w'
  121. Implementers should use transitional processing with caution, only in
  122. rare cases where conversion from legacy labels to current labels must be
  123. performed (i.e. IDNA implementations that pre-date 2008). For typical
  124. applications that just need to convert labels, transitional processing
  125. is unlikely to be beneficial and could produce unexpected incompatible
  126. results.
  127. ``encodings.idna`` Compatibility
  128. ++++++++++++++++++++++++++++++++
  129. Function calls from the Python built-in ``encodings.idna`` module are
  130. mapped to their IDNA 2008 equivalents using the ``idna.compat`` module.
  131. Simply substitute the ``import`` clause in your code to refer to the new
  132. module name.
  133. Exceptions
  134. ----------
  135. All errors raised during the conversion following the specification
  136. should raise an exception derived from the ``idna.IDNAError`` base
  137. class.
  138. More specific exceptions that may be generated as ``idna.IDNABidiError``
  139. when the error reflects an illegal combination of left-to-right and
  140. right-to-left characters in a label; ``idna.InvalidCodepoint`` when
  141. a specific codepoint is an illegal character in an IDN label (i.e.
  142. INVALID); and ``idna.InvalidCodepointContext`` when the codepoint is
  143. illegal based on its positional context (i.e. it is CONTEXTO or CONTEXTJ
  144. but the contextual requirements are not satisfied.)
  145. Building and Diagnostics
  146. ------------------------
  147. The IDNA and UTS 46 functionality relies upon pre-calculated lookup
  148. tables for performance. These tables are derived from computing against
  149. eligibility criteria in the respective standards. These tables are
  150. computed using the command-line script ``tools/idna-data``.
  151. This tool will fetch relevant codepoint data from the Unicode repository
  152. and perform the required calculations to identify eligibility. There are
  153. three main modes:
  154. * ``idna-data make-libdata``. Generates ``idnadata.py`` and
  155. ``uts46data.py``, the pre-calculated lookup tables used for IDNA and
  156. UTS 46 conversions. Implementers who wish to track this library against
  157. a different Unicode version may use this tool to manually generate a
  158. different version of the ``idnadata.py`` and ``uts46data.py`` files.
  159. * ``idna-data make-table``. Generate a table of the IDNA disposition
  160. (e.g. PVALID, CONTEXTJ, CONTEXTO) in the format found in Appendix
  161. B.1 of RFC 5892 and the pre-computed tables published by `IANA
  162. <https://www.iana.org/>`_.
  163. * ``idna-data U+0061``. Prints debugging output on the various
  164. properties associated with an individual Unicode codepoint (in this
  165. case, U+0061), that are used to assess the IDNA and UTS 46 status of a
  166. codepoint. This is helpful in debugging or analysis.
  167. The tool accepts a number of arguments, described using ``idna-data
  168. -h``. Most notably, the ``--version`` argument allows the specification
  169. of the version of Unicode to be used in computing the table data. For
  170. example, ``idna-data --version 9.0.0 make-libdata`` will generate
  171. library data against Unicode 9.0.0.
  172. Additional Notes
  173. ----------------
  174. * **Packages**. The latest tagged release version is published in the
  175. `Python Package Index <https://pypi.org/project/idna/>`_.
  176. * **Version support**. This library supports Python 3.6 and higher.
  177. As this library serves as a low-level toolkit for a variety of
  178. applications, many of which strive for broad compatibility with older
  179. Python versions, there is no rush to remove older interpreter support.
  180. Removing support for older versions should be well justified in that the
  181. maintenance burden has become too high.
  182. * **Python 2**. Python 2 is supported by version 2.x of this library.
  183. Use "idna<3" in your requirements file if you need this library for
  184. a Python 2 application. Be advised that these versions are no longer
  185. actively developed.
  186. * **Testing**. The library has a test suite based on each rule of the
  187. IDNA specification, as well as tests that are provided as part of the
  188. Unicode Technical Standard 46, `Unicode IDNA Compatibility Processing
  189. <https://unicode.org/reports/tr46/>`_.
  190. * **Emoji**. It is an occasional request to support emoji domains in
  191. this library. Encoding of symbols like emoji is expressly prohibited by
  192. the technical standard IDNA 2008 and emoji domains are broadly phased
  193. out across the domain industry due to associated security risks. For
  194. now, applications that need to support these non-compliant labels
  195. may wish to consider trying the encode/decode operation in this library
  196. first, and then falling back to using `encodings.idna`. See `the Github
  197. project <https://github.com/kjd/idna/issues/18>`_ for more discussion.