Skip to content

Commit f864532

Browse files
authored
Org: Avoids storing ORM objects in orm_cached properties
This should improve reliability and should introduce less flaky behavior caused by incorrect merges of objects into the session. TYPE: Bugfix LINK: OGC-1813
1 parent d64955e commit f864532

39 files changed

+941
-465
lines changed

Diff for: .gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ eggs/
6464
.tmontmp
6565

6666
# mypy
67-
.mypy_cache/*
67+
.mypy_cache/
68+
69+
# ruff
70+
.ruff_cache/
6871

6972
# sublime
7073
*.sublime-workspace

Diff for: src/onegov/activity/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
OccasionDate,
1414
OccasionNeed,
1515
Period,
16+
PeriodMeta,
1617
PublicationRequest,
1718
Volunteer
1819
)
@@ -41,6 +42,7 @@
4142
'OccasionDate',
4243
'OccasionNeed',
4344
'Period',
45+
'PeriodMeta',
4446
'ActivityCollection',
4547
'AttendeeCollection',
4648
'BookingCollection',

Diff for: src/onegov/activity/collections/activity.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from collections.abc import Collection, Iterable, Iterator
3333
from datetime import date
3434
from markupsafe import Markup
35+
from onegov.activity.models import PeriodMeta
3536
from onegov.activity.models.activity import ActivityState
3637
from onegov.user import User
3738
from sqlalchemy.orm import Query, Session
@@ -578,7 +579,7 @@ def delete(self, activity: Activity) -> None:
578579

579580
def available_weeks(
580581
self,
581-
period: Period | None
582+
period: 'Period | PeriodMeta | None'
582583
) -> 'Iterator[tuple[date, date]]':
583584
if not period:
584585
return

Diff for: src/onegov/activity/collections/volunteer.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
if TYPE_CHECKING:
1010
from collections.abc import Sequence
1111
from datetime import date, datetime
12-
from onegov.activity.models import Period
12+
from onegov.activity.models import Period, PeriodMeta
1313
from onegov.activity.models.volunteer import VolunteerState
1414
from sqlalchemy.orm import Query, Session
1515
from uuid import UUID
@@ -73,7 +73,11 @@ class ReportRowWithoutVolunteer(NamedTuple):
7373

7474
class VolunteerCollection(GenericCollection[Volunteer]):
7575

76-
def __init__(self, session: 'Session', period: 'Period | None') -> None:
76+
def __init__(
77+
self,
78+
session: 'Session',
79+
period: 'Period | PeriodMeta | None'
80+
) -> None:
7781
super().__init__(session)
7882
self.period = period
7983

@@ -93,5 +97,5 @@ def report(self) -> 'Query[ReportRow]':
9397

9498
return self.session.execute(query)
9599

96-
def for_period(self, period: 'Period | None') -> 'Self':
100+
def for_period(self, period: 'Period | PeriodMeta | None') -> 'Self':
97101
return self.__class__(self.session, period)

Diff for: src/onegov/activity/models/__init__.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from onegov.activity.models.occasion import Occasion
88
from onegov.activity.models.occasion_date import OccasionDate, DAYS
99
from onegov.activity.models.occasion_need import OccasionNeed
10-
from onegov.activity.models.period import Period
10+
from onegov.activity.models.period import Period, PeriodMeta
1111
from onegov.activity.models.publication_request import PublicationRequest
1212
from onegov.activity.models.volunteer import Volunteer
1313

@@ -22,6 +22,7 @@
2222
'OccasionDate',
2323
'OccasionNeed',
2424
'Period',
25+
'PeriodMeta',
2526
'PublicationRequest',
2627
'Volunteer',
2728
'ACTIVITY_STATES',

Diff for: src/onegov/activity/models/activity.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import uuid
2525
from collections.abc import Iterable
2626
from onegov.activity.collections import PublicationRequestCollection
27-
from onegov.activity.models import PublicationRequest
27+
from onegov.activity.models import PeriodMeta, PublicationRequest
2828
from onegov.core.orm.mixins import dict_property
2929
from typing import Literal
3030
from typing import Self, TypeAlias
@@ -218,7 +218,7 @@ def latest_request(self) -> 'PublicationRequest | None':
218218

219219
def request_by_period(
220220
self,
221-
period: Period | None
221+
period: 'Period | PeriodMeta | None'
222222
) -> 'PublicationRequest | None':
223223

224224
if not period:
@@ -228,7 +228,7 @@ def request_by_period(
228228

229229
return q.first()
230230

231-
def has_occasion_in_period(self, period: Period) -> bool:
231+
def has_occasion_in_period(self, period: 'Period | PeriodMeta') -> bool:
232232
q = object_session(self).query(
233233
exists().where(and_(
234234
Occasion.activity_id == self.id,

0 commit comments

Comments
 (0)