mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-840
Provide Django runtime console
This commit is contained in:
@@ -8,6 +8,7 @@ import com.intellij.execution.console.LanguageConsoleViewImpl;
|
||||
import com.intellij.execution.process.CommandLineArgumentsProvider;
|
||||
import com.intellij.execution.process.ProcessOutputTypes;
|
||||
import com.intellij.execution.runners.AbstractConsoleRunnerWithHistory;
|
||||
import com.intellij.execution.ui.ConsoleViewContentType;
|
||||
import com.intellij.execution.ui.RunContentDescriptor;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
@@ -18,10 +19,10 @@ import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.net.NetUtils;
|
||||
import com.jetbrains.django.run.Runner;
|
||||
import com.jetbrains.django.util.DjangoUtil;
|
||||
import com.jetbrains.python.PyBundle;
|
||||
import com.jetbrains.python.PythonHelpersLocator;
|
||||
import com.jetbrains.python.console.pydev.ICallback;
|
||||
import com.jetbrains.python.console.pydev.InterpreterResponse;
|
||||
@@ -43,6 +44,7 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory {
|
||||
private final int[] myPorts;
|
||||
private PydevConsoleCommunication myPydevConsoleCommunication;
|
||||
public static Key<PydevConsoleCommunication> CONSOLE_KEY = new Key<PydevConsoleCommunication>("PYDEV_CONSOLE_KEY");
|
||||
private static final String PYTHON_ENV_COMMAND = "import sys; print('Python %s on %s' % (sys.version, sys.platform))\n";
|
||||
|
||||
protected PydevConsoleRunner(@NotNull final Project project,
|
||||
@NotNull final String consoleTitle,
|
||||
@@ -54,9 +56,10 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory {
|
||||
}
|
||||
|
||||
public static void run(@NotNull final Project project,
|
||||
@NotNull final Module module,
|
||||
@NotNull final Sdk sdk) {
|
||||
final String consoleTitle = PyBundle.message("python.console");
|
||||
@NotNull final Sdk sdk,
|
||||
final String consoleTitle,
|
||||
final String projectRoot,
|
||||
final String ... statements2execute) {
|
||||
final int[] ports;
|
||||
try {
|
||||
// File "pydev/console/pydevconsole.py", line 223, in <module>
|
||||
@@ -86,9 +89,9 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory {
|
||||
}
|
||||
};
|
||||
|
||||
final PydevConsoleRunner consoleRunner = new PydevConsoleRunner(project, consoleTitle, provider, DjangoUtil.getProjectRoot(module), ports);
|
||||
final PydevConsoleRunner consoleRunner = new PydevConsoleRunner(project, consoleTitle, provider, projectRoot, ports);
|
||||
try {
|
||||
consoleRunner.initAndRun();
|
||||
consoleRunner.initAndRun(statements2execute);
|
||||
}
|
||||
catch (ExecutionException e) {
|
||||
ExecutionHelper.showErrors(project, Arrays.<Exception>asList(e), consoleTitle, null);
|
||||
@@ -117,20 +120,27 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory {
|
||||
return new PyConsoleProcessHandler(process, myConsoleView.getConsole(), getProviderCommandLine(myProvider), outputEncoding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initAndRun() throws ExecutionException {
|
||||
public void initAndRun(final String[] statements2execute) throws ExecutionException {
|
||||
super.initAndRun();
|
||||
|
||||
// Propagate console communication to language console
|
||||
((PydevLanguageConsoleView)myConsoleView).setPydevConsoleCommunication(myPydevConsoleCommunication);
|
||||
|
||||
try {
|
||||
Thread.sleep(200);
|
||||
Thread.sleep(300);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
// Ignore
|
||||
}
|
||||
sendInput("import sys; print('Python %s on %s' % (sys.version, sys.platform))\n");
|
||||
|
||||
// Make executed statements visible to developers
|
||||
final LanguageConsoleImpl console = myConsoleView.getConsole();
|
||||
PyConsoleHighlightingUtil.processOutput(console, PYTHON_ENV_COMMAND, ProcessOutputTypes.SYSTEM);
|
||||
sendInput(PYTHON_ENV_COMMAND);
|
||||
for (String statement : statements2execute) {
|
||||
PyConsoleHighlightingUtil.processOutput(console, statement + "\n", ProcessOutputTypes.SYSTEM);
|
||||
sendInput(statement+"\n");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -216,4 +226,8 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory {
|
||||
public static boolean isInPydevConsole(final PsiElement element){
|
||||
return element.getContainingFile().getCopyableUserData(CONSOLE_KEY) != null;
|
||||
}
|
||||
|
||||
public static String createExtendPathCommand(Module module) {
|
||||
return "sys.path.append('" + PathUtil.getCanonicalPath(DjangoUtil.getProjectRoot(module)) + "')";
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.jetbrains.python.console;
|
||||
|
||||
import com.intellij.execution.process.CommandLineArgumentsProvider;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys;
|
||||
@@ -9,17 +8,10 @@ import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.jetbrains.django.util.DjangoUtil;
|
||||
import com.jetbrains.python.PyBundle;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author oleg
|
||||
@@ -62,6 +54,8 @@ public class RunPythonConsoleAction extends AnAction implements DumbAware {
|
||||
assert module != null : "Module is null";
|
||||
assert sdk != null : "Sdk is null";
|
||||
|
||||
PydevConsoleRunner.run(project, module, sdk);
|
||||
PydevConsoleRunner.run(project, sdk, PyBundle.message("python.console"), DjangoUtil.getProjectRoot(module),
|
||||
PydevConsoleRunner.createExtendPathCommand(module));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user