Skip to content

Commit 3015722

Browse files
authored
Merge pull request #5198 from ales-erjavec/datasets-no-self-capture
[FIX] owdataset: Do not capture self in closure
2 parents 3d6b923 + db6e84f commit 3015722

File tree

2 files changed

+24
-24
lines changed

2 files changed

+24
-24
lines changed

Orange/widgets/data/owdatasets.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ def ensure_local(index_url, file_path, local_cache_path,
4444
return localfiles.localpath_download(*file_path, callback=progress_advance)
4545

4646

47+
def list_remote(server: str) -> Dict[Tuple[str, ...], dict]:
48+
client = ServerFiles(server)
49+
return client.allinfo()
50+
51+
52+
def list_local(path: str) -> Dict[Tuple[str, ...], dict]:
53+
return LocalFiles(path).allinfo()
54+
55+
4756
def format_exception(error):
4857
# type: (BaseException) -> str
4958
return "\n".join(traceback.format_exception_only(type(error), error))
@@ -256,7 +265,7 @@ def __init__(self):
256265
self.setStatusMessage("Initializing")
257266

258267
self._executor = ThreadPoolExecutor(max_workers=1)
259-
f = self._executor.submit(self.list_remote)
268+
f = self._executor.submit(list_remote, self.INDEX_URL)
260269
w = FutureWatcher(f, parent=self)
261270
w.done.connect(self.__set_index)
262271

@@ -349,7 +358,7 @@ def __set_index(self, f):
349358
assert f.done()
350359
self.setBlocking(False)
351360
self.setStatusMessage("")
352-
self.allinfo_local = self.list_local()
361+
self.allinfo_local = list_local(self.local_cache_path)
353362

354363
try:
355364
self.allinfo_remote = f.result()
@@ -385,7 +394,7 @@ def __set_index(self, f):
385394

386395
def __update_cached_state(self):
387396
model = self.view.model().sourceModel()
388-
localinfo = self.list_local()
397+
localinfo = list_local(self.local_cache_path)
389398
assert isinstance(model, QStandardItemModel)
390399
allinfo = []
391400
for i in range(model.rowCount()):
@@ -552,15 +561,6 @@ def load_and_output(self, path):
552561
def load_data(path):
553562
return Orange.data.Table(path)
554563

555-
def list_remote(self):
556-
# type: () -> Dict[Tuple[str, ...], dict]
557-
client = ServerFiles(server=self.INDEX_URL)
558-
return client.allinfo()
559-
560-
def list_local(self):
561-
# type: () -> Dict[Tuple[str, ...], dict]
562-
return LocalFiles(self.local_cache_path).allinfo()
563-
564564

565565
class FutureWatcher(QObject):
566566
done = Signal(object)

Orange/widgets/data/tests/test_owdatasets.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@
1111

1212

1313
class TestOWDataSets(WidgetTest):
14-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_remote",
14+
@patch("Orange.widgets.data.owdatasets.list_remote",
1515
Mock(side_effect=requests.exceptions.ConnectionError))
16-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_local",
16+
@patch("Orange.widgets.data.owdatasets.list_local",
1717
Mock(return_value={}))
1818
@patch("Orange.widgets.data.owdatasets.log", Mock())
1919
def test_no_internet_connection(self):
2020
w = self.create_widget(OWDataSets) # type: OWDataSets
2121
self.wait_until_stop_blocking(w)
2222
self.assertTrue(w.Error.no_remote_datasets.is_shown())
2323

24-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_remote",
24+
@patch("Orange.widgets.data.owdatasets.list_remote",
2525
Mock(side_effect=requests.exceptions.ConnectionError))
26-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_local",
26+
@patch("Orange.widgets.data.owdatasets.list_local",
2727
Mock(return_value={('core', 'foo.tab'): {}}))
2828
@patch("Orange.widgets.data.owdatasets.log", Mock())
2929
def test_only_local(self):
@@ -32,9 +32,9 @@ def test_only_local(self):
3232
self.assertTrue(w.Warning.only_local_datasets.is_shown())
3333
self.assertEqual(w.view.model().rowCount(), 1)
3434

35-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_remote",
35+
@patch("Orange.widgets.data.owdatasets.list_remote",
3636
Mock(side_effect=requests.exceptions.ConnectionError))
37-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_local",
37+
@patch("Orange.widgets.data.owdatasets.list_local",
3838
Mock(return_value={('core', 'foo.tab'): {},
3939
('core', 'bar.tab'): {}}))
4040
@patch("Orange.widgets.data.owdatasets.log", Mock())
@@ -49,9 +49,9 @@ def test_filtering(self):
4949
w.filterLineEdit.setText("")
5050
self.assertEqual(w.view.model().rowCount(), 2)
5151

52-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_remote",
52+
@patch("Orange.widgets.data.owdatasets.list_remote",
5353
Mock(return_value={('core', 'iris.tab'): {}}))
54-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_local",
54+
@patch("Orange.widgets.data.owdatasets.list_local",
5555
Mock(return_value={}))
5656
@patch("Orange.widgets.data.owdatasets.ensure_local",
5757
Mock(return_value="iris.tab"))
@@ -65,9 +65,9 @@ def test_download_iris(self):
6565
iris = self.get_output(w.Outputs.data, w)
6666
self.assertEqual(len(iris), 150)
6767

68-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_remote",
68+
@patch("Orange.widgets.data.owdatasets.list_remote",
6969
Mock(side_effect=requests.exceptions.ConnectionError))
70-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_local",
70+
@patch("Orange.widgets.data.owdatasets.list_local",
7171
Mock(return_value={('dir1', 'dir2', 'foo.tab'): {},
7272
('bar.tab',): {}}))
7373
@patch("Orange.widgets.data.owdatasets.log", Mock())
@@ -76,9 +76,9 @@ def test_dir_depth(self):
7676
self.wait_until_stop_blocking(w)
7777
self.assertEqual(w.view.model().rowCount(), 2)
7878

79-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_remote",
79+
@patch("Orange.widgets.data.owdatasets.list_remote",
8080
Mock(return_value={('core', 'iris.tab'): {}}))
81-
@patch("Orange.widgets.data.owdatasets.OWDataSets.list_local",
81+
@patch("Orange.widgets.data.owdatasets.list_local",
8282
Mock(return_value={}))
8383
@patch("Orange.widgets.data.owdatasets.ensure_local",
8484
Mock(return_value="iris.tab"))

0 commit comments

Comments
 (0)