Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/respa-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ jobs:
DATABASE_URL: postgis://postgres:postgres@localhost/respa
steps:
- uses: actions/checkout@v3
- name: Set up python 3.8
- name: Set up python 3.12
uses: actions/setup-python@v2
with:
python-version: "3.8"
python-version: "3.12"
- name: Install Ubuntu packages
run: |
sudo apt-get update && sudo apt-get install -y gdal-bin gettext libxml2-dev libxslt-dev python3-dev python3-lxml
Expand Down Expand Up @@ -43,7 +43,7 @@ jobs:

services:
postres:
image: postgis/postgis:10-2.5
image: postgis/postgis:14-3.5
env:
# It lets postgres user login without password so postgres extensions can be
# installed
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ======================================================================
FROM python:3.8-buster AS app-base
FROM python:3.12-bullseye AS app-base
# ======================================================================
WORKDIR /app

Expand All @@ -14,14 +14,14 @@ RUN set -eux; \
postgresql-client \
gettext \
; \
curl -sL https://deb.nodesource.com/setup_12.x | bash -; \
curl -sL https://deb.nodesource.com/setup_24.x | bash -; \
apt-get install -y nodejs; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
rm -rf /var/lib/apt/lists/*; \
rm -rf /var/cache/apt/archives; \
pip install --no-cache-dir -r requirements.txt

# Install wait-for-it.sh
# Install wait-for-it.sh
RUN curl -o /usr/local/bin/wait-for-it.sh https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh && \
chmod +x /usr/local/bin/wait-for-it.sh

Expand Down
2 changes: 1 addition & 1 deletion caterings/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.contrib.gis.db import models
from django.contrib.gis.db.models import Q
from django.utils import formats, translation
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from django.utils.translation import pgettext_lazy

import reversion
Expand Down
2 changes: 1 addition & 1 deletion comments/api.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from datetime import datetime
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from django.utils import timezone
import django_filters
from rest_framework import exceptions, mixins, serializers, viewsets
Expand Down
21 changes: 21 additions & 0 deletions comments/migrations/0004_alter_comment_created_by.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 4.0.10 on 2025-02-17 08:16

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('comments', '0003_refactor_content_type_choices'),
]

operations = [
migrations.AlterField(
model_name='comment',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='%(class)s_created', to=settings.AUTH_USER_MODEL, verbose_name='Created by'),
),
]
2 changes: 1 addition & 1 deletion comments/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.contrib.contenttypes.models import ContentType
from django.contrib.gis.db import models
from django.contrib.gis.db.models import Q
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from caterings.models import CateringOrder
from resources.models import Reservation, Resource
from resources.models.utils import send_respa_mail
Expand Down
2 changes: 1 addition & 1 deletion deploy/containerize.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ if [ -z "$DOCKER_PASSWORD" ]; then
exit 0
fi

if [ "$TRAVIS_PYTHON_VERSION" != "3.6" ]; then
if [ "$TRAVIS_PYTHON_VERSION" != "3.12" ]; then
echo "Only deploy on production Python build"
exit 0
fi
Expand Down
1 change: 0 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
version: '3'
services:
db:
container_name: respa-db
Expand Down
10 changes: 5 additions & 5 deletions docs/permissions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -313,11 +313,11 @@ called ``unit_group`` can be queried like this::
UnitGroupAuthorization(
authorized=user1,
subject=unit_group1,
level=UnitGroupAuthorizationLevel.admin),
level=UnitGroupAuthorizationLevel.ADMIN),
UnitGroupAuthorization(
authorized=user2,
subject=unit_group1,
level=UnitGroupAuthorizationLevel.admin),
level=UnitGroupAuthorizationLevel.ADMIN),
...
]>

Expand All @@ -333,14 +333,14 @@ Unit Administrator, Unit Manager and Unit Viewer status is given per Unit via an
UnitAuthorization(
authorized=user1,
subject=unit1,
level=UnitAuthorizationLevel.admin),
level=UnitAuthorizationLevel.ADMIN),
UnitAuthorization(
authorized=user2,
subject=unit1,
level=UnitAuthorizationLevel.manager),
level=UnitAuthorizationLevel.MANAGER),
UnitAuthorization(
authorized=user3,
subject=unit1,
level=UnitAuthorizationLevel.viewer),
level=UnitAuthorizationLevel.VIEWER),
...
]>
Empty file added enumfields/__init__.py
Empty file.
9 changes: 9 additions & 0 deletions enumfields/fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.db import models

class EnumField(models.CharField):
"""
Minimal stub to satisfy old migrations that reference enumfields.fields.EnumField.
This does NOT implement any enumfields behavior — it only keeps migrations working.
"""
def __init__(self, enum=None, *args, **kwargs):
super().__init__(*args, **kwargs)
43 changes: 43 additions & 0 deletions kulkunen/migrations/0004_auto_20250214_1032.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Generated by Django 3.2.25 on 2025-02-14 08:32

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('kulkunen', '0003_auto_20231003_1526'),
]

operations = [
migrations.AlterField(
model_name='accesscontrolgrant',
name='driver_data',
field=models.JSONField(blank=True, null=True),
),
migrations.AlterField(
model_name='accesscontrolresource',
name='driver_config',
field=models.JSONField(blank=True, help_text='Driver-specific configuration', null=True),
),
migrations.AlterField(
model_name='accesscontrolresource',
name='driver_data',
field=models.JSONField(editable=False, help_text='Internal driver data', null=True),
),
migrations.AlterField(
model_name='accesscontrolsystem',
name='driver_config',
field=models.JSONField(blank=True, help_text='Driver-specific configuration', null=True),
),
migrations.AlterField(
model_name='accesscontrolsystem',
name='driver_data',
field=models.JSONField(editable=False, help_text='Internal driver data', null=True),
),
migrations.AlterField(
model_name='accesscontroluser',
name='driver_data',
field=models.JSONField(blank=True, null=True),
),
]
15 changes: 7 additions & 8 deletions kulkunen/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@
import random
from datetime import timedelta
from django.contrib.auth import get_user_model
from django.contrib.postgres.fields import JSONField
from django.core.exceptions import ImproperlyConfigured
from django.db import models, transaction
from django.utils import timezone
from django.utils.module_loading import import_string
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _

from resources.models import Resource

Expand Down Expand Up @@ -75,7 +74,7 @@ class AccessControlUser(models.Model):
help_text=_("Identifier of user in the access control system (if any)"),
)

driver_data = JSONField(null=True, blank=True)
driver_data = models.JSONField(null=True, blank=True)

objects = AccessControlUserQuerySet.as_manager()

Expand Down Expand Up @@ -176,7 +175,7 @@ class AccessControlGrant(models.Model):
),
)

driver_data = JSONField(null=True, blank=True)
driver_data = models.JSONField(null=True, blank=True)

objects = AccessControlGrantQuerySet.as_manager()

Expand Down Expand Up @@ -314,10 +313,10 @@ class AccessControlResource(models.Model):
help_text=_("Identifier of resource in the access control system (if any)"),
)

driver_config = JSONField(
driver_config = models.JSONField(
null=True, blank=True, help_text=_("Driver-specific configuration")
)
driver_data = JSONField(
driver_data = models.JSONField(
null=True, editable=False, help_text=_("Internal driver data")
)

Expand Down Expand Up @@ -414,10 +413,10 @@ class AccessControlSystem(models.Model):
),
)

driver_config = JSONField(
driver_config = models.JSONField(
null=True, blank=True, help_text=_("Driver-specific configuration")
)
driver_data = JSONField(
driver_data = models.JSONField(
null=True, editable=False, help_text=_("Internal driver data")
)

Expand Down
2 changes: 1 addition & 1 deletion notifications/apps.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _


class NotificationsConfig(AppConfig):
Expand Down
20 changes: 20 additions & 0 deletions notifications/migrations/0014_auto_20250213_1356.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 3.0.14 on 2025-02-13 11:56

from django.db import migrations
import django.db.models.deletion
import parler.fields


class Migration(migrations.Migration):

dependencies = [
('notifications', '0013_create_reservation_reminder_notification'),
]

operations = [
migrations.AlterField(
model_name='notificationtemplatetranslation',
name='master',
field=parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='notifications.NotificationTemplate'),
),
]
2 changes: 1 addition & 1 deletion notifications/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.utils import translation
from django.utils.formats import date_format
from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from jinja2 import StrictUndefined
from jinja2.exceptions import TemplateError
from jinja2.sandbox import SandboxedEnvironment
Expand Down
2 changes: 1 addition & 1 deletion payments/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.core.exceptions import ValidationError
from django.utils.safestring import mark_safe
from django.utils.timezone import localtime
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from modeltranslation.admin import TranslationAdmin

from payments.utils import get_price_period_display
Expand Down
2 changes: 1 addition & 1 deletion payments/api/base.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.utils.duration import duration_string
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers

from resources.api.base import TranslatedModelSerializer
Expand Down
2 changes: 1 addition & 1 deletion payments/api/reservation.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from decimal import Decimal
from django.utils.duration import duration_string
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from rest_framework import exceptions, serializers, status
from rest_framework.exceptions import PermissionDenied

Expand Down
2 changes: 1 addition & 1 deletion payments/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from django.utils import timezone, translation
from django.utils.formats import localize
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers

from resources.models import Reservation, Resource
Expand Down
Loading