data: Fix Amount.__new__.
See the comments for background and rationale.
This commit is contained in:
parent
14a87e792b
commit
01c3b975d8
2 changed files with 16 additions and 6 deletions
|
@ -132,6 +132,15 @@ class Amount(bc_amount.Amount):
|
||||||
"""
|
"""
|
||||||
number: decimal.Decimal
|
number: decimal.Decimal
|
||||||
|
|
||||||
|
# beancount.core._Amount is the plain namedtuple.
|
||||||
|
# beancore.core.Amount adds instance methods to it.
|
||||||
|
# b.c.Amount.__New__ calls `b.c._Amount.__new__`, which confuses type
|
||||||
|
# checking. See <https://github.com/python/mypy/issues/1279>.
|
||||||
|
# It works fine if you use super(), which is better practice anyway.
|
||||||
|
# So we override __new__ just to call _Amount.__new__ this way.
|
||||||
|
def __new__(cls, number: decimal.Decimal, currency: str) -> 'Amount':
|
||||||
|
return super(bc_amount._Amount, Amount).__new__(cls, number, currency)
|
||||||
|
|
||||||
|
|
||||||
class Metadata(MutableMapping[MetaKey, MetaValue]):
|
class Metadata(MutableMapping[MetaKey, MetaValue]):
|
||||||
"""Transaction or posting metadata
|
"""Transaction or posting metadata
|
||||||
|
@ -309,7 +318,7 @@ def balance_of(txn: Transaction,
|
||||||
]
|
]
|
||||||
number = sum((wt.number for wt in weights), number)
|
number = sum((wt.number for wt in weights), number)
|
||||||
currency = weights[0].currency
|
currency = weights[0].currency
|
||||||
return Amount._make((number, currency))
|
return Amount(number, currency)
|
||||||
|
|
||||||
@functools.lru_cache()
|
@functools.lru_cache()
|
||||||
def is_opening_balance_txn(txn: Transaction) -> bool:
|
def is_opening_balance_txn(txn: Transaction) -> bool:
|
||||||
|
|
|
@ -74,12 +74,12 @@ def Cost(number, currency='USD', date=FY_MID_DATE, label=None):
|
||||||
|
|
||||||
def Posting(account, number,
|
def Posting(account, number,
|
||||||
currency='USD', cost=None, price=None, flag=None,
|
currency='USD', cost=None, price=None, flag=None,
|
||||||
**meta):
|
type_=bc_data.Posting, **meta):
|
||||||
if cost is not None:
|
if cost is not None:
|
||||||
cost = Cost(*cost)
|
cost = Cost(*cost)
|
||||||
if meta is None:
|
if not meta:
|
||||||
meta = None
|
meta = None
|
||||||
return bc_data.Posting(
|
return type_(
|
||||||
account,
|
account,
|
||||||
Amount(number, currency),
|
Amount(number, currency),
|
||||||
cost,
|
cost,
|
||||||
|
@ -132,6 +132,7 @@ class Transaction:
|
||||||
'lineno': 0,
|
'lineno': 0,
|
||||||
}
|
}
|
||||||
self.meta.update(meta)
|
self.meta.update(meta)
|
||||||
|
if postings is not None:
|
||||||
for posting in postings:
|
for posting in postings:
|
||||||
self.add_posting(*posting)
|
self.add_posting(*posting)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue