Modern, type-safe, zero-dependency python library for implementing a network time protocol (NTP) stratum 0 server
Project description
ntps
Modern, type-safe, zero-dependency python library for implementing a network time protocol (NTP) stratum 0 server.
Installation
pip install ntps
or
using your preferred environment / package manager of choice, e.g., poetry, conda or uv:
poetry add ntps
conda install ntps
uv add ntps
Usage
There are two main components in the ntps library: the NTP server and the NTP client.
The NTP server is used to create an NTP server that can be used to synchronize time across a network. The NTP client is used to query an NTP server for the current time.
The following is an example of how to use the ntps library to create an NTP server and client:
Server
from asyncio import get_running_loop, run
from time import time
from ntps import NTPServer
# Define a custom NTP server that uses GPS-synced time as the reference time, and a
# stratum level of 0:
class GNSSStratum0NTPServer(NTPServer):
# Set the reference identifier of the NTP server:
refid = "GPS"
# Set the stratum level of the NTP server:
stratum = 0
def get_ntp_time(self) -> float:
# Replace this with your actual GPS-synced time retrieval:
return time()
async def main() -> None:
# Retrieve the current running asynchronous event loop:
loop = get_running_loop()
# Create a UDP server endpoint on all interfaces at port 123 using your
# custom implementation (e.g., GNSSStratum0NTPServer):
transport, _ = await loop.create_datagram_endpoint(
lambda: GNSSStratum0NTPServer(),
local_addr=('0.0.0.0', 123),
)
Client
from ntps import NTPClient, NTPPacket
async def main() -> None:
# Create a new NTP client instance:
client = NTPClient(endpoint="0.0.0.0", port=123)
# Send an NTP request to the specified NTP server (e.g., 0.pool.ntp.org):
packet: NTPPacket = client.query()
# Print the response packet from the NTP server:
print(packet)
As the ntps instance is fully typed, you can use your IDE's autocompletion to see all the available methods and properties.
We have also provided further usage examples in the examples directory.
Milestones
- Implement NTP server
- Implement NTP client
- Implement NTP packet
- Implement kiss-of-death (KoD) packet
- Implement NTP authentication
- Implement NTP broadcast
- Implement NTP multicast
- Implement NTP symmetric mode
Miscellaneous
For more information on the NTP protocol, please refer to the RFC 5905 document.
License
This project is licensed under the terms of the MIT license.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ntps-0.3.0.tar.gz.
File metadata
- Download URL: ntps-0.3.0.tar.gz
- Upload date:
- Size: 33.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ea98bc6851609895b447179e38fe626363cdd79771b1ce5a5ede2c489209673
|
|
| MD5 |
5f22b8da7c40275a69f1f7c231123985
|
|
| BLAKE2b-256 |
427db878a9f8092eb554ca261fa8c235c0e5d50d9f6e7439efd95a22de98d3dc
|
Provenance
The following attestation bundles were made for ntps-0.3.0.tar.gz:
Publisher:
publish.yml on michealroberts/ntps
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ntps-0.3.0.tar.gz -
Subject digest:
8ea98bc6851609895b447179e38fe626363cdd79771b1ce5a5ede2c489209673 - Sigstore transparency entry: 221939943
- Sigstore integration time:
-
Permalink:
michealroberts/ntps@5ce676ee795dd74c50c4050b3e5ef6f606755db6 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/michealroberts
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5ce676ee795dd74c50c4050b3e5ef6f606755db6 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ntps-0.3.0-py3-none-any.whl.
File metadata
- Download URL: ntps-0.3.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f45aa9741918814dba000963ca84b18159ac06da26644d9b1180fe8c92e688cf
|
|
| MD5 |
204080f6c290ebe3d55b283a6f9fe3d2
|
|
| BLAKE2b-256 |
9a175f55877fbc93629cb784e24d4c80ec4b7034760c0b59853a80eb5e4900b6
|
Provenance
The following attestation bundles were made for ntps-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on michealroberts/ntps
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ntps-0.3.0-py3-none-any.whl -
Subject digest:
f45aa9741918814dba000963ca84b18159ac06da26644d9b1180fe8c92e688cf - Sigstore transparency entry: 221939949
- Sigstore integration time:
-
Permalink:
michealroberts/ntps@5ce676ee795dd74c50c4050b3e5ef6f606755db6 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/michealroberts
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5ce676ee795dd74c50c4050b3e5ef6f606755db6 -
Trigger Event:
release
-
Statement type: