|
1
|
"""Build the deterministic demo used by the notebook and tests.""" |
|
2
|
|
|
3
|
from __future__ import annotations |
|
4
|
|
|
5
|
from datetime import datetime, timedelta |
|
6
|
from decimal import Decimal |
|
7
|
|
|
8
|
from .application import CommerceApplication |
|
9
|
from .merchant import SyntheticMerchant |
|
10
|
from .models import CommercePolicy |
|
11
|
from .payments import LocalPaymentProcessor |
|
12
|
from .policy import PolicyEngine |
|
13
|
|
|
14
|
|
|
15
|
def build_demo( |
|
16
|
now: datetime, |
|
17
|
) -> tuple[CommerceApplication, SyntheticMerchant, LocalPaymentProcessor]: |
|
18
|
payments = LocalPaymentProcessor() |
|
19
|
merchant = SyntheticMerchant(payments, now=now) |
|
20
|
policy = PolicyEngine( |
|
21
|
CommercePolicy( |
|
22
|
allowed_merchants=frozenset({"merchant.invalid"}), |
|
23
|
allowed_purposes=frozenset({"supplier_due_diligence"}), |
|
24
|
per_request_limit=Decimal("0.50"), |
|
25
|
per_run_limit=Decimal("1.00"), |
|
26
|
approval_threshold=Decimal("0.10"), |
|
27
|
session_expires_at=now + timedelta(minutes=15), |
|
28
|
) |
|
29
|
) |
|
30
|
application = CommerceApplication( |
|
31
|
client=merchant.client(), |
|
32
|
policy=policy, |
|
33
|
payments=payments, |
|
34
|
) |
|
35
|
return application, merchant, payments |