Skip to main content

Python API wrapper for Aula.

Project description

Aula

PyPI Python License

Async Python client for the Danish school platform aula.dk.

  • Fetch calendar events, messages, posts, and daily overviews
  • Authenticate via Denmark's MitID national identity system
  • Token caching — MitID app approval only needed on first login
  • Full async API client (AulaApiClient) and a CLI included

Installation

pip install aula
# or with uv
uv add aula

Requirements: Python >= 3.10, MitID username and MitID app.

Run without installing

Use uvx to run the CLI directly from PyPI without a permanent install:

uvx aula --username johndoe messages --limit 5

Install from Source

git clone https://github.com/nickknissen/aula.git
cd aula
pip install -e .

Quick Start

import asyncio
from aula import FileTokenStorage
from aula.auth_flow import authenticate_and_create_client

async def main():
    token_storage = FileTokenStorage(".aula_tokens.json")
    async with await authenticate_and_create_client("your_mitid_username", token_storage) as client:
        profile = await client.get_profile()
        print(profile.display_name)
        for child in profile.children:
            overview = await client.get_daily_overview(child.id)

asyncio.run(main())

Key methods on AulaApiClient: get_profile(), get_daily_overview(child_id), get_message_threads(), get_messages_for_thread(thread_id), get_calendar_events(...), get_posts(...). See src/aula/api_client.py for the full list.

Widget API (Namespace)

Widget integrations are available via the namespaced widgets client on AulaApiClient:

tasks = await client.widgets.get_mu_tasks(
    widget_id="0030",  # WIDGET_MIN_UDDANNELSE
    child_filter=["12345"],
    institution_filter=["5678"],
    week="2026-W8",
    session_uuid="guardian-user-id",
)

Use the client.widgets.* namespace for widget calls (for example: get_mu_tasks, get_ugeplan, get_easyiq_weekplan, get_meebook_weekplan, get_momo_courses, get_library_status).

Legacy direct widget methods on AulaApiClient are deprecated and will be removed in a future release. Migrate to client.widgets.<method>(...).

Authentication

What You Need

  • MitID username — your MitID username (not your Aula username). Find it at mitid.dk.
  • MitID app — installed and set up on your phone.

First Login

On first run you'll be prompted to approve the login in your MitID app. You may need to scan a QR code or enter an OTP shown in the terminal. Tokens are saved to the storage file and reused on subsequent runs — no app interaction needed until they expire.

Token Security

Tokens provide full access to your Aula account — treat them like passwords and never commit token files to version control.

How It Works

For a detailed breakdown of the authentication flow (OAuth + SAML + MitID), session cookies, and how this library differs from the browser login, see docs/aula-authentication.md.

CLI

aula --username <your_mitid_username> [COMMAND]

The username can also be set via the AULA_MITID_USERNAME environment variable or a config file (~/.config/aula/config.json).

Command Description
login Verify credentials
profile Show profile and children
overview Daily overview for all children
messages Recent message threads
calendar Calendar events
posts Posts and announcements

Example:

aula --username johndoe messages --limit 5
# or without installing
uvx aula --username johndoe messages --limit 5

Attribution

EasyIQ widget integration (weekplan and homework) was informed by the esbenwiberg/easyiq Home Assistant integration.

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

aula-0.3.0.tar.gz (133.5 kB view details)

Uploaded Source

Built Distribution

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

aula-0.3.0-py3-none-any.whl (72.8 kB view details)

Uploaded Python 3

File details

Details for the file aula-0.3.0.tar.gz.

File metadata

  • Download URL: aula-0.3.0.tar.gz
  • Upload date:
  • Size: 133.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for aula-0.3.0.tar.gz
Algorithm Hash digest
SHA256 fd5ce17789e0eb0ff90f5136042352d0304d589cccf73d7dab101c4ad1bba713
MD5 e03dfbd64e08c3a5431413958b143a5b
BLAKE2b-256 ef47c7338d6628e487c6a1362466eefd5a8c3050507f359d715d2b8372d0f5ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for aula-0.3.0.tar.gz:

Publisher: publish.yml on nickknissen/aula

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

File details

Details for the file aula-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: aula-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 72.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for aula-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d4b2c83245c730e8f3a4e4df58b0e6a510434e8cd06f80a09a74cbc1ae22a69d
MD5 5a36b1649455b9e4b4d778332b438fc4
BLAKE2b-256 b1f6364f258f90a9e587212fc2fed99b59a1401ef798df8cc2dfb1e6e00ecd42

See more details on using hashes here.

Provenance

The following attestation bundles were made for aula-0.3.0-py3-none-any.whl:

Publisher: publish.yml on nickknissen/aula

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