Hello community, here is the log from the commit of package python3-openpyxl for openSUSE:Factory checked in at 2016-03-21 12:45:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-openpyxl (Old) and /work/SRC/openSUSE:Factory/.python3-openpyxl.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-openpyxl" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-openpyxl/python3-openpyxl.changes 2016-01-30 11:31:18.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python3-openpyxl.new/python3-openpyxl.changes 2016-03-21 12:45:35.000000000 +0100 @@ -1,0 +2,8 @@ +Sat Mar 19 21:44:36 UTC 2016 - a...@gmx.de + +- update to version 2.3.4: + * #594 Content types might be missing when keeping VBA + * #599 Cells with only one cell look empty + * #607 Serialise NaN as ‘’ + +------------------------------------------------------------------- Old: ---- openpyxl-2.3.3.tar.gz New: ---- openpyxl-2.3.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-openpyxl.spec ++++++ --- /var/tmp/diff_new_pack.DAR9BJ/_old 2016-03-21 12:45:36.000000000 +0100 +++ /var/tmp/diff_new_pack.DAR9BJ/_new 2016-03-21 12:45:36.000000000 +0100 @@ -17,7 +17,7 @@ Name: python3-openpyxl -Version: 2.3.3 +Version: 2.3.4 Release: 0 Summary: A Python library to read/write Excel 2007 xlsx/xlsm files License: MIT and Python-2.0 ++++++ openpyxl-2.3.3.tar.gz -> openpyxl-2.3.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/PKG-INFO new/openpyxl-2.3.4/PKG-INFO --- old/openpyxl-2.3.3/PKG-INFO 2016-01-18 18:51:45.000000000 +0100 +++ new/openpyxl-2.3.4/PKG-INFO 2016-03-16 10:40:03.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: openpyxl -Version: 2.3.3 +Version: 2.3.4 Summary: A Python library to read/write Excel 2010 xlsx/xlsm files Home-page: http://openpyxl.readthedocs.org Author: See AUTHORS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/.constants.json new/openpyxl-2.3.4/openpyxl/.constants.json --- old/openpyxl-2.3.3/openpyxl/.constants.json 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/.constants.json 2016-03-16 10:38:26.000000000 +0100 @@ -4,5 +4,5 @@ "__license__": "MIT/Expat", "__maintainer_email__": "openpyxl-us...@googlegroups.com", "__url__": "http://openpyxl.readthedocs.org", - "__version__": "2.3.3" + "__version__": "2.3.4" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/cell/cell.py new/openpyxl-2.3.4/openpyxl/cell/cell.py --- old/openpyxl-2.3.3/openpyxl/cell/cell.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/cell/cell.py 2016-03-16 10:38:26.000000000 +0100 @@ -321,7 +321,6 @@ but you can modify it afterwards by setting the `value` property, and the hyperlink will remain.""" self._hyperlink = Hyperlink(ref=self.coordinate, target=val) - self.parent.hyperlinks.add(self) if self._value is None: self.value = val diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/compat/strings.py new/openpyxl-2.3.4/openpyxl/compat/strings.py --- old/openpyxl-2.3.3/openpyxl/compat/strings.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/compat/strings.py 2016-03-16 10:38:26.000000000 +0100 @@ -5,6 +5,7 @@ VER = sys.version_info +from math import isnan from .numbers import NUMERIC_TYPES if VER[0] == 3: @@ -26,7 +27,10 @@ def safe_string(value): """Safely and consistently format numeric values""" if isinstance(value, NUMERIC_TYPES): - value = "%.16g" % value + if isnan(value): + value = "" + else: + value = "%.16g" % value elif value is None: value = "none" elif not isinstance(value, basestring): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/packaging/manifest.py new/openpyxl-2.3.4/openpyxl/packaging/manifest.py --- old/openpyxl-2.3.3/openpyxl/packaging/manifest.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/packaging/manifest.py 2016-03-16 10:38:26.000000000 +0100 @@ -153,6 +153,10 @@ node = fromstring(workbook.vba_archive.read(ARC_CONTENT_TYPES)) manifest = Manifest.from_tree(node) del node + partnames = [t.PartName for t in manifest.Override] + for override in DEFAULT_OVERRIDE: + if override.PartName not in partnames: + manifest.Override.append(override) # templates for part in manifest.Override: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/reader/excel.py new/openpyxl-2.3.4/openpyxl/reader/excel.py --- old/openpyxl-2.3.3/openpyxl/reader/excel.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/reader/excel.py 2016-03-16 10:38:26.000000000 +0100 @@ -86,7 +86,7 @@ is_file_like = hasattr(filename, 'read') if not is_file_like and os.path.isfile(filename): - file_format = os.path.splitext(filename)[-1] + file_format = os.path.splitext(filename)[-1].lower() if file_format not in SUPPORTED_FORMATS: if file_format == '.xls': msg = ('openpyxl does not support the old .xls file format, ' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/reader/workbook.py new/openpyxl-2.3.4/openpyxl/reader/workbook.py --- old/openpyxl-2.3.3/openpyxl/reader/workbook.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/reader/workbook.py 2016-03-16 10:38:26.000000000 +0100 @@ -104,11 +104,13 @@ yield rel -def detect_external_links(archive): - rels = read_rels(archive) - for rId, d in rels: - if d['type'] == EXTERNAL_LINK: - pth = d['path'] +def find_external_refs(archive): + xml = archive.read(ARC_WORKBOOK) + tree = fromstring(xml) + ext = tree.findall(".//{%s}externalReference" % SHEET_MAIN_NS) + for ref in ext: + id = ref.attrib["{%s}id" % REL_NS] + yield id def read_workbook_code_name(xml_source): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/workbook/names/external.py new/openpyxl-2.3.4/openpyxl/workbook/names/external.py --- old/openpyxl-2.3.3/openpyxl/workbook/names/external.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/workbook/names/external.py 2016-03-16 10:38:26.000000000 +0100 @@ -10,6 +10,7 @@ REL_NS, PKG_REL_NS, EXTERNAL_LINK_NS, + ARC_WORKBOOK, ) from openpyxl.xml.functions import ( fromstring, @@ -87,18 +88,21 @@ def detect_external_links(rels, archive): - for rId, d in rels: - if d['type'] == EXTERNAL_LINK_NS: - pth = os.path.split(d['path']) - f_name = pth[-1] - dir_name = "/".join(pth[:-1]) - book_path = "{0}/_rels/{1}.rels".format (dir_name, f_name) - book_xml = archive.read(book_path) - Book = parse_books(book_xml) - - range_xml = archive.read(d['path']) - Book.links = list(parse_ranges(range_xml)) - yield Book + from openpyxl.reader.workbook import find_external_refs + rels = dict(rels) + + for rId in find_external_refs(archive): + rel = rels[rId] + pth = os.path.split(rel['path']) + f_name = pth[-1] + dir_name = "/".join(pth[:-1]) + book_path = "{0}/_rels/{1}.rels".format (dir_name, f_name) + book_xml = archive.read(book_path) + Book = parse_books(book_xml) + + range_xml = archive.read(rel['path']) + Book.links = list(parse_ranges(range_xml)) + yield Book def write_external_link(links): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/worksheet/read_only.py new/openpyxl-2.3.4/openpyxl/worksheet/read_only.py --- old/openpyxl-2.3.3/openpyxl/worksheet/read_only.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/worksheet/read_only.py 2016-03-16 10:38:26.000000000 +0100 @@ -74,6 +74,8 @@ def __init__(self, parent_workbook, title, worksheet_path, xml_source, shared_strings): Worksheet.__init__(self, parent_workbook, title) + self._cells = None + self._current_row = None self.worksheet_path = worksheet_path self.shared_strings = shared_strings self.base_date = parent_workbook.excel_base_date diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/worksheet/worksheet.py new/openpyxl-2.3.4/openpyxl/worksheet/worksheet.py --- old/openpyxl-2.3.3/openpyxl/worksheet/worksheet.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/worksheet/worksheet.py 2016-03-16 10:38:26.000000000 +0100 @@ -110,7 +110,7 @@ self._drawing = None self._comment_count = 0 self._merged_cells = [] - self.hyperlinks = set() + self._hyperlinks = [] self._data_validations = [] self.sheet_state = self.SHEETSTATE_VISIBLE self.page_setup = PrintPageSetup(worksheet=self) @@ -611,8 +611,6 @@ for c in islice(chain.from_iterable(cells), 1, None): if c in self._cells: del self._cells[c] - if c in self.hyperlinks: - del self._hyperlinks[c] @property @@ -679,8 +677,8 @@ if isinstance(content, Cell): # compatible with write-only mode cell = content - if cell.parent and cell.parent.parent != self.parent: - raise ValueError("Cells cannot be copied from other workbooks") + if cell.parent and cell.parent != self: + raise ValueError("Cells cannot be copied from other worksheets") cell.parent = self cell.col_idx = col_idx cell.row = row_idx @@ -709,19 +707,19 @@ @property def rows(self): """Iterate over all rows in the worksheet""" - if self.min_row == self.max_row == self.min_column == self.max_column: - return ((),) + if self._current_row == 0: + return () return tuple(self.iter_rows()) @property def columns(self): """Iterate over all columns in the worksheet""" - if self.min_row == self.max_row == self.min_column == self.max_column: - return ((),) + if self._current_row == 0: + return () cols = [] - for col_idx in range(self.max_column): - cells = self.get_squared_range(col_idx + 1, self.min_row, col_idx + 1, self.max_row) + for col_idx in range(1, self.max_column+1): + cells = self.get_squared_range(col_idx, self.min_row, col_idx, self.max_row) col = chain.from_iterable(cells) cols.append(tuple(col)) return tuple(cols) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/writer/etree_worksheet.py new/openpyxl-2.3.4/openpyxl/writer/etree_worksheet.py --- old/openpyxl-2.3.3/openpyxl/writer/etree_worksheet.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/writer/etree_worksheet.py 2016-03-16 10:38:26.000000000 +0100 @@ -73,4 +73,8 @@ cell_content = SubElement(el, 'v') if value is not None: cell_content.text = safe_string(value) + + if cell.hyperlink: + worksheet._hyperlinks.append(cell.hyperlink) + return el diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/writer/lxml_worksheet.py new/openpyxl-2.3.4/openpyxl/writer/lxml_worksheet.py --- old/openpyxl-2.3.3/openpyxl/writer/lxml_worksheet.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/writer/lxml_worksheet.py 2016-03-16 10:38:26.000000000 +0100 @@ -61,3 +61,6 @@ with xf.element("v"): if value is not None: xf.write(safe_string(value)) + + if cell.hyperlink: + worksheet._hyperlinks.append(cell.hyperlink) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/writer/workbook.py new/openpyxl-2.3.4/openpyxl/writer/workbook.py --- old/openpyxl-2.3.3/openpyxl/writer/workbook.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/writer/workbook.py 2016-03-16 10:38:26.000000000 +0100 @@ -121,13 +121,13 @@ # worksheets sheets = SubElement(root, '{%s}sheets' % SHEET_MAIN_NS) - for i, sheet in enumerate(workbook._sheets, 1): + for idx, sheet in enumerate(workbook.worksheets + workbook.chartsheets, 1): sheet_node = SubElement( sheets, '{%s}sheet' % SHEET_MAIN_NS, - {'name': sheet.title, 'sheetId': '%d' % i, - '{%s}id' % REL_NS: 'rId%d' % i }) + {'name': sheet.title, 'sheetId': '%d' % idx, + '{%s}id' % REL_NS: 'rId%d' % idx}) if not sheet.sheet_state == 'visible': - if len(workbook.worksheets) == 1: + if len(workbook._sheets) == 1: raise ValueError("The only worksheet of a workbook cannot be hidden") sheet_node.set('state', sheet.sheet_state) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl/writer/worksheet.py new/openpyxl-2.3.4/openpyxl/writer/worksheet.py --- old/openpyxl-2.3.3/openpyxl/writer/worksheet.py 2016-01-18 18:50:57.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl/writer/worksheet.py 2016-03-16 10:38:26.000000000 +0100 @@ -153,12 +153,10 @@ def write_hyperlinks(worksheet): """Write worksheet hyperlinks to xml.""" - if not worksheet.hyperlinks: + if not worksheet._hyperlinks: return tag = Element('hyperlinks') - for cell in worksheet.hyperlinks: - link = cell.hyperlink - link.ref = cell.coordinate + for link in worksheet._hyperlinks: rel = Relationship(type="hyperlink", targetMode="External", target=link.target) worksheet._rels.append(rel) link.id = "rId{0}".format(len(worksheet._rels)) @@ -181,7 +179,9 @@ def write_worksheet(worksheet, shared_strings): """Write a worksheet to an xml file.""" - worksheet._rels = [] + ws = worksheet + ws._rels = [] + ws._hyperlinks = [] if LXML is True: from .lxml_worksheet import write_cell, write_rows else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openpyxl-2.3.3/openpyxl.egg-info/PKG-INFO new/openpyxl-2.3.4/openpyxl.egg-info/PKG-INFO --- old/openpyxl-2.3.3/openpyxl.egg-info/PKG-INFO 2016-01-18 18:51:45.000000000 +0100 +++ new/openpyxl-2.3.4/openpyxl.egg-info/PKG-INFO 2016-03-16 10:40:02.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: openpyxl -Version: 2.3.3 +Version: 2.3.4 Summary: A Python library to read/write Excel 2010 xlsx/xlsm files Home-page: http://openpyxl.readthedocs.org Author: See AUTHORS