usawa

Signed, immutable accounting.
Log | Files | Refs | Submodules | LICENSE

commit 1ddf256a0693efae345a56fd8c4eefbe1274db90
parent 3bf0b89cc80dc2a4a076728b4a32ce92e97f5630
Author: lash <dev@holbrook.no>
Date:   Sat,  4 Apr 2026 22:00:46 -0600

Restore virt real in unit from xml

Diffstat:
Mdummy/usawa/data/schema.xsd | 2+-
Mdummy/usawa/unit.py | 17++++++++---------
2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/dummy/usawa/data/schema.xsd b/dummy/usawa/data/schema.xsd @@ -79,10 +79,10 @@ <xs:complexType name="Unit"> <xs:sequence> <xs:element name="precision" type="xs:positiveInteger" maxOccurs="1" minOccurs="1" /> - <xs:element name="virt" type="xs:string" maxOccurs="unbounded" minOccurs="0" /> </xs:sequence> <xs:attribute name="sym" type="xs:string" /> <xs:attribute name="real" type="xs:boolean" /> + <xs:attribute name="virt" type="xs:boolean" /> </xs:complexType> <xs:complexType name="Rate"> diff --git a/dummy/usawa/unit.py b/dummy/usawa/unit.py @@ -91,14 +91,16 @@ class UnitIndex: :param ex: The exchange rate of the unit, relative to the base unit. Default is 1000000000 (1.0). :type ex: int or float """ - def add(self, sym, precision=2, rate=1000000000, virt=None): + def add(self, sym, precision=2, rate=1000000000, virt=False, real=True): + if not real and not virt: + raise ValueError('either virt or real must be true') if self.detail.get(sym) != None: raise AttributeError('sym already added') self.detail[sym] = precision self.set_rate(sym, rate) if virt: self.virt[sym] = True - else: + if real: self.real[sym] = True @@ -122,10 +124,9 @@ class UnitIndex: sym = o.get('sym') if o.get('real'): r.real[sym] = True - precision = int(o.find('precision', namespaces=nsmap()).text) - virt = o.find('virt', namespaces=nsmap()) - if virt != None: + if o.get('virt') or r.real.get(sym) == None: r.virt[sym] = True + precision = int(o.find('precision', namespaces=nsmap()).text) logg.debug('add unit {} precision {}'.format(sym, precision)) r.detail[sym] = precision r.check() @@ -317,13 +318,11 @@ class UnitIndex: unit.set('sym', k) if self.real.get(k): unit.set('real', '1') + if self.virt.get(k): + unit.set('virt', '1') o = lxml.etree.SubElement(unit, 'precision') o.text = str(self.detail[k]) unit.append(o) - if self.virt.get(k): - o = lxml.etree.SubElement(unit, 'virt') - o.text = '1' - unit.append(o) tree.append(unit) return tree