@@ -59,6 +59,11 @@ class Locker:
59
59
"dev-dependencies" ,
60
60
]
61
61
_relevant_keys : ClassVar [list [str ]] = [* _legacy_keys , "group" ]
62
+ _relevant_project_keys : ClassVar [list [str ]] = [
63
+ "requires-python" ,
64
+ "dependencies" ,
65
+ "optional-dependencies" ,
66
+ ]
62
67
63
68
def __init__ (self , lock : Path , pyproject_data : dict [str , Any ]) -> None :
64
69
self ._lock = lock
@@ -324,16 +329,37 @@ def _get_content_hash(self) -> str:
324
329
"""
325
330
Returns the sha256 hash of the sorted content of the pyproject file.
326
331
"""
327
- content = self ._pyproject_data .get ("tool" , {}).get ("poetry" , {})
332
+ project_content = self ._pyproject_data .get ("project" , {})
333
+ tool_poetry_content = self ._pyproject_data .get ("tool" , {}).get ("poetry" , {})
328
334
329
- relevant_content = {}
335
+ relevant_project_content = {}
336
+ for key in self ._relevant_project_keys :
337
+ data = project_content .get (key )
338
+ if data is not None :
339
+ relevant_project_content [key ] = data
340
+
341
+ relevant_poetry_content = {}
330
342
for key in self ._relevant_keys :
331
- data = content .get (key )
343
+ data = tool_poetry_content .get (key )
332
344
333
- if data is None and key not in self ._legacy_keys :
345
+ if data is None and (
346
+ # Special handling for legacy keys is just for backwards compatibility,
347
+ # and thereby not required if there is relevant content in [project].
348
+ key not in self ._legacy_keys or relevant_project_content
349
+ ):
334
350
continue
335
351
336
- relevant_content [key ] = data
352
+ relevant_poetry_content [key ] = data
353
+
354
+ if relevant_project_content :
355
+ relevant_content = {
356
+ "project" : relevant_project_content ,
357
+ "tool" : {"poetry" : relevant_poetry_content },
358
+ }
359
+ else :
360
+ # For backwards compatibility, we have to put the relevant content
361
+ # of the [tool.poetry] section at top level!
362
+ relevant_content = relevant_poetry_content
337
363
338
364
return sha256 (json .dumps (relevant_content , sort_keys = True ).encode ()).hexdigest ()
339
365
0 commit comments