Skip to content

Commit

Permalink
fix(manager/poetry): fix schema for optional dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
sisp committed Oct 22, 2024
1 parent d4c96b3 commit e3a1a10
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 50 deletions.
8 changes: 5 additions & 3 deletions lib/modules/manager/poetry/__fixtures__/pyproject.1.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ dep1_ = "0.0.0"
dep1 = "0.0.0"
dep2 = "^0.6.0"
dep3 = "^0.33.6"
extra_dep1 = {version = "^0.8.3", optional = true}
extra_dep2 = {version = "^0.9.4", optional = true}
extra_dep3 = {version = "^0.4.0", optional = true}
python = "~2.7 || ^3.4"

[tool.poetry.extras]
extra_dep1 = "^0.8.3"
extra_dep2 = "^0.9.4"
extra_dep3 = "^0.4.0"
extra1 = ["extra_dep1", "extra_dep2"]
extra2 = ["extra_dep3"]

[tool.poetry.dev-dependencies]
dev_dep1 = "^3.0"
Expand Down
8 changes: 5 additions & 3 deletions lib/modules/manager/poetry/__fixtures__/pyproject.2.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ dep2 = { version = "^0.6.0" }
dep3 = { path = "/some/path/", version = '^0.33.6' }
dep4 = { path = "/some/path/" }
dep5 = {}
extra_dep1 = {version = "^0.8.3", optional = true}
extra_dep2 = {version = "^0.9.4", optional = true}
extra_dep3 = {version = "^0.4.0", optional = true}

[tool.poetry.extras]
extra_dep1 = "^0.8.3"
extra_dep2 = "^0.9.4"
extra_dep3 = '^0.4.0'
extra1 = ["extra_dep1", "extra_dep2"]
extra2 = ["extra_dep3"]

