Hello community,
here is the log from the commit of package python-openpyxl for openSUSE:Factory
checked in at 2020-02-03 11:11:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-openpyxl (Old)
and /work/SRC/openSUSE:Factory/.python-openpyxl.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-openpyxl"
Mon Feb 3 11:11:57 2020 rev:15 rq:768796 version:3.0.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-openpyxl/python-openpyxl.changes
2019-11-24 23:46:20.560026385 +0100
+++
/work/SRC/openSUSE:Factory/.python-openpyxl.new.26092/python-openpyxl.changes
2020-02-03 11:12:10.197810107 +0100
@@ -1,0 +2,18 @@
+Thu Jan 30 15:02:50 UTC 2020 - Todd R <[email protected]>
+
+- Update to 3.0.3:
+ + Bugfixes
+ * Exception when handling merged cells with hyperlinks
+ * Problems when both lxml and defusedxml are installed
+ * CFVO with incorrect values cannot be processed
+- Update to 3.0.2:
+ + Bugfixes
+ * DeprecationError if both defusedxml and lxml are installed
+ * ws._current_row is higher than ws.max_row
+ * Border bottom style is not optional when it should be
+ * Empty cells in read-only, values-only mode are sometimes returned as
ReadOnlyCells
+ * Cannot add page breaks to existing worksheets if none exist already
+ + Pull Requests
+ * Improvements to the documentation
+
+-------------------------------------------------------------------
Old:
----
openpyxl-3.0.1.tar.gz
New:
----
openpyxl-3.0.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-openpyxl.spec ++++++
--- /var/tmp/diff_new_pack.ZdcA9r/_old 2020-02-03 11:12:11.169810599 +0100
+++ /var/tmp/diff_new_pack.ZdcA9r/_new 2020-02-03 11:12:11.173810600 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-openpyxl
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,11 +19,11 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-openpyxl
-Version: 3.0.1
+Version: 3.0.3
Release: 0
Summary: A Python library to read/write Excel 2010 xlsx/xlsm files
License: MIT AND Python-2.0
-URL: https://openpyxl.readthedocs.org
+URL: https://bitbucket.org/openpyxl/openpyxl/
Source:
https://files.pythonhosted.org/packages/source/o/openpyxl/openpyxl-%{version}.tar.gz
BuildRequires: %{python_module et_xmlfile}
BuildRequires: %{python_module jdcal}
++++++ openpyxl-3.0.1.tar.gz -> openpyxl-3.0.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/AUTHORS.rst
new/openpyxl-3.0.3/AUTHORS.rst
--- old/openpyxl-3.0.1/AUTHORS.rst 2019-09-25 16:19:46.000000000 +0200
+++ new/openpyxl-3.0.3/AUTHORS.rst 2020-01-10 17:42:44.000000000 +0100
@@ -26,6 +26,7 @@
* Dmitriy Chernyshov
* Dominik Geldmacher
* Don Freeman
+* Eirikur Fannar Torfason
* Elias Rabel
* Eric Chlebek
* Eric Gazoni
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/PKG-INFO new/openpyxl-3.0.3/PKG-INFO
--- old/openpyxl-3.0.1/PKG-INFO 2019-11-14 14:10:34.000000000 +0100
+++ new/openpyxl-3.0.3/PKG-INFO 2020-01-10 17:44:02.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: openpyxl
-Version: 3.0.1
+Version: 3.0.3
Summary: A Python library to read/write Excel 2010 xlsx/xlsm files
Home-page: https://openpyxl.readthedocs.io
Author: See AUTHORS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/_constants.py
new/openpyxl-3.0.3/openpyxl/_constants.py
--- old/openpyxl-3.0.1/openpyxl/_constants.py 2019-11-14 14:10:24.000000000
+0100
+++ new/openpyxl-3.0.3/openpyxl/_constants.py 2020-01-10 17:42:44.000000000
+0100
@@ -1,7 +1,7 @@
# Copyright (c) 2010-2019 openpyxl
"""
-Package medata
+Package metadata
"""
__author__ = "See AUTHORS"
@@ -9,4 +9,4 @@
__license__ = "MIT"
__maintainer_email__ = "[email protected]"
__url__ = "https://openpyxl.readthedocs.io"
-__version__ = "3.0.1"
+__version__ = "3.0.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/cell/cell.py
new/openpyxl-3.0.3/openpyxl/cell/cell.py
--- old/openpyxl-3.0.1/openpyxl/cell/cell.py 2019-11-14 14:10:24.000000000
+0100
+++ new/openpyxl-3.0.3/openpyxl/cell/cell.py 2020-01-10 17:42:44.000000000
+0100
@@ -15,35 +15,15 @@
import datetime
import re
-from itertools import islice, product
from openpyxl.compat import (
NUMERIC_TYPES,
deprecated,
)
-from openpyxl.utils.units import (
- DEFAULT_ROW_HEIGHT,
- DEFAULT_COLUMN_WIDTH
-)
-from openpyxl.utils.datetime import (
- to_excel,
- time_to_days,
- timedelta_to_days,
- from_excel
- )
-from openpyxl.utils.exceptions import (
- IllegalCharacterError
-)
-from openpyxl.utils.units import points_to_pixels
-from openpyxl.utils import (
- get_column_letter,
- column_index_from_string,
-)
-from openpyxl.utils.inference import (
- cast_numeric,
- cast_percentage,
- cast_percentage,
-)
+
+from openpyxl.utils.exceptions import IllegalCharacterError
+
+from openpyxl.utils import get_column_letter
from openpyxl.styles import numbers, is_date_format
from openpyxl.styles.styleable import StyleableObject
from openpyxl.worksheet.hyperlink import Hyperlink
@@ -160,9 +140,6 @@
def base_date(self):
return self.parent.parent.epoch
- @property
- def guess_types(self):
- return getattr(self.parent.parent, 'guess_types', False)
def __repr__(self):
return "<Cell {0!r}.{1}>".format(self.parent.title, self.coordinate)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/conftest.py
new/openpyxl-3.0.3/openpyxl/conftest.py
--- old/openpyxl-3.0.1/openpyxl/conftest.py 2019-09-25 16:19:47.000000000
+0200
+++ new/openpyxl-3.0.3/openpyxl/conftest.py 2020-01-10 17:42:44.000000000
+0100
@@ -5,7 +5,9 @@
### Markers ###
+
def pytest_runtest_setup(item):
+ from openpyxl import DEFUSEDXML, LXML
if isinstance(item, pytest.Function):
try:
from PIL import Image
@@ -18,11 +20,9 @@
elif item.get_closest_marker("not_py33"):
pytest.skip("Ordering is not a given in Python 3")
elif item.get_closest_marker("defusedxml_required"):
- from openpyxl import DEFUSEDXML
- if not DEFUSEDXML:
+ if LXML or not DEFUSEDXML:
pytest.skip("defusedxml is required to guard against these
vulnerabilities")
elif item.get_closest_marker("lxml_required"):
- from openpyxl import LXML
if not LXML:
pytest.skip("LXML is required for some features such as schema
validation")
elif item.get_closest_marker("lxml_buffering"):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/formatting/rule.py
new/openpyxl-3.0.3/openpyxl/formatting/rule.py
--- old/openpyxl-3.0.1/openpyxl/formatting/rule.py 2019-11-13
10:08:15.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/formatting/rule.py 2020-01-10
17:42:44.000000000 +0100
@@ -11,7 +11,7 @@
Integer,
Float,
)
-from openpyxl.descriptors.excel import HexBinary, ExtensionList
+from openpyxl.descriptors.excel import ExtensionList
from openpyxl.styles.colors import Color, ColorDescriptor
from openpyxl.styles.differential import DifferentialStyle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/reader/excel.py
new/openpyxl-3.0.3/openpyxl/reader/excel.py
--- old/openpyxl-3.0.1/openpyxl/reader/excel.py 2019-11-13 10:08:15.000000000
+0100
+++ new/openpyxl-3.0.3/openpyxl/reader/excel.py 2019-11-25 18:57:01.000000000
+0100
@@ -295,9 +295,6 @@
:param keep_vba: preseve vba content (this does NOT mean you can use it)
:type keep_vba: bool
- :param guess_types: guess cell content type and do not read it from the
file
- :type guess_types: bool
-
:param data_only: controls whether cells with formulae have either the
formula (default) or the value stored the last time Excel read the sheet
:type data_only: bool
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/styles/borders.py
new/openpyxl-3.0.3/openpyxl/styles/borders.py
--- old/openpyxl-3.0.1/openpyxl/styles/borders.py 2019-11-13
10:08:15.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/styles/borders.py 2019-11-25
18:57:01.000000000 +0100
@@ -75,7 +75,7 @@
left = Typed(expected_type=Side, allow_none=True)
right = Typed(expected_type=Side, allow_none=True)
top = Typed(expected_type=Side, allow_none=True)
- bottom = Typed(expected_type=Side)
+ bottom = Typed(expected_type=Side, allow_none=True)
diagonal = Typed(expected_type=Side, allow_none=True)
vertical = Typed(expected_type=Side, allow_none=True)
horizontal = Typed(expected_type=Side, allow_none=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/utils/units.py
new/openpyxl-3.0.3/openpyxl/utils/units.py
--- old/openpyxl-3.0.1/openpyxl/utils/units.py 2019-11-13 10:08:15.000000000
+0100
+++ new/openpyxl-3.0.3/openpyxl/utils/units.py 2019-11-25 18:57:01.000000000
+0100
@@ -7,8 +7,9 @@
#constants
DEFAULT_ROW_HEIGHT = 15. # Default row height measured in point size.
-BASE_COL_WIDTH = 13 # in characters
-DEFAULT_COLUMN_WIDTH = 51.85 # in points, should be characters
+BASE_COL_WIDTH = 8 # in characters
+DEFAULT_COLUMN_WIDTH = BASE_COL_WIDTH + 5
+# = baseColumnWidth + {margin padding (2 pixels on each side, totalling 4
pixels)} + {gridline (1pixel)}
DEFAULT_LEFT_MARGIN = 0.7 # in inches, = right margin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/workbook/workbook.py
new/openpyxl-3.0.3/openpyxl/workbook/workbook.py
--- old/openpyxl-3.0.1/openpyxl/workbook/workbook.py 2019-11-14
14:10:24.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/workbook/workbook.py 2020-01-10
17:42:44.000000000 +0100
@@ -129,22 +129,6 @@
@property
- def guess_types(self):
- return getattr(self, '__guess_types', False)
-
-
- @guess_types.setter
- def guess_types(self, value):
- self.__guess_types = value
-
-
- @deprecated("Use the .active property")
- def get_active_sheet(self):
- """Returns the current active sheet."""
- return self.active
-
-
- @property
def excel_base_date(self):
return self.epoch
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/worksheet/_read_only.py
new/openpyxl-3.0.3/openpyxl/worksheet/_read_only.py
--- old/openpyxl-3.0.1/openpyxl/worksheet/_read_only.py 2019-11-14
14:10:24.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/worksheet/_read_only.py 2019-11-25
18:57:01.000000000 +0100
@@ -115,7 +115,9 @@
counter = cell['column']
if min_col <= counter <= max_col:
idx = counter - min_col # position in list of cells returned
- new_row[idx] = values_only and cell['value'] or
ReadOnlyCell(self, **cell)
+ new_row[idx] = cell['value']
+ if not values_only:
+ new_row[idx] = ReadOnlyCell(self, **cell)
return tuple(new_row)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/worksheet/_reader.py
new/openpyxl-3.0.3/openpyxl/worksheet/_reader.py
--- old/openpyxl-3.0.1/openpyxl/worksheet/_reader.py 2019-11-14
14:10:24.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/worksheet/_reader.py 2020-01-10
17:42:44.000000000 +0100
@@ -1,13 +1,14 @@
# Copyright (c) 2010-2019 openpyxl
"""Reader for a single worksheet."""
+import traceback
from warnings import warn
# compatibility imports
from openpyxl.xml.functions import iterparse
# package imports
-from openpyxl.cell import Cell
+from openpyxl.cell import Cell, MergedCell
from openpyxl.cell.text import Text
from openpyxl.worksheet.dimensions import (
ColumnDimension,
@@ -85,14 +86,14 @@
def __init__(self, src, shared_strings, data_only=False,
epoch=WINDOWS_EPOCH, date_formats=set()):
- self.min_row = self.min_col = self.max_row = self.max_column = None
+ self.min_row = self.min_col = None
self.epoch = epoch
self.source = src
self.shared_strings = shared_strings
self.data_only = data_only
self.shared_formulae = {}
self.array_formulae = {}
- self.max_row = self.max_column = 0
+ self.row_counter = self.col_counter = 0
self.tables = TablePartList()
self.date_formats = date_formats
self.row_dimensions = {}
@@ -103,7 +104,8 @@
self.formatting = []
self.legacy_drawing = None
self.merged_cells = None
- self.page_breaks = []
+ self.row_breaks = RowBreak()
+ self.col_breaks = ColBreak()
def parse(self):
@@ -132,6 +134,7 @@
TABLE_TAG: ('tables', TablePartList),
HYPERLINK_TAG: ('hyperlinks', HyperlinkList),
MERGE_TAG: ('merged_cells', MergeCells),
+
}
it = iterparse(self.source)
@@ -172,7 +175,7 @@
def parse_cell(self, element):
data_type = element.get('t', 'n')
coordinate = element.get('r')
- self.max_column += 1
+ self.col_counter += 1
style_id = element.get('s', 0)
if style_id:
style_id = int(style_id)
@@ -185,7 +188,7 @@
if coordinate:
row, column = coordinate_to_tuple(coordinate)
else:
- row, column = self.max_row, self.max_column
+ row, column = self.row_counter, self.col_counter
if not self.data_only and element.find(FORMULA_TAG) is not None:
data_type = 'f'
@@ -258,22 +261,27 @@
attrs = dict(row.attrib)
if "r" in attrs:
- self.max_row = int(attrs['r'])
+ self.row_counter = int(attrs['r'])
else:
- self.max_row += 1
+ self.row_counter += 1
+ self.col_counter = 0
keys = {k for k in attrs if not k.startswith('{')}
- if keys != {'r', 'spans'} and keys != {'r'}:
+ if keys - {'r', 'spans'}:
# don't create dimension objects unless they have relevant
information
- self.row_dimensions[attrs['r']] = attrs
+ self.row_dimensions[str(self.row_counter)] = attrs
cells = [self.parse_cell(el) for el in row]
- return self.max_row, cells
+ return self.row_counter, cells
def parse_formatting(self, element):
- cf = ConditionalFormatting.from_tree(element)
- self.formatting.append(cf)
+ try:
+ cf = ConditionalFormatting.from_tree(element)
+ self.formatting.append(cf)
+ except TypeError:
+ msg = f"Failed to load a conditional formatting rule. It will be
discarded. Cause: {traceback.format_exc()}"
+ warn(msg)
def parse_sheet_protection(self, element):
@@ -299,17 +307,19 @@
def parse_row_breaks(self, element):
brk = RowBreak.from_tree(element)
- self.page_breaks.append(brk)
+ self.row_breaks = brk
def parse_col_breaks(self, element):
brk = ColBreak.from_tree(element)
- self.page_breaks.append(brk)
+ self.col_breaks = brk
def parse_custom_views(self, element):
- # clear page_breaks to avoid duplication
- self.page_breaks = []
+ # clear page_breaks to avoid duplication which Excel doesn't like
+ # basically they're ignored in custom views
+ self.row_breaks = RowBreak()
+ self.col_breaks = ColBreak()
class WorksheetReader(object):
@@ -332,7 +342,8 @@
c.data_type = cell['data_type']
self.ws._cells[(cell['row'], cell['column'])] = c
self.ws.formula_attributes = self.parser.array_formulae
- self.ws._current_row = self.parser.max_row
+ if self.ws._cells:
+ self.ws._current_row = self.ws.max_row # use cells not row
dimensions
def bind_formatting(self):
@@ -371,8 +382,19 @@
except AttributeError:
pass
else:
- self.ws[link.ref].hyperlink = link
+ cell = self.ws[link.ref]
+ if isinstance(cell, MergedCell):
+ cell = self.normalize_merged_cell_link(cell.coordinate)
+ cell.hyperlink = link
+ def normalize_merged_cell_link(self, coord):
+ """
+ Returns the appropriate cell to which a hyperlink, which references a
merged cell at the specified coordinates,
+ should be bound.
+ """
+ for rng in self.ws.merged_cells:
+ if coord in rng:
+ return self.ws.cell(*rng.top[0])
def bind_col_dimensions(self):
for col, cd in self.parser.column_dimensions.items():
@@ -394,7 +416,7 @@
for k in ('print_options', 'page_margins', 'page_setup',
'HeaderFooter', 'auto_filter', 'data_validations',
'sheet_properties', 'views', 'sheet_format',
- 'page_breaks', 'scenarios', 'legacy_drawing'):
+ 'row_breaks', 'col_breaks', 'scenarios', 'legacy_drawing'):
v = getattr(self.parser, k, None)
if v is not None:
setattr(self.ws, k, v)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/worksheet/_writer.py
new/openpyxl-3.0.3/openpyxl/worksheet/_writer.py
--- old/openpyxl-3.0.1/openpyxl/worksheet/_writer.py 2019-11-14
14:10:24.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/worksheet/_writer.py 2019-11-25
18:57:01.000000000 +0100
@@ -234,7 +234,7 @@
def write_breaks(self):
- brks = self.ws.page_breaks
+ brks = (self.ws.row_breaks, self.ws.col_breaks)
for brk in brks:
if brk:
self.xf.send(brk.to_tree())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/worksheet/dimensions.py
new/openpyxl-3.0.3/openpyxl/worksheet/dimensions.py
--- old/openpyxl-3.0.1/openpyxl/worksheet/dimensions.py 2019-11-14
14:10:24.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/worksheet/dimensions.py 2019-11-25
18:57:01.000000000 +0100
@@ -8,6 +8,7 @@
column_index_from_string,
range_boundaries,
)
+from openpyxl.utils.units import DEFAULT_COLUMN_WIDTH
from openpyxl.descriptors import (
Integer,
Float,
@@ -134,7 +135,7 @@
def __init__(self,
worksheet,
index='A',
- width=0,
+ width=DEFAULT_COLUMN_WIDTH,
bestFit=False,
hidden=False,
outlineLevel=0,
@@ -227,20 +228,19 @@
return value.min
el = Element('cols')
- obj = None
outlines = set()
for col in sorted(self.values(), key=sorter):
obj = col.to_tree()
- outlines.add(col.outlineLevel)
if obj is not None:
+ outlines.add(col.outlineLevel)
el.append(obj)
if outlines:
self.max_outline = max(outlines)
- if obj is not None:
- return el
+ if len(el):
+ return el # must have at least one child
class SheetFormatProperties(Serialisable):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/worksheet/worksheet.py
new/openpyxl-3.0.3/openpyxl/worksheet/worksheet.py
--- old/openpyxl-3.0.1/openpyxl/worksheet/worksheet.py 2019-11-14
14:10:24.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/worksheet/worksheet.py 2019-11-25
18:57:01.000000000 +0100
@@ -102,7 +102,6 @@
default_factory=self._add_column)
self.row_breaks = RowBreak()
self.col_breaks = ColBreak()
- self.page_breaks = (self.row_breaks, self.col_breaks)
self._cells = {}
self._charts = []
self._images = []
@@ -150,6 +149,12 @@
def active_cell(self):
return self.sheet_view.selection[0].activeCell
+
+ @property
+ def page_breaks(self):
+ return (self.row_breaks, self.col_breaks) # legacy, remove at some
point
+
+
@property
def show_gridlines(self):
return self.sheet_view.showGridLines
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl/xml/functions.py
new/openpyxl-3.0.3/openpyxl/xml/functions.py
--- old/openpyxl-3.0.1/openpyxl/xml/functions.py 2019-11-13
10:08:15.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl/xml/functions.py 2020-01-10
17:42:44.000000000 +0100
@@ -7,59 +7,39 @@
# Python stdlib imports
import re
from functools import partial
-# compatibility
-# package imports
from openpyxl import DEFUSEDXML, LXML
if LXML is True:
from lxml.etree import (
Element,
- ElementTree,
SubElement,
register_namespace,
QName,
xmlfile,
XMLParser,
)
- from lxml.etree import XMLSyntaxError
-
- if DEFUSEDXML is True:
- from defusedxml.common import DefusedXmlException
- from defusedxml.cElementTree import iterparse
- from defusedxml.lxml import fromstring as _fromstring, tostring
-
- def fromstring(*args, **kwargs):
- try:
- return _fromstring(*args, **kwargs)
- except XMLSyntaxError as e:
- raise DefusedXmlException(str(e))
- else:
- from lxml.etree import fromstring, tostring
- from xml.etree.cElementTree import iterparse
- # do not resolve entities
- safe_parser = XMLParser(resolve_entities=False)
- fromstring = partial(fromstring, parser=safe_parser)
+ from lxml.etree import fromstring, tostring
+ # do not resolve entities
+ safe_parser = XMLParser(resolve_entities=False)
+ fromstring = partial(fromstring, parser=safe_parser)
else:
from xml.etree.ElementTree import (
- ElementTree,
Element,
SubElement,
fromstring,
tostring,
- iterparse,
QName,
register_namespace
)
- if DEFUSEDXML is True:
- from defusedxml.cElementTree import (
- fromstring,
- tostring,
- iterparse,
- )
from et_xmlfile import xmlfile
+ if DEFUSEDXML is True:
+ from defusedxml.ElementTree import fromstring
+from xml.etree.ElementTree import iterparse
+if DEFUSEDXML is True:
+ from defusedxml.ElementTree import iterparse
from openpyxl.xml.constants import (
CHART_NS,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openpyxl-3.0.1/openpyxl.egg-info/PKG-INFO
new/openpyxl-3.0.3/openpyxl.egg-info/PKG-INFO
--- old/openpyxl-3.0.1/openpyxl.egg-info/PKG-INFO 2019-11-14
14:10:34.000000000 +0100
+++ new/openpyxl-3.0.3/openpyxl.egg-info/PKG-INFO 2020-01-10
17:44:02.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: openpyxl
-Version: 3.0.1
+Version: 3.0.3
Summary: A Python library to read/write Excel 2010 xlsx/xlsm files
Home-page: https://openpyxl.readthedocs.io
Author: See AUTHORS