57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package python
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"util/logs"
|
|
"util/model"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
// parsePipfile parse Pipfile file
|
|
func parsePipfile(root *model.DepTree, file *model.FileInfo) {
|
|
pip := struct {
|
|
DevPackages map[string]string `toml:"dev-packages"`
|
|
Packages map[string]string `toml:"packages"`
|
|
}{}
|
|
if err := toml.Unmarshal(file.Data, &pip); err != nil {
|
|
logs.Warn(err)
|
|
}
|
|
for name, version := range pip.Packages {
|
|
dep := model.NewDepTree(root)
|
|
dep.Name = name
|
|
dep.Version = model.NewVersion(strings.TrimLeft(version, "vV^=<~>"))
|
|
}
|
|
for name, version := range pip.DevPackages {
|
|
dep := model.NewDepTree(root)
|
|
dep.Name = name
|
|
dep.Version = model.NewVersion(version)
|
|
}
|
|
}
|
|
|
|
// parsePipfileLock parse pipfile.lock file
|
|
func parsePipfileLock(root *model.DepTree, file *model.FileInfo) {
|
|
lock := struct {
|
|
Default map[string]struct {
|
|
Version string `json:"version"`
|
|
} `json:"default"`
|
|
}{}
|
|
err := json.Unmarshal(file.Data, &lock)
|
|
if err != nil {
|
|
logs.Warn(err)
|
|
}
|
|
names := []string{}
|
|
for n := range lock.Default {
|
|
names = append(names, n)
|
|
}
|
|
for _, n := range names {
|
|
v := lock.Default[n].Version
|
|
if v != "" {
|
|
dep := model.NewDepTree(root)
|
|
dep.Name = n
|
|
dep.Version = model.NewVersion(strings.TrimLeft(v, "vV^=<~>"))
|
|
}
|
|
}
|
|
}
|