Skip to content

Commit cd0c3c8

Browse files
authored
Merge pull request #37 from snyk/fix/prevent-crash-when-checking-dev-deps
fix: prevent crash when Poetry project has dependency groups without dev
2 parents 4eb560b + 0f0a9bc commit cd0c3c8

File tree

4 files changed

+76
-4
lines changed

4 files changed

+76
-4
lines changed

lib/parsers/v2Parser.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ export class V2Parser implements Parser {
4343
getAllDevDependencyNames(): string[] {
4444
// pre-v1.2.0 naming convention
4545
const devDepsProperty = Object.keys(
46-
this.manifest.tool?.poetry.group?.dev.dependencies ?? [],
46+
this.manifest.tool?.poetry?.group?.dev?.dependencies ?? [],
4747
);
4848
const legacyDevDepsProperty = Object.keys(
49-
this.manifest.tool?.poetry['dev-dependencies'] ?? [],
49+
this.manifest.tool?.poetry?.['dev-dependencies'] ?? [],
5050
);
5151
// post-v1.2.0 dependency groups
5252
// https://python-poetry.org/docs/master/managing-dependencies
5353
// we will handle all tool.poetry.group.<group> as dev-deps
54-
const groupDevDepsProperty = this.manifest.tool?.poetry.group
55-
? this.getGroupDevDepNames(this.manifest.tool?.poetry.group)
54+
const groupDevDepsProperty = this.manifest.tool?.poetry?.group
55+
? this.getGroupDevDepNames(this.manifest.tool?.poetry?.group)
5656
: [];
5757

5858
return [

test/fixtures/v2/scenarios/group-extras-no-dev/poetry.lock

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[project]
2+
name = "myPkg"
3+
version = "1.42.2"
4+
description = ""
5+
authors = [
6+
{name = "Your Name",email = "[email protected]"}
7+
]
8+
readme = "README.md"
9+
requires-python = ">=3.11"
10+
dependencies = [
11+
"six (>=1.17.0,<2.0.0)"
12+
]
13+
14+
15+
[build-system]
16+
requires = ["poetry-core>=2.0.0,<3.0.0"]
17+
build-backend = "poetry.core.masonry.api"
18+
19+
[tool.poetry.group.extras.dependencies]
20+
plotly = "^5.17.0"
21+
22+

test/poetry-v2.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,26 @@ describe('buildDepGraph', () => {
295295
).equals(expectedGraph);
296296
expect(isEqual).toBe(true);
297297
});
298+
299+
it('should not crash when group.extras exists but group.dev does not', () => {
300+
const includeDevDependencies = true;
301+
const expectedGraph = depGraphBuilder
302+
.addPkgNode({ name: 'six', version: '1.17.0' }, 'six', {
303+
labels: { scope: 'prod' },
304+
})
305+
.connectDep(depGraphBuilder.rootNodeId, 'six')
306+
.addPkgNode({ name: 'plotly', version: '5.17.0' }, 'plotly', {
307+
labels: { scope: 'dev' },
308+
})
309+
.connectDep(depGraphBuilder.rootNodeId, 'plotly')
310+
.build();
311+
312+
const isEqual = depGraphForScenarioAt(
313+
'fixtures/v2/scenarios/group-extras-no-dev',
314+
includeDevDependencies,
315+
).equals(expectedGraph);
316+
expect(isEqual).toBe(true);
317+
});
298318
});
299319

300320
function depGraphForScenarioAt(

0 commit comments

Comments
 (0)