3232 HostBinPath ,
3333 BinProviderName ,
3434 PATHStr ,
35- Sha256 ,
3635)
3736
3837DEFAULT_PROVIDER = EnvProvider ()
@@ -43,7 +42,7 @@ class Binary(ShallowBinary):
4342 model_config = ConfigDict (
4443 extra = "allow" ,
4544 populate_by_name = True ,
46- validate_defaults = True ,
45+ validate_default = True ,
4746 validate_assignment = True ,
4847 from_attributes = True ,
4948 revalidate_instances = "always" ,
@@ -59,22 +58,15 @@ class Binary(ShallowBinary):
5958 )
6059 overrides : BinaryOverrides = Field (default_factory = dict )
6160
62- loaded_binprovider : InstanceOf [BinProvider ] | None = Field (
63- default = None ,
64- alias = "binprovider" ,
65- )
66- loaded_abspath : HostBinPath | None = Field (default = None , alias = "abspath" )
6761 min_version : SemVer | None = None
68- loaded_version : SemVer | None = Field (default = None , alias = "version" )
69- loaded_sha256 : Sha256 | None = Field (default = None , alias = "sha256" )
7062
7163 # bin_filename: see below
7264 # is_executable: see below
7365 # is_script
7466 # is_valid: see below
7567
7668 @model_validator (mode = "after" )
77- def validate (self ):
69+ def validate_model (self ) -> Self :
7870 # assert self.name, 'Binary.name must not be empty'
7971 # self.description = self.description or self.name
8072
@@ -239,16 +231,13 @@ def install(
239231 installed_bin = provider .install (self .name )
240232 if installed_bin is not None and installed_bin .loaded_abspath :
241233 # print('INSTALLED', self.name, installed_bin)
242- return self .__class__ (
243- ** {
244- ** self .model_dump (exclude_computed_fields = True ),
245- ** installed_bin .model_dump (
246- exclude = {"binproviders_supported" },
247- exclude_computed_fields = True ,
248- ),
234+ return self .model_copy (
235+ deep = True ,
236+ update = {
249237 "loaded_binprovider" : provider ,
250- "binproviders_supported" : self .binproviders_supported ,
251- "overrides" : self .overrides ,
238+ "loaded_abspath" : installed_bin .loaded_abspath ,
239+ "loaded_version" : installed_bin .loaded_version ,
240+ "loaded_sha256" : installed_bin .loaded_sha256 ,
252241 },
253242 )
254243 except Exception as err :
@@ -300,16 +289,13 @@ def load(
300289 installed_bin = provider .load (self .name , nocache = nocache )
301290 if installed_bin is not None and installed_bin .loaded_abspath :
302291 # print('LOADED', binprovider, self.name, installed_bin)
303- return self .__class__ (
304- ** {
305- ** self .model_dump (exclude_computed_fields = True ),
306- ** installed_bin .model_dump (
307- exclude = {"binproviders_supported" },
308- exclude_computed_fields = True ,
309- ),
292+ return self .model_copy (
293+ deep = True ,
294+ update = {
310295 "loaded_binprovider" : provider ,
311- "binproviders_supported" : self .binproviders_supported ,
312- "overrides" : self .overrides ,
296+ "loaded_abspath" : installed_bin .loaded_abspath ,
297+ "loaded_version" : installed_bin .loaded_version ,
298+ "loaded_sha256" : installed_bin .loaded_sha256 ,
313299 },
314300 )
315301 else :
@@ -364,16 +350,13 @@ def load_or_install(
364350 installed_bin = provider .load_or_install (self .name , nocache = nocache )
365351 if installed_bin is not None and installed_bin .loaded_abspath :
366352 # print('LOADED_OR_INSTALLED', self.name, installed_bin)
367- return self .__class__ (
368- ** {
369- ** self .model_dump (exclude_computed_fields = True ),
370- ** installed_bin .model_dump (
371- exclude = {"binproviders_supported" },
372- exclude_computed_fields = True ,
373- ),
353+ return self .model_copy (
354+ deep = True ,
355+ update = {
374356 "loaded_binprovider" : provider ,
375- "binproviders_supported" : self .binproviders_supported ,
376- "overrides" : self .overrides ,
357+ "loaded_abspath" : installed_bin .loaded_abspath ,
358+ "loaded_version" : installed_bin .loaded_version ,
359+ "loaded_sha256" : installed_bin .loaded_sha256 ,
377360 },
378361 )
379362 else :
@@ -420,16 +403,13 @@ def update(
420403 )
421404 updated_bin = provider .update (self .name )
422405 if updated_bin is not None and updated_bin .loaded_abspath :
423- return self .__class__ (
424- ** {
425- ** self .model_dump (exclude_computed_fields = True ),
426- ** updated_bin .model_dump (
427- exclude = {"binproviders_supported" },
428- exclude_computed_fields = True ,
429- ),
406+ return self .model_copy (
407+ deep = True ,
408+ update = {
430409 "loaded_binprovider" : provider ,
431- "binproviders_supported" : self .binproviders_supported ,
432- "overrides" : self .overrides ,
410+ "loaded_abspath" : updated_bin .loaded_abspath ,
411+ "loaded_version" : updated_bin .loaded_version ,
412+ "loaded_sha256" : updated_bin .loaded_sha256 ,
433413 },
434414 )
435415 except Exception as err :
@@ -473,15 +453,13 @@ def uninstall(
473453 )
474454 uninstalled = provider .uninstall (self .name )
475455 if uninstalled :
476- return self .__class__ (
477- ** {
478- ** self . model_dump ( exclude_computed_fields = True ),
456+ return self .model_copy (
457+ deep = True ,
458+ update = {
479459 "loaded_binprovider" : None ,
480460 "loaded_abspath" : None ,
481461 "loaded_version" : None ,
482462 "loaded_sha256" : None ,
483- "binproviders_supported" : self .binproviders_supported ,
484- "overrides" : self .overrides ,
485463 },
486464 )
487465 except Exception as err :
0 commit comments