diff --git a/internal/backends/python/python.go b/internal/backends/python/python.go index f0dca110..7df1f080 100644 --- a/internal/backends/python/python.go +++ b/internal/backends/python/python.go @@ -55,7 +55,7 @@ type pyprojectPackageCfg struct { // file. type pyprojectTOML struct { Tool struct { - Poetry struct { + Poetry *struct { Name string `json:"name"` // interface{} because they can be either // strings or maps (why?? good lord). @@ -266,12 +266,13 @@ func searchPypi(query string) []api.PkgInfo { // (either a full path or just a name like "python3") to use when invoking Python. func makePythonPoetryBackend(python string) api.LanguageBackend { return api.LanguageBackend{ - Name: "python3-poetry", - Alias: "python-python3-poetry", - Specfile: "pyproject.toml", - Lockfile: "poetry.lock", - IsAvailable: poetryIsAvailable, - FilenamePatterns: []string{"*.py"}, + Name: "python3-poetry", + Alias: "python-python3-poetry", + Specfile: "pyproject.toml", + IsSpecfileCompatible: verifyPoetrySpecfile, + Lockfile: "poetry.lock", + IsAvailable: poetryIsAvailable, + FilenamePatterns: []string{"*.py"}, Quirks: api.QuirksAddRemoveAlsoLocks | api.QuirksAddRemoveAlsoInstalls, NormalizePackageArgs: normalizePackageArgs, @@ -567,6 +568,15 @@ func readPyproject() (*pyprojectTOML, error) { return &cfg, nil } +func verifyPoetrySpecfile(path string) (bool, error) { + cfg, err := readPyproject() + if err != nil { + return false, err + } + + return cfg.Tool.Poetry != nil, nil +} + func listPoetrySpecfile() (map[api.PkgName]api.PkgSpec, error) { cfg, err := readPyproject() if err != nil {