Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ jobs:
secrets: inherit
with:
python-version: 3.12
postgres-major-version: 13
postgres-major-version: 17
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ repos:
# the ruff's version line, it is used by test_pre_commit_ruff_version.py
# test case in order not to have to add a YAML library dependency just
# to test this version:
rev: v0.13.2 # ruff-pre-commit version
rev: v0.13.3 # ruff-pre-commit version
hooks:
# Run the linter
- id: ruff
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ The project is now running at http://localhost:8081

Prerequisites (defined by [Dockerfile](./Dockerfile) and [compose.yaml](./compose.yaml)):

- PostgreSQL 13
- PostgreSQL 17
- Python 3.12

Steps:
Expand Down
25 changes: 11 additions & 14 deletions common/tests/test_mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@ def user(self):

@pytest.mark.django_db
def test_write_audit_access_log_of_paginated_objects(self, factory, user):
BATCH_SIZE = 3
p_events = PalvelutarjotinEventFactory.create_batch(BATCH_SIZE)
batch_size = 3
p_events = PalvelutarjotinEventFactory.create_batch(batch_size)
request = factory.get("/")
request.user = user
list_view = self.DummyListView(request)
with mock.patch("auditlog.signals.accessed.send") as mock_send:
list_view._write_audit_access_log_of_paginated_objects(p_events)
assert mock_send.call_count == BATCH_SIZE
assert mock_send.call_count == batch_size
for p_event in p_events:
mock_send.assert_any_call(sender=PalvelutarjotinEvent, instance=p_event)

@pytest.mark.django_db
def test_paginate_queryset_no_pagination(self, factory, user):
BATCH_SIZE = 3
p_events = PalvelutarjotinEventFactory.create_batch(BATCH_SIZE)
batch_size = 3
p_events = PalvelutarjotinEventFactory.create_batch(batch_size)
request = factory.get("/")
request.user = user
list_view = self.DummyListView(request)
Expand All @@ -57,15 +57,12 @@ def test_paginate_queryset_no_pagination(self, factory, user):
@parameterized.expand([(5, 5), (10, 20)])
@pytest.mark.django_db
def test_paginate_queryset_with_pagination(self, page_size, batch_size):
PAGE_SIZE = page_size
user = UserFactory()
factory = APIRequestFactory()

class CustomPaginator(PageNumberPagination):
page_size = PAGE_SIZE

def paginate_queryset(self, queryset, request, **kwargs):
return queryset[: self.page_size]
return queryset[:page_size]

p_events = PalvelutarjotinEventFactory.create_batch(batch_size)
request = factory.get("/", {"page": 1})
Expand All @@ -79,7 +76,7 @@ def paginate_queryset(self, queryset, request, **kwargs):
result = list_view.paginate_queryset(p_events)
assert result is not None
mock_write_log.assert_called_once()
assert len(mock_write_log.call_args[0][0]) == PAGE_SIZE
assert len(mock_write_log.call_args[0][0]) == page_size

