Catalog PyPI
PACKAGE EXPLORERView in registry

aa-loa

PyPI

Leave of Absence module for Alliance Auth

allianceauthleave_of_absenceloa
Versions collected1
Direct dependencies2From release 0.0.5
Last observed20 Oct, 16:58 UTC

README

Version 0.0.5 documentation

Alliance Auth - Leave of Absence (aa-loa)

PyPI version Python versions Tests

A complete Leave of Absence (LOA) management module for Alliance Auth. This module allows members to declare periods of absence so that leadership is aware of their inactivity, while seamlessly integrating with other Alliance Auth features (like Discord and Activity Trackers) to prevent accidental purges.

Features

  • Player Dashboard: Easy-to-use form for players to submit a start date, end date, and an optional reason. Players can also view their past LOAs, and cancel/revoke an active LOA if they return early.
  • HR Dashboard: A dedicated view for Directors/HR to see a live table of all active and upcoming LOAs in the alliance.
  • Proxy Submission: Directors can submit an LOA on behalf of a member who might be unable to access a PC (e.g. emergencies).
  • Discord Role Sync: Assigns members to a specific Django Group (e.g., [On Leave]) when their LOA becomes active. Alliance Auth will automatically sync this to Discord, TS, or Mumble.
  • Purge Protection: Because the member is in the [On Leave] group, audit modules (like aa-inactives or opcalendar) can simply whitelist this group to exempt the member from activity purges.
  • Webhooks: Automatically posts a Discord Embed to a webhook URL whenever an LOA is submitted.
  • Welcome Back Notification: A Celery task automatically removes the member from the LOA group when the end date passes, and sends a "Welcome Back" Alliance Auth notification.

🤖 Optional: Discord Bot Integration (aa-discordbot)

While aa-loa works perfectly fine on its own, it integrates natively with aa-discordbot. If your alliance has aa-discordbot installed, the internal Alliance Auth notifications generated by this module will automatically be forwarded as Direct Messages (DMs) on Discord to the user. This applies to:

  • 📩 The "Welcome Back" notification when an LOA automatically expires.
  • 🛑 The "Cancellation" notification when HR manually cancels a player's LOA.

Installation

1. Install the Python Package

Activate your Alliance Auth virtual environment and install the package:

pip install -e /path/to/aa-loa/

2. Update Alliance Auth Settings

Open your myauth/settings/local.py file and add 'aa_loa' to your INSTALLED_APPS:

INSTALLED_APPS += [
    # ... other apps
    'aa_loa',
]

3. Run Database Migrations

Run the migrations to create the database tables:

python manage.py makemigrations aa_loa
python manage.py migrate

4. Restart Services

Restart your Alliance Auth web service and Celery workers so they pick up the new code and background tasks:

sudo systemctl restart supervisor

(Or restart the specific services depending on your hosting environment).


Configuration

1. Setup the LOA Group

  1. Go to the Django Admin Panel (/admin/).
  2. Navigate to Authentication and Authorization -> Groups and create a new group (e.g., On Leave).
    • Optional: Configure this group in your Discord/TS services to map to a specific [On Leave] Discord Role.
  3. Navigate to Leave of Absence Configuration -> LOA Config.
  4. Add a new configuration row.
  5. Select the On Leave group you just created.
  6. (Optional) Paste a Discord Webhook URL if you want real-time notifications in an HR channel when LOAs are submitted.

2. Permissions

Assign the following permissions to the appropriate states or groups in Alliance Auth:

Permission CodeDjango Admin NameDescription
aa_loa.basic_accessLeave of Absence | leave of absence | Can access the LOA moduleGrants access to the LOA module for normal members. Allows them to submit and manage their own LOAs.
aa_loa.manage_loaLeave of Absence | leave of absence | Can manage LOAs for other users and view HR dashboardGrants access to the HR Dashboard. Allows users to view all LOAs and submit proxy LOAs for other members.

3. Setup the Celery Periodic Task

To ensure LOA groups are automatically assigned and removed every night, you need to configure the daily Celery task in your local.py settings file.

Open your myauth/settings/local.py and add the following to your CELERYBEAT_SCHEDULE dictionary:

from celery.schedules import crontab

CELERYBEAT_SCHEDULE['aa_loa_sync_groups'] = {
    'task': 'aa_loa.tasks.sync_loa_groups',
    'schedule': crontab(minute='0', hour='0'),
}

Restart your celery worker (sudo systemctl restart supervisor) and the system will automatically activate/deactivate LOAs every day at midnight!

Downloads & popularity

