Skip to content

Commit 60a1c70

Browse files
committed
fix(poetry): compatibility with dependencies with extras.
1 parent a3fc297 commit 60a1c70

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

module/poetry/poetry.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,20 +91,18 @@ func parsePoetry(input []byte) (*Manifest, error) {
9191
return nil, errors.WithMessage(ErrParsePoetry, "Parse toml failed")
9292
}
9393
var m = make(map[string]any)
94+
95+
// 解析 [tool.poetry.dependencies]
9496
if mm, ok := root.Get("tool", "poetry", "dependencies").v.(map[string]any); ok {
95-
for k, v := range mm {
96-
m[k] = v
97-
}
97+
extractDependencies(mm, m)
9898
}
9999

100100
// 解析 [tool.poetry.group.<group_name>.dependencies]
101101
if groups, ok := root.Get("tool", "poetry", "group").v.(map[string]any); ok {
102102
for _, group := range groups {
103103
if groupMap, ok := group.(map[string]any); ok {
104104
if deps, ok := groupMap["dependencies"].(map[string]any); ok {
105-
for k, v := range deps {
106-
m[k] = v
107-
}
105+
extractDependencies(deps, m)
108106
}
109107
}
110108
}
@@ -124,6 +122,8 @@ func parsePoetry(input []byte) (*Manifest, error) {
124122
m[strings.TrimSpace(r[0])] = strings.TrimSpace(r[1])
125123
}
126124
}
125+
126+
// 构建依赖项列表
127127
var deps []model.DependencyItem
128128
for k, v := range m {
129129
v := strings.Trim(fmt.Sprint(v), "~^* ")
@@ -142,6 +142,25 @@ func parsePoetry(input []byte) (*Manifest, error) {
142142
}, nil
143143
}
144144

145+
// 提取依赖项的通用逻辑
146+
func extractDependencies(source map[string]any, target map[string]any) {
147+
for k, v := range source {
148+
switch dep := v.(type) {
149+
case string:
150+
// 直接是版本号
151+
target[k] = dep
152+
case map[string]any:
153+
// 处理带有 extras 的依赖项 如:vanna = { version = "0.7.9", extras = ["postgres", "mysql", "clickhouse", "duckdb"] }
154+
if version, ok := dep["version"].(string); ok {
155+
target[k] = version
156+
}
157+
default:
158+
// 其他情况,忽略
159+
continue
160+
}
161+
}
162+
}
163+
145164
type tomlTree struct {
146165
v any
147166
}

0 commit comments

Comments
 (0)