From 2f296908878b36dbabc9ab82e8adf7c502eac778 Mon Sep 17 00:00:00 2001 From: bagel897 Date: Sun, 15 Jan 2023 16:58:26 -0600 Subject: [PATCH 1/7] fix: Autoimport closes #645 --- rope/contrib/autoimport/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rope/contrib/autoimport/utils.py b/rope/contrib/autoimport/utils.py index 55cc16b71..6d8f9b414 100644 --- a/rope/contrib/autoimport/utils.py +++ b/rope/contrib/autoimport/utils.py @@ -72,7 +72,7 @@ def get_modname_from_path( for part in rel_path_parts[:-1]: modname += part modname += "." - if rel_path_parts[-1] == "__init__": + if rel_path_parts[-1] == "__init__.py": modname = modname[:-1] else: modname = modname + modpath.stem From da19314ccb85153cc5f64cbc05e1af6ceec10945 Mon Sep 17 00:00:00 2001 From: bagel897 Date: Sun, 15 Jan 2023 16:59:00 -0600 Subject: [PATCH 2/7] test: Test for autoimport --- .../contrib/autoimport/autoimport_special.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 ropetest/contrib/autoimport/autoimport_special.py diff --git a/ropetest/contrib/autoimport/autoimport_special.py b/ropetest/contrib/autoimport/autoimport_special.py new file mode 100644 index 000000000..e9e25dfa1 --- /dev/null +++ b/ropetest/contrib/autoimport/autoimport_special.py @@ -0,0 +1,55 @@ +# Special cases, easier to express in pytest +import os +from pathlib import Path + +import pytest + +from rope.base.project import Project +from rope.base.resources import Resource +from rope.contrib.autoimport.sqlite import AutoImport + + +@pytest.fixture +def project(tmp_path: Path): + return Project(tmp_path) + + +@pytest.fixture +def autoimport(project: Project): + a = AutoImport(project) + yield a + a.close() + + +@pytest.fixture +def mod1_folder(project: Project, tmp_path: Path): + s = "mod1" + p = tmp_path / s + p.mkdir() + assert p.exists() + yield Resource(project, s) + + +@pytest.fixture +def mod2_file(project: Project, tmp_path: Path): + s = "mod2.py" + p = tmp_path / s + p.touch() + assert p.exists() + yield Resource(project, s) + + +def test_init_py( + autoimport: AutoImport, project: Project, mod1_folder: Resource, mod2_file: Resource +): + s = "__init__.py" + i = mod1_folder.pathlib / s + with i.open(mode="x") as f: + f.write("def foo():\n") + f.write("\tpass\n") + with mod2_file.pathlib.open(mode="w") as f: + f.write("foo") + autoimport.generate_cache([Resource(project, os.path.join("mod1", s))]) + results = autoimport.search("foo", True) + print(results) + assert [("from mod1 import foo", "foo")] == results From 7db1cf2a246c7270098a8b2ecb13af50f962a1cf Mon Sep 17 00:00:00 2001 From: bagel897 Date: Sun, 15 Jan 2023 17:00:19 -0600 Subject: [PATCH 3/7] docs: Update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eccb2d228..35f2cacd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ # **Upcoming release** - +- #648 Fix #645 - #604 Fix test that sometimes leaves files behind in the current working directory (@lieryan) - #606 Deprecate compress_objectdb and compress_history (@lieryan) - #607 Remove importing from legacy files with `.pickle` suffix (@lieryan) From a3a1ff3bcf304e3fe470ff70c540230acea930f0 Mon Sep 17 00:00:00 2001 From: Lie Ryan Date: Mon, 16 Jan 2023 13:48:33 +1100 Subject: [PATCH 4/7] Improve CHANGELOG.md message --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35f2cacd3..3b680dc7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ # **Upcoming release** -- #648 Fix #645 +- #648 Remove __init__ from import statement when using sqlite autoimport (@bagel897) - #604 Fix test that sometimes leaves files behind in the current working directory (@lieryan) - #606 Deprecate compress_objectdb and compress_history (@lieryan) - #607 Remove importing from legacy files with `.pickle` suffix (@lieryan) From 1ac2b63056e754afeb22e41237c7b6f28dcc561f Mon Sep 17 00:00:00 2001 From: Lie Ryan Date: Mon, 16 Jan 2023 13:54:38 +1100 Subject: [PATCH 5/7] Rename test to match naming convention This test may not be properly discovered. --- .../autoimport/{autoimport_special.py => autoimporttest.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ropetest/contrib/autoimport/{autoimport_special.py => autoimporttest.py} (100%) diff --git a/ropetest/contrib/autoimport/autoimport_special.py b/ropetest/contrib/autoimport/autoimporttest.py similarity index 100% rename from ropetest/contrib/autoimport/autoimport_special.py rename to ropetest/contrib/autoimport/autoimporttest.py From 31935b8bdc925b5d8b5cfc0f9ef95f3406798a8c Mon Sep 17 00:00:00 2001 From: Lie Ryan Date: Mon, 16 Jan 2023 14:15:15 +1100 Subject: [PATCH 6/7] Rewrite test to use common fixtures --- ropetest/contrib/autoimport/autoimporttest.py | 53 ++++++------------- 1 file changed, 16 insertions(+), 37 deletions(-) diff --git a/ropetest/contrib/autoimport/autoimporttest.py b/ropetest/contrib/autoimport/autoimporttest.py index e9e25dfa1..b9a8648fe 100644 --- a/ropetest/contrib/autoimport/autoimporttest.py +++ b/ropetest/contrib/autoimport/autoimporttest.py @@ -1,19 +1,13 @@ # Special cases, easier to express in pytest -import os -from pathlib import Path +from textwrap import dedent import pytest from rope.base.project import Project -from rope.base.resources import Resource +from rope.base.resources import File, Folder from rope.contrib.autoimport.sqlite import AutoImport -@pytest.fixture -def project(tmp_path: Path): - return Project(tmp_path) - - @pytest.fixture def autoimport(project: Project): a = AutoImport(project) @@ -21,35 +15,20 @@ def autoimport(project: Project): a.close() -@pytest.fixture -def mod1_folder(project: Project, tmp_path: Path): - s = "mod1" - p = tmp_path / s - p.mkdir() - assert p.exists() - yield Resource(project, s) - - -@pytest.fixture -def mod2_file(project: Project, tmp_path: Path): - s = "mod2.py" - p = tmp_path / s - p.touch() - assert p.exists() - yield Resource(project, s) - - def test_init_py( - autoimport: AutoImport, project: Project, mod1_folder: Resource, mod2_file: Resource + autoimport: AutoImport, + project: Project, + pkg1: Folder, + mod1: File, ): - s = "__init__.py" - i = mod1_folder.pathlib / s - with i.open(mode="x") as f: - f.write("def foo():\n") - f.write("\tpass\n") - with mod2_file.pathlib.open(mode="w") as f: - f.write("foo") - autoimport.generate_cache([Resource(project, os.path.join("mod1", s))]) + mod1_init = pkg1.get_child("__init__.py") + mod1_init.write(dedent("""\ + def foo(): + pass + """)) + mod1.write(dedent("""\ + foo + """)) + autoimport.generate_cache([mod1_init]) results = autoimport.search("foo", True) - print(results) - assert [("from mod1 import foo", "foo")] == results + assert [("from pkg1 import foo", "foo")] == results From 7d447a9d9dfb1c745b7809b26f0aef8de2b8ccf9 Mon Sep 17 00:00:00 2001 From: Lie Ryan Date: Mon, 16 Jan 2023 14:21:05 +1100 Subject: [PATCH 7/7] Use contextmanager.closing() to manage AutoImport --- ropetest/contrib/autoimport/autoimporttest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ropetest/contrib/autoimport/autoimporttest.py b/ropetest/contrib/autoimport/autoimporttest.py index b9a8648fe..7a5a05b6e 100644 --- a/ropetest/contrib/autoimport/autoimporttest.py +++ b/ropetest/contrib/autoimport/autoimporttest.py @@ -1,4 +1,5 @@ # Special cases, easier to express in pytest +from contextlib import closing from textwrap import dedent import pytest @@ -10,9 +11,8 @@ @pytest.fixture def autoimport(project: Project): - a = AutoImport(project) - yield a - a.close() + with closing(AutoImport(project)) as ai: + yield ai def test_init_py(