def set_user_defined_metadata(self, name, value): if type(value) is bool: value_type = 'boolean' value = u'true' if value else u'false' elif isinstance(value, (int, float, Decimal)): value_type = 'float' value = unicode(value) elif type(value) is date: value_type = 'date' value = unicode(Date.encode(value)) elif type(value) is datetime: value_type = 'date' value = unicode(DateTime.encode(value)) elif type(value) is str: value_type = 'string' value = unicode(value) elif type(value) is unicode: value_type = 'string' elif type(value) is timedelta: value_type = 'time' value = unicode(Duration.encode(value)) else: raise TypeError, 'unexpected type "%s" for value' % type(value) # Already the same element ? for metadata in self.get_elements('//meta:user-defined'): if metadata.get_attribute('meta:name') == name: break else: metadata = odf_create_element('meta:user-defined') metadata.set_attribute('meta:name', name) self.get_meta_body().append(metadata) metadata.set_attribute('meta:value-type', value_type) metadata.set_text(value)
def set_user_defined_metadata(self, name, value): if type(value) is bool: value_type = 'boolean' value = u'true' if value else u'false' elif isinstance(value, (int, float, Decimal)): value_type = 'float' value = unicode(value) elif type(value) is date: value_type = 'date' value = unicode(Date.encode(value)) elif type(value) is datetime: value_type = 'date' value = unicode(DateTime.encode(value)) elif type(value) is str: value_type = 'string' value = unicode(value) elif type(value) is unicode: value_type = 'string' elif type(value) is timedelta: value_type = 'time' value = unicode(Duration.encode(value)) else: raise TypeError, 'unexpected type "%s" for value' % type(value) # Already the same element ? for metadata in self.get_element_list('//meta:user-defined'): if metadata.get_attribute('meta:name') == name: break else: metadata = odf_create_element('meta:user-defined') metadata.set_attribute('meta:name', name) self.get_meta_body().append(metadata) metadata.set_attribute('meta:value-type', value_type) metadata.set_text(value)
def odf_create_date_variable(date, fixed=False, data_style=None, text=None, date_adjust=None): element = odf_create_element("text:date") element.set_attribute("text:date-value", DateTime.encode(date)) if fixed: element.set_attribute("text:fixed", "true") if data_style is not None: element.set_style_attribute("style:data-style-name", data_style) if text is None: text = Date.encode(date) element.set_text(text) if date_adjust is not None: element.set_attribute("text:date-adjust", Duration.encode(date_adjust)) return element
def odf_create_date_variable(date, fixed=False, data_style=None, text=None, date_adjust=None): element = odf_create_element('text:date') element.set_attribute('text:date-value', DateTime.encode(date)) if fixed: element.set_attribute('text:fixed', 'true') if data_style is not None: element.set_style_attribute('style:data-style-name', data_style) if text is None: text = Date.encode(date) element.set_text(text) if date_adjust is not None: element.set_attribute('text:date-adjust', Duration.encode(date_adjust)) return element
def odf_create_date_variable(date, fixed=False, data_style=None, text=None, date_adjust=None): data = '<text:date text:date-value="%s"/>' element = odf_create_element(data % DateTime.encode(date)) if fixed: element.set_attribute('text:fixed', 'true') if data_style is not None: element.set_attribute('style:data-style-name', data_style) if text is None: text = Date.encode(date) element.set_text(text) if date_adjust is not None: element.set_attribute('text:date-adjust', Duration.encode(date_adjust)) return element
def _set_value_and_type(element, value=None, value_type=None, text=None, currency=None): # Remove possible previous value and type for name in ('office:value-type', 'office:boolean-value', 'office:value', 'office:date-value', 'office:string-value', 'office:time-value', 'table:formula'): try: element.del_attribute('office:currency') except KeyError: pass if value is None: try: element.del_attribute(name) except KeyError: pass element._erase_text_content() return text if type(value) is bool: if value_type is None: value_type = 'boolean' if text is None: text = u'true' if value else u'false' value = Boolean.encode(value) elif isinstance(value, (int, float, long, dec)): if value_type is 'percentage': text = "%d %%" % int(value * 100) if value_type is None: value_type = 'float' if text is None: text = unicode(value) value = str(value) elif type(value) is date: if value_type is None: value_type = 'date' if text is None: text = unicode(Date.encode(value)) value = Date.encode(value) elif type(value) is datetime: if value_type is None: value_type = 'date' if text is None: text = unicode(DateTime.encode(value)) value = DateTime.encode(value) elif type(value) is str: if value_type is None: value_type = 'string' if text is None: text = unicode(value) elif type(value) is unicode: if value_type is None: value_type = 'string' if text is None: text = value elif type(value) is timedelta: if value_type is None: value_type = 'time' if text is None: text = unicode(Duration.encode(value)) value = Duration.encode(value) elif value is not None: raise TypeError, 'type "%s" is unknown' % type(value) if value_type is not None: element.set_attribute('office:value-type', value_type) if value_type == 'boolean': element.set_attribute('office:boolean-value', value) elif value_type == 'currency': element.set_attribute('office:value', value) element.set_attribute('office:currency', currency) elif value_type == 'date': element.set_attribute('office:date-value', value) elif value_type in ('float', 'percentage'): element.set_attribute('office:value', value) elif value_type == 'string': element.set_attribute('office:string-value', value) elif value_type == 'time': element.set_attribute('office:time-value', value) return text
def _set_value_and_type(element, value=None, value_type=None, text=None, currency=None): # Remove possible previous value and type for name in ('office:value-type', 'office:boolean-value', 'office:value', 'office:date-value', 'office:string-value', 'office:time-value'): try: element.del_attribute(name) except KeyError: pass if type(value) is bool: if value_type is None: value_type = 'boolean' if text is None: text = u'true' if value else u'false' value = Boolean.encode(value) elif isinstance(value, (int, float, dec)): if value_type is None: value_type = 'float' if text is None: text = unicode(value) value = str(value) elif type(value) is date: if value_type is None: value_type = 'date' if text is None: text = unicode(Date.encode(value)) value = Date.encode(value) elif type(value) is datetime: if value_type is None: value_type = 'date' if text is None: text = unicode(DateTime.encode(value)) value = DateTime.encode(value) elif type(value) is str: if value_type is None: value_type = 'string' if text is None: text = unicode(value) elif type(value) is unicode: if value_type is None: value_type = 'string' if text is None: text = value elif type(value) is timedelta: if value_type is None: value_type = 'time' if text is None: text = unicode(Duration.encode(value)) value = Duration.encode(value) elif value is not None: raise TypeError, 'type "%s" is unknown' % type(value) if value_type is not None: element.set_attribute('office:value-type', value_type) if value_type == 'boolean': element.set_attribute('office:boolean-value', value) elif value_type == 'currency': element.set_attribute('office:value', value) element.set_attribute('office:currency', currency) elif value_type == 'date': element.set_attribute('office:date-value', value) elif value_type in ('float', 'percentage'): element.set_attribute('office:value', value) elif value_type == 'string': element.set_attribute('office:string-value', value) elif value_type == 'time': element.set_attribute('office:time-value', value) return text