Skip to main content

Hosting.de Client-Library

codecov Supported Versions hosting.de API

An unofficial client library for the hosting.de API.

  • API Version: v1

Requirements

The package requires Python 3.6+. It is currently only tested with Python 3.8, but should work for Python 3.6.

Installation & Usage

Install with pip:

pip install python-hostingde

Getting Started

Please follow the installation procedure. To login with the client, you need your endpoint url, and an API token. To authenticate:

from hostingde import api
from hostingde.client import HostingDeClient

client: HostingDeClient = api.login('<your endpoint url>', '<your token>')

Your endpoint should look like this: https://<your_domain>/api (do not forget the /api while providing the endpoint).

The client is modularized into the different service types, for example client.dns refers to the DNS service API.

For example, to fetch all zones, you can use:

from hostingde import api
from hostingde.client import HostingDeClient

client: HostingDeClient = api.login('<your endpoint url>', '<your token>')

for zone in client.dns.list_zones():
  print(zone)

All implemented endpoints are fully documented and typed. You will get corresponding hints in your IDE of choice.

Filtering and Sorting API

In order to use filter and sort APIs, we simplified the usage of the API. For example, to search for a specific zone:

from hostingde import api
from hostingde.client import HostingDeClient
from hostingde.model.filter import FilterCondition

client: HostingDeClient = api.login('<your endpoint url>', '<your token>')

zone_filter = FilterCondition('zoneName').eq('example.com')

for zone in client.dns.list_zones(filter=zone_filter):
  print(zone)

This will automatically build the corresponding filter expression in the background

{
  "field": "domainName",
  "value": "example.com",
  "relation": "equal"
}

Apart from FilterCondition.eq, the condition supports all relations currently defined in the API:

Relation Operation Description
equal FilterCondition.eq field must match value exactly
unequal FilterCondition.ne field must not be the same as value
greater FilterCondition.gt field must be greater than value. This might apply to e.g. an integer value, a date or a date time
less FilterCondition.lt field must be less than value. This might apply to e.g. an integer value, a date or a date time
greaterEqual FilterCondition.ge field must be greater than or equal to value. This might apply to e.g. an integer value, a date or a date time
lessEqual FilterCondition.le field must be less than or equal to value. This might apply to e.g. an integer value, a date or a date time
FilterCondition.startswith Corresponds to the field method. However, uses wildcard to simplify the usage --> field*

Chaining filters is easily supported as well:

from hostingde import api
from hostingde.client import HostingDeClient
from hostingde.model.filter import FilterCondition

client: HostingDeClient = api.login('<your endpoint url>', '<your token>')

zone_filter = (FilterCondition('zoneName').startswith('example') | FilterCondition('zoneName').startswith(
  'demo')) & FilterCondition('zoneName').ne('*.com')

for zone in client.dns.list_zones(filter=zone_filter):
  print(zone)

This automatically builds the equivalent filter expression for the API:

{
  "subFilterConnective": "AND",
  "subFilter": [
    {
      "subFilterConnective": "OR",
      "subFilter": [
        {
          "field": "zoneName",
          "value": "example*",
          "relation": "equal"
        },
        {
          "field": "zoneName",
          "value": "demo*",
          "relation": "equal"
        }
      ]
    },
    {
      "field": "zoneName",
      "value": "*.com",
      "relation": "unequal"
    }
  ]
}

which is less verbose and more readable.

Error Handling

If the request returns an error, the error is wrapped inside a api.client.exceptions.APIException with all details included. You can easily catch them and react to them accordingly.

Current status

Currently, we support the following endpoints for the following services:

  • DNS
    • list_zones 100%
    • list_zone_configs 100%
    • list_records 100%
    • delete_zone 100%
    • jobs_find 50% - missing official documentation, functionality cannot be guaranteed
    • update_zone 100%
    • get_default_nameserver 100%
  • Domain
    • list_domains 100%
    • register_domain 100%
    • jobs_find 100%
    • list_contacts 100%
    • create_contact 0%
    • update_contact 0%
  • Account
    • list_accounts 50% - missing official documentation, functionality cannot be guaranteed
    • get_own_account 50% - missing official documentation, functionality only implemented as far as required

We plan to add more endpoints in the future, for example for SSL and Domain services.

The implemented endpoints do not contain any logic to catch asynchronous behaviour yet. We plan to add a sync: bool property to the corresponding endpoints in the future as soon as the jobs API is properly defined.

Developing

Make sure that you satisfy the requirements. Checkout the project, then run

pip install -r requirements.txt 
pip install -r requirements-test.txt 

preferably in a virtual environment.

This will install all dependencies for the main project, as well as the dependencies used for testing.

Testing

Run

pytest -vv --cov-report term-missing:skip-covered --cov=api --cov=utils --cov-report xml --html=test-results/report.html --cov-report html:test-results/cov

in order to test the code.

Contributing

You can contribute to the project and add new endpoints that you need. However, in order to merge, we require:

  • All implemented methods MUST be documented using reStructuredText notation.
  • All implemented methods MUST be typed properly
  • We require a test coverage of at least 90%, and your additions must not decrease the overall coverage of the codebase.
  • We appreciate if you use this commit message format.

Metadata

Release files for python-hostingde 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-hostingde 0.9.1
File Size Uploaded Provenance Actions
python-hostingde-0.9.1.tar.gz 27.6 kB Without provenance Details for python-hostingde-0.9.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for python-hostingde 0.9.1
File Interpreter ABI Platform Actions
python_hostingde-0.9.1-py3-none-any.whl Python 3 none any Details for python_hostingde-0.9.1-py3-none-any.whl

Total release size: 64.2 kB

Release files / python-hostingde-0.9.1.tar.gz

Download URL python-hostingde-0.9.1.tar.gz
Size 27.6 kB
Tags Source
SHA-256 checksum
How to use checksums
83a33d64a5e9685d8dd47fa8bf42f381d82702bc6b2f87ba02b0798d14a36b52
BLAKE2b-256 checksum
How to use checksums
c60ac4ef33a2f1f16f3cd592c4175a4eb67b0b6632b8e4e1f61ccbd108cd7ba5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.9.6 readme-renderer/37.3 requests/2.31.0 requests-toolbelt/1.0.0 urllib3/2.0.2 tqdm/4.65.0 importlib-metadata/6.6.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.6 CPython/3.10.11

Release files / python_hostingde-0.9.1-py3-none-any.whl

Download URL python_hostingde-0.9.1-py3-none-any.whl
Size 36.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8ed77bddb994405da4d7fdf75ce837a96c1ad98fe424ebfe39ba77a73ffbe990
BLAKE2b-256 checksum
How to use checksums
ac089b7653d890986cca8c897a20aa686640fe357328bd19686447ce01b347f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.9.6 readme-renderer/37.3 requests/2.31.0 requests-toolbelt/1.0.0 urllib3/2.0.2 tqdm/4.65.0 importlib-metadata/6.6.0 keyring/23.13.1 rfc3986/2.0.0 colorama/0.4.6 CPython/3.10.11

Security for python-hostingde 0.9.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page