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