3downloads
1-day window · source-reported counts19 Oct 2026
2601300
2026-07-24: 260 · observed 2026-10-20T20:47:17.0281283Z · period 2026-07-24–2026-07-242026-07-25: 27 · observed 2026-10-20T20:47:17.0281283Z · period 2026-07-25–2026-07-252026-07-26: 6 · observed 2026-10-20T20:47:17.0281283Z · period 2026-07-26–2026-07-262026-07-27: 7 · observed 2026-10-20T20:47:17.0281283Z · period 2026-07-27–2026-07-272026-07-28: 107 · observed 2026-10-20T20:47:17.0281283Z · period 2026-07-28–2026-07-282026-07-29: 16 · observed 2026-10-20T20:47:17.0281283Z · period 2026-07-29–2026-07-292026-07-30: 5 · observed 2026-10-20T20:47:17.0281283Z · period 2026-07-30–2026-07-302026-07-31: 17 · observed 2026-10-20T20:47:17.0281283Z · period 2026-07-31–2026-07-312026-08-01: 8 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-02–2026-08-022026-08-03: 27 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-03–2026-08-032026-08-04: 17 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-04–2026-08-042026-08-06: 9 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-06–2026-08-062026-08-07: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-07–2026-08-072026-08-08: 3 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-08–2026-08-082026-08-09: 4 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-09–2026-08-092026-08-10: 7 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-10–2026-08-102026-08-11: 3 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-11–2026-08-112026-08-13: 2 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-13–2026-08-132026-08-14: 4 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-14–2026-08-142026-08-17: 8 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-17–2026-08-172026-08-18: 54 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-18–2026-08-182026-08-20: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-20–2026-08-202026-08-23: 3 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-23–2026-08-232026-08-24: 13 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-24–2026-08-242026-08-27: 9 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-27–2026-08-272026-08-28: 9 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-28–2026-08-282026-08-31: 3 · observed 2026-10-20T20:47:17.0281283Z · period 2026-08-31–2026-08-312026-09-01: 2 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-01–2026-09-012026-09-02: 2 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-02–2026-09-022026-09-03: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-03–2026-09-032026-09-05: 6 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-05–2026-09-052026-09-06: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-06–2026-09-062026-09-07: 3 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-07–2026-09-072026-09-08: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-08–2026-09-082026-09-09: 2 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-09–2026-09-092026-09-10: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-10–2026-09-102026-09-11: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-11–2026-09-112026-09-12: 9 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-12–2026-09-122026-09-13: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-13–2026-09-132026-09-14: 4 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-14–2026-09-142026-09-16: 8 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-16–2026-09-162026-09-18: 8 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-18–2026-09-182026-09-20: 3 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-20–2026-09-202026-09-24: 4 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-24–2026-09-242026-09-26: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-26–2026-09-262026-09-27: 2 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-27–2026-09-272026-09-28: 6 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-28–2026-09-282026-09-29: 4 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-29–2026-09-292026-09-30: 10 · observed 2026-10-20T20:47:17.0281283Z · period 2026-09-30–2026-09-302026-10-02: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-02–2026-10-022026-10-03: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-03–2026-10-032026-10-06: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-06–2026-10-062026-10-07: 4 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-07–2026-10-072026-10-08: 7 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-08–2026-10-082026-10-09: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-09–2026-10-092026-10-11: 2 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-11–2026-10-112026-10-12: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-12–2026-10-122026-10-13: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-13–2026-10-132026-10-16: 1 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-16–2026-10-162026-10-18: 4 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-18–2026-10-182026-10-19: 3 · observed 2026-10-20T20:47:17.0281283Z · period 2026-10-19–2026-10-19
24 Jul19 Oct

