@@ -36,7 +36,7 @@ def test_update_pyproject_dependencies(tmpdir, dry_run):
3636 pyproject_toml .write (dedent (orig_pyproject ))
3737
3838 store = PackageStore (
39- type = FileType .REQ_TXT ,
39+ type = FileType .TOML ,
4040 file = pyproject_toml ,
4141 dependencies = set (),
4242 py_versions = [">=3.10.0" ],
@@ -127,7 +127,7 @@ def test_add_same_dependency_only_once(tmpdir):
127127 pyproject_toml .write (dedent (orig_pyproject ))
128128
129129 store = PackageStore (
130- type = FileType .REQ_TXT ,
130+ type = FileType .TOML ,
131131 file = pyproject_toml ,
132132 dependencies = set (),
133133 py_versions = [">=3.10.0" ],
@@ -181,7 +181,7 @@ def test_dont_add_existing_dependency(tmpdir):
181181 pyproject_toml .write (dedent (orig_pyproject ))
182182
183183 store = PackageStore (
184- type = FileType .REQ_TXT ,
184+ type = FileType .TOML ,
185185 file = pyproject_toml ,
186186 dependencies = set ([Security .requirement ]),
187187 py_versions = [">=3.10.0" ],
@@ -207,7 +207,7 @@ def test_pyproject_no_dependencies(tmpdir):
207207 pyproject_toml .write (dedent (orig_pyproject ))
208208
209209 store = PackageStore (
210- type = FileType .REQ_TXT ,
210+ type = FileType .TOML ,
211211 file = pyproject_toml ,
212212 dependencies = set (),
213213 py_versions = [">=3.10.0" ],
@@ -219,3 +219,192 @@ def test_pyproject_no_dependencies(tmpdir):
219219 writer .write (dependencies )
220220
221221 assert pyproject_toml .read () == dedent (orig_pyproject )
222+
223+
224+ def test_pyproject_poetry (tmpdir ):
225+ orig_pyproject = """\
226+ [tool.poetry]
227+ name = "example-project"
228+ version = "0.1.0"
229+ description = "An example project to demonstrate Poetry configuration."
230+ authors = ["Your Name <[email protected] >"] 231+
232+ [build-system]
233+ requires = ["poetry-core>=1.0.0"]
234+ build-backend = "poetry.core.masonry.api"
235+
236+ [tool.poetry.dependencies]
237+ python = "~=3.11.0"
238+ requests = ">=2.25.1,<3.0.0"
239+ pandas = "^1.2.3"
240+ libcst = ">1.0"
241+ """
242+
243+ pyproject_toml = tmpdir .join ("pyproject.toml" )
244+ pyproject_toml .write (dedent (orig_pyproject ))
245+
246+ store = PackageStore (
247+ type = FileType .TOML ,
248+ file = pyproject_toml ,
249+ dependencies = set (),
250+ py_versions = ["~=3.11.0" ],
251+ )
252+
253+ writer = PyprojectWriter (store , tmpdir )
254+ dependencies = [Security , DefusedXML ]
255+ writer .write (dependencies )
256+
257+ updated_pyproject = f"""\
258+ [tool.poetry]
259+ name = "example-project"
260+ version = "0.1.0"
261+ description = "An example project to demonstrate Poetry configuration."
262+ authors = ["Your Name <[email protected] >"] 263+
264+ [build-system]
265+ requires = ["poetry-core>=1.0.0"]
266+ build-backend = "poetry.core.masonry.api"
267+
268+ [tool.poetry.dependencies]
269+ python = "~=3.11.0"
270+ requests = ">=2.25.1,<3.0.0"
271+ pandas = "^1.2.3"
272+ libcst = ">1.0"
273+ { Security .requirement .name } = "{ str (Security .requirement .specifier )} "
274+ { DefusedXML .requirement .name } = "{ str (DefusedXML .requirement .specifier )} "
275+ """
276+
277+ assert pyproject_toml .read () == dedent (updated_pyproject )
278+
279+
280+ def test_pyproject_poetry_existing_dependency (tmpdir ):
281+ orig_pyproject = """\
282+ [tool.poetry]
283+ name = "example-project"
284+ version = "0.1.0"
285+ description = "An example project to demonstrate Poetry configuration."
286+ authors = ["Your Name <[email protected] >"] 287+
288+ [build-system]
289+ requires = ["poetry-core>=1.0.0"]
290+ build-backend = "poetry.core.masonry.api"
291+
292+ [tool.poetry.dependencies]
293+ python = "~=3.11.0"
294+ requests = ">=2.25.1,<3.0.0"
295+ pandas = "^1.2.3"
296+ libcst = ">1.0"
297+ defusedxml = "^0.7"
298+ """
299+
300+ pyproject_toml = tmpdir .join ("pyproject.toml" )
301+ pyproject_toml .write (dedent (orig_pyproject ))
302+
303+ store = PackageStore (
304+ type = FileType .TOML ,
305+ file = pyproject_toml ,
306+ dependencies = set ([DefusedXML .requirement ]),
307+ py_versions = ["~=3.11.0" ],
308+ )
309+
310+ writer = PyprojectWriter (store , tmpdir )
311+ dependencies = [DefusedXML ]
312+ writer .write (dependencies )
313+
314+ assert pyproject_toml .read () == dedent (orig_pyproject )
315+
316+
317+ def test_pyproject_poetry_no_deps_section (tmpdir ):
318+ orig_pyproject = """\
319+ [tool.poetry]
320+ name = "example-project"
321+ version = "0.1.0"
322+ description = "An example project to demonstrate Poetry configuration."
323+ authors = ["Your Name <[email protected] >"] 324+
325+ [build-system]
326+ requires = ["poetry-core>=1.0.0"]
327+ build-backend = "poetry.core.masonry.api"
328+ """
329+
330+ pyproject_toml = tmpdir .join ("pyproject.toml" )
331+ pyproject_toml .write (dedent (orig_pyproject ))
332+
333+ store = PackageStore (
334+ type = FileType .TOML ,
335+ file = pyproject_toml ,
336+ dependencies = set (),
337+ py_versions = [],
338+ )
339+
340+ writer = PyprojectWriter (store , tmpdir )
341+ dependencies = [Security , DefusedXML ]
342+ writer .write (dependencies )
343+
344+ updated_pyproject = f"""\
345+ [tool.poetry]
346+ name = "example-project"
347+ version = "0.1.0"
348+ description = "An example project to demonstrate Poetry configuration."
349+ authors = ["Your Name <[email protected] >"] 350+
351+ [tool.poetry.dependencies]
352+ { Security .requirement .name } = "{ str (Security .requirement .specifier )} "
353+ { DefusedXML .requirement .name } = "{ str (DefusedXML .requirement .specifier )} "
354+
355+ [build-system]
356+ requires = ["poetry-core>=1.0.0"]
357+ build-backend = "poetry.core.masonry.api"
358+ """
359+
360+ assert pyproject_toml .read () == dedent (updated_pyproject )
361+
362+
363+ def test_pyproject_poetry_no_declared_deps (tmpdir ):
364+ orig_pyproject = """\
365+ [tool.poetry]
366+ name = "example-project"
367+ version = "0.1.0"
368+ description = "An example project to demonstrate Poetry configuration."
369+ authors = ["Your Name <[email protected] >"] 370+
371+ [build-system]
372+ requires = ["poetry-core>=1.0.0"]
373+ build-backend = "poetry.core.masonry.api"
374+
375+ [tool.poetry.dependencies]
376+ python = "^3.11"
377+ """
378+
379+ pyproject_toml = tmpdir .join ("pyproject.toml" )
380+ pyproject_toml .write (dedent (orig_pyproject ))
381+
382+ store = PackageStore (
383+ type = FileType .TOML ,
384+ file = pyproject_toml ,
385+ dependencies = set (),
386+ py_versions = ["~=3.11.0" ],
387+ )
388+
389+ writer = PyprojectWriter (store , tmpdir )
390+ dependencies = [Security , DefusedXML ]
391+ writer .write (dependencies )
392+
393+ updated_pyproject = f"""\
394+ [tool.poetry]
395+ name = "example-project"
396+ version = "0.1.0"
397+ description = "An example project to demonstrate Poetry configuration."
398+ authors = ["Your Name <[email protected] >"] 399+
400+ [build-system]
401+ requires = ["poetry-core>=1.0.0"]
402+ build-backend = "poetry.core.masonry.api"
403+
404+ [tool.poetry.dependencies]
405+ python = "^3.11"
406+ { Security .requirement .name } = "{ str (Security .requirement .specifier )} "
407+ { DefusedXML .requirement .name } = "{ str (DefusedXML .requirement .specifier )} "
408+ """
409+
410+ assert pyproject_toml .read () == dedent (updated_pyproject )
0 commit comments