reports: Add BaseODS.set_custom_property() method.

This commit is contained in:
Brett Smith 2020-07-29 16:54:28 -04:00
parent 59b088b573
commit 04be991e19

View file

@ -1052,6 +1052,37 @@ class BaseODS(BaseSpreadsheet[RT, ST], metaclass=abc.ABCMeta):
### Properties
def set_custom_property(self,
name: str,
value: Any,
valuetype: Optional[str]=None,
) -> odf.meta.UserDefined:
if valuetype is None:
if isinstance(value, bool):
valuetype = 'boolean'
elif isinstance(value, (datetime.date, datetime.datetime)):
valuetype = 'date'
elif isinstance(value, (int, float, Decimal)):
valuetype = 'float'
if not isinstance(value, str):
if valuetype == 'boolean':
value = 'true' if value else 'false'
elif valuetype == 'date':
value = value.isoformat()
else:
value = str(value)
retval = self.ensure_child(self.document.meta, odf.meta.UserDefined, name=name)
if valuetype is None:
try:
retval.removeAttribute('valuetype')
except KeyError:
pass
else:
retval.setAttribute('valuetype', valuetype)
retval.childNodes.clear()
retval.addText(value)
return retval
def set_properties(self, *,
created: Optional[datetime.datetime]=None,
generator: str='conservancy_beancount',