Compare commits
No commits in common. "5ac11e16e86886fbd819b9f76898dd99fd430d72" and "7e978dd657293d34c65bd43491e70473f7ad04a5" have entirely different histories.
5ac11e16e8
...
7e978dd657
15
.drone.yml
15
.drone.yml
|
@ -4,14 +4,10 @@ kind: pipeline
|
|||
type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: check style
|
||||
image: python:3.12-alpine
|
||||
commands:
|
||||
- pip install black isort
|
||||
- black --check .
|
||||
- isort -c .
|
||||
clone:
|
||||
disable: yes
|
||||
|
||||
steps:
|
||||
- name: deploy staging
|
||||
image: ghcr.io/appleboy/drone-ssh
|
||||
environment:
|
||||
|
@ -30,8 +26,6 @@ steps:
|
|||
when:
|
||||
branch:
|
||||
- main
|
||||
event:
|
||||
- push
|
||||
|
||||
- name: deploy production
|
||||
image: ghcr.io/appleboy/drone-ssh
|
||||
|
@ -41,10 +35,7 @@ steps:
|
|||
when:
|
||||
branch:
|
||||
- live
|
||||
event:
|
||||
- push
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
- push
|
||||
|
|
|
@ -17,6 +17,7 @@ django-phonenumber-field==6.1.0
|
|||
icalendar==4.0.9
|
||||
idna==3.3
|
||||
kombu==5.2.4
|
||||
librabbitmq==2.0.0
|
||||
packaging==21.3
|
||||
persisting-theory==1.0
|
||||
phonenumbers==8.12.47
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.contrib import admin
|
||||
from django.contrib.admin import DateFieldListFilter
|
||||
|
||||
from .models import Helper, LoginToken, Message, Room, Shift, ShiftRegistration
|
||||
from .models import Room, Shift, Helper, ShiftRegistration, Message, LoginToken
|
||||
|
||||
|
||||
@admin.register(Room)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from django.conf import settings
|
||||
|
||||
from .models import LoginToken
|
||||
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import datetime
|
||||
|
||||
import phonenumbers
|
||||
from dynamic_preferences import types
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
from dynamic_preferences import types
|
||||
import phonenumbers
|
||||
import datetime
|
||||
|
||||
helper = types.Section("helper")
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
from .models import Helper
|
||||
from phonenumber_field.formfields import PhoneNumberField
|
||||
from phonenumber_field.validators import validate_international_phonenumber
|
||||
|
||||
from .models import Helper
|
||||
from django.core.exceptions import ValidationError
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
||||
global_preferences = global_preferences_registry.manager()
|
||||
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
# Generated by Django 4.0.4 on 2022-04-27 14:11
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import phonenumber_field.modelfields
|
||||
from django.db import migrations, models
|
||||
|
||||
import shiftregister.app.models
|
||||
|
||||
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
import secrets
|
||||
from datetime import timedelta
|
||||
|
||||
from django.db import models
|
||||
from django.db.models import Case, Count, ExpressionWrapper, F, Q, When
|
||||
import secrets
|
||||
from django.shortcuts import reverse
|
||||
from django.template import Context, Template
|
||||
from datetime import timedelta
|
||||
from django.utils import timezone
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
from django.db.models import F, Count, Q, ExpressionWrapper, Case, When
|
||||
from django.template import Context, Template
|
||||
from phonenumber_field.modelfields import PhoneNumberField
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
||||
global_preferences = global_preferences_registry.manager()
|
||||
|
||||
|
|
|
@ -2,9 +2,7 @@ from django.db.models.signals import pre_save
|
|||
from django.dispatch import receiver
|
||||
from django.shortcuts import reverse
|
||||
from django.template import Context, Template
|
||||
|
||||
from shiftregister.core.signals import populate_nav
|
||||
|
||||
from .models import Message, Shift
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from datetime import timezone
|
||||
|
||||
import requests
|
||||
from django.conf import settings
|
||||
import requests
|
||||
|
||||
|
||||
BASE_URL = "https://api.sipgate.com/v2"
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import requests
|
||||
from django.conf import settings
|
||||
from phonenumber_field.phonenumber import PhoneNumber
|
||||
import requests
|
||||
|
||||
|
||||
BASE_URL = "https://api.sipgate.com/v2"
|
||||
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
import sentry_sdk
|
||||
from celery import shared_task
|
||||
from .models import Message, ShiftRegistration
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from django.utils import timezone
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
||||
from .models import Message, ShiftRegistration
|
||||
from .sipgate.sms import send as send_sms
|
||||
import sentry_sdk
|
||||
|
||||
global_preferences = global_preferences_registry.manager()
|
||||
|
||||
|
|
|
@ -1,20 +1,18 @@
|
|||
import datetime
|
||||
import math
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from .models import Shift, LoginToken, Helper, ShiftRegistration
|
||||
from django.db import transaction
|
||||
from django.db.models import F, Count, Q, ExpressionWrapper
|
||||
from django.core.cache import cache
|
||||
from .forms import RegisterForm, EmptyForm, AstaForm
|
||||
from django.db.models.fields import DateTimeField
|
||||
from datetime import timedelta
|
||||
|
||||
from django.utils import timezone
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.core.cache import cache
|
||||
from django.db import transaction
|
||||
from django.db.models import Count, ExpressionWrapper, F, Q
|
||||
from django.db.models.fields import DateTimeField
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.utils import timezone
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
||||
import datetime
|
||||
from .decorators import event_state
|
||||
from .forms import AstaForm, EmptyForm, RegisterForm
|
||||
from .models import Helper, LoginToken, Shift, ShiftRegistration
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
import math
|
||||
|
||||
global_preferences = global_preferences_registry.manager()
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from .signals import populate_footer_nav, populate_nav
|
||||
from .signals import populate_nav
|
||||
|
||||
|
||||
def nav(request):
|
||||
|
@ -12,14 +12,3 @@ def nav(request):
|
|||
return {
|
||||
"nav_items": nav_items,
|
||||
}
|
||||
|
||||
|
||||
def footer_nav(request):
|
||||
nav_items = [
|
||||
item
|
||||
for _, items in populate_footer_nav.send(sender=request)
|
||||
if isinstance(items, list)
|
||||
for item in items
|
||||
]
|
||||
|
||||
return {"nav_items": nav_items}
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
from django.dispatch import Signal
|
||||
|
||||
populate_nav = Signal()
|
||||
|
||||
populate_footer_nav = Signal()
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from django.contrib import admin
|
||||
from django.shortcuts import reverse
|
||||
|
||||
from .models import *
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Generated by Django 4.0.4 on 2023-05-07 16:00
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# Generated by Django 4.0.4 on 2023-05-13 17:28
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
import shiftregister.fallback.models
|
||||
|
||||
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
from shiftregister.importer.models import *
|
||||
from django.db.models import Max, Sum
|
||||
from django.db.models import Count, Exists, OuterRef, ExpressionWrapper
|
||||
from django.db.models.lookups import LessThan
|
||||
from django.db.models.fields import DateTimeField
|
||||
from base64 import urlsafe_b64encode
|
||||
import math
|
||||
import secrets
|
||||
from base64 import urlsafe_b64encode
|
||||
|
||||
from django.db.models import Count, Exists, ExpressionWrapper, Max, OuterRef, Sum
|
||||
from django.db.models.fields import DateTimeField
|
||||
from django.db.models.lookups import LessThan
|
||||
|
||||
from shiftregister.importer.models import *
|
||||
|
||||
night_shift_query = Q(start_at__hour__gte=21) | Q(start_at__hour__lte=10)
|
||||
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
from datetime import datetime
|
||||
|
||||
from celery import shared_task
|
||||
from .models import FallbackAssignment
|
||||
from shiftregister.app.models import ShiftRegistration
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from django.db.models import Case, Count, ExpressionWrapper, F, Q, When
|
||||
from django.utils import timezone
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
from django.db.models import F, Count, Q, ExpressionWrapper, Case, When
|
||||
from datetime import datetime
|
||||
from django.utils import timezone
|
||||
|
||||
from shiftregister.app.models import ShiftRegistration
|
||||
|
||||
from .models import FallbackAssignment
|
||||
|
||||
global_preferences = global_preferences_registry.manager()
|
||||
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
from base64 import urlsafe_b64decode
|
||||
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.db.models import Count
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from shiftregister.fallback.models import TeamMember
|
||||
|
||||
# Create your views here.
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
from django import forms
|
||||
from django.forms import ModelForm
|
||||
|
||||
from .models import Feedback
|
||||
from django.forms import ModelForm
|
||||
from django import forms
|
||||
|
||||
|
||||
class FeedbackForm(ModelForm):
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Generated by Django 4.0.4 on 2023-05-25 14:16
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
# Generated by Django 4.0.4 on 2023-05-27 17:48
|
||||
|
||||
import secrets
|
||||
|
||||
from django.db import migrations, models
|
||||
import secrets
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
from secrets import token_urlsafe
|
||||
|
||||
from django.db import models
|
||||
|
||||
from secrets import token_urlsafe
|
||||
from shiftregister.app.models import Helper
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
from django.dispatch import receiver
|
||||
from django.shortcuts import reverse
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
||||
from shiftregister.core.signals import populate_nav
|
||||
|
||||
global_preferences = global_preferences_registry.manager()
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
|
||||
from shiftregister.app.models import LoginToken
|
||||
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from .forms import FeedbackForm
|
||||
from .models import Feedback, ShareToken
|
||||
from shiftregister.app.models import LoginToken
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
|
||||
def feedback(request, token):
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from .models import Calendar
|
||||
|
||||
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
from datetime import timezone
|
||||
|
||||
import requests
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from icalendar import Calendar
|
||||
|
||||
from .models import Event, Room, Shift
|
||||
import requests
|
||||
|
||||
|
||||
def import_calendar(calendar):
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Generated by Django 4.0.4 on 2022-04-27 14:11
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from django.db import models
|
||||
|
||||
from shiftregister.app.models import *
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from celery import shared_task
|
||||
|
||||
from .importer import import_calendar
|
||||
from .models import Calendar
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
from django.db import models
|
||||
from django.db.models import Case, Count, F, Sum, When
|
||||
from django.db.models import Count, Case, F, When, Sum
|
||||
from django.http import HttpResponse
|
||||
|
||||
from shiftregister.app.models import Helper, Message, Room, Shift, ShiftRegistration
|
||||
from shiftregister.app.models import Helper, Room, Shift, ShiftRegistration, Message
|
||||
from shiftregister.fallback.models import FallbackAssignment
|
||||
from shiftregister.importer.models import Event
|
||||
|
||||
|
@ -160,11 +159,9 @@ def metrics(request):
|
|||
),
|
||||
(
|
||||
"worked_seconds_total",
|
||||
(
|
||||
worked_seconds_total.total_seconds()
|
||||
if worked_seconds_total
|
||||
else 0.0
|
||||
),
|
||||
else 0.0,
|
||||
),
|
||||
(
|
||||
"worked_shifts_total",
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
from pathlib import Path
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
from .models import Page
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def reimport(modeladmin, request, queryset):
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from pathlib import Path
|
||||
|
||||
from django.apps import AppConfig
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class PagesConfig(AppConfig):
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
from pathlib import Path
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
|
||||
from ...models import Page
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import URLValidator
|
||||
from django.http import HttpResponseNotFound
|
||||
from django.shortcuts import redirect
|
||||
from django.views.generic import DetailView
|
||||
|
||||
from django.shortcuts import redirect
|
||||
from django.core.validators import URLValidator
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.http import HttpResponseNotFound
|
||||
from .models import Page
|
||||
|
||||
# Create your views here.
|
||||
|
|
|
@ -10,13 +10,12 @@ For the full list of settings and their values, see
|
|||
https://docs.djangoproject.com/en/4.0/ref/settings/
|
||||
"""
|
||||
|
||||
from os import getenv
|
||||
from pathlib import Path
|
||||
|
||||
from os import getenv
|
||||
import sentry_sdk
|
||||
from django.contrib.messages import constants as messages
|
||||
from sentry_sdk.integrations.celery import CeleryIntegration
|
||||
from sentry_sdk.integrations.django import DjangoIntegration
|
||||
from django.contrib.messages import constants as messages
|
||||
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Generated by Django 4.0.4 on 2022-05-18 13:10
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
|
@ -1,3 +1,2 @@
|
|||
from django.db import models
|
||||
|
||||
from shiftregister.app.models import *
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
from datetime import timedelta
|
||||
|
||||
from django.db import models
|
||||
from django.db.models import Case, Count, ExpressionWrapper, F, Q, Sum, When
|
||||
from django.db.models import Case, Count, F, ExpressionWrapper, Q, Sum, When
|
||||
from django.shortcuts import render
|
||||
from django.utils import timezone
|
||||
|
||||
from .models import Helper, Shift, ShiftRegistration
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from .models import IncomingMessage, RoomViewToken
|
||||
|
||||
# Register your models here.
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from django import forms
|
||||
|
||||
from .models import Helper, ShiftRegistration
|
||||
from .models import ShiftRegistration, Helper
|
||||
|
||||
|
||||
# placeholder form for simple submit button use cases so we get csrf protection
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Generated by Django 4.0.4 on 2023-05-06 23:27
|
||||
|
||||
import phonenumber_field.modelfields
|
||||
from django.db import migrations, models
|
||||
import phonenumber_field.modelfields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
# Generated by Django 4.0.4 on 2023-05-18 15:15
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
import django.db.models.deletion
|
||||
import shiftregister.team.models
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
import secrets
|
||||
|
||||
from django.db import models
|
||||
from phonenumber_field.modelfields import PhoneNumberField
|
||||
|
||||
from shiftregister.app.models import *
|
||||
import secrets
|
||||
|
||||
# Create your models here.
|
||||
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
from django.dispatch import receiver
|
||||
from django.shortcuts import reverse
|
||||
from dynamic_preferences.registries import global_preferences_registry
|
||||
|
||||
from shiftregister.core.signals import populate_nav
|
||||
|
||||
from .models import IncomingMessage
|
||||
|
||||
global_preferences = global_preferences_registry.manager()
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
import sentry_sdk
|
||||
from celery import shared_task
|
||||
from django.conf import settings
|
||||
|
||||
from shiftregister.app.sipgate.history import list_incoming_sms
|
||||
|
||||
from .models import IncomingMessage
|
||||
import sentry_sdk
|
||||
|
||||
|
||||
@shared_task
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from re import ASCII, sub
|
||||
|
||||
from django import template
|
||||
from re import ASCII, sub
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
|
|
@ -1,27 +1,26 @@
|
|||
from datetime import timedelta
|
||||
|
||||
from django.contrib import messages
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.core.paginator import Paginator
|
||||
from django.db import models, transaction
|
||||
from django.db.models import Case, Count, ExpressionWrapper, F, Q, When
|
||||
from django.db.models.fields import DateTimeField
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.utils import timezone
|
||||
from django.db.models.fields import DateTimeField
|
||||
from django.db.models import F, Count, Q, ExpressionWrapper, Case, When
|
||||
from .models import (
|
||||
ShiftRegistration,
|
||||
Room,
|
||||
Shift,
|
||||
Helper,
|
||||
Message,
|
||||
IncomingMessage,
|
||||
RoomViewToken,
|
||||
)
|
||||
from django.views.generic import DetailView, ListView
|
||||
from django.views.generic.edit import FormMixin
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.contrib import messages
|
||||
from django.db import models, transaction
|
||||
from django.core.paginator import Paginator
|
||||
from .forms import BulkMessage, HelperShift, HelperMessage
|
||||
from datetime import timedelta
|
||||
|
||||
from .forms import BulkMessage, HelperMessage, HelperShift
|
||||
from .models import (
|
||||
Helper,
|
||||
IncomingMessage,
|
||||
Message,
|
||||
Room,
|
||||
RoomViewToken,
|
||||
Shift,
|
||||
ShiftRegistration,
|
||||
)
|
||||
|
||||
# Create your views here.
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@ Including another URLconf
|
|||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
|
||||
from django.contrib import admin
|
||||
from django.urls import include, path
|
||||
|
||||
|
|
Loading…
Reference in New Issue