mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 05:21:29 +07:00
moved virtualenv creation to the project generator
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.jetbrains.edu.coursecreator.ui.CCNewProjectPanel">
|
||||
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="4" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="666" height="488"/>
|
||||
@@ -20,7 +20,7 @@
|
||||
</component>
|
||||
<component id="7e88" class="javax.swing.JTextField" binding="myName">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
@@ -46,13 +46,13 @@
|
||||
</component>
|
||||
<component id="41fe6" class="javax.swing.JTextField" binding="myAuthorField">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="389a7" class="javax.swing.JTextArea" binding="myDescription">
|
||||
<constraints>
|
||||
<grid row="3" column="1" row-span="1" col-span="2" vsize-policy="6" hsize-policy="1" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||
<grid row="3" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="-1" height="50"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
|
||||
@@ -149,7 +149,7 @@ public class PyCCProjectGenerator extends PythonProjectGenerator implements Dire
|
||||
|
||||
private static void setupLanguageLevels(CCNewProjectPanel panel) {
|
||||
JLabel languageLevelLabel = panel.getLanguageLevelLabel();
|
||||
languageLevelLabel.setText("Python Version:");
|
||||
languageLevelLabel.setText("Python:");
|
||||
languageLevelLabel.setVisible(true);
|
||||
ComboBox<String> languageLevelCombobox = panel.getLanguageLevelCombobox();
|
||||
languageLevelCombobox.addItem(ALL_VERSIONS);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.jetbrains.edu.learning;
|
||||
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.facet.ui.FacetEditorValidator;
|
||||
import com.intellij.facet.ui.FacetValidatorsManager;
|
||||
import com.intellij.facet.ui.ValidationResult;
|
||||
@@ -9,11 +10,13 @@ import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.platform.DirectoryProjectGenerator;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
@@ -24,7 +27,13 @@ import com.jetbrains.edu.learning.stepic.CourseInfo;
|
||||
import com.jetbrains.edu.learning.stepic.EduStepicConnector;
|
||||
import com.jetbrains.edu.learning.ui.StudyNewProjectPanel;
|
||||
import com.jetbrains.python.configuration.PyConfigurableInterpreterList;
|
||||
import com.jetbrains.python.newProject.PyNewProjectSettings;
|
||||
import com.jetbrains.python.newProject.PythonProjectGenerator;
|
||||
import com.jetbrains.python.packaging.PyPackageManager;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
import com.jetbrains.python.sdk.AbstractCreateVirtualEnvDialog;
|
||||
import com.jetbrains.python.sdk.PyDetectedSdk;
|
||||
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
|
||||
import icons.InteractiveLearningPythonIcons;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -34,6 +43,7 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -176,4 +186,49 @@ public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator imp
|
||||
return true;
|
||||
};
|
||||
}
|
||||
|
||||
public void createAndAddVirtualEnv(Project project, PyNewProjectSettings settings) {
|
||||
final ProjectSdksModel model = PyConfigurableInterpreterList.getInstance(project).getModel();
|
||||
final String baseSdk = getBaseSdk();
|
||||
|
||||
if (baseSdk != null) {
|
||||
final PyPackageManager packageManager = PyPackageManager.getInstance(new PyDetectedSdk(baseSdk));
|
||||
try {
|
||||
final String path = packageManager.createVirtualEnv(project.getBasePath() + "/.idea/VirtualEnvironment", false);
|
||||
AbstractCreateVirtualEnvDialog.setupVirtualEnvSdk(path, true, new AbstractCreateVirtualEnvDialog.VirtualEnvCallback() {
|
||||
@Override
|
||||
public void virtualEnvCreated(Sdk createdSdk, boolean associateWithProject) {
|
||||
settings.setSdk(createdSdk);
|
||||
model.addSdk(createdSdk);
|
||||
try {
|
||||
model.apply();
|
||||
}
|
||||
catch (ConfigurationException exception) {
|
||||
LOG.error("Error adding created virtual env " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (ExecutionException e) {
|
||||
LOG.warn("Failed to create virtual env " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String getBaseSdk() {
|
||||
final PythonSdkFlavor flavor = PythonSdkFlavor.getApplicableFlavors(false).get(0);
|
||||
String python3Sdk = 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
return python3Sdk != null ? python3Sdk : baseSdks.iterator().next();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.jetbrains.python.newProject.actions;
|
||||
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.ide.util.projectWizard.AbstractNewProjectStep;
|
||||
import com.intellij.ide.util.projectWizard.ProjectSettingsStepBase;
|
||||
import com.intellij.ide.util.projectWizard.WebProjectTemplate;
|
||||
@@ -44,13 +43,10 @@ import com.jetbrains.python.newProject.PythonProjectGenerator;
|
||||
import com.jetbrains.python.packaging.PyPackageManager;
|
||||
import com.jetbrains.python.packaging.PyPackageManagerUI;
|
||||
import com.jetbrains.python.packaging.PyRequirement;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
import com.jetbrains.python.sdk.*;
|
||||
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -79,10 +75,11 @@ public class PythonGenerateProjectCallback implements NullableConsumer<ProjectSe
|
||||
}
|
||||
}
|
||||
final Project newProject = generateProject(settingsStep);
|
||||
if (sdk == null) {
|
||||
createAndAddVirtualEnv(settingsStep);
|
||||
if (generator instanceof PythonProjectGenerator && sdk == null) {
|
||||
final PyNewProjectSettings settings = (PyNewProjectSettings)((PythonProjectGenerator)generator).getProjectSettings();
|
||||
((PythonProjectGenerator)generator).createAndAddVirtualEnv(newProject, settings);
|
||||
sdk = settings.getSdk();
|
||||
}
|
||||
sdk = settingsStep.getSdk();
|
||||
|
||||
if (newProject != null && generator instanceof PythonProjectGenerator) {
|
||||
SdkConfigurationUtil.setDirectoryProjectSdk(newProject, sdk);
|
||||
@@ -138,52 +135,6 @@ public class PythonGenerateProjectCallback implements NullableConsumer<ProjectSe
|
||||
}
|
||||
}
|
||||
|
||||
private static void createAndAddVirtualEnv(final ProjectSpecificSettingsStep settingsStep) {
|
||||
final Project project = ProjectManager.getInstance().getDefaultProject();
|
||||
final ProjectSdksModel model = PyConfigurableInterpreterList.getInstance(project).getModel();
|
||||
final String baseSdk = getBaseSdk();
|
||||
|
||||
if (baseSdk != null) {
|
||||
final PyPackageManager packageManager = PyPackageManager.getInstance(new PyDetectedSdk(baseSdk));
|
||||
try {
|
||||
final String path = packageManager.createVirtualEnv(settingsStep.getProjectLocation() + "/.idea/VirtualEnvironment", false);
|
||||
AbstractCreateVirtualEnvDialog.setupVirtualEnvSdk(path, true, new AbstractCreateVirtualEnvDialog.VirtualEnvCallback() {
|
||||
@Override
|
||||
public void virtualEnvCreated(Sdk createdSdk, boolean associateWithProject) {
|
||||
settingsStep.setSdk(createdSdk);
|
||||
model.addSdk(createdSdk);
|
||||
try {
|
||||
model.apply();
|
||||
}
|
||||
catch (ConfigurationException exception) {
|
||||
LOG.error("Error adding created virtual env " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (ExecutionException e) {
|
||||
LOG.warn("Failed to create virtual env " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String getBaseSdk() {
|
||||
final PythonSdkFlavor flavor = PythonSdkFlavor.getApplicableFlavors(false).get(0);
|
||||
String python3Sdk = 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
return python3Sdk != null ? python3Sdk : baseSdks.iterator().next();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Project generateProject(@NotNull final ProjectSettingsStepBase settings) {
|
||||
final DirectoryProjectGenerator generator = settings.getProjectGenerator();
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.jetbrains.python.newProject;
|
||||
|
||||
import com.intellij.facet.ui.ValidationResult;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.util.BooleanFunction;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
@@ -83,4 +84,6 @@ public abstract class PythonProjectGenerator {
|
||||
public MouseListener getErrorLabelMouseListener() {
|
||||
return myErrorLabelMouseListener;
|
||||
}
|
||||
|
||||
public void createAndAddVirtualEnv(Project project, PyNewProjectSettings settings) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user