Skip to content

Commit 53c7ad0

Browse files
committed
Implementing suggestions made in PR comments
1 parent e2ae846 commit 53c7ad0

File tree

2 files changed

+44
-19
lines changed

2 files changed

+44
-19
lines changed

linkml_runtime/utils/compile_python.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from __future__ import annotations
2+
13
import os
24
import sys
35
from logging import warning
@@ -17,7 +19,7 @@ def file_text(txt_or_fname: str) -> str:
1719
return txt_or_fname
1820

1921

20-
def compile_python(text_or_fn: str, package_path: str = None, module_name: str = None) -> ModuleType:
22+
def compile_python(text_or_fn: str, package_path: str | None = None, module_name: str | None = "test") -> ModuleType:
2123
"""
2224
Compile the text or file and return the resulting module
2325
@@ -26,7 +28,7 @@ def compile_python(text_or_fn: str, package_path: str = None, module_name: str =
2628
:param module_name: Used in an import statement, default 'test'
2729
:return: Compiled module
2830
"""
29-
if module_name is None:
31+
if not module_name:
3032
module_name = "test"
3133
python_txt = file_text(text_or_fn)
3234
if package_path is None and python_txt != text_or_fn:
Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
from __future__ import annotations
2+
3+
from types import ModuleType
4+
15
import pytest
26

37
from linkml_runtime.utils.compile_python import compile_python
48

59

6-
@pytest.fixture
7-
def module_1():
10+
@pytest.fixture(scope="module")
11+
def base_module() -> str:
812
return """
913
x: int = 2
1014
@@ -13,28 +17,47 @@ def fun(value: int):
1317
"""
1418

1519

16-
@pytest.fixture
17-
def module_2():
20+
@pytest.fixture(scope="module")
21+
def importing_module() -> str:
1822
return """
19-
import module_1 as m
23+
import MODULE_NAME as m
2024
2125
def more_fun(message: str):
2226
return f'got "{message}"'
2327
"""
2428

2529

26-
def test_compile(module_1, module_2):
27-
m1 = compile_python(module_1, module_name="module_1")
28-
assert m1.__name__ == "module_1"
29-
assert m1.x == 2
30-
assert m1.fun(3) == "known value 3"
31-
m2 = compile_python(module_2, module_name="module_2", package_path=".")
30+
def check_generated_module(module: ModuleType, module_name: str) -> None:
31+
assert isinstance(module, ModuleType)
32+
assert module.__name__ == module_name
33+
assert module.x == 2
34+
assert module.fun(3) == "known value 3"
35+
36+
37+
@pytest.mark.parametrize(("name_arg", "module_name"), [(None, "test"), ("", "test"), ("base_module", "base_module")])
38+
def test_compile_python_module_name(base_module: str, name_arg: str | None, module_name: str) -> None:
39+
"""Test the compilation of python code to create a module."""
40+
m = compile_python(base_module, module_name=name_arg)
41+
check_generated_module(m, module_name)
42+
43+
44+
@pytest.mark.parametrize(("name_arg", "module_name"), [(None, "test"), ("", "test"), ("base_module", "base_module")])
45+
def test_compile_python_importing_module_local_module(
46+
base_module: str,
47+
importing_module: str,
48+
name_arg: str | None,
49+
module_name: str,
50+
) -> None:
51+
"""Test the compilation of python code to create a local module and then compile a second module that imports the first."""
52+
m = compile_python(base_module, module_name=name_arg)
53+
check_generated_module(m, module_name)
54+
55+
# switch in the appropriate module name
56+
importing_module_text = importing_module.replace("MODULE_NAME", module_name)
57+
m2 = compile_python(importing_module_text, package_path=".", module_name="module_2")
58+
assert isinstance(m2, ModuleType)
3259
assert m2.__name__ == "module_2"
3360
assert m2.more_fun("hello") == 'got "hello"'
34-
assert m2.m.fun(4) == "known value 4"
35-
assert m2.m.x == 2
36-
3761

38-
def test_default_module_name(module_1):
39-
m = compile_python(module_1)
40-
assert m.__name__ == "test"
62+
# check the imported module, m2.m, has the correct type, name, etc.
63+
check_generated_module(m2.m, module_name)

0 commit comments

Comments
 (0)