@pytest.mark.django_db
def test_paginate_queryset_with_empty_queryset(self, factory, user):
Expand All @@ -100,14 +97,14 @@ def test_access_log_written_from_every_result(self, factory, user):
Test that an access log entry is written for each object in the list view
result.
"""
BATCH_SIZE = 3
p_events = PalvelutarjotinEventFactory.create_batch(BATCH_SIZE)
batch_size = 3
p_events = PalvelutarjotinEventFactory.create_batch(batch_size)
request = factory.get("/")
request.user = user
list_view = self.DummyListView(request)
list_view.paginate_queryset(p_events)
assert PalvelutarjotinEvent.objects.count() == BATCH_SIZE
assert PalvelutarjotinEvent.objects.count() == batch_size
assert (
LogEntry.objects.filter(actor=user, action=LogEntry.Action.ACCESS).count()
== BATCH_SIZE
== batch_size
)
3 changes: 1 addition & 2 deletions common/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ def test_is_enum_value_false(value):
"ENUM_VALUE_1",
"ENUM_VALUE_2",
"LAST_ENUM_VALUE",
{1, 2, 3, "test", 2},
{1, 2, 3, "test"},
(1, 2, 3, "test", 2),
[1, 2, 3, "test", 2],
(1, [2, {3: {4, (11, (12,), 13, None, "test")}}]),
Expand Down Expand Up @@ -173,7 +173,6 @@ def test_deepfix_enum_values_changes_output_but_not_input():
2,
],
"ENUM_VALUE_1": {
2,
2,
"ENUM_VALUE_1",
},
Expand Down
4 changes: 2 additions & 2 deletions common/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ def convert_to_localtime_tz(value):
dt = datetime.combine(datetime.now().date(), value)
if timezone.is_naive(value):
# Auto add local timezone to naive time
return timezone.make_aware(dt).timetz()
return timezone.make_aware(dt)
else:
return timezone.localtime(dt).timetz()
return timezone.localtime(dt)


def to_local_datetime_if_naive(value) -> datetime:
Expand Down
4 changes: 2 additions & 2 deletions compose.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
services:
kultus-db:
image: postgres:13
image: postgres:17-alpine
restart: on-failure
env_file:
- .env # For POSTGRES_USER, POSTGRES_PASSWORD and POSTGRES_DB
ports:
- ${DB_PORT:-5434}:5432
volumes:
- pgdata:/var/lib/postgresql@13/data
- pgdata:/var/lib/postgresql/data
container_name: kultus-db

django:
Expand Down
2 changes: 1 addition & 1 deletion gdpr/service.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import logging
from typing import Optional, TYPE_CHECKING
from typing import TYPE_CHECKING, Optional

from helsinki_gdpr.types import ErrorResponse

Expand Down
11 changes: 8 additions & 3 deletions gdpr/tests/test_gdpr_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,15 +282,20 @@ def test_delete_profile_data_from_gdpr_api(
all_count = LogEntry.objects.count()
assert all_count > 2
created = LogEntry.objects.filter(action=LogEntry.Action.CREATE)
updated = LogEntry.objects.filter(action=LogEntry.Action.UPDATE)
deleted = LogEntry.objects.filter(action=LogEntry.Action.DELETE)
assert created.count() == all_count - deleted.count()
assert created.count() == all_count - updated.count() - deleted.count()
assert updated.count() == 1
assert updated.first().object_id == user.id
assert deleted.count() == 1
assert deleted.first().object_id == user.id
else:
assert LogEntry.objects.count() == 2
(created_log, deleted_log) = LogEntry.objects.all().order_by("id")
assert LogEntry.objects.count() == 3
(created_log, updated_log, deleted_log) = LogEntry.objects.all().order_by("id")
assert created_log.action == LogEntry.Action.CREATE
assert created_log.object_id == user.id
assert updated_log.action == LogEntry.Action.UPDATE
assert updated_log.object_id == user.id
assert deleted_log.action == LogEntry.Action.DELETE
assert deleted_log.object_id == user.id

Expand Down
28 changes: 14 additions & 14 deletions graphene_linked_events/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
from django.db import transaction
from django.utils.translation import gettext_lazy as _
from graphene import (
ID,
Boolean,
Enum,
Field,
Float,
ID,
InputField,
InputObjectType,
Int,
Expand Down Expand Up @@ -88,7 +88,7 @@ class LocalisedObjectInput(InputObjectType):

class Division(ObjectType):
type = String(required=True)
ocdId = String(description="Open Civic Data ID")
ocd_id = String(description="Open Civic Data ID")
municipality = String()
name = Field(LocalisedObject)

Expand Down Expand Up @@ -820,7 +820,7 @@ class Arguments:
@event_staff_member_required
@transaction.atomic
@map_enums_to_values_in_kwargs
def mutate(root, info, **kwargs):
def mutate(self, info, **kwargs):
# Format to JSON POST body
p_event_data = kwargs["event"].pop("p_event")
validate_p_event_data(p_event_data)
Expand Down Expand Up @@ -869,8 +869,8 @@ def mutate(root, info, **kwargs):
)
return AddEventMutation(response=response)

def _create_p_event(event_obj, organisation, p_event_data) -> PalvelutarjotinEvent:
p_event_data["linked_event_id"] = event_obj.id
def _create_p_event(self, organisation, p_event_data) -> PalvelutarjotinEvent:
p_event_data["linked_event_id"] = self.id
p_event_data["organisation_id"] = organisation.id
translations = p_event_data.pop("translations", None)
p_event, _ = PalvelutarjotinEvent.objects.get_or_create(**p_event_data)
Expand All @@ -888,7 +888,7 @@ class Arguments:
@event_staff_member_required
@transaction.atomic
@map_enums_to_values_in_kwargs
def mutate(root, info, **kwargs):
def mutate(self, info, **kwargs):
# Format to JSON POST body
event_id = kwargs["event"].pop("id")
p_event_data = kwargs["event"].pop("p_event", None)
Expand Down Expand Up @@ -957,7 +957,7 @@ class Arguments:
@event_staff_member_required
@transaction.atomic
@map_enums_to_values_in_kwargs
def mutate(root, info, **kwargs):
def mutate(self, info, **kwargs):
event_id = kwargs["event"].get("id")
try:
p_event: PalvelutarjotinEvent = PalvelutarjotinEvent.objects.get(
Expand All @@ -967,7 +967,7 @@ def mutate(root, info, **kwargs):
except PalvelutarjotinEvent.DoesNotExist as e:
raise ObjectDoesNotExistError(e)
# Publish event is actually update event, reuse UpdateEventMutation
response = UpdateEventMutation.mutate(root, info, **kwargs).response
response = UpdateEventMutation.mutate(self, info, **kwargs).response
return PublishEventMutation(response=response)


Expand All @@ -980,15 +980,15 @@ class Arguments:
@event_staff_member_required
@transaction.atomic
@map_enums_to_values_in_kwargs
def mutate(root, info, **kwargs):
def mutate(self, info, **kwargs):
try:
kwargs["event"].update(
{"publication_status": PalvelutarjotinEvent.PUBLICATION_STATUS_DRAFT}
)
except PalvelutarjotinEvent.DoesNotExist as e:
raise ObjectDoesNotExistError(e)
# Unpublish event is actually update event, reuse UpdateEventMutation
response = UpdateEventMutation.mutate(root, info, **kwargs).response
response = UpdateEventMutation.mutate(self, info, **kwargs).response
return UnpublishEventMutation(response=response)


Expand All @@ -1000,7 +1000,7 @@ class Arguments:

@event_staff_member_required
@map_enums_to_values_in_kwargs
def mutate(root, info, **kwargs):
def mutate(self, info, **kwargs):
event_id = kwargs["event_id"]
# TODO: proper validation if necessary
result = api_client.delete("event", event_id)
Expand Down Expand Up @@ -1054,7 +1054,7 @@ class Arguments:

@event_staff_member_required
@map_enums_to_values_in_kwargs
def mutate(root, info, **kwargs):
def mutate(self, info, **kwargs):
image = kwargs["image"].pop("image")
_validate_image_upload(image)
body = kwargs["image"]
Expand All @@ -1076,7 +1076,7 @@ class Arguments:

@event_staff_member_required
@map_enums_to_values_in_kwargs
def mutate(root, info, **kwargs):
def mutate(self, info, **kwargs):
image_id = kwargs["image"].pop("id")
body = format_request(kwargs["image"])
result = api_client.update("image", image_id, body)
Expand All @@ -1095,7 +1095,7 @@ class Arguments:

@event_staff_member_required
@map_enums_to_values_in_kwargs
def mutate(root, info, **kwargs):
def mutate(self, info, **kwargs):
image_id = kwargs["image_id"]
result = api_client.delete("image", image_id)
response = ImageMutationResponse(
Expand Down
10 changes: 5 additions & 5 deletions graphene_linked_events/tests/__snapshots__/test_api.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -868,7 +868,7 @@
'divisions': list([
dict({
'municipality': None,
'ocdId': None,
'ocdId': 'ocd-division/country:fi/kunta:espoo',
}),
]),
'email': 'sellonkirjasto@espoo.fi',
Expand Down Expand Up @@ -937,7 +937,7 @@
'divisions': list([
dict({
'municipality': None,
'ocdId': None,
'ocdId': 'ocd-division/country:fi/kunta:espoo',
}),
]),
'email': 'sellonkirjasto@espoo.fi',
Expand Down Expand Up @@ -998,7 +998,7 @@
'divisions': list([
dict({
'municipality': None,
'ocdId': None,
'ocdId': 'ocd-division/country:fi/kunta:espoo',
}),
]),
'email': 'kirjasto.entresse@espoo.fi',
Expand Down Expand Up @@ -1710,7 +1710,7 @@
'divisions': list([
dict({
'municipality': None,
'ocdId': None,
'ocdId': 'ocd-division/country:fi/kunta:espoo',
}),
]),
'email': 'sellonkirjasto@espoo.fi',
Expand Down Expand Up @@ -1771,7 +1771,7 @@
'divisions': list([
dict({
'municipality': None,
'ocdId': None,
'ocdId': 'ocd-division/country:fi/kunta:espoo',
}),
]),
'email': 'kirjasto.entresse@espoo.fi',
Expand Down
Loading