Skip to main content

Async Python client for the Timebutler API

Project description

timebutler_client

Async Python client for the Timebutler API (official docs).

[!IMPORTANT] This is NOT an official client by Timebutler GmbH, just a community project.

License: MIT Python Versions (officially) supported Pypi status badge Unittests status badge Coverage status badge Linting status badge Formatting status badge

Installation

pip install timebutler-client

Usage

from timebutler_client import TimebutlerClient

# Create client with your API key
client = TimebutlerClient(api_key="your-api-key")

# Fetch absences for a specific year
absences = await client.get_absences(year=2026)

for absence in absences:
    print(f"{absence.employee_number}: {absence.from_date} - {absence.to_date} ({absence.absence_type})")

Features

[!NOTE] We only implemented a subset of the Timebutler API endpoints, because the API is not very convenient to develop against (no OpenAPI, no sandbox or test system, only admin API keys).

  • Async HTTP client using aiohttp
  • Typed responses using Pydantic models
  • Strict date parsing (European dd/mm/yyyy format)
  • Employee number handling with leading zeros preserved

Supported Endpoints

Method Description
get_absences(year) Fetch absences for a given year
get_projects() Fetch all projects
get_services() Fetch all services
get_users() Fetch all users
get_workdays() Fetch workday schedules for all users (see note below)
get_worktime(year?, month?, user_id?) Fetch worktime entries with optional filters

[!NOTE] get_workdays() returns a WorkdaysResult with two named fields: schedules and invalid_employees. invalid_employees contains users whose employee_number field in Timebutler is empty or non-numeric. This is expected — it occurs for DC users on test systems and for new employees who are not yet fully set up in production. Because employee numbers are mandatory for downstream processing, these users are filtered out here rather than propagating incomplete data further along the pipeline.

Example: Tracking Time by Project

from timebutler_client import TimebutlerClient

client = TimebutlerClient(api_key="your-api-key")

# Get all projects and worktime entries
projects = await client.get_projects()
worktime = await client.get_worktime(year=2026, month=1)

# Build a project name lookup
project_names = {p.id: p.name_stripped for p in projects}

# Sum hours by project
for entry in worktime:
    if entry.has_project:
        project_name = project_names.get(entry.project_id, "Unknown")
        print(f"{entry.date}: {entry.duration} on {project_name}")

Development

This project is based on the Hochfrequenz Python Template Repository. Refer to that repository for detailed setup instructions including tox configuration and IDE setup.

Quick Start

# Create dev environment
tox -e dev

# Run tests
tox -e tests

# Run linting
tox -e linting

# Run type checking
tox -e type_check

License

MIT

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

timebutler_client-0.0.4.tar.gz (21.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

timebutler_client-0.0.4-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file timebutler_client-0.0.4.tar.gz.

File metadata

  • Download URL: timebutler_client-0.0.4.tar.gz
  • Upload date:
  • Size: 21.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for timebutler_client-0.0.4.tar.gz
Algorithm Hash digest
SHA256 4f5400fded1e9f46f4211929ac8fac75a740e35cc6d791046e854eb524c4036a
MD5 4d3559824ea53510b68ada01f4f57a7a
BLAKE2b-256 42157fcfb2a03a8badf93ec6e4906eabf46836912b3454197d00b0235f935027

See more details on using hashes here.

Provenance

The following attestation bundles were made for timebutler_client-0.0.4.tar.gz:

Publisher: python-publish.yml on Hochfrequenz/timebutler_client.py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file timebutler_client-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for timebutler_client-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 b1ba2ab1013eb762054affa18716dace95d425ed0f1c729cd0bae28e8759371a
MD5 7e9e7cb3ba3ec69b5f6df28580691fa2
BLAKE2b-256 f842419cc6865d8d98e223c21dde631ea1adefc13fce16d4a75533a7b25889db

See more details on using hashes here.

Provenance

The following attestation bundles were made for timebutler_client-0.0.4-py3-none-any.whl:

Publisher: python-publish.yml on Hochfrequenz/timebutler_client.py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page