Skip to content

Commit 43049da

Browse files
committed
rename BinProvider.BIN to INSTALLER_BIN for clarity
1 parent c79ac95 commit 43049da

File tree

1 file changed

+37
-37
lines changed

1 file changed

+37
-37
lines changed

pydantic_pkgr/binprovider.py

+37-37
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ def exec(self, bin_name: BinName | HostBinPath=None, cmd: Iterable[str | Path |
253253

254254

255255
def is_valid_install_args(install_args: List[str]) -> List[str]:
256-
"""Make sure a string is a valid install string for a package manager, e.g. 'yt-dlp ffmpeg'"""
256+
"""Make sure a string is a valid install string for a package manager, e.g. ['yt-dlp', 'ffmpeg']"""
257257
assert install_args
258258
assert all(len(arg) for arg in install_args)
259259
return install_args
@@ -289,7 +289,7 @@ class BinProvider(BaseModel):
289289
name: BinProviderName = ''
290290

291291
PATH: PATHStr = Field(default='') # e.g. '/opt/homebrew/bin:/opt/archivebox/bin'
292-
BIN: BinName = 'env'
292+
INSTALLER_BIN: BinName = 'env'
293293

294294
abspath_provider: ProviderLookupDict = Field(default={'*': 'self.on_get_abspath'}, exclude=True)
295295
version_provider: ProviderLookupDict = Field(default={'*': 'self.on_get_version'}, exclude=True)
@@ -308,13 +308,13 @@ def __getattr__(self, item):
308308
return super().__getattr__(item)
309309

310310
def __str__(self) -> str:
311-
return f'{self.BIN.title()}Provider[{self.BIN_ABSPATH or self.BIN})]'
311+
return f'{self.INSTALLER_BIN.title()}Provider[{self.INSTALLER_BIN_ABSPATH or self.INSTALLER_BIN})]'
312312

313313
@computed_field
314314
@property
315-
def BIN_ABSPATH(self) -> HostBinPath | None:
315+
def INSTALLER_BIN_ABSPATH(self) -> HostBinPath | None:
316316
"""Actual absolute path of the underlying package manager (e.g. /usr/local/bin/npm)"""
317-
abspath = bin_abspath(self.BIN, PATH=None) or shutil.which(self.BIN) # find self.BIN abspath using environment path
317+
abspath = bin_abspath(self.INSTALLER_BIN, PATH=None) or shutil.which(self.INSTALLER_BIN) # find self.INSTALLER_BIN abspath using environment path
318318
if not abspath:
319319
# underlying package manager not found on this host, return None
320320
return None
@@ -323,7 +323,7 @@ def BIN_ABSPATH(self) -> HostBinPath | None:
323323
@computed_field
324324
@property
325325
def is_valid(self) -> bool:
326-
return bool(self.BIN_ABSPATH)
326+
return bool(self.INSTALLER_BIN_ABSPATH)
327327

328328
# def provider_version(self) -> SemVer | None:
329329
# """Version of the actual underlying package manager (e.g. pip v20.4.1)"""
@@ -489,10 +489,10 @@ def on_get_packages(self, bin_name: BinName, **context) -> InstallArgs:
489489

490490
def on_install(self, bin_name: BinName, packages: Optional[InstallArgs]=None, **context):
491491
packages = packages or self.get_packages(bin_name)
492-
if not self.BIN_ABSPATH:
493-
raise Exception(f'{self.name} install method is not available on this host ({self.BIN} not found in $PATH)')
492+
if not self.INSTALLER_BIN_ABSPATH:
493+
raise Exception(f'{self.name} install method is not available on this host ({self.INSTALLER_BIN} not found in $PATH)')
494494

495-
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.BIN_ABSPATH} {packages}')
495+
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.INSTALLER_BIN_ABSPATH} {packages}')
496496
# ... install logic here
497497
assert True
498498

@@ -611,7 +611,7 @@ def load_or_install(self, bin_name: BinName, overrides: Optional[ProviderLookupD
611611

612612
class PipProvider(BinProvider):
613613
name: BinProviderName = 'pip'
614-
BIN: BinName = 'pip'
614+
INSTALLER_BIN: BinName = 'pip'
615615

616616
@field_validator('PATH', mode='after')
617617
@classmethod
@@ -628,12 +628,12 @@ def load_PATH(cls, PATH: PATHStr) -> PATHStr:
628628

629629
def on_install(self, bin_name: str, packages: Optional[InstallArgs]=None, **context):
630630
packages = packages or self.on_get_packages(bin_name)
631-
if not self.BIN_ABSPATH:
632-
raise Exception(f'{self.__class__.__name__} install method is not available on this host ({self.BIN} not found in $PATH)')
631+
if not self.INSTALLER_BIN_ABSPATH:
632+
raise Exception(f'{self.__class__.__name__} install method is not available on this host ({self.INSTALLER_BIN} not found in $PATH)')
633633

634-
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.BIN_ABSPATH} install {packages}')
634+
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.INSTALLER_BIN_ABSPATH} install {packages}')
635635

