classTaxNotKnown(Exception):"""
Exception for when a tax-inclusive price is requested but we don't know
what the tax applicable is (yet).
"""classPrice(object):"""
Simple price class that encapsulates a price and its tax information
Attributes:
incl_tax (Decimal): Price including taxes
excl_tax (Decimal): Price excluding taxes
tax (Decimal): Tax amount
is_tax_known (bool): Whether tax is known
currency (str): 3 character currency code
"""def__init__(self,currency,excl_tax,incl_tax=None,tax=None):self.currency=currency
self.excl_tax=excl_taxifincl_taxisnotNone:self.incl_tax=incl_tax
self.is_tax_known=TrueeliftaxisnotNone:self.incl_tax=excl_tax+tax
self.is_tax_known=Trueelse:self.incl_tax=Noneself.is_tax_known=Falsedef_get_tax(self):returnself.incl_tax-self.excl_taxdef_set_tax(self,value):self.incl_tax=self.excl_tax+value
self.is_tax_known=Truetax=property(_get_tax,_set_tax)def__repr__(self):ifself.is_tax_known:return"%s(currency=%r, excl_tax=%r, incl_tax=%r, tax=%r)"%(self.__class__.__name__,self.currency,self.excl_tax,self.incl_tax,self.tax)return"%s(currency=%r, excl_tax=%r)"%(self.__class__.__name__,self.currency,self.excl_tax)def__eq__(self,other):"""
Two price objects are equal if currency, price.excl_tax and tax match.
"""return(self.currency==other.currencyandself.excl_tax==other.excl_taxandself.incl_tax==other.incl_tax)