mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
use course language level to create virtualenv
This commit is contained in:
+13
-15
@@ -11,7 +11,6 @@ import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.ThrowableComputable;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
@@ -105,7 +104,7 @@ public class StudyProjectGenerator {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected Course getCourse(@NotNull final Project project) {
|
||||
public Course getCourse(@NotNull final Project project) {
|
||||
|
||||
final File courseFile = new File(new File(OUR_COURSES_DIR, mySelectedCourseInfo.getName()), EduNames.COURSE_META_FILE);
|
||||
if (courseFile.exists()) {
|
||||
@@ -119,20 +118,17 @@ public class StudyProjectGenerator {
|
||||
return readCourseFromCache(adaptiveCourseFile, true);
|
||||
}
|
||||
}
|
||||
return ProgressManager.getInstance().runProcessWithProgressSynchronously(new ThrowableComputable<Course, RuntimeException>() {
|
||||
@Override
|
||||
public Course compute() throws RuntimeException {
|
||||
ProgressManager.getInstance().getProgressIndicator().setIndeterminate(true);
|
||||
return execCancelable(() -> {
|
||||
return ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> {
|
||||
ProgressManager.getInstance().getProgressIndicator().setIndeterminate(true);
|
||||
return execCancelable(() -> {
|
||||
|
||||
final Course course = EduStepicConnector.getCourse(project, mySelectedCourseInfo);
|
||||
if (course != null) {
|
||||
flushCourse(project, course);
|
||||
course.initCourse(false);
|
||||
}
|
||||
return course;
|
||||
});
|
||||
}
|
||||
final Course course = EduStepicConnector.getCourse(project, mySelectedCourseInfo);
|
||||
if (course != null) {
|
||||
flushCourse(project, course);
|
||||
course.initCourse(false);
|
||||
}
|
||||
return course;
|
||||
});
|
||||
}, "Creating Course", true, project);
|
||||
}
|
||||
|
||||
@@ -161,7 +157,9 @@ public class StudyProjectGenerator {
|
||||
public static void openFirstTask(@NotNull final Course course, @NotNull final Project project) {
|
||||
LocalFileSystem.getInstance().refresh(false);
|
||||
final Lesson firstLesson = StudyUtils.getFirst(course.getLessons());
|
||||
if (firstLesson == null) return;
|
||||
final Task firstTask = StudyUtils.getFirst(firstLesson.getTaskList());
|
||||
if (firstTask == null) return;
|
||||
final VirtualFile taskDir = firstTask.getTaskDir(project);
|
||||
if (taskDir == null) return;
|
||||
final Map<String, TaskFile> taskFiles = firstTask.getTaskFiles();
|
||||
|
||||
+16
-6
@@ -22,6 +22,7 @@ import com.intellij.platform.DirectoryProjectGenerator;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.util.BooleanFunction;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator;
|
||||
import com.jetbrains.edu.learning.stepic.CourseInfo;
|
||||
import com.jetbrains.edu.learning.stepic.EduStepicConnector;
|
||||
@@ -189,7 +190,7 @@ public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator imp
|
||||
|
||||
public void createAndAddVirtualEnv(Project project, PyNewProjectSettings settings) {
|
||||
final ProjectSdksModel model = PyConfigurableInterpreterList.getInstance(project).getModel();
|
||||
final String baseSdk = getBaseSdk();
|
||||
final String baseSdk = getBaseSdk(project);
|
||||
|
||||
if (baseSdk != null) {
|
||||
final PyPackageManager packageManager = PyPackageManager.getInstance(new PyDetectedSdk(baseSdk));
|
||||
@@ -215,20 +216,29 @@ public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator imp
|
||||
}
|
||||
}
|
||||
|
||||
private static String getBaseSdk() {
|
||||
private String getBaseSdk(@NotNull final Project project) {
|
||||
final Course course = myGenerator.getCourse(project);
|
||||
LanguageLevel baseLevel = LanguageLevel.PYTHON30;
|
||||
if (course != null) {
|
||||
final String version = course.getLanguageVersion();
|
||||
if (version != null) {
|
||||
baseLevel = LanguageLevel.fromPythonVersion(version);
|
||||
}
|
||||
}
|
||||
final PythonSdkFlavor flavor = PythonSdkFlavor.getApplicableFlavors(false).get(0);
|
||||
String python3Sdk = null;
|
||||
String baseSdk = null;
|
||||
final Collection<String> baseSdks = flavor.suggestHomePaths();
|
||||
for (String sdk : baseSdks) {
|
||||
final String versionString = flavor.getVersionString(sdk);
|
||||
final String prefix = flavor.getName() + " ";
|
||||
if (versionString != null && versionString.startsWith(prefix)) {
|
||||
final LanguageLevel level = LanguageLevel.fromPythonVersion(versionString.substring(prefix.length()));
|
||||
if (level.isAtLeast(LanguageLevel.PYTHON30)) {
|
||||
python3Sdk = sdk;
|
||||
if (level.isAtLeast(baseLevel)) {
|
||||
baseSdk = sdk;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return python3Sdk != null ? python3Sdk : baseSdks.iterator().next();
|
||||
return baseSdk != null ? baseSdk : baseSdks.iterator().next();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user