Exemple #1
0
def _get_element_list(context, element_name, content=None, href=None,
        svg_title=None, svg_desc=None, dc_creator=None, dc_date=None, **kw):
    query = _make_xpath_query(element_name, **kw)
    elements = context.get_element_list(query)
    # Filter the elements with the regex (TODO use XPath)
    if content is not None:
        elements = [element for element in elements if element.match(content)]
    if href is not None:
        filtered = []
        for element in elements:
            href_attr = element.get_attribute('xlink:href')
            if search(href, href_attr) is not None:
                filtered.append(element)
        elements = filtered
    if dc_date is not None:
        # XXX Date or DateTime?
        dc_date = DateTime.encode(dc_date)
    for variable, childname in [
            (svg_title, 'svg:title'),
            (svg_desc, 'svg:desc'),
            (dc_creator, 'descendant::dc:creator'),
            (dc_date, 'descendant::dc:date')]:
        if not variable:
            continue
        filtered = []
        for element in elements:
            child = element.get_element(childname)
            if child and child.match(variable):
                filtered.append(element)
        elements = filtered
    return elements
Exemple #2
0
 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)
Exemple #3
0
def _get_elements(context, element_name, content=None, url=None,
        svg_title=None, svg_desc=None, dc_creator=None, dc_date=None, **kw):
    query = _make_xpath_query(element_name, **kw)
    elements = context.get_elements(query)
    # Filter the elements with the regex (TODO use XPath)
    if content is not None:
        elements = [element for element in elements if element.match(content)]
    if url is not None:
        filtered = []
        for element in elements:
            url_attr = element.get_attribute('xlink:href')
            if search(url, url_attr) is not None:
                filtered.append(element)
        elements = filtered
    if dc_date is not None:
        # XXX Date or DateTime?
        dc_date = DateTime.encode(dc_date)
    for variable, childname in [
            (svg_title, 'svg:title'),
            (svg_desc, 'svg:desc'),
            (dc_creator, 'descendant::dc:creator'),
            (dc_date, 'descendant::dc:date')]:
        if not variable:
            continue
        filtered = []
        for element in elements:
            child = element.get_element(childname)
            if child and child.match(variable):
                filtered.append(element)
        elements = filtered
    return elements
Exemple #4
0
 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)
Exemple #5
0
    def set_creation_date(self, date):
        """Set the creation date of the document.

        Arguments:

            date -- datetime
        """
        element = self.get_element('//meta:creation-date')
        if element is None:
            element = odf_create_element('meta:creation-date')
            self.get_meta_body().append(element)
        creation_date = DateTime.encode(date)
        element.set_text(creation_date)
Exemple #6
0
    def set_modification_date(self, date):
        """Set the last modified date of the document.

        Arguments:

            date -- datetime
        """
        element = self.get_element('//dc:date')
        if element is None:
            element = odf_create_element('dc:date')
            self.get_meta_body().append(element)
        modification_date = DateTime.encode(date)
        element.set_text(modification_date)
Exemple #7
0
    def set_creation_date(self, date):
        """Set the creation date of the document.

        Arguments:

            date -- datetime
        """
        element = self.get_element('//meta:creation-date')
        if element is None:
            element = odf_create_element('meta:creation-date')
            self.get_meta_body().append(element)
        creation_date = DateTime.encode(date)
        element.set_text(creation_date)
Exemple #8
0
    def set_modification_date(self, date):
        """Set the last modified date of the document.

        Arguments:

            date -- datetime
        """
        element = self.get_element('//dc:date')
        if element is None:
            element = odf_create_element('dc:date')
            self.get_meta_body().append(element)
        modification_date = DateTime.encode(date)
        element.set_text(modification_date)
Exemple #9
0
def odf_create_time_variable(time, fixed=False, data_style=None, text=None, time_adjust=None):
    element = odf_create_element("text:time")
    element.set_attribute("text:time-value", DateTime.encode(time))
    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 = time.strftime("%H:%M:%S")
    element.set_text(text)
    if time_adjust is not None:
        element.set_attribute("text:time-adjust", Duration.encode(time_adjust))
    return element
Exemple #10
0
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
Exemple #11
0
def odf_create_time_variable(time, fixed=False, data_style=None, text=None,
        time_adjust=None):
    element = odf_create_element('text:time')
    element.set_attribute('text:time-value', DateTime.encode(time))
    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 = time.strftime('%H:%M:%S')
    element.set_text(text)
    if time_adjust is not None:
        element.set_attribute('text:time-adjust',
                               Duration.encode(time_adjust))
    return element
def odf_create_time_variable(time, fixed=False, data_style=None, text=None,
        time_adjust=None):
    data = '<text:time text:time-value="%s"/>'
    element = odf_create_element(data % DateTime.encode(time))
    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 = time.strftime('%H:%M:%S')
    element.set_text(text)
    if time_adjust is not None:
        element.set_attribute('text:time-adjust',
                               Duration.encode(time_adjust))
    return element
Exemple #13
0
    def set_dc_date(self, date=None):
        """Set the date of the change. If date is None, use current time.

        Arguments:

            date -- datetime
        """
        if date is None:
            date = datetime.now()
        dcdate = DateTime.encode(date)
        element = self.get_element('dc:date')
        if element is None:
            element = odf_create_element('dc:date')
            self.insert(element, xmlposition=LAST_CHILD)
        element.set_text(dcdate)
Exemple #14
0
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
Exemple #15
0
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
 def set_dc_date(self, date):
     dc_date = self.get_element('descendant::dc:date')
     if dc_date is None:
         dc_date = odf_create_element('<dc:date/>')
         self.append_element(dc_date)
     dc_date.set_text(DateTime.encode(date))