Improved support for whitespace in prices
This commit is contained in:
parent
84042615d6
commit
ff4a975c79
|
@ -12,16 +12,14 @@ from .data import (
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
RE_PRICE_RAW = r'\b(?:dkk|sek|usd|nok|eur)?\s*([1-9][\d.]*[\d](?:,\d+)?)\s*(?:,-|:-|.-|;-)?\s*(?:(?:kr|kroner|krone|dkk|sek|usd|eur|nok)\b)?\.?'
|
RE_PRODUCT_PRICE_DK = r'-?[1-9]\d{0,2}(?:[\.\s]?\d{3})*(?:,\d\d\.?)?'
|
||||||
|
RE_PRODUCT_PRICE_EN = r'-?[1-9]\d{0,2}(?:[,\s]?\d{3})*(?:\.\d\d)?'
|
||||||
RE_PRICE = re.compile(RE_PRICE_RAW, flags=re.IGNORECASE)
|
|
||||||
|
|
||||||
RE_PRODUCT_PRICE_DK = r'-?[1-9]\d{0,2}(?:\.?\d{3})*(?:,\d\d\.?)?'
|
|
||||||
RE_PRODUCT_PRICE_EN = r'-?[1-9]\d{0,2}(?:,?\d{3})*(?:\.\d\d)?'
|
|
||||||
RE_PRODUCT_PRICE_AMOUNT = r'(?P<amount>' + RE_PRODUCT_PRICE_DK + '|' + RE_PRODUCT_PRICE_EN + ')'
|
RE_PRODUCT_PRICE_AMOUNT = r'(?P<amount>' + RE_PRODUCT_PRICE_DK + '|' + RE_PRODUCT_PRICE_EN + ')'
|
||||||
|
|
||||||
|
assert re.fullmatch(RE_PRODUCT_PRICE_DK, '1 000 000')
|
||||||
|
|
||||||
def parse_amount(price: str) -> Decimal:
|
def parse_amount(price: str) -> Decimal:
|
||||||
|
price = re.sub(r'\s', '', price, flags=re.IGNORECASE)
|
||||||
if re.fullmatch(RE_PRODUCT_PRICE_DK, price):
|
if re.fullmatch(RE_PRODUCT_PRICE_DK, price):
|
||||||
price = price.replace('.', '').replace(',', '.')
|
price = price.replace('.', '').replace(',', '.')
|
||||||
else:
|
else:
|
||||||
|
@ -109,6 +107,7 @@ def parse_price(text: str, default_currency: Asset) -> AssetAmount | None:
|
||||||
elif m := (RE_KR_AMOUNT.fullmatch(text) or RE_AMOUNT_KR.fullmatch(text) or RE_AMOUNT_SUFFIX.fullmatch(text)):
|
elif m := (RE_KR_AMOUNT.fullmatch(text) or RE_AMOUNT_KR.fullmatch(text) or RE_AMOUNT_SUFFIX.fullmatch(text)):
|
||||||
code, amount_text = 'DKK', m.group('amount')
|
code, amount_text = 'DKK', m.group('amount')
|
||||||
else:
|
else:
|
||||||
|
logger.debug('Unknown format: %s', text)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
currency = (
|
currency = (
|
||||||
|
|
|
@ -17,6 +17,11 @@ PRICES_PARSABLE = [
|
||||||
(' 100 kr ', dkk(100)),
|
(' 100 kr ', dkk(100)),
|
||||||
('349.-', dkk(349)),
|
('349.-', dkk(349)),
|
||||||
('3.000 kr.', dkk(3000)),
|
('3.000 kr.', dkk(3000)),
|
||||||
|
('3.000.000 kr.', dkk(3_000_000)),
|
||||||
|
('3.000.000,25 kr.', dkk(3_000_000.25)),
|
||||||
|
('3,000 kr.', dkk(3000)),
|
||||||
|
('3,000,000 kr.', dkk(3_000_000)),
|
||||||
|
('3,000,000.25 kr.', dkk(3_000_000.25)),
|
||||||
('25,00 kr.', dkk(25)),
|
('25,00 kr.', dkk(25)),
|
||||||
('300,00 kr.', dkk(300)),
|
('300,00 kr.', dkk(300)),
|
||||||
('300kr.', dkk(300)),
|
('300kr.', dkk(300)),
|
||||||
|
@ -25,6 +30,15 @@ PRICES_PARSABLE = [
|
||||||
('9,99 dkk', dkk('9.99')),
|
('9,99 dkk', dkk('9.99')),
|
||||||
('17900 kr', dkk(17900)),
|
('17900 kr', dkk(17900)),
|
||||||
('650 kr.', dkk(650)),
|
('650 kr.', dkk(650)),
|
||||||
|
('3 650 kr.', dkk(3_650)),
|
||||||
|
('3 650 DKK', dkk(3_650)),
|
||||||
|
('3 650 650 kr.', dkk(3_650_650)),
|
||||||
|
('3 650 650 DKK', dkk(3_650_650)),
|
||||||
|
('3 650 kr.', dkk(3_650)),
|
||||||
|
('3 650 DKK', dkk(3_650)),
|
||||||
|
('3 650 650 kr.', dkk(3_650_650)),
|
||||||
|
('3 650 650 DKK', dkk(3_650_650)),
|
||||||
|
('2 998 kr', dkk(2998)),
|
||||||
]
|
]
|
||||||
|
|
||||||
PRICES_UNPARSABLE = [
|
PRICES_UNPARSABLE = [
|
||||||
|
|
Loading…
Reference in New Issue
Block a user