Skip to content

Commit 3273c79

Browse files
committed
feat: Support relative imports
- Add relative to absolute import transform before package restructuring
1 parent c290ac6 commit 3273c79

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

merak/core/cybuild.py

+21
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from __future__ import division
1717
from __future__ import print_function
1818

19+
import glob
1920
import io
2021
import logging
2122
import os
@@ -24,6 +25,7 @@
2425
import tempfile
2526
import uuid
2627

28+
import absolufy_imports as abs_imp
2729
from rope.base import project as rope_project
2830
from rope.base import change as rope_change
2931
from rope.refactor import move as rope_move
@@ -44,15 +46,28 @@ def build_package_cython_extension(package_root,
4446
logger = logging.getLogger(__name__)
4547
# 0. Create temporary directory
4648
with tempfile.TemporaryDirectory() as tmp_dir:
49+
# ---------------------------
4750
# 1. Copy package to temp dir
51+
# ---------------------------
4852
logger.info("1. Copying package to temporary directory ...")
4953
package = os.path.basename(package_root)
5054
tmp_proot = os.path.join(tmp_dir, package)
5155
shutil.copytree(package_root, tmp_proot)
5256
logging.info("1. Done!")
5357

58+
# ------------------------------------
5459
# 2. Restructure package (in temp dir)
60+
# ------------------------------------
5561
logger.info("2. Restructuring package ...")
62+
63+
# 2.0. Transform imports to absolute
64+
logger.info("2.0. Transforming imports to absolute ...")
65+
srcs = [tmp_dir]
66+
for suffix in SUFFIXES:
67+
for f in glob.glob(os.path.join(tmp_proot, "**/*%s" % suffix)):
68+
abs_imp.absolute_imports(f, srcs, never=False)
69+
logger.info("2.0. Done!")
70+
5671
# 2.1. Modify package
5772
# 2.1.1. Restructure package and get modules and
5873
logger.info("2.1. Restructuring Python modules ...")
@@ -76,14 +91,18 @@ def build_package_cython_extension(package_root,
7691
fout.write(init_content)
7792
logger.info("2.2. Done!")
7893

94+
# -----------------
7995
# 3. Add setup file
96+
# -----------------
8097
logger.info("3. Adding Cython setup file ...")
8198
with open(os.path.join(tmp_dir, "setup.py"), "w") as fout:
8299
with open(refs.Template.PY_SETUP, "r") as fin:
83100
fout.write(fin.read().format(package=package))
84101
logger.info("3. Done!")
85102

103+
# ----------
86104
# 4. Compile
105+
# ----------
87106
logger.info("4. Compiling package binary ...")
88107
cy_tmp = "cy_tmp_%s" % uuid.uuid4()
89108
cy_build = "cy_build_%s" % uuid.uuid4()
@@ -100,7 +119,9 @@ def build_package_cython_extension(package_root,
100119

101120
logger.info("4. Done!")
102121

122+
# -----------------------------------
103123
# 5. Copy build result to destination
124+
# -----------------------------------
104125
logger.info("5. Copying result to destination ...")
105126
os.makedirs(output_dir, exist_ok=True)
106127
target = os.path.join(output_dir, package)

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ colorlog (>=4.6.2, <5.0.0)
33
cython (>=0.29.21, <1.0.0)
44
rope (>=0.19.0, <1.0.0)
55
setuptools (>=51.0.0)
6+
absolufy-imports (>=0.3.1, <0.4.0)

0 commit comments

Comments
 (0)