Alliance Auth - Leave of Absence (aa-loa)
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 (likeaa-inactivesoropcalendar) 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
- Go to the Django Admin Panel (
/admin/). - 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.
- Optional: Configure this group in your Discord/TS services to map to a specific
- Navigate to Leave of Absence Configuration -> LOA Config.
- Add a new configuration row.
- Select the
On Leavegroup you just created. - (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 Code | Django Admin Name | Description |
|---|---|---|
aa_loa.basic_access |
Leave of Absence | leave of absence | Can access the LOA module |
Grants access to the LOA module for normal members. Allows them to submit and manage their own LOAs. |
aa_loa.manage_loa |
Leave of Absence | leave of absence | Can manage LOAs for other users and view HR dashboard |
Grants 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!
Release files for aa-loa 0.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aa_loa-0.0.5.tar.gz | 12.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aa_loa-0.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.4 kB
Release files / aa_loa-0.0.5.tar.gz
| Download URL | aa_loa-0.0.5.tar.gz |
|---|---|
| Size | 12.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ea56e62d64697700b7afe459f28a3f21291ed6f0a3dc6928d6c4640b81c38a1d
|
|
BLAKE2b-256 checksum How to use checksums |
c89f51521808bf86d44b58a4dd2c8078e1135c01addf1de043919718931d8343
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.
Transparency logRelease files / aa_loa-0.0.5-py3-none-any.whl
| Download URL | aa_loa-0.0.5-py3-none-any.whl |
|---|---|
| Size | 18.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
28fa014006af43390147cf5a001684961e901890cbe45ac83fdf59608882639b
|
|
BLAKE2b-256 checksum How to use checksums |
e3693eac60c51de29184aad2a139c7509cd57e03d77ab919ac55824ed79528d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.
Transparency log