Skip to content

Commit c69faad

Browse files
tamarinvs19denis-fokin
authored andcommitted
Fix python coverage database bug with access to database directory (#1553)
(cherry picked from commit 44bc8cd)
1 parent 9c3f875 commit c69faad

File tree

7 files changed

+25
-12
lines changed

7 files changed

+25
-12
lines changed

utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/language/python/PythonDialogProcessor.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,10 @@ object PythonDialogProcessor {
233233
if (installResult.exitValue != 0) {
234234
showErrorDialogLater(
235235
project,
236-
"Requirements installing failed",
236+
"Requirements installing failed.<br>" +
237+
"${installResult.stderr}<br><br>" +
238+
"Try to install with pip:<br>" +
239+
" ${requirements.joinToString("<br>")}",
237240
"Requirements error"
238241
)
239242
}

utbot-python/src/main/kotlin/org/utbot/python/PythonEngine.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,14 @@ class PythonEngine(
177177
when(val evaluationResult = jobResult.evalResult) {
178178
is PythonEvaluationError -> {
179179
if (evaluationResult.status != 0) {
180+
val errorMessage = "Error evaluation: ${evaluationResult.status}, ${evaluationResult.message}, ${evaluationResult.stackTrace}"
181+
logger.info { errorMessage }
180182
yield(UtError(
181-
"Error evaluation: ${evaluationResult.status}, ${evaluationResult.message}",
183+
errorMessage,
182184
Throwable(evaluationResult.stackTrace.joinToString("\n"))
183185
))
184186
} else {
187+
logger.info { "Python evaluation error: ${evaluationResult.message}" }
185188
yield(
186189
UtError(
187190
evaluationResult.message,

utbot-python/src/main/kotlin/org/utbot/python/PythonEvaluation.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import org.utbot.python.utils.getResult
1515
import org.utbot.python.utils.startProcess
1616
import java.io.File
1717

18-
1918
sealed class PythonEvaluationResult
2019

2120
class PythonEvaluationError(
@@ -64,13 +63,18 @@ fun startEvaluationProcess(input: EvaluationInput): EvaluationProcess {
6463
tag = "out_" + input.method.name + ".py",
6564
addToCleaner = false
6665
)
66+
val coverageDatabasePath = TemporaryFileManager.assignTemporaryFile(
67+
tag = "coverage_db_" + input.method.name,
68+
addToCleaner = false,
69+
)
6770
val runCode = PythonCodeGenerator.generateRunFunctionCode(
6871
input.method,
6972
input.methodArguments,
7073
input.directoriesForSysPath,
7174
input.moduleToImport,
7275
input.additionalModulesToImport,
73-
fileForOutput.path.replace("\\", "\\\\")
76+
fileForOutput.path.replace("\\", "\\\\"),
77+
coverageDatabasePath.absolutePath.replace("\\", "\\\\")
7478
)
7579
val fileWithCode = TemporaryFileManager.createTemporaryFile(
7680
runCode,

utbot-python/src/main/kotlin/org/utbot/python/code/CodeGen.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ object PythonCodeGenerator {
2020
directoriesForSysPath: Set<String>,
2121
moduleToImport: String,
2222
additionalModules: Set<String> = emptySet(),
23-
fileForOutputName: String
23+
fileForOutputName: String,
24+
coverageDatabasePath: String,
2425
): String {
2526
val context = UtContext(this::class.java.classLoader)
2627
withUtContext(context) {
@@ -36,7 +37,8 @@ object PythonCodeGenerator {
3637
directoriesForSysPath,
3738
moduleToImport,
3839
additionalModules,
39-
fileForOutputName
40+
fileForOutputName,
41+
coverageDatabasePath,
4042
)
4143
}
4244
}

utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ class PythonCodeGenerator(
104104
directoriesForSysPath: Set<String>,
105105
moduleToImport: String,
106106
additionalModules: Set<String> = emptySet(),
107-
fileForOutputName: String
107+
fileForOutputName: String,
108+
coverageDatabasePath: String,
108109
): String {
109110
val cgRendererContext = CgRendererContext.fromCgContext(context)
110111
val printer = CgPrinterImpl()
@@ -143,14 +144,15 @@ class PythonCodeGenerator(
143144
arguments.associateBy { argument -> CgLiteral(pythonStrClassId, "'${argument.name}'") }
144145
)
145146

146-
val fullpath = CgLiteral(pythonStrClassId, "'${method.moduleFilename}'")
147-
147+
val fullpath = CgLiteral(pythonStrClassId, "'${method.moduleFilename.replace("\\", "\\\\")}'")
148148
val outputPath = CgLiteral(pythonStrClassId, "'$fileForOutputName'")
149+
val databasePath = CgLiteral(pythonStrClassId, "'$coverageDatabasePath'")
149150

150151
val executorCall = CgPythonFunctionCall(
151152
pythonNoneClassId,
152153
executorFunctionName,
153154
listOf(
155+
databasePath,
154156
functionName,
155157
args,
156158
kwargs,

utbot-python/src/main/kotlin/org/utbot/python/utils/TemporaryFileManager.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@ import org.utbot.common.FileUtil
44
import java.io.File
55
import java.nio.file.Path
66
import java.nio.file.Paths
7-
import kotlin.io.path.deleteExisting
87

98
object TemporaryFileManager {
109
private lateinit var tmpDirectory: Path
1110
private var nextId = 0
1211

1312
fun setup() {
1413
tmpDirectory = FileUtil.createTempDirectory("python-test-generation-${nextId++}")
15-
Cleaner.addFunction { tmpDirectory.deleteExisting() }
14+
Cleaner.addFunction { tmpDirectory.toFile().deleteRecursively() }
1615
}
1716

1817
fun assignTemporaryFile(fileName_: String? = null, tag: String? = null, addToCleaner: Boolean = true): File {

utbot-python/src/main/resources/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ mypy==0.971
22
astor
33
typeshed-client
44
coverage
5-
utbot-executor
5+
utbot-executor==0.1.7

0 commit comments

Comments
 (0)