636-
proc = self.exec(bin_name=self.BIN_ABSPATH, cmd=['install', '--upgrade', *packages])
636+
proc = self.exec(bin_name=self.INSTALLER_BIN_ABSPATH, cmd=['install', '--upgrade', *packages])
637637

638638
if proc.returncode != 0:
639639
print(proc.stdout.strip())
@@ -642,19 +642,19 @@ def on_install(self, bin_name: str, packages: Optional[InstallArgs]=None, **cont
642642

643643
class NpmProvider(BinProvider):
644644
name: BinProviderName = 'npm'
645-
BIN: BinName = 'npm'
645+
INSTALLER_BIN: BinName = 'npm'
646646

647647
@model_validator(mode='after')
648648
def load_PATH_from_npm_prefix(self):
649-
if not self.BIN_ABSPATH:
649+
if not self.INSTALLER_BIN_ABSPATH:
650650
return TypeAdapter(PATHStr).validate_python('')
651651

652652
PATH = self.PATH
653653

654-
npm_global_dir = self.exec(bin_name=self.BIN_ABSPATH, cmd=['prefix', '-g']).stdout.strip() + '/bin' # /opt/homebrew/bin
654+
npm_global_dir = self.exec(bin_name=self.INSTALLER_BIN_ABSPATH, cmd=['prefix', '-g']).stdout.strip() + '/bin' # /opt/homebrew/bin
655655
npm_bin_dirs = {npm_global_dir}
656656

657-
search_dir = Path(self.exec(bin_name=self.BIN_ABSPATH, cmd=['prefix']).stdout.strip())
657+
search_dir = Path(self.exec(bin_name=self.INSTALLER_BIN_ABSPATH, cmd=['prefix']).stdout.strip())
658658
stop_if_reached = [str(Path('/')), str(Path('~').expanduser().absolute())]
659659
num_hops, max_hops = 0, 6
660660
while num_hops < max_hops and str(search_dir) not in stop_if_reached:
@@ -674,12 +674,12 @@ def load_PATH_from_npm_prefix(self):
674674

675675
def on_install(self, bin_name: str, packages: Optional[InstallArgs]=None, **context):
676676
packages = packages or self.on_get_packages(bin_name)
677-
if not self.BIN_ABSPATH:
678-
raise Exception(f'{self.__class__.__name__} install method is not available on this host ({self.BIN} not found in $PATH)')
677+
if not self.INSTALLER_BIN_ABSPATH:
678+
raise Exception(f'{self.__class__.__name__} install method is not available on this host ({self.INSTALLER_BIN} not found in $PATH)')
679679

680-
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.BIN_ABSPATH} install {packages}')
680+
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.INSTALLER_BIN_ABSPATH} install {packages}')
681681

682-
proc = self.exec(bin_name=self.BIN_ABSPATH, cmd=['install', *packages])
682+
proc = self.exec(bin_name=self.INSTALLER_BIN_ABSPATH, cmd=['install', *packages])
683683

