55
66from typing import Dict , List , Optional , Union
77
8- from pydantic import BaseModel , Field , validator
8+ from pydantic import BaseModel , Field , field_validator
99from typing_extensions import Literal
1010
1111from conda_lock .models import StrictModel
@@ -21,7 +21,8 @@ class _BaseDependency(StrictModel):
2121 extras : List [str ] = []
2222 markers : Optional [str ] = None
2323
24- @validator ("extras" )
24+ @field_validator ("extras" )
25+ @classmethod
2526 def sorted_extras (cls , v : List [str ]) -> List [str ]:
2627 return sorted (v )
2728
@@ -53,11 +54,11 @@ class Package(StrictModel):
5354
5455
5556class PoetryMappedDependencySpec (StrictModel ):
56- url : Optional [str ]
57+ url : Optional [str ] = None
5758 manager : Literal ["conda" , "pip" ]
5859 extras : List
59- markers : Optional [str ]
60- poetry_version_spec : Optional [str ]
60+ markers : Optional [str ] = None
61+ poetry_version_spec : Optional [str ] = None
6162
6263
6364class LockSpecification (BaseModel ):
@@ -84,16 +85,18 @@ def content_hash_for_platform(
8485 self , platform : str , virtual_package_repo : Optional [FakeRepoData ]
8586 ) -> str :
8687 data = {
87- "channels" : [c .json () for c in self .channels ],
88+ "channels" : [c .model_dump_json () for c in self .channels ],
8889 "specs" : [
89- p .dict ()
90+ p .model_dump ()
9091 for p in sorted (
9192 self .dependencies [platform ], key = lambda p : (p .manager , p .name )
9293 )
9394 ],
9495 }
9596 if self .pip_repositories :
96- data ["pip_repositories" ] = [repo .json () for repo in self .pip_repositories ]
97+ data ["pip_repositories" ] = [
98+ repo .model_dump_json () for repo in self .pip_repositories
99+ ]
97100 if virtual_package_repo is not None :
98101 vpr_data = virtual_package_repo .all_repodata
99102 data ["virtual_package_hash" ] = {
@@ -104,7 +107,8 @@ def content_hash_for_platform(
104107 env_spec = json .dumps (data , sort_keys = True )
105108 return hashlib .sha256 (env_spec .encode ("utf-8" )).hexdigest ()
106109
107- @validator ("channels" , pre = True )
110+ @field_validator ("channels" , mode = "before" )
111+ @classmethod
108112 def validate_channels (cls , v : List [Union [Channel , str ]]) -> List [Channel ]:
109113 for i , e in enumerate (v ):
110114 if isinstance (e , str ):
@@ -114,7 +118,8 @@ def validate_channels(cls, v: List[Union[Channel, str]]) -> List[Channel]:
114118 raise ValueError ("nodefaults channel is not allowed, ref #418" )
115119 return typing .cast (List [Channel ], v )
116120
117- @validator ("pip_repositories" , pre = True )
121+ @field_validator ("pip_repositories" , mode = "before" )
122+ @classmethod
118123 def validate_pip_repositories (
119124 cls , value : List [Union [PipRepository , str ]]
120125 ) -> List [PipRepository ]:
0 commit comments