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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ repos:
exclude: .pre-commit-config.yaml
- id: pt_structure
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.0
rev: v0.15.1
hooks:
- id: ruff-check
args: [ "--fix" ]
Expand All @@ -27,15 +27,15 @@ repos:
additional_dependencies:
- flake8-type-checking>=3.0.0
- repo: https://github.com/thibaudcolas/pre-commit-stylelint
rev: v17.1.0
rev: v17.3.0
hooks:
- id: stylelint
files: '^src/.*\.scss'
additional_dependencies:
- stylelint@16.19.1
- stylelint-config-standard-scss@15.0.0
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v10.0.0-rc.2
rev: v10.0.0
hooks:
- id: eslint
files: '^src/.*\.jsx?$'
Expand Down
4 changes: 1 addition & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,7 @@ strict = true
implicit_reexport = true
warn_unreachable = true
warn_return_any = false
# FIXME: remove sqlalchemy when upgrading to SQlAlchemy 2.0
untyped_calls_exclude = "sqlalchemy,pycurl,onegov.core.types,selenium.webdriver.chrome.webdriver"
plugins = "sqlmypy"
untyped_calls_exclude = "pycurl,selenium.webdriver.chrome.webdriver"
mypy_path = "$MYPY_CONFIG_FILE_DIR/src:$MYPY_CONFIG_FILE_DIR/stubs"

