From 18c923db3dce4d6e59b212e2a19f0d087a899622 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 10 Oct 2015 14:32:50 +0100 Subject: Use relative imports for Python backend --- .../couscous/backends/python/PythonCompiler.java | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java') diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java index 1fb9149..8787d81 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java @@ -1,6 +1,7 @@ package org.zwobble.couscous.backends.python; import java.io.File; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -17,9 +18,11 @@ import lombok.val; public class PythonCompiler { private final Path root; + private final String packageName; - public PythonCompiler(Path root) { + public PythonCompiler(Path root, String packageName) { this.root = root; + this.packageName = packageName; } public void compile(List classes) { @@ -34,7 +37,9 @@ public class PythonCompiler { } private Path pathForClass(TypeName className) { - return root.resolve(className.getQualifiedName().replace(".", File.separator) + ".py"); + return root + .resolve(packageName) + .resolve(className.getQualifiedName().replace(".", File.separator) + ".py"); } private void compileClass(ClassNode classNode) { @@ -45,6 +50,17 @@ public class PythonCompiler { private void writeClass(TypeName name, String contents) { val path = pathForClass(name); Files.createDirectories(path.getParent()); + createPythonPackages(path.getParent()); Files.write(path, asList(contents)); } + + private void createPythonPackages(Path packagePath) throws IOException { + while (packagePath.startsWith(root)) { + val packageFile = packagePath.resolve("__init__.py"); + if (!packageFile.toFile().exists()) { + Files.createFile(packageFile); + } + packagePath = packagePath.getParent(); + } + } } -- cgit v1.2.3