@@ -63,33 +63,58 @@ def handle(self) -> int:
63
63
64
64
content : dict [str , Any ] = self .poetry .file .read ()
65
65
project_content = content .get ("project" , {})
66
+ groups_content = content .get ("dependency-groups" , {})
66
67
poetry_content = content .get ("tool" , {}).get ("poetry" , {})
67
68
68
69
if group is None :
69
70
# remove from all groups
70
71
removed = set ()
71
72
group_sections = []
72
73
project_dependencies = project_content .get ("dependencies" , [])
74
+
75
+ group_dependencies = []
76
+ for dependencies in groups_content .values ():
77
+ group_dependencies .extend (dependencies )
78
+
73
79
poetry_dependencies = poetry_content .get ("dependencies" , {})
74
- if project_dependencies or poetry_dependencies :
80
+ if project_dependencies or poetry_dependencies or group_dependencies :
75
81
group_sections .append (
76
- (MAIN_GROUP , project_dependencies , poetry_dependencies )
82
+ (MAIN_GROUP , project_dependencies , poetry_dependencies , [] )
77
83
)
78
84
group_sections .extend (
79
- (group_name , [], group_section .get ("dependencies" , {}))
85
+ (group_name , [], {}, dependencies )
86
+ for group_name , dependencies in groups_content .items ()
87
+ )
88
+ group_sections .extend (
89
+ (group_name , [], group_section .get ("dependencies" , {}), [])
80
90
for group_name , group_section in poetry_content .get ("group" , {}).items ()
81
91
)
82
92
83
- for group_name , project_section , poetry_section in group_sections :
93
+ for (
94
+ group_name ,
95
+ project_section ,
96
+ poetry_section ,
97
+ group_dep_section ,
98
+ ) in group_sections :
84
99
removed |= self ._remove_packages (
85
- packages , project_section , poetry_section , group_name
100
+ packages ,
101
+ project_section ,
102
+ poetry_section ,
103
+ group_dep_section ,
104
+ group_name ,
86
105
)
87
- if group_name != MAIN_GROUP and not poetry_section :
88
- del poetry_content ["group" ][group_name ]
106
+ if group_name != MAIN_GROUP :
107
+ if not poetry_section and group_name in poetry_content .get (
108
+ "group" , {}
109
+ ):
110
+ del poetry_content ["group" ][group_name ]
111
+ if not group_dep_section and group_name in groups_content :
112
+ del groups_content [group_name ]
113
+
89
114
elif group == "dev" and "dev-dependencies" in poetry_content :
90
115
# We need to account for the old `dev-dependencies` section
91
116
removed = self ._remove_packages (
92
- packages , [], poetry_content ["dev-dependencies" ], "dev"
117
+ packages , [], poetry_content ["dev-dependencies" ], [], "dev"
93
118
)
94
119
95
120
if not poetry_content ["dev-dependencies" ]:
@@ -98,15 +123,30 @@ def handle(self) -> int:
98
123
removed = set ()
99
124
if "group" in poetry_content :
100
125
if group in poetry_content ["group" ]:
101
- removed = self ._remove_packages (
102
- packages ,
103
- [],
104
- poetry_content ["group" ][group ].get ("dependencies" , {}),
105
- group ,
126
+ removed .update (
127
+ self ._remove_packages (
128
+ packages ,
129
+ [],
130
+ poetry_content ["group" ][group ].get ("dependencies" , {}),
131
+ [],
132
+ group ,
133
+ )
106
134
)
107
135
108
136
if not poetry_content ["group" ][group ]:
109
137
del poetry_content ["group" ][group ]
138
+ if group in groups_content :
139
+ removed .update (
140
+ self ._remove_packages (
141
+ packages ,
142
+ [],
143
+ {},
144
+ groups_content [group ],
145
+ group ,
146
+ )
147
+ )
148
+ if not groups_content [group ]:
149
+ del groups_content [group ]
110
150
111
151
if "group" in poetry_content and not poetry_content ["group" ]:
112
152
del poetry_content ["group" ]
@@ -140,6 +180,7 @@ def _remove_packages(
140
180
packages : list [str ],
141
181
project_section : list [str ],
142
182
poetry_section : dict [str , Any ],
183
+ group_section : list [str ],
143
184
group_name : str ,
144
185
) -> set [str ]:
145
186
removed = set ()
@@ -155,6 +196,10 @@ def _remove_packages(
155
196
if canonicalize_name (existing_package ) == normalized_name :
156
197
del poetry_section [existing_package ]
157
198
removed .add (package )
199
+ for requirement in group_section .copy ():
200
+ if Dependency .create_from_pep_508 (requirement ).name == normalized_name :
201
+ group_section .remove (requirement )
202
+ removed .add (package )
158
203
159
204
for package in removed :
160
205
group .remove_dependency (package )
0 commit comments