684684
if proc.returncode != 0:
685685
print(proc.stdout.strip())
@@ -689,7 +689,7 @@ def on_install(self, bin_name: str, packages: Optional[InstallArgs]=None, **cont
689689

690690
class AptProvider(BinProvider):
691691
name: BinProviderName = 'apt'
692-
BIN: BinName = 'apt-get'
692+
INSTALLER_BIN: BinName = 'apt-get'
693693

694694
packages_provider: ProviderLookupDict = {
695695
**BinProvider.model_fields['packages_provider'].default,
@@ -698,7 +698,7 @@ class AptProvider(BinProvider):
698698

699699
@model_validator(mode='after')
700700
def load_PATH_from_dpkg_install_location(self):
701-
if not self.BIN_ABSPATH:
701+
if not self.INSTALLER_BIN_ABSPATH:
702702
# package manager is not available on this host
703703
self.PATH = ''
704704
return self
@@ -716,10 +716,10 @@ def load_PATH_from_dpkg_install_location(self):
716716
def on_install(self, bin_name: BinName, packages: Optional[InstallArgs]=None, **context):
717717
packages = packages or self.on_get_packages(bin_name)
718718

719-
if not (self.BIN_ABSPATH and shutil.which('dpkg') and shutil.which('apt-get')):
720-
raise Exception(f'{self.__class__.__name__}.BIN is not available on this host: {self.BIN}')
719+
if not (self.INSTALLER_BIN_ABSPATH and shutil.which('dpkg') and shutil.which('apt-get')):
720+
raise Exception(f'{self.__class__.__name__}.INSTALLER_BIN is not available on this host: {self.INSTALLER_BIN}')
721721

722-
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.BIN} install {packages}')
722+
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.INSTALLER_BIN} install {packages}')
723723
try:
724724
# if pyinfra is installed, use it
725725
from pyinfra.operations import apt
@@ -737,8 +737,8 @@ def on_install(self, bin_name: BinName, packages: Optional[InstallArgs]=None, **
737737
_sudo=True,
738738
)
739739
except (ImportError, ModuleNotFoundError):
740-
self.exec(bin_name=self.BIN_ABSPATH, cmd=['update', '-qq'])
741-
proc = self.exec(bin_name=self.BIN_ABSPATH, cmd=['install', '-y', *packages])
740+
self.exec(bin_name=self.INSTALLER_BIN_ABSPATH, cmd=['update', '-qq'])
741+
proc = self.exec(bin_name=self.INSTALLER_BIN_ABSPATH, cmd=['install', '-y', *packages])
742742

743743
if proc.returncode != 0:
744744
print(proc.stdout.strip())
@@ -747,18 +747,18 @@ def on_install(self, bin_name: BinName, packages: Optional[InstallArgs]=None, **
747747

748748
class BrewProvider(BinProvider):
749749
name: BinProviderName = 'brew'
750-
BIN: BinName = 'brew'
750+
INSTALLER_BIN: BinName = 'brew'
751751
PATH: PATHStr = '/opt/homebrew/bin:/usr/local/bin'
752752

753753
@model_validator(mode='after')
754754
def load_PATH(self):
755-
if not self.BIN_ABSPATH:
755+
if not self.INSTALLER_BIN_ABSPATH:
756756
# brew is not availabe on this host
757757
self.PATH = ''
758758
return self
759759

760760
PATH = self.PATH
761-
brew_bin_dir = self.exec(bin_name=self.BIN_ABSPATH, cmd=['--prefix']).stdout.strip() + '/bin'
761+
brew_bin_dir = self.exec(bin_name=self.INSTALLER_BIN_ABSPATH, cmd=['--prefix']).stdout.strip() + '/bin'
762762
if brew_bin_dir not in PATH:
763763
PATH = ':'.join([brew_bin_dir, *PATH.split(':')])
764764
self.PATH = TypeAdapter(PATHStr).validate_python(PATH)
@@ -767,11 +767,11 @@ def load_PATH(self):
767767
def on_install(self, bin_name: str, packages: Optional[InstallArgs]=None, **context):
768768
packages = packages or self.on_get_packages(bin_name)
769769

770-
if not self.BIN_ABSPATH:
771-
raise Exception(f'{self.__class__.__name__}.BIN is not available on this host: {self.BIN}')
770+
if not self.INSTALLER_BIN_ABSPATH:
771+
raise Exception(f'{self.__class__.__name__}.INSTALLER_BIN is not available on this host: {self.INSTALLER_BIN}')
772772

773-
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.BIN_ABSPATH} install {packages}')
774-
proc = self.exec(bin_name=self.BIN_ABSPATH, cmd=['install', *packages])
773+
print(f'[*] {self.__class__.__name__}: Installing {bin_name}: {self.INSTALLER_BIN_ABSPATH} install {packages}')
774+
proc = self.exec(bin_name=self.INSTALLER_BIN_ABSPATH, cmd=['install', *packages])
775775

776776
if proc.returncode != 0:
777777
print(proc.stdout.strip())
@@ -788,7 +788,7 @@ def on_install(self, bin_name: str, packages: Optional[InstallArgs]=None, **cont
788788

789789
class EnvProvider(BinProvider):
790790
name: BinProviderName = 'env'
791-
BIN: BinName = 'env'
791+
INSTALLER_BIN: BinName = 'env'
792792
PATH: PATHStr = Field(default=DEFAULT_ENV_PATH) # add dir containing python to $PATH
793793

794794
abspath_provider: ProviderLookupDict = {

0 commit comments

Comments
 (0)