[[tool.mypy.overrides]]
Expand Down
9 changes: 6 additions & 3 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ install_requires =
kerberos
lazy-object-proxy
ldap3
libres>=0.10.2,<1
libres>=1
libsass
lingua-language-detector
lxml
Expand Down Expand Up @@ -156,7 +156,7 @@ install_requires =
# so we don't end up locked into Python <3.14
setuptools<80
sortedcontainers
sqlalchemy<2
sqlalchemy>=2
sqlalchemy-utils
sqlparse
stripe==12.5.1
Expand Down Expand Up @@ -208,7 +208,6 @@ mypy =
onegov-cloud[test]
pytest-xdist
sortedcontainers-stubs
sqlalchemy-stubs
types-babel
types-beautifulsoup4
types-bleach
Expand Down Expand Up @@ -339,3 +338,7 @@ select = TC0,TC1
per_file_ignores =
*.pyi: TC
tests/**.py: TC
type_checking_sqlalchemy_enabled = true
type_checking_sqlalchemy_mapped_dotted_names =
onegov.core.orm.mixins.dict_property
onegov.core.orm.mixins.content.dict_property
27 changes: 13 additions & 14 deletions src/onegov/activity/collections/activity.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,8 +335,8 @@ def query(self) -> Query[ActivityT]:

if self.filter.tags:
query = query.filter(
model_class._tags.has_any( # type:ignore[attr-defined]
array(self.filter.tags))) # type:ignore[call-overload]
model_class._tags.has_any(array(self.filter.tags))
)

if self.filter.states:
query = query.filter(
Expand Down Expand Up @@ -414,7 +414,7 @@ def query(self) -> Query[ActivityT]:
filters_applied = True
o = o.filter(or_(
*(
Occasion.age.overlaps( # type:ignore[attr-defined]
Occasion.age.overlaps(
func.int4range(min_age, max_age + 1))
for min_age, max_age in self.filter.age_ranges
)
Expand All @@ -434,19 +434,18 @@ def query(self) -> Query[ActivityT]:

if self.filter.dateranges:
filters_applied = True
o = o.filter(Occasion.active_days.op('&&')(array( # type:ignore
tuple(
o = o.filter(Occasion.active_days.op('&&')(array(
dt.toordinal()
for start, end in self.filter.dateranges
for dt in sedate.dtrange(start, end)
)))
))
)

if self.filter.weekdays:
filters_applied = True
o = o.filter(
Occasion.weekdays.op('<@')(array( # type:ignore[call-overload]
self.filter.weekdays)))
Occasion.weekdays.op('<@')(array(self.filter.weekdays))
)

if self.filter.available:
filters_applied = True
Expand Down Expand Up @@ -515,7 +514,7 @@ def used_tags(self) -> set[str]:
base = self.query_base().with_entities(
func.skeys(self.model_class._tags).label('keys'))

query = select(func.array_agg(column('keys')))
query = select(func.array_agg(column('keys'))) # type: ignore[var-annotated]
query = query.select_from(base.subquery())

tags = self.session.execute(query.distinct()).scalar()
Expand Down Expand Up @@ -597,7 +596,7 @@ def available_weeks(
if not period:
return

weeknumbers = {n[:2] for n in self.session.execute(text("""
weeknumbers_weeks = {n[:2] for n in self.session.execute(text("""
SELECT DISTINCT
EXTRACT(week FROM start::date),
EXTRACT(week FROM "end"::date)
Expand All @@ -607,13 +606,13 @@ def available_weeks(
WHERE period_id = :period_id
"""), {'period_id': period.id})}

weeknumbers = {
weeknumbers_weeks = {
tuple(
range(int(start), int(end) + 1)
) for start, end in weeknumbers
) for start, end in weeknumbers_weeks
}

weeknumbers = {week for weeks in weeknumbers for week in weeks}
weeknumbers = {week for weeks in weeknumbers_weeks for week in weeks}

weeks = sedate.weekrange(period.execution_start, period.execution_end)

Expand All @@ -636,4 +635,4 @@ def available_ages(self) -> tuple[int, int] | None:

ages = self.session.execute(query).first()

return ages and ages or None
return ages._tuple() if ages else None
2 changes: 1 addition & 1 deletion src/onegov/activity/collections/booking.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def booking_count(

return self.count(
usernames=(username, ),
periods=periods.scalar_subquery(),
periods=periods.scalar_subquery(), # type: ignore[arg-type]
states=states
)

Expand Down
2 changes: 1 addition & 1 deletion src/onegov/activity/collections/invoice.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ def add( # type:ignore[override]
optimistic: bool = False
) -> BookingPeriodInvoice:

invoice = BookingPeriodInvoice( # type: ignore[misc]
invoice = BookingPeriodInvoice(
id=uuid4(),
period_id=period_id or self.period_id,
user_id=user_id or self.user_id)
Expand Down
7 changes: 4 additions & 3 deletions src/onegov/activity/collections/volunteer.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
from datetime import date, datetime
from onegov.activity.models import BookingPeriod, BookingPeriodMeta
from onegov.activity.models.volunteer import VolunteerState
from sqlalchemy.orm import Query, Session
from sqlalchemy.engine import Result
from sqlalchemy.orm import Session
from uuid import UUID
from typing import NamedTuple
from typing import Self, TypeAlias
Expand Down Expand Up @@ -91,11 +92,11 @@ def model_class(self) -> type[Volunteer]:
def period_id(self) -> UUID | None:
return self.period and self.period.id or None

def report(self) -> Query[ReportRow]:
def report(self) -> Result[ReportRow]:
stmt = as_selectable_from_path(
module_path('onegov.activity', 'queries/volunteer-report.sql'))

query = select(stmt.c).where(stmt.c.period_id == self.period_id)
query = select(*stmt.c).where(stmt.c.period_id == self.period_id)

return self.session.execute(query)

Expand Down
9 changes: 4 additions & 5 deletions src/onegov/activity/iso20022.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
from __future__ import annotations

import re
from math import isclose

import stdnum.ch.esr as esr

from collections import defaultdict
Expand Down Expand Up @@ -108,10 +106,11 @@ def state(self) -> str:
if self.duplicate:
return 'duplicate'

if isclose(self.confidence, 1):
if self.confidence == 1:
return 'success'

if isclose(self.confidence, 0.5):
# NOTE: This value is never calculated we set it exactly
if self.confidence == 0.5: # noqa: RUF069
return 'warning'

return 'unknown'
Expand Down Expand Up @@ -284,7 +283,7 @@ def items(period_id: UUID | None = None) -> Query[ActivityInvoiceItem]:
username_by_ref = dict(q2.with_entities(
InvoiceReference.reference,
User.username
))
).tuples())

# Get the items matching the given period
q3 = items(period_id=period_id).outerjoin(InvoiceReference).with_entities(
Expand Down
10 changes: 4 additions & 6 deletions src/onegov/activity/matching/score.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ def get_is_organiser_child(booking: Booking) -> bool:
.filter(Activity.id.in_(
session.query(Occasion.activity_id)
.filter(Occasion.period_id == booking.period_id)
.scalar_subquery() # type: ignore[attr-defined]
.scalar_subquery()
))
}

Expand Down Expand Up @@ -281,11 +281,9 @@ def get_group_score(booking: Booking) -> float:
)

group_scores = {
r.group_code:
max(.5, .7 - 0.1 * (r.count - 2))
+ unique_score_modifier(r.group_code)

for r in query
group_code: max(.5, .7 - 0.1 * (count - 2))
+ unique_score_modifier(group_code)
for group_code, count in query
}

return group_scores.get(booking.group_code, 0)
Expand Down
Loading