2020-10-02 02:55:27 -07:00
|
|
|
package main
|
|
|
|
|
|
|
|
type python struct {
|
2021-12-03 11:19:57 -08:00
|
|
|
language
|
2021-12-04 01:26:30 -08:00
|
|
|
|
|
|
|
Venv string
|
2020-10-02 02:55:27 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
const (
|
2021-12-04 02:56:55 -08:00
|
|
|
// FetchVirtualEnv fetches the virtual env
|
|
|
|
FetchVirtualEnv Property = "fetch_virtual_env"
|
2020-10-02 02:55:27 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
func (p *python) string() string {
|
2022-01-23 11:24:02 -08:00
|
|
|
segmentTemplate := p.language.props.getString(SegmentTemplate, "{{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}")
|
|
|
|
return p.language.string(segmentTemplate, p)
|
2020-10-02 02:55:27 -07:00
|
|
|
}
|
|
|
|
|
2022-01-01 11:09:52 -08:00
|
|
|
func (p *python) init(props Properties, env Environment) {
|
2021-12-03 11:19:57 -08:00
|
|
|
p.language = language{
|
2021-02-03 10:11:32 -08:00
|
|
|
env: env,
|
|
|
|
props: props,
|
|
|
|
extensions: []string{"*.py", "*.ipynb", "pyproject.toml", "venv.bak", "venv", ".venv"},
|
|
|
|
loadContext: p.loadContext,
|
|
|
|
inContext: p.inContext,
|
|
|
|
commands: []*cmd{
|
|
|
|
{
|
|
|
|
executable: "python",
|
|
|
|
args: []string{"--version"},
|
|
|
|
regex: `(?:Python (?P<version>((?P<major>[0-9]+).(?P<minor>[0-9]+).(?P<patch>[0-9]+))))`,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
executable: "python3",
|
|
|
|
args: []string{"--version"},
|
|
|
|
regex: `(?:Python (?P<version>((?P<major>[0-9]+).(?P<minor>[0-9]+).(?P<patch>[0-9]+))))`,
|
|
|
|
},
|
2021-01-10 03:14:43 -08:00
|
|
|
},
|
2021-02-03 10:11:32 -08:00
|
|
|
versionURLTemplate: "[%s](https://www.python.org/downloads/release/python-%s%s%s/)",
|
2021-10-24 10:04:18 -07:00
|
|
|
displayMode: props.getString(DisplayMode, DisplayModeEnvironment),
|
|
|
|
homeEnabled: props.getBool(HomeEnabled, true),
|
2020-11-14 11:04:04 -08:00
|
|
|
}
|
2020-10-02 02:55:27 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *python) enabled() bool {
|
2021-01-12 11:38:13 -08:00
|
|
|
return p.language.enabled()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *python) loadContext() {
|
2022-01-23 11:24:02 -08:00
|
|
|
if !p.language.props.getBool(FetchVirtualEnv, true) {
|
2021-04-17 04:47:28 -07:00
|
|
|
return
|
|
|
|
}
|
2020-10-02 02:55:27 -07:00
|
|
|
venvVars := []string{
|
|
|
|
"VIRTUAL_ENV",
|
|
|
|
"CONDA_ENV_PATH",
|
2021-01-20 04:09:13 -08:00
|
|
|
"CONDA_DEFAULT_ENV",
|
2020-10-02 02:55:27 -07:00
|
|
|
"PYENV_VERSION",
|
|
|
|
}
|
|
|
|
var venv string
|
|
|
|
for _, venvVar := range venvVars {
|
2020-11-14 11:04:04 -08:00
|
|
|
venv = p.language.env.getenv(venvVar)
|
2021-01-20 04:09:13 -08:00
|
|
|
name := base(venv, p.language.env)
|
|
|
|
if p.canUseVenvName(name) {
|
2021-12-04 01:26:30 -08:00
|
|
|
p.Venv = name
|
2020-10-02 02:55:27 -07:00
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
2021-01-12 11:38:13 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *python) inContext() bool {
|
2021-12-04 01:26:30 -08:00
|
|
|
return p.Venv != ""
|
2020-10-02 02:55:27 -07:00
|
|
|
}
|
2021-01-20 04:09:13 -08:00
|
|
|
|
|
|
|
func (p *python) canUseVenvName(name string) bool {
|
|
|
|
if name == "" || name == "." {
|
|
|
|
return false
|
|
|
|
}
|
2021-02-18 09:47:53 -08:00
|
|
|
if p.language.props.getBool(DisplayDefault, true) {
|
2021-01-20 04:09:13 -08:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
invalidNames := [2]string{"system", "base"}
|
|
|
|
for _, a := range invalidNames {
|
|
|
|
if a == name {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|