Metadata-Version: 2.4
Name: fred-epplib
Version: 3.1.1
Summary: Fred-epplib is FRED EPP library.
Author: Ondřej Fikar
Author-email: ondrej.fikar@nic.cz
License: GPLv3+
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Internet
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Utilities
Classifier: Typing :: Typed
Requires-Python: ~=3.8
License-File: LICENSE
Requires-Dist: lxml>=4.6
Requires-Dist: python-dateutil
Provides-Extra: quality
Requires-Dist: doc8; extra == "quality"
Requires-Dist: mypy; extra == "quality"
Requires-Dist: ruff; extra == "quality"
Provides-Extra: test
Requires-Dist: freezegun; extra == "test"
Requires-Dist: testfixtures; extra == "test"
Provides-Extra: types
Requires-Dist: types-freezegun; extra == "types"
Requires-Dist: types-python-dateutil; extra == "types"
Dynamic: license-file

===========
Fred-epplib
===========

Fred EPP library provides the means to communicate with an EPP server. It
consists of four main modules: `client`, `commands`, `responses`, and `models`.

The `Client` class in the `client` module is used to exchange the messages with
the server. The `commands` module contains the dataclasses representing the
commands which may be sent to the server. The `responses` module contains the
dataclasses representing the responses received from the server. The `models`
module contains the dataclasses which are used to compose both requests and
responses.

For more details, plese refer to the source code documentation. We suggest
starting with the `Client` class in the `client` module.

Usage
=====

In order to exchange messages with the server, a `Transport` instance has to be
created and passed to the init of the `Client`. Then, the `Client` is connected
to the server using a context manager or manually by calling the `connect`
method. The commands are created as instances of the `Request` base class and
sent via the `send` method of the `Client` instance. The response from the
server is returned by `send` as an instance of the `Response` class. After the
response is received, its data may be examined.

See the example below

.. code-block:: python

    from epplib.client import Client
    from epplib.commands import InfoDomain, Login, Logout
    from epplib.transport import SocketTransport

    hostname = 'localhost'
    cert_file = 'path/to/cert.pem'
    key_file = 'path/to/key.pem'

    transport = SocketTransport(hostname, cert_file=cert_file, key_file=key_file)

    with Client(transport) as client:
        login = Login(cl_id='my_id', password='passwd', obj_uris=['http://www.nic.cz/xml/epp/contact-1.6'])
        response_login = client.send(login)
        print(response_login.code)

        info = InfoDomain(name='mydomain.cz')
        response_info = client.send(info)
        print(response_info.res_data[0].ex_date)

        client.send(Logout())

ChangeLog
=========

.. contents:: Releases
   :backlinks: none
   :local:

3.1.1 (2025-06-26)
------------------

* Fix recognition of domain expiration poll messages (#158).
* Add the ``rem`` attribute to remove mailing address from a contact (#160).
* Fix annotations.

3.1.0 (2024-04-03)
------------------

* Add auction extenstion for check domain (#157).
* Update project setup.

3.0.0 (2024-02-01)
------------------

* Add support for python 3.12.
* Make ``Addr`` fields not optional (#150).
* Add fallback empty string to address fields (#151).
* Add handling of errors with empty reason values (#152).
* Remove ``auth_info`` from ``Create*`` commands (#153).
* Add ``SendAuthinfo`` parsing (#154).
* Update project setup.

2.0.1 (2023-11-06)
------------------

* Add a cleaner way to work with `Ident` (#149).
* Fix socket closing in tests (#148).
* Update package info.

2.0.0 (2023-09-06)
------------------

* Drop Python 3.7 support.
* Split `rem` and `add` in `update` commands (#120).
* Remove `unit` from `CreateDomain` (#139).
* Add `RawPollMessage` class as default poll message (#134).
* Save `xml` of last command, response (#130).
* Improve `Client.send` type hints (#142).
* Remove `ParseXMLMixin` NAMESPACES mapping (#143).
* Turn `ParseXMLMixin` into separate helper functions (#144).
* Parse reason tags (#138).
* Remove `__future__.annotations` from `policy` (#141).
* Prevent finishing tests before fake server closed (#137).
* Fix typos in README (#140).
* Fix licensing.
* Update project setup.

1.1.1 (2023-08-01)
-------------------

* Fix license.

1.1.0 (2023-08-01)
-------------------

* Add `poll` commands. (#111).
* Add command to send raw XML. (#112).
* Add conversion from `fields` to `hidden` and `disclosed`. (#116).
* Add disclose policy transformation method. (#119).
* Allow passing custom ``tr_id`` (#109).
* Fix order of disclose flags (#110).
* Fix postal info behavior (#113).
* Fix extraction of mailing address (#114).
* Compare `sp` to `None`. (#115).
* Update project setup.

1.0.0 (2022-12-14)
-------------------

* Add support for Python 3.11.
* Set default port (#108).
* Fix annotations.

0.2.0 (2022-09-27)
-------------------

* Add ``auth_info`` to info commands (#101).
* Fix ``UpdateDomain`` command (#105).
* Expose list commands (#104).
* Better error handling of empty response (#106).
* Update EPP testing schemas (#101).
* Log raw XML and transport errors (#102).

0.1.1 (2022-07-21)
-------------------

* Fix license.

0.1.0 (2022-07-20)
-------------------

Initial version
