Skip to content
A Library with Amateur Radio specific Functions and Methods
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs FT8 as mode. FT8 frequencies are now marked as DIGITAL May 20, 2018
test FT8 as mode. FT8 frequencies are now marked as DIGITAL May 20, 2018
LICENSE Initial commit Apr 24, 2014 changed url of appveyor badge and added redis for testing Jan 28, 2018
readthedocs-pip-requirements.txt added readthedocs pip requirements Jan 28, 2018
requirements-pytest.txt added pytest-cov Jan 28, 2018


Build Status Build status codecov PyPI version

Pyhamtools is a set of functions and classes for Amateur Radio purpose. Currently the core part is the Callsign Lookup which decodes any amateur radio callsign string and provides the corresponding information (Country, DXCC entity, CQ Zone...etc). This basic functionality is needed for Logbooks, DX-Clusters or Log Checking. This and additional convenience features are provided for the following sources:


Other modules include location based calculations (e.g. distance, heading between Maidenhead locators) or frequency based calculations (e.g. frequency to band).


This Library is used in production at the DX Cluster, performing several thousand lookups and calculations per day.


Pyhamtools is since version 0.6.0 compatible with > Python 2.7 and > python 3.3. We check compatibility on OSX, Windows and Linux with the following Python versions:

  • Python 2.7
  • Python 3.4
  • Python 3.5
  • Python 3.6
  • pypy (Python 2)


Check out the full documentation including the changelog at:


Pyhamtools is published under the permissive MIT License. You can find a good comparison of Open Source Software licenses, including the MIT license at


Easiest way to install pyhamtools is through the packet manager pip:

$ pip install pyhamtools

Example: How to use pyhamtools

>>> from pyhamtools.locator import calculate_heading
>>> calculate_heading("JN48QM", "QF67bf")

>>> from pyhamtools import LookupLib, Callinfo
>>> my_lookuplib = LookupLib(lookuptype="countryfile")
>>> cic = Callinfo(my_lookuplib)
>>> cic.get_all("DH1TW")
        'country': 'Fed. Rep. of Germany',
        'adif': 230,
        'continent': 'EU',
        'latitude': 51.0,
        'longitude': 10.0,
        'cqz': 14,
        'ituz': 28


An extensive set of unit tests has been created for all Classes & Methods. In order to be able to perform all tests you need a account and a Clublog API key.

pyhamtools rely on the pytest testing framework. In order to install it with all the needed dependencies run:

$ pip install -r requirements-pytest.txt

The credentials and the Clublog API key have to be set in environment variables:

$ export CLUBLOG_APIKEY="<your API key>"
$ export QRZ_USERNAME="<your username>"
$ export QRZ_PWD="<your password>"

In order to perform the tests related to the redis key/value store, a redis server has to be up & running.

$ sudo apt install redis-server
$ redis-server

To run the tests, simply execute:

$ pytest --cov pyhamtools

Generate the documentation

You can generate the documentation of pyhamtools with the following commands:

$ pip install -r requirements-docs.txt
$ cd docs
$ make html
You can’t perform that action at this time.