refactor(scheduling): consume core participation contract

This commit is contained in:
2026-07-22 03:21:10 +02:00
parent 58619484b6
commit a316341226
3 changed files with 50 additions and 15 deletions

View File

@@ -18,14 +18,14 @@ from govoplan_core.core.modules import (
PublicFrontendRoute, PublicFrontendRoute,
RoleTemplate, RoleTemplate,
) )
from govoplan_core.db.base import Base
from govoplan_core.core.poll import CAPABILITY_POLL_SCHEDULING
from govoplan_core.core.people import ( from govoplan_core.core.people import (
CAPABILITY_ACCESS_PEOPLE_SEARCH, CAPABILITY_ACCESS_PEOPLE_SEARCH,
CAPABILITY_ADDRESSES_PEOPLE_SEARCH, CAPABILITY_ADDRESSES_PEOPLE_SEARCH,
) )
from govoplan_core.core.poll import CAPABILITY_POLL_SCHEDULING
from govoplan_core.core.poll_participation import CAPABILITY_POLL_PARTICIPATION_GATEWAY
from govoplan_core.core.policy import CAPABILITY_POLICY_SCHEDULING_PARTICIPANT_PRIVACY from govoplan_core.core.policy import CAPABILITY_POLICY_SCHEDULING_PARTICIPANT_PRIVACY
from govoplan_poll.backend.participation import CAPABILITY_POLL_PARTICIPATION_GATEWAY from govoplan_core.db.base import Base
from govoplan_scheduling.backend.db import models as scheduling_models # noqa: F401 - populate Scheduling ORM metadata from govoplan_scheduling.backend.db import models as scheduling_models # noqa: F401 - populate Scheduling ORM metadata
MODULE_ID = "scheduling" MODULE_ID = "scheduling"

View File

@@ -27,6 +27,18 @@ from govoplan_core.core.poll import (
PollUpdateCommand, PollUpdateCommand,
poll_scheduling_provider, poll_scheduling_provider,
) )
from govoplan_core.core.poll_participation import (
ANONYMOUS_PASSWORD_REQUIREMENT,
PollGovernedInvitationCommand,
PollGovernedResponseCommand,
PollGovernedResponseRef,
PollParticipationContextRef,
PollParticipationGatewayProvider,
PollParticipationPolicy,
PollResponseGatewayRef,
participation_token_fingerprint,
poll_participation_gateway_provider,
)
from govoplan_core.core.policy import ( from govoplan_core.core.policy import (
SchedulingParticipantPrivacyDecision, SchedulingParticipantPrivacyDecision,
SchedulingParticipantPrivacyRequest, SchedulingParticipantPrivacyRequest,
@@ -55,18 +67,6 @@ from govoplan_scheduling.backend.security import (
hash_participant_password, hash_participant_password,
verify_participant_password, verify_participant_password,
) )
from govoplan_poll.backend.participation import (
ANONYMOUS_PASSWORD_REQUIREMENT,
PollGovernedInvitationCommand,
PollGovernedResponseCommand,
PollGovernedResponseRef,
PollParticipationContextRef,
PollParticipationGatewayProvider,
PollParticipationPolicy,
PollResponseGatewayRef,
participation_token_fingerprint,
poll_participation_gateway_provider,
)
class SchedulingError(ValueError): class SchedulingError(ValueError):

View File

@@ -0,0 +1,35 @@
from __future__ import annotations
import ast
import pathlib
import unittest
ROOT = pathlib.Path(__file__).resolve().parents[1]
class SchedulingModuleBoundaryTests(unittest.TestCase):
def test_runtime_source_does_not_import_poll_implementation_internals(self) -> None:
offenders: list[str] = []
source_root = ROOT / "src" / "govoplan_scheduling"
for path in source_root.rglob("*.py"):
tree = ast.parse(path.read_text(encoding="utf-8"))
imported_modules = [
node.module
for node in ast.walk(tree)
if isinstance(node, ast.ImportFrom) and node.module is not None
]
imported_modules.extend(
alias.name
for node in ast.walk(tree)
if isinstance(node, ast.Import)
for alias in node.names
)
if any(module.startswith("govoplan_poll") for module in imported_modules):
offenders.append(str(path.relative_to(ROOT)))
self.assertEqual([], offenders)
if __name__ == "__main__":
unittest.main()