| from __future__ import annotations
|
|
|
| from dataclasses import dataclass
|
| import os
|
|
|
| from git_utils import get_commit_hash
|
|
|
|
|
| @dataclass
|
| class InstalledNodePackage:
|
| """Information about an installed node package."""
|
|
|
| id: str
|
| fullpath: str
|
| disabled: bool
|
| version: str
|
|
|
| @property
|
| def is_unknown(self) -> bool:
|
| return self.version == "unknown"
|
|
|
| @property
|
| def is_nightly(self) -> bool:
|
| return self.version == "nightly"
|
|
|
| @property
|
| def is_from_cnr(self) -> bool:
|
| return not self.is_unknown and not self.is_nightly
|
|
|
| @property
|
| def is_enabled(self) -> bool:
|
| return not self.disabled
|
|
|
| @property
|
| def is_disabled(self) -> bool:
|
| return self.disabled
|
|
|
| def get_commit_hash(self) -> str:
|
| return get_commit_hash(self.fullpath)
|
|
|
| def isValid(self) -> bool:
|
| if self.is_from_cnr:
|
| return os.path.exists(os.path.join(self.fullpath, '.tracking'))
|
|
|
| return True
|
|
|
| @staticmethod
|
| def from_fullpath(fullpath: str, resolve_from_path) -> InstalledNodePackage:
|
| parent_folder_name = os.path.basename(os.path.dirname(fullpath))
|
| module_name = os.path.basename(fullpath)
|
|
|
| if module_name.endswith(".disabled"):
|
| node_id = module_name[:-9]
|
| disabled = True
|
| elif parent_folder_name == ".disabled":
|
|
|
| node_id = module_name
|
| disabled = True
|
| else:
|
| node_id = module_name
|
| disabled = False
|
|
|
| info = resolve_from_path(fullpath)
|
| if info is None:
|
| version = 'unknown'
|
| else:
|
| node_id = info['id']
|
| version = info['ver']
|
|
|
| return InstalledNodePackage(
|
| id=node_id, fullpath=fullpath, disabled=disabled, version=version
|
| )
|
|
|