From 41ae7879177e6351a571c20ceee4e884b7d739e9 Mon Sep 17 00:00:00 2001 From: Ales Erjavec Date: Fri, 31 May 2024 10:29:36 +0200 Subject: [PATCH 1/2] Revert "Merge pull request #6737 from PrimozGodec/fix-tests" This reverts commit bc3d58f9585061494c34913da80bee85b5b1de5a, reversing changes made to 6c99b836c3550690f8118202ac730eadfedc9851. --- Orange/data/io.py | 9 -- Orange/misc/_distmatrix_xlsx.py | 9 -- Orange/misc/openpyxl_patch.py | 100 ----------------------- Orange/misc/tests/test_openpyxl_patch.py | 17 ---- 4 files changed, 135 deletions(-) delete mode 100644 Orange/misc/openpyxl_patch.py delete mode 100644 Orange/misc/tests/test_openpyxl_patch.py diff --git a/Orange/data/io.py b/Orange/data/io.py index b50a73eb807..0959bb725c2 100644 --- a/Orange/data/io.py +++ b/Orange/data/io.py @@ -32,15 +32,6 @@ from Orange.util import flatten -try: - # temporary fix for file not closed issue until openpyxl prepare release - from Orange.misc.openpyxl_patch import read_worksheets - - openpyxl.reader.excel.ExcelReader.read_worksheets = read_worksheets -except: # pylint: disable=bare-except - pass - - # Support values longer than 128K (i.e. text contents features) csv.field_size_limit(100*1024*1024) diff --git a/Orange/misc/_distmatrix_xlsx.py b/Orange/misc/_distmatrix_xlsx.py index 3fe5b2d249b..405a8154f21 100644 --- a/Orange/misc/_distmatrix_xlsx.py +++ b/Orange/misc/_distmatrix_xlsx.py @@ -2,15 +2,6 @@ import openpyxl -try: - # temporary fix for file not closed issue until openpyxl prepare release - from Orange.misc.openpyxl_patch import read_worksheets - - openpyxl.reader.excel.ExcelReader.read_worksheets = read_worksheets -except: # pylint: disable=bare-except - pass - - def read_matrix(filename, sheet_name=None): sheet = _get_sheet(filename, sheet_name) cells, empty_cols, empty_rows = _non_empty_cells(sheet) diff --git a/Orange/misc/openpyxl_patch.py b/Orange/misc/openpyxl_patch.py deleted file mode 100644 index 08d5532a895..00000000000 --- a/Orange/misc/openpyxl_patch.py +++ /dev/null @@ -1,100 +0,0 @@ -import warnings - -from openpyxl.cell import MergedCell -from openpyxl.comments.comment_sheet import CommentSheet -from openpyxl.drawing.spreadsheet_drawing import SpreadsheetDrawing -from openpyxl.packaging.relationship import ( - get_rels_path, - RelationshipList, - get_dependents, -) -from openpyxl.pivot.table import TableDefinition -from openpyxl.reader.drawings import find_images -from openpyxl.worksheet._read_only import ReadOnlyWorksheet -from openpyxl.worksheet._reader import WorksheetReader -from openpyxl.xml.constants import COMMENTS_NS -from openpyxl.xml.functions import fromstring -from openpyxl.worksheet.table import Table - - -# temporary fix for file not closed issue until openpyxl prepare release -# https://foss.heptapod.net/openpyxl/openpyxl/-/merge_requests/ -# 436#7922bd5f66e11e4ca4539f093b2680a25c1f80db -def read_worksheets(self): - # pylint: disable=too-many-branches - comment_warning = ( - "Cell '{0}':{1} is part of a merged range but has a comment which will " - "be removed because merged cells cannot contain any data." - ) - for sheet, rel in self.parser.find_sheets(): - if rel.target not in self.valid_files: - continue - - if "chartsheet" in rel.Type: - self.read_chartsheet(sheet, rel) - continue - - rels_path = get_rels_path(rel.target) - rels = RelationshipList() - if rels_path in self.valid_files: - rels = get_dependents(self.archive, rels_path) - - if self.read_only: - ws = ReadOnlyWorksheet(self.wb, sheet.name, rel.target, self.shared_strings) - ws.sheet_state = sheet.state - self.wb._sheets.append(ws) # pylint: disable=protected-access - continue - fh = self.archive.open(rel.target) - ws = self.wb.create_sheet(sheet.name) - ws._rels = rels # pylint: disable=protected-access - ws_parser = WorksheetReader( - ws, fh, self.shared_strings, self.data_only, self.rich_text - ) - ws_parser.bind_all() - fh.close() - - # assign any comments to cells - for r in rels.find(COMMENTS_NS): - src = self.archive.read(r.target) - comment_sheet = CommentSheet.from_tree(fromstring(src)) - for ref, comment in comment_sheet.comments: - try: - ws[ref].comment = comment - except AttributeError: - c = ws[ref] - if isinstance(c, MergedCell): - warnings.warn(comment_warning.format(ws.title, c.coordinate)) - continue - - # preserve link to VML file if VBA - if self.wb.vba_archive and ws.legacy_drawing: - ws.legacy_drawing = rels.get(ws.legacy_drawing).target - else: - ws.legacy_drawing = None - - for t in ws_parser.tables: - src = self.archive.read(t) - xml = fromstring(src) - table = Table.from_tree(xml) - ws.add_table(table) - - #pylint: disable=protected-access - drawings = rels.find(SpreadsheetDrawing._rel_type) - for rel in drawings: - charts, images = find_images(self.archive, rel.target) - for c in charts: - ws.add_chart(c, c.anchor) - for im in images: - ws.add_image(im, im.anchor) - - pivot_rel = rels.find(TableDefinition.rel_type) - pivot_caches = self.parser.pivot_caches - for r in pivot_rel: - pivot_path = r.Target - src = self.archive.read(pivot_path) - tree = fromstring(src) - pivot = TableDefinition.from_tree(tree) - pivot.cache = pivot_caches[pivot.cacheId] - ws.add_pivot(pivot) - - ws.sheet_state = sheet.state diff --git a/Orange/misc/tests/test_openpyxl_patch.py b/Orange/misc/tests/test_openpyxl_patch.py deleted file mode 100644 index 9f3a3c1b703..00000000000 --- a/Orange/misc/tests/test_openpyxl_patch.py +++ /dev/null @@ -1,17 +0,0 @@ -import unittest - -import openpyxl - - -class TestRemoveTemporarySolution(unittest.TestCase): - def test_remove_openpyxl_temp_solution(self): - """ - When this test starts to fail revert https://github.com/biolab/orange3/pull/6737 - """ - self.assertLessEqual( - [int(x) for x in openpyxl.__version__.split(".")], [3, 1, 2] - ) - - -if __name__ == "__main__": - unittest.main() From 0b7ca119a1e8f5be755624e00e24601af3132bba Mon Sep 17 00:00:00 2001 From: Marko Toplak Date: Fri, 31 May 2024 11:34:51 +0200 Subject: [PATCH 2/2] require openpyxl 3.1.3 --- conda-recipe/meta.yaml | 2 +- requirements-core.txt | 2 +- tox.ini | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conda-recipe/meta.yaml b/conda-recipe/meta.yaml index ed5570d46a7..83cde926243 100644 --- a/conda-recipe/meta.yaml +++ b/conda-recipe/meta.yaml @@ -56,7 +56,7 @@ requirements: - keyrings.alt - networkx - numpy >=1.20.0,<2 - - openpyxl + - openpyxl >=3.1.3 - openTSNE >=0.6.1,!=0.7.0 - pandas >=1.4.0,!=1.5.0,!=2.0.0 - packaging diff --git a/requirements-core.txt b/requirements-core.txt index cbdc1cd04b7..dbfdb669a36 100644 --- a/requirements-core.txt +++ b/requirements-core.txt @@ -10,7 +10,7 @@ keyring keyrings.alt # for alternative keyring implementations networkx numpy>=1.20.0,<2 -openpyxl +openpyxl>=3.1.3 openTSNE>=0.6.1,!=0.7.0 # 0.7.0 segfaults packaging pandas>=1.4.0,!=1.5.0,!=2.0.0 diff --git a/tox.ini b/tox.ini index 3722436a539..fa515f5e328 100644 --- a/tox.ini +++ b/tox.ini @@ -54,7 +54,7 @@ deps = # oldest: keyrings.alt # oldest: networkx oldest: numpy==1.20 - # oldest: openpyxl + oldest: openpyxl==3.1.3 oldest: openTSNE==0.6.1 oldest: pandas==1.4.0 oldest: pip==19.3