mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-20 17:52:30 +02:00
Compare commits
8 Commits
2e037190d2
...
57f0661c15
Author | SHA1 | Date | |
---|---|---|---|
|
57f0661c15 | ||
|
54910746e3 | ||
|
07ae68333d | ||
|
69e70a4c9b | ||
|
b55f11ee74 | ||
|
94ee3c0203 | ||
|
25cf329a50 | ||
|
0dd47e72bc |
@ -31,7 +31,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td style="white-space:initial;">
|
<td style="white-space:initial;">
|
||||||
{% for s in t.scopes.all %}
|
{% for s in t.scopes.all %}
|
||||||
<span class="badge bg-secondary">{{ s.name }}</span>
|
<span class="badge text-bg-secondary">{{ s.name }}</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@
|
|||||||
<td style="width: 30%;">{{ alt.corporation_name }}</td>
|
<td style="width: 30%;">{{ alt.corporation_name }}</td>
|
||||||
<td style="width: 30%;">{{ alt.alliance_name|default_if_none:"" }}</td>
|
<td style="width: 30%;">{{ alt.alliance_name|default_if_none:"" }}</td>
|
||||||
<td style="width: 5%;">
|
<td style="width: 5%;">
|
||||||
<a href="https://zkillboard.com/character/{{ alt.character_id }}/" class="badge bg-danger" target="_blank">
|
<a href="https://zkillboard.com/character/{{ alt.character_id }}/" class="badge text-bg-danger" target="_blank">
|
||||||
{% translate "Killboard" %}
|
{% translate "Killboard" %}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
@ -175,7 +175,7 @@
|
|||||||
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member }}"></td>
|
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member }}"></td>
|
||||||
<td>{{ member }}</td>
|
<td>{{ member }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge bg-danger" target="_blank">{% translate "Killboard" %}</a>
|
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge text-bg-danger" target="_blank">{% translate "Killboard" %}</a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ member.character_ownership.user.profile.main_character.character_name }}</td>
|
<td>{{ member.character_ownership.user.profile.main_character.character_name }}</td>
|
||||||
<td>{{ member.character_ownership.user.profile.main_character.corporation_name }}</td>
|
<td>{{ member.character_ownership.user.profile.main_character.corporation_name }}</td>
|
||||||
@ -188,7 +188,7 @@
|
|||||||
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member.character_name }}"></td>
|
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member.character_name }}"></td>
|
||||||
<td>{{ member.character_name }}</td>
|
<td>{{ member.character_name }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge bg-danger" target="_blank">{% translate "Killboard" %}</a>
|
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge text-bg-danger" target="_blank">{% translate "Killboard" %}</a>
|
||||||
</td>
|
</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
@ -219,7 +219,7 @@
|
|||||||
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member.character_name }}"></td>
|
<td><img src="{{ member.portrait_url }}" class="img-circle" alt="{{ member.character_name }}"></td>
|
||||||
<td>{{ member.character_name }}</td>
|
<td>{{ member.character_name }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge bg-danger" target="_blank">
|
<a href="https://zkillboard.com/character/{{ member.character_id }}/" class="badge text-bg-danger" target="_blank">
|
||||||
{% translate "Killboard" %}
|
{% translate "Killboard" %}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
<td><img src="{{ result.1.portrait_url }}" class="img-circle" alt="{{ result.1.character_name }}"></td>
|
<td><img src="{{ result.1.portrait_url }}" class="img-circle" alt="{{ result.1.character_name }}"></td>
|
||||||
<td>{{ result.1.character_name }}</td>
|
<td>{{ result.1.character_name }}</td>
|
||||||
<td >{{ result.0.corp.corporation_name }}</td>
|
<td >{{ result.0.corp.corporation_name }}</td>
|
||||||
<td><a href="https://zkillboard.com/character/{{ result.1.character_id }}/" class="badge bg-danger" target="_blank">{% translate "Killboard" %}</a></td>
|
<td><a href="https://zkillboard.com/character/{{ result.1.character_id }}/" class="badge text-bg-danger" target="_blank">{% translate "Killboard" %}</a></td>
|
||||||
<td>{{ result.1.main_character.character_name }}</td>
|
<td>{{ result.1.main_character.character_name }}</td>
|
||||||
<td>{{ result.1.main_character.corporation_name }}</td>
|
<td>{{ result.1.main_character.corporation_name }}</td>
|
||||||
<td>{{ result.1.main_character.alliance_name }}</td>
|
<td>{{ result.1.main_character.alliance_name }}</td>
|
||||||
|
@ -80,7 +80,7 @@
|
|||||||
{% for link in created_fats %}
|
{% for link in created_fats %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a href="{% url 'fatlink:click' link.hash %}" class="badge bg-primary">
|
<a href="{% url 'fatlink:click' link.hash %}" class="badge text-bg-primary">
|
||||||
{{ link.fleet }}
|
{{ link.fleet }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
@ -97,7 +97,7 @@
|
|||||||
{% for link in fatlinks %}
|
{% for link in fatlinks %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a href="{% url 'fatlink:click' link.hash %}" class="badge bg-primary">{{ link.fleet }}</a>
|
<a href="{% url 'fatlink:click' link.hash %}" class="badge text-bg-primary">{{ link.fleet }}</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">{{ link.creator.username }}</td>
|
<td class="text-center">{{ link.creator.username }}</td>
|
||||||
<td class="text-center">{{ link.fleet }}</td>
|
<td class="text-center">{{ link.fleet }}</td>
|
||||||
|
@ -39,12 +39,12 @@
|
|||||||
|
|
||||||
<td>
|
<td>
|
||||||
{% if group.authgroup.hidden %}
|
{% if group.authgroup.hidden %}
|
||||||
<span class="badge bg-info">{% translate "Hidden" %}</span>
|
<span class="badge text-bg-info">{% translate "Hidden" %}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if group.authgroup.open %}
|
{% if group.authgroup.open %}
|
||||||
<span class="badge bg-success">{% translate "Open" %}</span>
|
<span class="badge text-bg-success">{% translate "Open" %}</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="badge bg-secondary">{% translate "Requestable" %}</span>
|
<span class="badge text-bg-secondary">{% translate "Requestable" %}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'groupmanagement:management' %}">{% translate "Group Management" %}
|
<a class="nav-link" href="{% url 'groupmanagement:management' %}">{% translate "Group Management" %}
|
||||||
{% if req_count %}
|
{% if req_count %}
|
||||||
<span class="badge bg-secondary">{{ req_count }}</span>
|
<span class="badge text-bg-secondary">{{ req_count }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@ -33,8 +33,8 @@
|
|||||||
<th>{% translate "Description" %}</th>
|
<th>{% translate "Description" %}</th>
|
||||||
<th>
|
<th>
|
||||||
{% translate "Leaders" %}<br>
|
{% translate "Leaders" %}<br>
|
||||||
<span class="my-1 me-1 fw-lighter badge bg-primary">{% translate "User" %}</span>
|
<span class="my-1 me-1 fw-lighter badge text-bg-primary">{% translate "User" %}</span>
|
||||||
<span class="my-1 me-1 fw-lighter badge bg-secondary">{% translate "Group" %}</span>
|
<span class="my-1 me-1 fw-lighter badge text-bg-secondary">{% translate "Group" %}</span>
|
||||||
</th>
|
</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -53,13 +53,13 @@
|
|||||||
{% if g.group.authgroup.group_leaders.all.count %}
|
{% if g.group.authgroup.group_leaders.all.count %}
|
||||||
{% for leader in g.group.authgroup.group_leaders.all %}
|
{% for leader in g.group.authgroup.group_leaders.all %}
|
||||||
{% if leader.profile.main_character %}
|
{% if leader.profile.main_character %}
|
||||||
<span class="my-1 me-1 badge bg-primary">{{leader.profile.main_character}}</span>
|
<span class="my-1 me-1 badge text-bg-primary">{{leader.profile.main_character}}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if g.group.authgroup.group_leader_groups.all.count %}
|
{% if g.group.authgroup.group_leader_groups.all.count %}
|
||||||
{% for group in g.group.authgroup.group_leader_groups.all %}
|
{% for group in g.group.authgroup.group_leader_groups.all %}
|
||||||
<span class="my-1 me-1 badge bg-secondary">{{group.name}}</span>
|
<span class="my-1 me-1 badge text-bg-secondary">{{group.name}}</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
{% translate "Join Requests" %}
|
{% translate "Join Requests" %}
|
||||||
|
|
||||||
{% if acceptrequests %}
|
{% if acceptrequests %}
|
||||||
<span class="badge bg-secondary">{{ acceptrequests|length }}</span>
|
<span class="badge text-bg-secondary">{{ acceptrequests|length }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@ -30,7 +30,7 @@
|
|||||||
{% translate "Leave Requests" %}
|
{% translate "Leave Requests" %}
|
||||||
|
|
||||||
{% if leaverequests %}
|
{% if leaverequests %}
|
||||||
<span class="badge bg-secondary">{{ leaverequests|length }}</span>
|
<span class="badge text-bg-secondary">{{ leaverequests|length }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -43,11 +43,11 @@
|
|||||||
<td class="text-center">{{ personal_app.form.corp.corporation_name }}</td>
|
<td class="text-center">{{ personal_app.form.corp.corporation_name }}</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
{% if personal_app.approved == None %}
|
{% if personal_app.approved == None %}
|
||||||
<div class="badge bg-warning">{% translate "Pending" %}</div>
|
<div class="badge text-bg-warning">{% translate "Pending" %}</div>
|
||||||
{% elif personal_app.approved == True %}
|
{% elif personal_app.approved == True %}
|
||||||
<div class="badge bg-success">{% translate "Approved" %}</div>
|
<div class="badge text-bg-success">{% translate "Approved" %}</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-danger">{% translate "Rejected" %}</div>
|
<div class="badge text-bg-danger">{% translate "Rejected" %}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
@ -133,14 +133,14 @@
|
|||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
{% if app.approved == None %}
|
{% if app.approved == None %}
|
||||||
{% if app.reviewer_str %}
|
{% if app.reviewer_str %}
|
||||||
<div class="badge bg-info">{% translate "Reviewer:" %} {{ app.reviewer_str }}</div>
|
<div class="badge text-bg-info">{% translate "Reviewer:" %} {{ app.reviewer_str }}</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-warning">{% translate "Pending" %}</div>
|
<div class="badge text-bg-warning">{% translate "Pending" %}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif app.approved == True %}
|
{% elif app.approved == True %}
|
||||||
<div class="badge bg-success">{% translate "Approved" %}</div>
|
<div class="badge text-bg-success">{% translate "Approved" %}</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-danger">{% translate "Rejected" %}</div>
|
<div class="badge text-bg-danger">{% translate "Rejected" %}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
@ -177,14 +177,14 @@
|
|||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
{% if app.approved == None %}
|
{% if app.approved == None %}
|
||||||
{% if app.reviewer_str %}
|
{% if app.reviewer_str %}
|
||||||
<div class="badge bg-info">{% translate "Reviewer:" %} {{ app.reviewer_str }}</div>
|
<div class="badge text-bg-info">{% translate "Reviewer:" %} {{ app.reviewer_str }}</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-warning">{% translate "Pending" %}</div>
|
<div class="badge text-bg-warning">{% translate "Pending" %}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif app.approved == True %}
|
{% elif app.approved == True %}
|
||||||
<div class="badge bg-success">{% translate "Approved" %}</div>
|
<div class="badge text-bg-success">{% translate "Approved" %}</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-danger">{% translate "Rejected" %}</div>
|
<div class="badge text-bg-danger">{% translate "Rejected" %}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
|
@ -43,11 +43,11 @@
|
|||||||
<td>{{ app.form.corp }}</td>
|
<td>{{ app.form.corp }}</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
{% if app.approved == None %}
|
{% if app.approved == None %}
|
||||||
<div class="badge bg-warning">{% translate "Pending" %}</div>
|
<div class="badge text-bg-warning">{% translate "Pending" %}</div>
|
||||||
{% elif app.approved == True %}
|
{% elif app.approved == True %}
|
||||||
<div class="badge bg-success">{% translate "Approved" %}</div>
|
<div class="badge text-bg-success">{% translate "Approved" %}</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-danger">{% translate "Rejected" %}</div>
|
<div class="badge text-bg-danger">{% translate "Rejected" %}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="text-end">
|
<td class="text-end">
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header bg-info">
|
<div class="card-header text-bg-info">
|
||||||
<div class="card-title mb-0">{% translate "Applicant" %}</div>
|
<div class="card-title mb-0">{% translate "Applicant" %}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -50,7 +50,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header bg-info">
|
<div class="card-header text-bg-info">
|
||||||
<div class="card-title mb-0">{% translate "Characters" %}</div>
|
<div class="card-title mb-0">{% translate "Characters" %}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
{% if item.count >= 1 %}
|
{% if item.count >= 1 %}
|
||||||
<span class="badge bg-primary m-2 align-self-center{% if not item.is_folder %} me-2{% endif %}">
|
<span class="badge text-bg-primary m-2 align-self-center{% if not item.is_folder %} me-2{% endif %}">
|
||||||
{{ item.count }}
|
{{ item.count }}
|
||||||
</span>
|
</span>
|
||||||
{% elif item.url %}
|
{% elif item.url %}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<div class="col-auto px-0">
|
<div class="col-auto px-0">
|
||||||
<div class="collapse collapse-horizontal" tabindex="-1" id="sidebar">
|
<div class="collapse collapse-horizontal" tabindex="-1" id="sidebar">
|
||||||
<div>
|
<div>
|
||||||
<div class="nav-padding navbar-dark bg-dark text-light px-0 d-flex flex-column overflow-hidden vh-100 {% if not user.is_authenticated %}position-relative{% endif %}">
|
<div class="nav-padding navbar-dark text-bg-dark px-0 d-flex flex-column overflow-hidden vh-100 {% if not user.is_authenticated %}position-relative{% endif %}">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<ul id="sidebar-menu" class="navbar-nav flex-column mb-auto overflow-auto pt-2">
|
<ul id="sidebar-menu" class="navbar-nav flex-column mb-auto overflow-auto pt-2">
|
||||||
<li class="d-flex flex-wrap m-2 p-2 pt-0 pb-0 mt-0 mb-0 me-0 pe-0">
|
<li class="d-flex flex-wrap m-2 p-2 pt-0 pb-0 mt-0 mb-0 me-0 pe-0">
|
||||||
|
@ -15,14 +15,14 @@
|
|||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link active" id="unread-tab" data-bs-toggle="tab" data-bs-target="#unread" type="button" role="tab" aria-controls="unread" aria-selected="true">
|
<a class="nav-link active" id="unread-tab" data-bs-toggle="tab" data-bs-target="#unread" type="button" role="tab" aria-controls="unread" aria-selected="true">
|
||||||
{% translate "Unread" %}
|
{% translate "Unread" %}
|
||||||
<span class="badge bg-secondary">{{ unread|length }}</span>
|
<span class="badge text-bg-secondary">{{ unread|length }}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" id="read-tab" data-bs-toggle="tab" data-bs-target="#read" type="button" role="tab" aria-controls="read" aria-selected="false">
|
<a class="nav-link" id="read-tab" data-bs-toggle="tab" data-bs-target="#read" type="button" role="tab" aria-controls="read" aria-selected="false">
|
||||||
{% translate "Read" %}
|
{% translate "Read" %}
|
||||||
<span class="badge bg-secondary">{{ read|length }}</span>
|
<span class="badge text-bg-secondary">{{ read|length }}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card border-{{ notif.level }}">
|
<div class="card border-{{ notif.level }}">
|
||||||
<div class="card-header bg-{{ notif.level }}">
|
<div class="card-header text-bg-{{ notif.level }}">
|
||||||
{{ notif.timestamp }}
|
{{ notif.timestamp }}
|
||||||
{{ notif.title }}
|
{{ notif.title }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div>
|
<div>
|
||||||
<div class="text-center mb-3">
|
<div class="text-center mb-3">
|
||||||
<div class="badge bg-primary text-start">
|
<div class="badge text-bg-primary text-start">
|
||||||
<b>{% translate "Current EVE time:" %}</b>
|
<b>{% translate "Current EVE time:" %}</b>
|
||||||
<span id="current-time"></span>
|
<span id="current-time"></span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -26,7 +26,7 @@ app.conf.task_default_priority = 5 # anything called with the task.delay() will
|
|||||||
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
|
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
|
||||||
|
|
||||||
app.conf.ONCE = {
|
app.conf.ONCE = {
|
||||||
'backend': 'allianceauth.services.tasks.DjangoBackend',
|
'backend': 'allianceauth.services.celery_once.backends.DjangoBackend',
|
||||||
'settings': {}
|
'settings': {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
0
allianceauth/services/celery_once/__init__.py
Normal file
0
allianceauth/services/celery_once/__init__.py
Normal file
19
allianceauth/services/celery_once/backends.py
Normal file
19
allianceauth/services/celery_once/backends.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from celery_once import AlreadyQueued
|
||||||
|
from django.core.cache import cache
|
||||||
|
|
||||||
|
|
||||||
|
class DjangoBackend:
|
||||||
|
"""Locking backend for celery once."""
|
||||||
|
|
||||||
|
def __init__(self, settings):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def raise_or_lock(key, timeout):
|
||||||
|
acquired = cache.add(key=key, value="lock", timeout=timeout)
|
||||||
|
if not acquired:
|
||||||
|
raise AlreadyQueued(int(cache.ttl(key)))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clear_lock(key):
|
||||||
|
return cache.delete(key)
|
8
allianceauth/services/celery_once/tasks.py
Normal file
8
allianceauth/services/celery_once/tasks.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from celery_once import QueueOnce as BaseTask
|
||||||
|
|
||||||
|
|
||||||
|
class QueueOnce(BaseTask):
|
||||||
|
"""QueueOnce class with custom defaults."""
|
||||||
|
|
||||||
|
once = BaseTask.once
|
||||||
|
once["graceful"] = True
|
47
allianceauth/services/celery_once/tests.py
Normal file
47
allianceauth/services/celery_once/tests.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
from celery_once import AlreadyQueued
|
||||||
|
from django.core.cache import cache
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from allianceauth.services.celery_once.backends import DjangoBackend
|
||||||
|
|
||||||
|
|
||||||
|
class TestDjangoBackend(TestCase):
|
||||||
|
TEST_KEY = "my-django-backend-test-key"
|
||||||
|
TIMEOUT = 1800
|
||||||
|
|
||||||
|
def setUp(self) -> None:
|
||||||
|
cache.delete(self.TEST_KEY)
|
||||||
|
self.backend = DjangoBackend(dict())
|
||||||
|
|
||||||
|
def test_can_get_lock(self):
|
||||||
|
"""
|
||||||
|
when lock can be acquired
|
||||||
|
then set it with timeout
|
||||||
|
"""
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
self.assertIsNotNone(cache.get(self.TEST_KEY))
|
||||||
|
self.assertAlmostEqual(cache.ttl(self.TEST_KEY), self.TIMEOUT, delta=2)
|
||||||
|
|
||||||
|
def test_when_cant_get_lock_raise_exception(self):
|
||||||
|
"""
|
||||||
|
when lock can bot be acquired
|
||||||
|
then raise AlreadyQueued exception with countdown
|
||||||
|
"""
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
except Exception as ex:
|
||||||
|
self.assertIsInstance(ex, AlreadyQueued)
|
||||||
|
self.assertAlmostEqual(ex.countdown, self.TIMEOUT, delta=2)
|
||||||
|
|
||||||
|
def test_can_clear_lock(self):
|
||||||
|
"""
|
||||||
|
when a lock exists
|
||||||
|
then can get a new lock after clearing it
|
||||||
|
"""
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
|
||||||
|
self.backend.clear_lock(self.TEST_KEY)
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
self.assertIsNotNone(cache.get(self.TEST_KEY))
|
@ -14,7 +14,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block active %}
|
{% block active %}
|
||||||
<span class="badge bg-success">
|
<span class="badge text-bg-success">
|
||||||
{% translate "SSO login active" %}
|
{% translate "SSO login active" %}
|
||||||
</span>
|
</span>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -3,33 +3,11 @@ import logging
|
|||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from .hooks import ServicesHook
|
from .hooks import ServicesHook
|
||||||
from celery_once import QueueOnce as BaseTask, AlreadyQueued
|
from .celery_once.tasks import QueueOnce # noqa: F401 - for backwards compatibility
|
||||||
from django.core.cache import cache
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class QueueOnce(BaseTask):
|
|
||||||
once = BaseTask.once
|
|
||||||
once['graceful'] = True
|
|
||||||
|
|
||||||
|
|
||||||
class DjangoBackend:
|
|
||||||
def __init__(self, settings):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def raise_or_lock(key, timeout):
|
|
||||||
acquired = cache.add(key=key, value="lock", timeout=timeout)
|
|
||||||
if not acquired:
|
|
||||||
raise AlreadyQueued(int(cache.ttl(key)))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def clear_lock(key):
|
|
||||||
return cache.delete(key)
|
|
||||||
|
|
||||||
|
|
||||||
@shared_task(bind=True)
|
@shared_task(bind=True)
|
||||||
def validate_services(self, pk):
|
def validate_services(self, pk):
|
||||||
user = User.objects.get(pk=pk)
|
user = User.objects.get(pk=pk)
|
||||||
@ -38,7 +16,7 @@ def validate_services(self, pk):
|
|||||||
for svc in ServicesHook.get_services():
|
for svc in ServicesHook.get_services():
|
||||||
try:
|
try:
|
||||||
svc.validate_user(user)
|
svc.validate_user(user)
|
||||||
except:
|
except Exception:
|
||||||
logger.exception(f'Exception running validate_user for services module {svc} on user {user}')
|
logger.exception(f'Exception running validate_user for services module {svc} on user {user}')
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,15 +1,10 @@
|
|||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from celery_once import AlreadyQueued
|
|
||||||
|
|
||||||
from django.core.cache import cache
|
|
||||||
from django.test import override_settings, TestCase
|
from django.test import override_settings, TestCase
|
||||||
|
|
||||||
from allianceauth.tests.auth_utils import AuthUtils
|
from allianceauth.tests.auth_utils import AuthUtils
|
||||||
from allianceauth.services.tasks import validate_services, update_groups_for_user
|
from allianceauth.services.tasks import validate_services, update_groups_for_user
|
||||||
|
|
||||||
from ..tasks import DjangoBackend
|
|
||||||
|
|
||||||
|
|
||||||
@override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)
|
@override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)
|
||||||
class ServicesTasksTestCase(TestCase):
|
class ServicesTasksTestCase(TestCase):
|
||||||
@ -46,46 +41,3 @@ class ServicesTasksTestCase(TestCase):
|
|||||||
self.assertTrue(svc.update_groups.called)
|
self.assertTrue(svc.update_groups.called)
|
||||||
args, _ = svc.update_groups.call_args
|
args, _ = svc.update_groups.call_args
|
||||||
self.assertEqual(self.member, args[0]) # Assert correct user
|
self.assertEqual(self.member, args[0]) # Assert correct user
|
||||||
|
|
||||||
|
|
||||||
class TestDjangoBackend(TestCase):
|
|
||||||
|
|
||||||
TEST_KEY = "my-django-backend-test-key"
|
|
||||||
TIMEOUT = 1800
|
|
||||||
|
|
||||||
def setUp(self) -> None:
|
|
||||||
cache.delete(self.TEST_KEY)
|
|
||||||
self.backend = DjangoBackend(dict())
|
|
||||||
|
|
||||||
def test_can_get_lock(self):
|
|
||||||
"""
|
|
||||||
when lock can be acquired
|
|
||||||
then set it with timetout
|
|
||||||
"""
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
self.assertIsNotNone(cache.get(self.TEST_KEY))
|
|
||||||
self.assertAlmostEqual(cache.ttl(self.TEST_KEY), self.TIMEOUT, delta=2)
|
|
||||||
|
|
||||||
def test_when_cant_get_lock_raise_exception(self):
|
|
||||||
"""
|
|
||||||
when lock can bot be acquired
|
|
||||||
then raise AlreadyQueued exception with countdown
|
|
||||||
"""
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
except Exception as ex:
|
|
||||||
self.assertIsInstance(ex, AlreadyQueued)
|
|
||||||
self.assertAlmostEqual(ex.countdown, self.TIMEOUT, delta=2)
|
|
||||||
|
|
||||||
def test_can_clear_lock(self):
|
|
||||||
"""
|
|
||||||
when a lock exists
|
|
||||||
then can get a new lock after clearing it
|
|
||||||
"""
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
|
|
||||||
self.backend.clear_lock(self.TEST_KEY)
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
self.assertIsNotNone(cache.get(self.TEST_KEY))
|
|
||||||
|
@ -92,11 +92,14 @@ ESC to cancel{% endblocktranslate %}" id="blah"></i></th>
|
|||||||
{{ srpfleetrequest.character.alliance.alliance_ticker }}
|
{{ srpfleetrequest.character.alliance.alliance_ticker }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
[{{ srpfleetrequest.character.corporation.corporation_ticker }}]
|
[{{ srpfleetrequest.character.corporation.corporation_ticker }}]
|
||||||
{{ srpfleetrequest.character.character_name }} <i class="copy-text-fa-icon far fa-copy" data-clipboard-text="{{ srpfleetrequest.character.character_name }}"></i>
|
{{ srpfleetrequest.character.character_name }}
|
||||||
|
<sup>
|
||||||
|
<i class="copy-text-fa-icon far fa-copy" data-clipboard-text="{{ srpfleetrequest.character.character_name }}"></i>
|
||||||
|
</sup>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ srpfleetrequest.killboard_link }}"
|
<a href="{{ srpfleetrequest.killboard_link }}"
|
||||||
target="_blank" class="badge bg-warning">{% translate "Link" %}</a>
|
target="_blank" class="badge text-bg-warning">{% translate "Link" %}</a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ srpfleetrequest.additional_info }}</td>
|
<td>{{ srpfleetrequest.additional_info }}</td>
|
||||||
<td>{{ srpfleetrequest.srp_ship_name }}</td>
|
<td>{{ srpfleetrequest.srp_ship_name }}</td>
|
||||||
@ -105,15 +108,15 @@ ESC to cancel{% endblocktranslate %}" id="blah"></i></th>
|
|||||||
<td data-sort="{{ srpfleetrequest.post_time | date:"Y-m-d H:i" }}">{{ srpfleetrequest.post_time | date:"Y-M-d H:i" }}</td>
|
<td data-sort="{{ srpfleetrequest.post_time | date:"Y-m-d H:i" }}">{{ srpfleetrequest.post_time | date:"Y-M-d H:i" }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% if srpfleetrequest.srp_status == "Approved" %}
|
{% if srpfleetrequest.srp_status == "Approved" %}
|
||||||
<div class="badge bg-success">
|
<div class="badge text-bg-success">
|
||||||
{% translate "Approved" %}
|
{% translate "Approved" %}
|
||||||
</div>
|
</div>
|
||||||
{% elif srpfleetrequest.srp_status == "Rejected" %}
|
{% elif srpfleetrequest.srp_status == "Rejected" %}
|
||||||
<div class="badge bg-danger">
|
<div class="badge text-bg-danger">
|
||||||
{% translate "Rejected" %}
|
{% translate "Rejected" %}
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-warning">
|
<div class="badge text-bg-warning">
|
||||||
{% translate "Pending" %}
|
{% translate "Pending" %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -239,13 +242,19 @@ ESC to cancel{% endblocktranslate %}" id="blah"></i></th>
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Non-Orderable columns
|
||||||
|
const nonOrderableTargets = [1];
|
||||||
|
{% if perms.auth.srp_management %}
|
||||||
|
nonOrderableTargets.push(8);
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
elementTableSrpList.DataTable({
|
elementTableSrpList.DataTable({
|
||||||
language: {url: '{{ DT_LANG_PATH }}'},
|
language: {url: '{{ DT_LANG_PATH }}'},
|
||||||
"order": [[ 6, "asc" ]],
|
"order": [[ 6, "asc" ]],
|
||||||
"paging": false,
|
"paging": false,
|
||||||
"columnDefs": [
|
"columnDefs": [
|
||||||
{
|
{
|
||||||
"targets": [1, 8],
|
"targets": nonOrderableTargets,
|
||||||
"orderable": false
|
"orderable": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -61,20 +61,20 @@
|
|||||||
<td>{{ srpfleet.fleet_time | date:"Y-m-d H:i" }}</td>
|
<td>{{ srpfleet.fleet_time | date:"Y-m-d H:i" }}</td>
|
||||||
<td>{{ srpfleet.fleet_doctrine }}</td>
|
<td>{{ srpfleet.fleet_doctrine }}</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="badge bg-success">
|
<div class="badge text-bg-success">
|
||||||
{{ srpfleet.fleet_commander.character_name }}
|
{{ srpfleet.fleet_commander.character_name }}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% if srpfleet.fleet_srp_aar_link %}
|
{% if srpfleet.fleet_srp_aar_link %}
|
||||||
<a href="{{ srpfleet.fleet_srp_aar_link }}" target="_blank" class="badge bg-primary">{% translate "Link" %}</a>
|
<a href="{{ srpfleet.fleet_srp_aar_link }}" target="_blank" class="badge text-bg-primary">{% translate "Link" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% if srpfleet.fleet_srp_code %}
|
{% if srpfleet.fleet_srp_code %}
|
||||||
<a class="badge bg-warning" href="{% url 'srp:request' srpfleet.fleet_srp_code %}">{{ srpfleet.fleet_srp_code }}</a>
|
<a class="badge text-bg-warning" href="{% url 'srp:request' srpfleet.fleet_srp_code %}">{{ srpfleet.fleet_srp_code }}</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-danger">
|
<div class="badge text-bg-danger">
|
||||||
{% translate "Disabled" %}
|
{% translate "Disabled" %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -83,17 +83,17 @@
|
|||||||
|
|
||||||
<td>
|
<td>
|
||||||
{% if srpfleet.fleet_srp_status == "" %}
|
{% if srpfleet.fleet_srp_status == "" %}
|
||||||
<div class="badge bg-warning">
|
<div class="badge text-bg-warning">
|
||||||
{% translate "Pending" %}
|
{% translate "Pending" %}
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="badge bg-success">
|
<div class="badge text-bg-success">
|
||||||
{% translate "Completed" %}
|
{% translate "Completed" %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="badge bg-warning">{{ srpfleet.pending_requests }}</div>
|
<div class="badge text-bg-warning">{{ srpfleet.pending_requests }}</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-end text-nowrap">
|
<td class="text-end text-nowrap">
|
||||||
<a href="{% url 'srp:fleet' srpfleet.id %}" class="btn btn-primary btn-sm m-1" title="View">
|
<a href="{% url 'srp:fleet' srpfleet.id %}" class="btn btn-primary btn-sm m-1" title="View">
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{% load admin_status %}
|
{% load admin_status %}
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="progress-bar bg-{{ level }} task-status-progress-bar"
|
class="progress-bar text-bg-{{ level }} task-status-progress-bar"
|
||||||
role="progressbar"
|
role="progressbar"
|
||||||
aria-valuenow="{% decimal_widthratio tasks_count tasks_total 100 %}"
|
aria-valuenow="{% decimal_widthratio tasks_count tasks_total 100 %}"
|
||||||
aria-valuemin="0"
|
aria-valuemin="0"
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
{% for notif in notifications %}
|
{% for notif in notifications %}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<span class="badge bg-success me-2">{% translate "Open" %}</span>
|
<span class="badge text-bg-success me-2">{% translate "Open" %}</span>
|
||||||
<a href="{{ notif.web_url }}" target="_blank">#{{ notif.iid }} {{ notif.title }}</a>
|
<a href="{{ notif.web_url }}" target="_blank">#{{ notif.iid }} {{ notif.title }}</a>
|
||||||
</li>
|
</li>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
@ -24,13 +24,13 @@
|
|||||||
|
|
||||||
<div class="text-end pt-3">
|
<div class="text-end pt-3">
|
||||||
<a href="https://gitlab.com/allianceauth/allianceauth/issues" target="_blank" class="me-1 text-decoration-none">
|
<a href="https://gitlab.com/allianceauth/allianceauth/issues" target="_blank" class="me-1 text-decoration-none">
|
||||||
<span class="badge" style="background-color: rgb(230 83 40);">
|
<span class="badge text-bg-danger">
|
||||||
<i class="fab fa-gitlab" aria-hidden="true"></i>
|
<i class="fab fa-gitlab" aria-hidden="true"></i>
|
||||||
{% translate 'Powered by GitLab' %}
|
{% translate 'Powered by GitLab' %}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://discord.com/invite/fjnHAmk" target="_blank" class="text-decoration-none">
|
<a href="https://discord.com/invite/fjnHAmk" target="_blank" class="text-decoration-none">
|
||||||
<span class="badge" style="background-color: rgb(110 133 211);">
|
<span class="badge text-bg-info">
|
||||||
<i class="fab fa-discord" aria-hidden="true"></i>
|
<i class="fab fa-discord" aria-hidden="true"></i>
|
||||||
{% translate 'Support Discord' %}
|
{% translate 'Support Discord' %}
|
||||||
</span>
|
</span>
|
||||||
@ -58,7 +58,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="list-group-item bg-{% if latest_patch %}success{% elif latest_minor %}warning{% else %}danger{% endif %} w-100">
|
<li class="list-group-item text-bg-{% if latest_patch %}success{% elif latest_minor %}warning{% else %}danger{% endif %} w-100">
|
||||||
<a class="btn h-100 w-100" href="https://gitlab.com/allianceauth/allianceauth/-/releases/v{{ latest_patch_version }}">
|
<a class="btn h-100 w-100" href="https://gitlab.com/allianceauth/allianceauth/-/releases/v{{ latest_patch_version }}">
|
||||||
<h5 class="list-group-item-heading">{% translate "Latest Stable" %}</h5>
|
<h5 class="list-group-item-heading">{% translate "Latest Stable" %}</h5>
|
||||||
|
|
||||||
@ -71,7 +71,7 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% if latest_beta %}
|
{% if latest_beta %}
|
||||||
<li class="list-group-item bg-info w-100">
|
<li class="list-group-item text-bg-info w-100">
|
||||||
<a class="btn h-100 w-100" href="https://gitlab.com/allianceauth/allianceauth/-/releases/v{{ latest_beta_version }}">
|
<a class="btn h-100 w-100" href="https://gitlab.com/allianceauth/allianceauth/-/releases/v{{ latest_beta_version }}">
|
||||||
<h5 class="list-group-item-heading">{% translate "Latest Pre-Release" %}</h5>
|
<h5 class="list-group-item-heading">{% translate "Latest Pre-Release" %}</h5>
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<!-- Top Menu, Blocks don't work in "include" tagged views -->
|
<!-- Top Menu, Blocks don't work in "include" tagged views -->
|
||||||
<nav class="navbar navbar-expand-lg navbar-dark fixed-top bg-primary">
|
<nav class="navbar navbar-expand-lg navbar-dark fixed-top text-bg-primary">
|
||||||
<div class="container-fluid justify-content-start">
|
<div class="container-fluid justify-content-start">
|
||||||
<a class="navbar-brand" data-bs-toggle="collapse" data-bs-target="#sidebar" role="button">
|
<a class="navbar-brand" data-bs-toggle="collapse" data-bs-target="#sidebar" role="button">
|
||||||
<i class="fa-solid fa-bars ms-2 me-2"></i>
|
<i class="fa-solid fa-bars ms-2 me-2"></i>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="{% url 'authentication:add_character' %}" class="nav-link" title="{% translate 'Add Character' %}">
|
<a href="{% url 'authentication:add_character' %}" class="nav-link" title="{% translate 'Add Character' %}">
|
||||||
<i class="fa-solid fa-plus"></i>
|
<i class="fa-solid fa-user-plus"></i>
|
||||||
<span class="d-lg-none d-md-inline m-2">{% translate "Add Character" %}</span>
|
<span class="d-lg-none d-md-inline m-2">{% translate "Add Character" %}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -30,17 +30,17 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="text-center" nowrap>
|
<td class="text-center" nowrap>
|
||||||
{% if timer.objective == "Hostile" %}
|
{% if timer.objective == "Hostile" %}
|
||||||
<div class="badge bg-danger">
|
<div class="badge text-bg-danger">
|
||||||
{% translate "Hostile" %}
|
{% translate "Hostile" %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if timer.objective == "Friendly" %}
|
{% if timer.objective == "Friendly" %}
|
||||||
<div class="badge bg-primary">
|
<div class="badge text-bg-primary">
|
||||||
{% translate "Friendly" %}
|
{% translate "Friendly" %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if timer.objective == "Neutral" %}
|
{% if timer.objective == "Neutral" %}
|
||||||
<div class="badge bg-secondary">
|
<div class="badge text-bg-secondary">
|
||||||
{% translate "Neutral" %}
|
{% translate "Neutral" %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for timer in timers %}
|
{% for timer in timers %}
|
||||||
<tr class="{% if timer.important == True %}bg-danger bg-opacity-25{% else %}bg-info bg-opacity-25{% endif %}">
|
<tr class="{% if timer.important == True %}text-bg-danger bg-opacity-50{% else %}text-bg-info bg-opacity-50{% endif %}">
|
||||||
<td style="width: 150px;" class="text-center">
|
<td style="width: 150px;" class="text-center">
|
||||||
{{ timer.details }}
|
{{ timer.details }}
|
||||||
|
|
||||||
@ -34,15 +34,15 @@
|
|||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
{% comment %} Objective: Hostile (BG: Danger) {% endcomment %}
|
{% comment %} Objective: Hostile (BG: Danger) {% endcomment %}
|
||||||
{% if timer.objective == "Hostile" %}
|
{% if timer.objective == "Hostile" %}
|
||||||
<div class="badge bg-danger">
|
<div class="badge text-bg-danger">
|
||||||
|
|
||||||
{% comment %} Objective: Friendly (BG: Primare) {% endcomment %}
|
{% comment %} Objective: Friendly (BG: Primare) {% endcomment %}
|
||||||
{% elif timer.objective == "Friendly" %}
|
{% elif timer.objective == "Friendly" %}
|
||||||
<div class="badge bg-primary">
|
<div class="badge text-bg-primary">
|
||||||
|
|
||||||
{% comment %} Objective: Neutral (BG: Secondary) {% endcomment %}
|
{% comment %} Objective: Neutral (BG: Secondary) {% endcomment %}
|
||||||
{% elif timer.objective == "Neutral" %}
|
{% elif timer.objective == "Neutral" %}
|
||||||
<div class="badge bg-secondary">
|
<div class="badge text-bg-secondary">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ timer.get_objective_display }}
|
{{ timer.get_objective_display }}
|
||||||
@ -54,7 +54,7 @@
|
|||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<div class="badge bg-{{ timer.bg_modifier }}">
|
<div class="badge text-bg-{{ timer.bg_modifier }}">
|
||||||
{{ timer.get_structure_display }}
|
{{ timer.get_structure_display }}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="allianceauth-timerboard">
|
<div class="allianceauth-timerboard">
|
||||||
<div class="col-lg-12 text-center mb-3">
|
<div class="col-lg-12 text-center mb-3">
|
||||||
<div class="badge bg-primary text-start">
|
<div class="badge text-bg-primary text-start">
|
||||||
<span>{% translate "Current EVE time:" %}</span>
|
<span>{% translate "Current EVE time:" %}</span>
|
||||||
<span id="current-time"></span>
|
<span id="current-time"></span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -26,7 +26,7 @@ app.conf.task_default_priority = 5 # anything called with the task.delay() will
|
|||||||
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
|
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
|
||||||
|
|
||||||
app.conf.ONCE = {
|
app.conf.ONCE = {
|
||||||
'backend': 'allianceauth.services.tasks.DjangoBackend',
|
'backend': 'allianceauth.services.celery_once.backends.DjangoBackend',
|
||||||
'settings': {}
|
'settings': {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user