pypistats · 62 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-19 – 2026-10-1932026-10-20T20:47:17.0281283Z
2026-10-18 – 2026-10-1842026-10-20T20:47:17.0281283Z
2026-10-16 – 2026-10-1612026-10-20T20:47:17.0281283Z
2026-10-13 – 2026-10-1312026-10-20T20:47:17.0281283Z
2026-10-12 – 2026-10-1212026-10-20T20:47:17.0281283Z
2026-10-11 – 2026-10-1122026-10-20T20:47:17.0281283Z
2026-10-09 – 2026-10-0912026-10-20T20:47:17.0281283Z
2026-10-08 – 2026-10-0872026-10-20T20:47:17.0281283Z
2026-10-07 – 2026-10-0742026-10-20T20:47:17.0281283Z
2026-10-06 – 2026-10-0612026-10-20T20:47:17.0281283Z
2026-10-03 – 2026-10-0312026-10-20T20:47:17.0281283Z
2026-10-02 – 2026-10-0212026-10-20T20:47:17.0281283Z
2026-09-30 – 2026-09-30102026-10-20T20:47:17.0281283Z
2026-09-29 – 2026-09-2942026-10-20T20:47:17.0281283Z
2026-09-28 – 2026-09-2862026-10-20T20:47:17.0281283Z
2026-09-27 – 2026-09-2722026-10-20T20:47:17.0281283Z
2026-09-26 – 2026-09-2612026-10-20T20:47:17.0281283Z
2026-09-24 – 2026-09-2442026-10-20T20:47:17.0281283Z
2026-09-20 – 2026-09-2032026-10-20T20:47:17.0281283Z
2026-09-18 – 2026-09-1882026-10-20T20:47:17.0281283Z
2026-09-16 – 2026-09-1682026-10-20T20:47:17.0281283Z
2026-09-14 – 2026-09-1442026-10-20T20:47:17.0281283Z
2026-09-13 – 2026-09-1312026-10-20T20:47:17.0281283Z
2026-09-12 – 2026-09-1292026-10-20T20:47:17.0281283Z
2026-09-11 – 2026-09-1112026-10-20T20:47:17.0281283Z
2026-09-10 – 2026-09-1012026-10-20T20:47:17.0281283Z
2026-09-09 – 2026-09-0922026-10-20T20:47:17.0281283Z
2026-09-08 – 2026-09-0812026-10-20T20:47:17.0281283Z
2026-09-07 – 2026-09-0732026-10-20T20:47:17.0281283Z
2026-09-06 – 2026-09-0612026-10-20T20:47:17.0281283Z
2026-09-05 – 2026-09-0562026-10-20T20:47:17.0281283Z
2026-09-03 – 2026-09-0312026-10-20T20:47:17.0281283Z
2026-09-02 – 2026-09-0222026-10-20T20:47:17.0281283Z
2026-09-01 – 2026-09-0122026-10-20T20:47:17.0281283Z
2026-08-31 – 2026-08-3132026-10-20T20:47:17.0281283Z
2026-08-28 – 2026-08-2892026-10-20T20:47:17.0281283Z
2026-08-27 – 2026-08-2792026-10-20T20:47:17.0281283Z
2026-08-24 – 2026-08-24132026-10-20T20:47:17.0281283Z
2026-08-23 – 2026-08-2332026-10-20T20:47:17.0281283Z
2026-08-20 – 2026-08-2012026-10-20T20:47:17.0281283Z
2026-08-18 – 2026-08-18542026-10-20T20:47:17.0281283Z
2026-08-17 – 2026-08-1782026-10-20T20:47:17.0281283Z
2026-08-14 – 2026-08-1442026-10-20T20:47:17.0281283Z
2026-08-13 – 2026-08-1322026-10-20T20:47:17.0281283Z
2026-08-11 – 2026-08-1132026-10-20T20:47:17.0281283Z
2026-08-10 – 2026-08-1072026-10-20T20:47:17.0281283Z
2026-08-09 – 2026-08-0942026-10-20T20:47:17.0281283Z
2026-08-08 – 2026-08-0832026-10-20T20:47:17.0281283Z
2026-08-07 – 2026-08-0712026-10-20T20:47:17.0281283Z
2026-08-06 – 2026-08-0692026-10-20T20:47:17.0281283Z
2026-08-04 – 2026-08-04172026-10-20T20:47:17.0281283Z
2026-08-03 – 2026-08-03272026-10-20T20:47:17.0281283Z
2026-08-02 – 2026-08-0212026-10-20T20:47:17.0281283Z
2026-08-01 – 2026-08-0182026-10-20T20:47:17.0281283Z
2026-07-31 – 2026-07-31172026-10-20T20:47:17.0281283Z
2026-07-30 – 2026-07-3052026-10-20T20:47:17.0281283Z
2026-07-29 – 2026-07-29162026-10-20T20:47:17.0281283Z
2026-07-28 – 2026-07-281072026-10-20T20:47:17.0281283Z
2026-07-27 – 2026-07-2772026-10-20T20:47:17.0281283Z
2026-07-26 – 2026-07-2662026-10-20T20:47:17.0281283Z
2026-07-25 – 2026-07-25272026-10-20T20:47:17.0281283Z
2026-07-24 – 2026-07-242602026-10-20T20:47:17.0281283Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.0.528 Jul 20262

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
mbroekman/aa-loa

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 16:58 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:238a6cdfbb9fa2648d735cfd88492338e3f0251ccc8c88e071a20a428eae5b35