Skip to content

Commit 1fa23fb

Browse files
add deals balance parsing to TransactionsPage
1 parent 1627323 commit 1fa23fb

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

funpayparsers/parsers/page_parsers/transactions_page_parser.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,21 +72,29 @@ class TransactionsPageParser(
7272

7373
def _parse(self) -> TransactionsPage:
7474
money_values = []
75-
for i in self.tree.css('span.balances-value'):
75+
balances = self.tree.css('span.balances-value')
76+
for i in balances[:3]:
7677
money_values.append(
7778
MoneyValueParser(
7879
i.text().strip(),
7980
options=self.options.money_value_parsing_options,
8081
parsing_mode=MoneyValueParsingMode.FROM_STRING,
8182
).parse(),
8283
)
83-
if len(money_values) == 3:
84-
break
8584

8685
rub_balance = [i for i in money_values if i.currency is Currency.RUB]
8786
usd_balance = [i for i in money_values if i.currency is Currency.USD]
8887
eur_balance = [i for i in money_values if i.currency is Currency.EUR]
8988

89+
deals_balance = None
90+
if len(balances) > 3:
91+
deals_text = balances[3].text().strip().split(' ', 1)[-1]
92+
deals_balance = MoneyValueParser(
93+
deals_text,
94+
options=self.options.money_value_parsing_options,
95+
parsing_mode=MoneyValueParsingMode.FROM_STRING,
96+
).parse()
97+
9098
transactions_div = self.tree.css('div.tc-finance:not(.hidden)')
9199
if not transactions_div:
92100
transactions = None
@@ -109,5 +117,6 @@ def _parse(self) -> TransactionsPage:
109117
rub_balance=rub_balance[0] if rub_balance else None,
110118
usd_balance=usd_balance[0] if usd_balance else None,
111119
eur_balance=eur_balance[0] if eur_balance else None,
120+
deals_balance=deals_balance,
112121
transactions=transactions,
113122
)

funpayparsers/types/pages/transactions_page.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ class TransactionsPage(FunPayPage):
3030
eur_balance: MoneyValue | None
3131
"""EUR balance."""
3232

33+
deals_balance: MoneyValue | None
34+
"""Deals balance."""
35+
3336
transactions: TransactionPreviewsBatch | None
3437
"""Transaction previews."""
3538

tests/parsers_test/money_value_parser_test.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,20 @@
5050
character='₽'
5151
)
5252

53+
deals_money_value_str_ru = """Сделки 1 282.95 ₽"""
54+
deals_money_value_obj_ru = MoneyValue(
55+
raw_source='',
56+
value=1282.95,
57+
character='₽'
58+
)
59+
60+
deals_money_value_str_en = """Deals 50.00 ₽"""
61+
deals_money_value_obj_en = MoneyValue(
62+
raw_source='',
63+
value=50.0,
64+
character='₽'
65+
)
66+
5367

5468
def test_transaction_preview_money_value_parsing():
5569
options = MoneyValueParsingOptions(parsing_mode=MoneyValueParsingMode.FROM_TRANSACTION_PREVIEW)
@@ -80,3 +94,17 @@ def test_string_money_value_parsing():
8094
options = MoneyValueParsingOptions(parsing_mode=MoneyValueParsingMode.FROM_STRING)
8195
parser = MoneyValueParser(string_money_value_str, options=options & OPTIONS)
8296
assert parser.parse() == string_money_value_obj
97+
98+
99+
def test_deals_money_value_ru_parsing():
100+
options = MoneyValueParsingOptions(parsing_mode=MoneyValueParsingMode.FROM_STRING)
101+
raw = deals_money_value_str_ru.strip().split(' ', 1)[-1]
102+
parser = MoneyValueParser(raw, options=options & OPTIONS)
103+
assert parser.parse() == deals_money_value_obj_ru
104+
105+
106+
def test_deals_money_value_en_parsing():
107+
options = MoneyValueParsingOptions(parsing_mode=MoneyValueParsingMode.FROM_STRING)
108+
raw = deals_money_value_str_en.strip().split(' ', 1)[-1]
109+
parser = MoneyValueParser(raw, options=options & OPTIONS)
110+
assert parser.parse() == deals_money_value_obj_en

0 commit comments

Comments
 (0)