From a716c1271d96b4f76d139f22e220dbb6c1d0b334 Mon Sep 17 00:00:00 2001
From: Primoz Godec
Date: Fri, 28 Jan 2022 10:19:59 +0100
Subject: [PATCH 1/2] Table: from_file/from_url remove type transformation
---
Orange/data/table.py | 7 -------
Orange/tests/test_naive_bayes.py | 5 ++++-
Orange/tests/test_table.py | 13 -------------
3 files changed, 4 insertions(+), 21 deletions(-)
diff --git a/Orange/data/table.py b/Orange/data/table.py
index 9cefb1f2b34..4645f1d8d6d 100644
--- a/Orange/data/table.py
+++ b/Orange/data/table.py
@@ -1077,11 +1077,6 @@ def from_file(cls, filename, sheet=None):
reader.select_sheet(sheet)
data = reader.read()
- # Readers return plain table. Make sure to cast it to appropriate
- # (subclass) type
- if cls != data.__class__:
- data = cls(data)
-
# no need to call _init_ids as fuctions from .io already
# construct a table with .ids
@@ -1093,8 +1088,6 @@ def from_url(cls, url):
from Orange.data.io import UrlReader
reader = UrlReader(url)
data = reader.read()
- if cls != data.__class__:
- data = cls(data)
return data
# Helper function for __setitem__:
diff --git a/Orange/tests/test_naive_bayes.py b/Orange/tests/test_naive_bayes.py
index 37c5a52d372..9c20e76a73f 100644
--- a/Orange/tests/test_naive_bayes.py
+++ b/Orange/tests/test_naive_bayes.py
@@ -18,7 +18,10 @@
class NotATable(Table): # pylint: disable=too-many-ancestors,abstract-method
- pass
+ @classmethod
+ def from_file(cls, *args, **kwargs):
+ table = super().from_file(*args, **kwargs)
+ return cls(table)
class TestNaiveBayesLearner(unittest.TestCase):
diff --git a/Orange/tests/test_table.py b/Orange/tests/test_table.py
index f82c9921ae7..e16850ce5ff 100644
--- a/Orange/tests/test_table.py
+++ b/Orange/tests/test_table.py
@@ -2163,19 +2163,6 @@ def test_value_assignment(self):
self.table[i, j] = new_value
self.assertEqual(self.table[i, j], new_value)
- def test_subclasses(self):
- from pathlib import Path
-
- class _ExtendedTable(data.Table):
- pass
-
- data_file = _ExtendedTable('iris')
- data_url = _ExtendedTable.from_url(
- Path(os.path.dirname(__file__), 'datasets/test1.tab').as_uri())
-
- self.assertIsInstance(data_file, _ExtendedTable)
- self.assertIsInstance(data_url, _ExtendedTable)
-
class TestTableStats(TableTests):
def test_get_nan_frequency(self):
From 52567e40f99eed4549e5fbbd0b667a056b319cb4 Mon Sep 17 00:00:00 2001
From: Primoz Godec
Date: Fri, 28 Jan 2022 12:15:01 +0100
Subject: [PATCH 2/2] Table: test from_file unlocked
---
Orange/data/tests/test_table.py | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/Orange/data/tests/test_table.py b/Orange/data/tests/test_table.py
index 52caca50513..0a607b8f431 100644
--- a/Orange/data/tests/test_table.py
+++ b/Orange/data/tests/test_table.py
@@ -385,6 +385,16 @@ def test_unpickled_owns_data(self):
with unpickled.unlocked():
unpickled.X[0, 0] = 42
+ @staticmethod
+ def test_unlock_table_derived():
+ # pylint: disable=abstract-method
+ class ExtendedTable(Table):
+ pass
+
+ t = ExtendedTable.from_file("iris")
+ with t.unlocked():
+ pass
+
class TestTableFilters(unittest.TestCase):
def setUp(self):