[build-system]
requires = ["poetry>=1.0", "wheel"]
Expand Down
78 changes: 42 additions & 36 deletions lib/modules/manager/poetry/__snapshots__/extract.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,8 @@ exports[`modules/manager/poetry/extract extractPackageFile() extracts multiple d
"depName": "extra_dep1",
"depType": "extras",
"managerData": {
"nestedVersion": false,
"nestedVersion": true,
"sourceName": undefined,
},
"packageName": "extra-dep1",
"versioning": "poetry",
Expand All @@ -410,7 +411,8 @@ exports[`modules/manager/poetry/extract extractPackageFile() extracts multiple d
"depName": "extra_dep2",
"depType": "extras",
"managerData": {
"nestedVersion": false,
"nestedVersion": true,
"sourceName": undefined,
},
"packageName": "extra-dep2",
"versioning": "poetry",
Expand All @@ -421,7 +423,8 @@ exports[`modules/manager/poetry/extract extractPackageFile() extracts multiple d
"depName": "extra_dep3",
"depType": "extras",
"managerData": {
"nestedVersion": false,
"nestedVersion": true,
"sourceName": undefined,
},
"packageName": "extra-dep3",
"versioning": "poetry",
Expand Down Expand Up @@ -476,72 +479,75 @@ exports[`modules/manager/poetry/extract extractPackageFile() extracts multiple d
"versioning": "poetry",
},
{
"commitMessageTopic": "Python",
"currentValue": "~2.7 || ^3.4",
"datasource": "github-releases",
"depName": "python",
"depType": "dependencies",
"currentValue": "^0.8.3",
"datasource": "pypi",
"depName": "extra_dep1",
"depType": "extras",
"managerData": {
"nestedVersion": false,
"nestedVersion": true,
"sourceName": undefined,
},
"packageName": "containerbase/python-prebuild",
"registryUrls": null,
"packageName": "extra-dep1",
"versioning": "poetry",
},
{
"currentValue": "^3.0",
"currentValue": "^0.9.4",
"datasource": "pypi",
"depName": "dev_dep1",
"depType": "dev-dependencies",
"depName": "extra_dep2",
"depType": "extras",
"managerData": {
"nestedVersion": false,
"nestedVersion": true,
"sourceName": undefined,
},
"packageName": "dev-dep1",
"packageName": "extra-dep2",
"versioning": "poetry",
},
{
"currentValue": "Invalid version.",
"currentValue": "^0.4.0",
"datasource": "pypi",
"depName": "dev_dep2",
"depType": "dev-dependencies",
"depName": "extra_dep3",
"depType": "extras",
"managerData": {
"nestedVersion": false,
"nestedVersion": true,
"sourceName": undefined,
},
"packageName": "dev-dep2",
"skipReason": "invalid-version",
"packageName": "extra-dep3",
"versioning": "poetry",
},
{
"currentValue": "^0.8.3",
"datasource": "pypi",
"depName": "extra_dep1",
"depType": "extras",
"commitMessageTopic": "Python",
"currentValue": "~2.7 || ^3.4",
"datasource": "github-releases",
"depName": "python",
"depType": "dependencies",
"managerData": {
"nestedVersion": false,
},
"packageName": "extra-dep1",
"packageName": "containerbase/python-prebuild",
"registryUrls": null,
"versioning": "poetry",
},
{
"currentValue": "^0.9.4",
"currentValue": "^3.0",
"datasource": "pypi",
"depName": "extra_dep2",
"depType": "extras",
"depName": "dev_dep1",
"depType": "dev-dependencies",
"managerData": {
"nestedVersion": false,
},
"packageName": "extra-dep2",
"packageName": "dev-dep1",
"versioning": "poetry",
},
{
"currentValue": "^0.4.0",
"currentValue": "Invalid version.",
"datasource": "pypi",
"depName": "extra_dep3",
"depType": "extras",
"depName": "dev_dep2",
"depType": "dev-dependencies",
"managerData": {
"nestedVersion": false,
},
"packageName": "extra-dep3",
"versioning": "poetry",
"packageName": "dev-dep2",
"skipReason": "invalid-version",
},
]
`;
Expand Down
28 changes: 20 additions & 8 deletions lib/modules/manager/poetry/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@ import * as poetryVersioning from '../../versioning/poetry';
import { dependencyPattern } from '../pip_requirements/extract';
import type { PackageDependency, PackageFileContent } from '../types';

const PoetryOptionalDependencyMixin = z
.object({
optional: z.boolean().optional().catch(undefined),
})
.transform(
({ optional }): PackageDependency =>
optional ? { depType: 'extras' } : {},
);

const PoetryPathDependency = z
.object({
path: z.string(),
Expand All @@ -33,7 +42,8 @@ const PoetryPathDependency = z
}

return dep;
});
})
.and(PoetryOptionalDependencyMixin);

const PoetryGitDependency = z
.object({
Expand Down Expand Up @@ -84,7 +94,8 @@ const PoetryGitDependency = z
packageName: git,
skipReason: 'git-dependency',
};
});
})
.and(PoetryOptionalDependencyMixin);

const PoetryPypiDependency = z.union([
z
Expand All @@ -99,7 +110,8 @@ const PoetryPypiDependency = z.union([
managerData: { nestedVersion: true, sourceName: source?.toLowerCase() },
currentValue,
};
}),
})
.and(PoetryOptionalDependencyMixin),
z.string().transform(
(version): PackageDependency => ({
datasource: PypiDatasource.id,
Expand Down Expand Up @@ -172,10 +184,12 @@ export const PoetryDependencies = LooseRecord(
function withDepType<
Output extends PackageDependency[],
Schema extends ZodType<Output, ZodTypeDef, unknown>,
>(schema: Schema, depType: string): ZodEffects<Schema> {
>(schema: Schema, depType: string, force: boolean = false): ZodEffects<Schema> {
return schema.transform((deps) => {
for (const dep of deps) {
dep.depType = depType;
if (!dep.depType || force) {
dep.depType = depType;
}
}
return deps;
});
Expand Down Expand Up @@ -268,8 +282,8 @@ export const PoetrySectionSchema = z
'dev-dependencies': withDepType(
PoetryDependencies,
'dev-dependencies',
true,
).optional(),
extras: withDepType(PoetryDependencies, 'extras').optional(),
group: PoetryGroupDependencies.optional(),
source: PoetrySources,
})
Expand All @@ -278,14 +292,12 @@ export const PoetrySectionSchema = z
version,
dependencies = [],
'dev-dependencies': devDependencies = [],
extras: extraDependencies = [],
group: groupDependencies = [],
source: sourceUrls,
}) => {
const deps: PackageDependency[] = [
...dependencies,
...devDependencies,
...extraDependencies,
...groupDependencies,
];

Expand Down

0 comments on commit e3a1a10

Please sign in to comment.