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