@@ -63,33 +63,58 @@ def handle(self) -> int:
6363
6464 content : dict [str , Any ] = self .poetry .file .read ()
6565 project_content = content .get ("project" , {})
66+ groups_content = content .get ("dependency-groups" , {})
6667 poetry_content = content .get ("tool" , {}).get ("poetry" , {})
6768
6869 if group is None :
6970 # remove from all groups
7071 removed = set ()
7172 group_sections = []
7273 project_dependencies = project_content .get ("dependencies" , [])
74+
75+ group_dependencies = []
76+ for dependencies in groups_content .values ():
77+ group_dependencies .extend (dependencies )
78+
7379 poetry_dependencies = poetry_content .get ("dependencies" , {})
74- if project_dependencies or poetry_dependencies :
80+ if project_dependencies or poetry_dependencies or group_dependencies :
7581 group_sections .append (
76- (MAIN_GROUP , project_dependencies , poetry_dependencies )
82+ (MAIN_GROUP , project_dependencies , poetry_dependencies , [] )
7783 )
7884 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" , {}), [])
8090 for group_name , group_section in poetry_content .get ("group" , {}).items ()
8191 )
8292
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 :
8499 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 ,
86105 )
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+
89114 elif group == "dev" and "dev-dependencies" in poetry_content :
90115 # We need to account for the old `dev-dependencies` section
91116 removed = self ._remove_packages (
92- packages , [], poetry_content ["dev-dependencies" ], "dev"
117+ packages , [], poetry_content ["dev-dependencies" ], [], "dev"
93118 )
94119
95120 if not poetry_content ["dev-dependencies" ]:
@@ -98,15 +123,30 @@ def handle(self) -> int:
98123 removed = set ()
99124 if "group" in poetry_content :
100125 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+ )
106134 )
107135
108136 if not poetry_content ["group" ][group ]:
109137 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 ]
110150
111151 if "group" in poetry_content and not poetry_content ["group" ]:
112152 del poetry_content ["group" ]
@@ -140,6 +180,7 @@ def _remove_packages(
140180 packages : list [str ],
141181 project_section : list [str ],
142182 poetry_section : dict [str , Any ],
183+ group_section : list [str ],
143184 group_name : str ,
144185 ) -> set [str ]:
145186 removed = set ()
@@ -155,6 +196,10 @@ def _remove_packages(
155196 if canonicalize_name (existing_package ) == normalized_name :
156197 del poetry_section [existing_package ]
157198 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 )
158203
159204 for package in removed :
160205 group .remove_dependency (package )
0 commit comments