use course language level to create virtualenv

This commit is contained in:
Ekaterina Tuzova
2016-07-25 17:52:49 +03:00
parent 709c8906ce
commit 8f42fbff7d
2 changed files with 29 additions and 21 deletions
@@ -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();
@@ -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();
}
}