| 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 |
| ) |
|
|