@@ -256,16 +256,33 @@ class PylockUnsupportedVersionError(PylockValidationError):
256256 pass
257257
258258
259- @dataclass (kw_only = True )
259+ @dataclass (frozen = True )
260260class PackageVcs :
261261 type : str
262- url : Optional [str ] = None
263- path : Optional [str ] = None
264- requested_revision : Optional [str ] = None
262+ url : Optional [str ] # = None
263+ path : Optional [str ] # = None
264+ requested_revision : Optional [str ] # = None
265265 commit_id : str
266266 subdirectory : Optional [str ] = None
267267
268- def __post_init__ (self ) -> None :
268+ def __init__ (
269+ self ,
270+ * ,
271+ type : str ,
272+ commit_id : str ,
273+ url : Optional [str ] = None ,
274+ path : Optional [str ] = None ,
275+ requested_revision : Optional [str ] = None ,
276+ subdirectory : Optional [str ] = None ,
277+ ) -> None :
278+ # In Python 3.10+ make dataclass kw_only=True and remove __init__
279+ object .__setattr__ (self , "type" , type )
280+ object .__setattr__ (self , "url" , url )
281+ object .__setattr__ (self , "path" , path )
282+ object .__setattr__ (self , "requested_revision" , requested_revision )
283+ object .__setattr__ (self , "commit_id" , commit_id )
284+ object .__setattr__ (self , "subdirectory" , subdirectory )
285+ # __post_init__ in Python 3.10+
269286 _validate_path_url (self .path , self .url )
270287
271288 @classmethod
@@ -280,12 +297,24 @@ def from_dict(cls, d: Dict[str, Any]) -> "Self":
280297 )
281298
282299
283- @dataclass (kw_only = True )
300+ @dataclass (frozen = True )
284301class PackageDirectory :
285302 path : str
286303 editable : Optional [bool ] = None
287304 subdirectory : Optional [str ] = None
288305
306+ def __init__ (
307+ self ,
308+ * ,
309+ path : str ,
310+ editable : Optional [bool ] = None ,
311+ subdirectory : Optional [str ] = None ,
312+ ) -> None :
313+ # In Python 3.10+ make dataclass kw_only=True and remove __init__
314+ object .__setattr__ (self , "path" , path )
315+ object .__setattr__ (self , "editable" , editable )
316+ object .__setattr__ (self , "subdirectory" , subdirectory )
317+
289318 @classmethod
290319 def from_dict (cls , d : Dict [str , Any ]) -> "Self" :
291320 return cls (
@@ -295,16 +324,33 @@ def from_dict(cls, d: Dict[str, Any]) -> "Self":
295324 )
296325
297326
298- @dataclass (kw_only = True )
327+ @dataclass (frozen = True )
299328class PackageArchive :
300- url : Optional [str ] = None
301- path : Optional [str ] = None
302- size : Optional [int ] = None
303- upload_time : Optional [datetime ] = None
329+ url : Optional [str ] # = None
330+ path : Optional [str ] # = None
331+ size : Optional [int ] # = None
332+ upload_time : Optional [datetime ] # = None
304333 hashes : Dict [str , str ]
305334 subdirectory : Optional [str ] = None
306335
307- def __post_init__ (self ) -> None :
336+ def __init__ (
337+ self ,
338+ * ,
339+ hashes : Dict [str , str ],
340+ url : Optional [str ] = None ,
341+ path : Optional [str ] = None ,
342+ size : Optional [int ] = None ,
343+ upload_time : Optional [datetime ] = None ,
344+ subdirectory : Optional [str ] = None ,
345+ ) -> None :
346+ # In Python 3.10+ make dataclass kw_only=True and remove __init__
347+ object .__setattr__ (self , "url" , url )
348+ object .__setattr__ (self , "path" , path )
349+ object .__setattr__ (self , "size" , size )
350+ object .__setattr__ (self , "upload_time" , upload_time )
351+ object .__setattr__ (self , "hashes" , hashes )
352+ object .__setattr__ (self , "subdirectory" , subdirectory )
353+ # __post_init__ in Python 3.10+
308354 _validate_path_url (self .path , self .url )
309355 _validate_hashes (self .hashes )
310356
@@ -320,16 +366,33 @@ def from_dict(cls, d: Dict[str, Any]) -> "Self":
320366 )
321367
322368
323- @dataclass (kw_only = True )
369+ @dataclass (frozen = True )
324370class PackageSdist :
325371 name : str
326- upload_time : Optional [datetime ] = None
327- url : Optional [str ] = None
328- path : Optional [str ] = None
329- size : Optional [int ] = None
372+ upload_time : Optional [datetime ] # = None
373+ url : Optional [str ] # = None
374+ path : Optional [str ] # = None
375+ size : Optional [int ] # = None
330376 hashes : Dict [str , str ]
331377
332- def __post_init__ (self ) -> None :
378+ def __init__ (
379+ self ,
380+ * ,
381+ name : str ,
382+ hashes : Dict [str , str ],
383+ upload_time : Optional [datetime ] = None ,
384+ url : Optional [str ] = None ,
385+ path : Optional [str ] = None ,
386+ size : Optional [int ] = None ,
387+ ) -> None :
388+ # In Python 3.10+ make dataclass kw_only=True and remove __init__
389+ object .__setattr__ (self , "name" , name )
390+ object .__setattr__ (self , "upload_time" , upload_time )
391+ object .__setattr__ (self , "url" , url )
392+ object .__setattr__ (self , "path" , path )
393+ object .__setattr__ (self , "size" , size )
394+ object .__setattr__ (self , "hashes" , hashes )
395+ # __post_init__ in Python 3.10+
333396 _validate_path_url (self .path , self .url )
334397 _validate_hashes (self .hashes )
335398
@@ -345,16 +408,33 @@ def from_dict(cls, d: Dict[str, Any]) -> "Self":
345408 )
346409
347410
348- @dataclass (kw_only = True )
411+ @dataclass (frozen = True )
349412class PackageWheel :
350413 name : str
351- upload_time : Optional [datetime ] = None
352- url : Optional [str ] = None
353- path : Optional [str ] = None
354- size : Optional [int ] = None
414+ upload_time : Optional [datetime ] # = None
415+ url : Optional [str ] # = None
416+ path : Optional [str ] # = None
417+ size : Optional [int ] # = None
355418 hashes : Dict [str , str ]
356419
357- def __post_init__ (self ) -> None :
420+ def __init__ (
421+ self ,
422+ * ,
423+ name : str ,
424+ hashes : Dict [str , str ],
425+ upload_time : Optional [datetime ] = None ,
426+ url : Optional [str ] = None ,
427+ path : Optional [str ] = None ,
428+ size : Optional [int ] = None ,
429+ ) -> None :
430+ # In Python 3.10+ make dataclass kw_only=True and remove __init__
431+ object .__setattr__ (self , "name" , name )
432+ object .__setattr__ (self , "upload_time" , upload_time )
433+ object .__setattr__ (self , "url" , url )
434+ object .__setattr__ (self , "path" , path )
435+ object .__setattr__ (self , "size" , size )
436+ object .__setattr__ (self , "hashes" , hashes )
437+ # __post_init__ in Python 3.10+
358438 _validate_path_url (self .path , self .url )
359439 _validate_hashes (self .hashes )
360440
@@ -371,7 +451,7 @@ def from_dict(cls, d: Dict[str, Any]) -> "Self":
371451 return wheel
372452
373453
374- @dataclass (kw_only = True )
454+ @dataclass (frozen = True )
375455class Package :
376456 name : str
377457 version : Optional [Version ] = None
@@ -387,7 +467,38 @@ class Package:
387467 attestation_identities : Optional [List [Dict [str , Any ]]] = None
388468 tool : Optional [Dict [str , Any ]] = None
389469
390- def __post_init__ (self ) -> None :
470+ def __init__ (
471+ self ,
472+ * ,
473+ name : str ,
474+ version : Optional [Version ] = None ,
475+ marker : Optional [Marker ] = None ,
476+ requires_python : Optional [SpecifierSet ] = None ,
477+ dependencies : Optional [List [Dict [str , Any ]]] = None ,
478+ vcs : Optional [PackageVcs ] = None ,
479+ directory : Optional [PackageDirectory ] = None ,
480+ archive : Optional [PackageArchive ] = None ,
481+ index : Optional [str ] = None ,
482+ sdist : Optional [PackageSdist ] = None ,
483+ wheels : Optional [List [PackageWheel ]] = None ,
484+ attestation_identities : Optional [List [Dict [str , Any ]]] = None ,
485+ tool : Optional [Dict [str , Any ]] = None ,
486+ ) -> None :
487+ # In Python 3.10+ make dataclass kw_only=True and remove __init__
488+ object .__setattr__ (self , "name" , name )
489+ object .__setattr__ (self , "version" , version )
490+ object .__setattr__ (self , "marker" , marker )
491+ object .__setattr__ (self , "requires_python" , requires_python )
492+ object .__setattr__ (self , "dependencies" , dependencies )
493+ object .__setattr__ (self , "vcs" , vcs )
494+ object .__setattr__ (self , "directory" , directory )
495+ object .__setattr__ (self , "archive" , archive )
496+ object .__setattr__ (self , "index" , index )
497+ object .__setattr__ (self , "sdist" , sdist )
498+ object .__setattr__ (self , "wheels" , wheels )
499+ object .__setattr__ (self , "attestation_identities" , attestation_identities )
500+ object .__setattr__ (self , "tool" , tool )
501+ # __post_init__ in Python 3.10+
391502 if self .sdist or self .wheels :
392503 if any ([self .vcs , self .directory , self .archive ]):
393504 raise PylockValidationError (
@@ -422,19 +533,42 @@ def from_dict(cls, d: Dict[str, Any]) -> "Self":
422533 return package
423534
424535
425- @dataclass (kw_only = True )
536+ @dataclass (frozen = True )
426537class Pylock :
427538 lock_version : Version
428- environments : Optional [List [Marker ]] = None
429- requires_python : Optional [SpecifierSet ] = None
430- extras : List [str ] = dataclasses .field (default_factory = list )
431- dependency_groups : List [str ] = dataclasses .field (default_factory = list )
432- default_groups : List [str ] = dataclasses .field (default_factory = list )
539+ environments : Optional [List [Marker ]] # = None
540+ requires_python : Optional [SpecifierSet ] # = None
541+ extras : List [str ] # = dataclasses.field(default_factory=list)
542+ dependency_groups : List [str ] # = dataclasses.field(default_factory=list)
543+ default_groups : List [str ] # = dataclasses.field(default_factory=list)
433544 created_by : str
434545 packages : List [Package ]
435546 tool : Optional [Dict [str , Any ]] = None
436547
437- def __post_init__ (self ) -> None :
548+ def __init__ (
549+ self ,
550+ * ,
551+ lock_version : Version ,
552+ created_by : str ,
553+ packages : List [Package ],
554+ environments : Optional [List [Marker ]] = None ,
555+ requires_python : Optional [SpecifierSet ] = None ,
556+ extras : Optional [List [str ]] = None ,
557+ dependency_groups : Optional [List [str ]] = None ,
558+ default_groups : Optional [List [str ]] = None ,
559+ tool : Optional [Dict [str , Any ]] = None ,
560+ ) -> None :
561+ # In Python 3.10+ make dataclass kw_only=True and remove __init__
562+ object .__setattr__ (self , "lock_version" , lock_version )
563+ object .__setattr__ (self , "environments" , environments )
564+ object .__setattr__ (self , "requires_python" , requires_python )
565+ object .__setattr__ (self , "extras" , extras or [])
566+ object .__setattr__ (self , "dependency_groups" , dependency_groups or [])
567+ object .__setattr__ (self , "default_groups" , default_groups or [])
568+ object .__setattr__ (self , "created_by" , created_by )
569+ object .__setattr__ (self , "packages" , packages )
570+ object .__setattr__ (self , "tool" , tool )
571+ # __post_init__ in Python 3.10+
438572 if self .lock_version < Version ("1" ) or self .lock_version >= Version ("2" ):
439573 raise PylockUnsupportedVersionError (
440574 f"pylock version { self .lock_version } is not supported"
0 commit comments