Skip to content

Commit 479edfe

Browse files
committed
Improve number parsing and handle a few more events
1 parent 5d8042d commit 479edfe

File tree

2 files changed

+56
-10
lines changed

2 files changed

+56
-10
lines changed

pytr/event.py

+42-10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
from babel.numbers import NumberFormatError, parse_decimal
88

9+
from pytr.utils import get_logger
10+
911

1012
class EventType(Enum):
1113
pass
@@ -51,15 +53,14 @@ class PPEventType(EventType):
5153
# Dividends
5254
"CREDIT": PPEventType.DIVIDEND,
5355
"ssp_corporate_action_invoice_cash": PPEventType.DIVIDEND,
54-
# Failed card transactions
55-
"card_failed_transaction": PPEventType.REMOVAL,
5656
# Interests
5757
"INTEREST_PAYOUT": PPEventType.INTEREST,
5858
"INTEREST_PAYOUT_CREATED": PPEventType.INTEREST,
5959
# Removals
6060
"OUTGOING_TRANSFER": PPEventType.REMOVAL,
6161
"OUTGOING_TRANSFER_DELEGATION": PPEventType.REMOVAL,
6262
"PAYMENT_OUTBOUND": PPEventType.REMOVAL,
63+
"card_failed_transaction": PPEventType.REMOVAL,
6364
"card_order_billed": PPEventType.REMOVAL,
6465
"card_successful_atm_withdrawal": PPEventType.REMOVAL,
6566
"card_successful_transaction": PPEventType.REMOVAL,
@@ -72,10 +73,37 @@ class PPEventType(EventType):
7273
"ORDER_EXECUTED": ConditionalEventType.TRADE_INVOICE,
7374
"SAVINGS_PLAN_EXECUTED": ConditionalEventType.TRADE_INVOICE,
7475
"SAVINGS_PLAN_INVOICE_CREATED": ConditionalEventType.TRADE_INVOICE,
76+
"trading_savingsplan_executed": ConditionalEventType.TRADE_INVOICE,
7577
"benefits_spare_change_execution": ConditionalEventType.TRADE_INVOICE,
7678
"TRADE_INVOICE": ConditionalEventType.TRADE_INVOICE,
79+
"TRADE_CORRECTED": ConditionalEventType.TRADE_INVOICE,
7780
}
7881

82+
log = get_logger(__name__)
83+
84+
events_known_ignored = [
85+
"CUSTOMER_CREATED",
86+
"DEVICE_RESET",
87+
"DOCUMENTS_ACCEPTED",
88+
"DOCUMENTS_CREATED",
89+
"EMAIL_VALIDATED",
90+
"ORDER_CANCELED",
91+
"ORDER_CREATED",
92+
"ORDER_EXPIRED",
93+
"ORDER_REJECTED",
94+
"PUK_CREATED",
95+
"REFERENCE_ACCOUNT_CHANGED",
96+
"SECURITIES_ACCOUNT_CREATED",
97+
"VERIFICATION_TRANSFER_ACCEPTED",
98+
"card_failed_verification",
99+
"card_successful_verification",
100+
"current_account_activated",
101+
"new_tr_iban",
102+
"ssp_corporate_action_informative_notification",
103+
"ssp_corporate_action_invoice_shares",
104+
"ssp_dividend_option_customer_instruction",
105+
]
106+
79107

80108
@dataclass
81109
class Event:
@@ -110,9 +138,14 @@ def from_dict(cls, event_dict: Dict[Any, Any]):
110138

111139
@staticmethod
112140
def _parse_type(event_dict: Dict[Any, Any]) -> Optional[EventType]:
113-
event_type: Optional[EventType] = tr_event_type_mapping.get(event_dict.get("eventType", ""), None)
114-
if event_dict.get("status", "").lower() == "canceled":
115-
event_type = None
141+
eventTypeStr = event_dict.get("eventType", "")
142+
event_type: Optional[EventType] = tr_event_type_mapping.get(eventTypeStr, None)
143+
if event_type is not None:
144+
if event_dict.get("status", "").lower() == "canceled":
145+
event_type = None
146+
else:
147+
if eventTypeStr not in events_known_ignored:
148+
log.warning(f"Ignoring event {eventTypeStr}")
116149
return event_type
117150

118151
@classmethod
@@ -247,13 +280,12 @@ def _parse_float_from_detail(elem_dict: Dict[str, Any]) -> Optional[float]:
247280
Optional[float]: parsed float value or None
248281
"""
249282
unparsed_val = elem_dict.get("detail", {}).get("text", "")
283+
if unparsed_val == "":
284+
return None
250285
parsed_val = re.sub(r"[^\,\.\d-]", "", unparsed_val)
251286

252-
# Try the locale that will fail more likely first.
253-
if "." not in parsed_val:
254-
locales = ("en", "de")
255-
else:
256-
locales = ("de", "en")
287+
# Prefer german locale.
288+
locales = ("de", "en")
257289

258290
try:
259291
result = float(parse_decimal(parsed_val, locales[0], strict=True))

tests/test_parsing.py

+14
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,20 @@ def test(data: Dict[str, Any], number: float):
2525
9400.0,
2626
)
2727

28+
test(
29+
{
30+
"title": "Anteile",
31+
"detail": {
32+
"text": "1,875",
33+
"trend": None,
34+
"action": None,
35+
"type": "text"
36+
},
37+
"style": "plain",
38+
},
39+
1.875,
40+
)
41+
2842
test(
2943
{
3044
"title": "Aktien",

0 commit comments

Comments
 (0)