Packages
snakepit
0.10.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
High-performance pooler and session manager for external language integrations. Supports Python, Node.js, Ruby, and more with gRPC streaming, session management, and production-ready process cleanup.
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/snakepit.python_test.ex
defmodule Mix.Tasks.Snakepit.PythonTest do
@shortdoc "Bootstrap and run Snakepit Python tests"
@moduledoc """
Bootstraps the Snakepit Python environment and runs the Python test suite.
Usage:
mix snakepit.python_test
mix snakepit.python_test -- --maxfail=1
Options:
* `--no-bootstrap` - Skip `mix snakepit.setup`
"""
use Mix.Task
@impl true
def run(args) do
{opts, pytest_args, _} =
OptionParser.parse(args, strict: [no_bootstrap: :boolean])
unless opts[:no_bootstrap] do
Mix.Task.run("snakepit.setup")
end
{python, env, project_root} = resolve_python_env()
tests_dir = Path.join(project_root, "priv/python/tests")
cmd_args = ["-m", "pytest", tests_dir] ++ pytest_args
{output, status} =
System.cmd(python, cmd_args,
env: env,
cd: project_root,
stderr_to_stdout: true
)
if output != "" do
Mix.shell().info(output)
end
if status != 0 do
Mix.raise("Python tests failed with exit code #{status}")
end
end
defp resolve_python_env do
project_root = File.cwd!()
priv_python = Path.join(project_root, "priv/python")
venv_python = Path.join(project_root, ".venv/bin/python")
python =
System.get_env("SNAKEPIT_TEST_PYTHON") ||
if(File.exists?(venv_python), do: venv_python, else: nil) ||
Snakepit.PythonRuntime.executable_path() ||
System.find_executable("python3") ||
System.find_executable("python") ||
Mix.raise(
"Python executable not found; run mix snakepit.setup or set SNAKEPIT_TEST_PYTHON"
)
env = [{"PYTHONPATH", priv_python}]
{python, env, project_root}
end
end