diff --git a/platformio/managers/package.py b/platformio/managers/package.py index 5d0e0a63..79f57416 100644 --- a/platformio/managers/package.py +++ b/platformio/managers/package.py @@ -27,25 +27,25 @@ from platformio.unpacker import FileUnpacker from platformio.vcsclient import VCSClientFactory -class PackageManager(object): +class BasePkgManager(object): _INSTALLED_CACHE = {} - def __init__(self, package_dir=None, repositories=None): + def __init__(self, package_dir, repositories=None): self._INSTALLED_CACHE = {} self.repositories = repositories - self.package_dir = package_dir or join(util.get_home_dir(), "packages") + self.package_dir = package_dir if not isdir(self.package_dir): os.makedirs(self.package_dir) assert isdir(self.package_dir) @staticmethod def reset_cache(): - PackageManager._INSTALLED_CACHE = {} + BasePkgManager._INSTALLED_CACHE = {} @property def manifest_name(self): - return "package.json" + raise NotImplementedError() @staticmethod def download(url, dest_dir, sha1=None): @@ -133,8 +133,8 @@ class PackageManager(object): return best def get_installed(self): - if self.package_dir in PackageManager._INSTALLED_CACHE: - return PackageManager._INSTALLED_CACHE[self.package_dir] + if self.package_dir in BasePkgManager._INSTALLED_CACHE: + return BasePkgManager._INSTALLED_CACHE[self.package_dir] items = [] for p in sorted(os.listdir(self.package_dir)): manifest_path = join(self.package_dir, p, self.manifest_name) @@ -144,7 +144,7 @@ class PackageManager(object): manifest['_manifest_path'] = manifest_path assert set(["name", "version"]) <= set(manifest.keys()) items.append(manifest) - PackageManager._INSTALLED_CACHE[self.package_dir] = items + BasePkgManager._INSTALLED_CACHE[self.package_dir] = items return items def is_installed(self, name, requirements=None): @@ -183,7 +183,8 @@ class PackageManager(object): self.reset_cache() if trigger_event: telemetry.on_event( - category="PackageManager", action="Install", label=name) + category=self.__class__.__name__, + action="Install", label=name) return join(pkg_dir, self.manifest_name) @@ -300,7 +301,8 @@ class PackageManager(object): self.reset_cache() if trigger_event: telemetry.on_event( - category="PackageManager", action="Uninstall", label=name) + category=self.__class__.__name__, + action="Uninstall", label=name) def update(self, name, requirements=None): click.echo("Updating %s %s @ %s:" % ( @@ -310,8 +312,8 @@ class PackageManager(object): latest_version = self.get_latest_repo_version(name, requirements) if latest_version is None: - click.secho("Ignored! '%s' is not listed in " - "Package Repository" % name, fg="yellow") + click.secho("Ignored! '%s' is not listed in repository" % name, + fg="yellow") return current = None @@ -341,7 +343,8 @@ class PackageManager(object): self.install(name, latest_version, trigger_event=False) telemetry.on_event( - category="PackageManager", action="Update", label=name) + category=self.__class__.__name__, + action="Update", label=name) return True @@ -384,3 +387,10 @@ class PackageRepoIterator(object): return manifest[self.package] else: return self.next() + + +class PackageManager(BasePkgManager): + + @property + def manifest_name(self): + return "package.json" diff --git a/platformio/managers/platform.py b/platformio/managers/platform.py index ebff72c8..504821ff 100644 --- a/platformio/managers/platform.py +++ b/platformio/managers/platform.py @@ -24,13 +24,15 @@ import click import semantic_version from platformio import exception, util -from platformio.managers.package import PackageManager +from platformio.managers.package import BasePkgManager, PackageManager + +PACKAGE_DIR = join(util.get_home_dir(), "packages") -class PlatformManager(PackageManager): +class PlatformManager(BasePkgManager): def __init__(self): - PackageManager.__init__( + BasePkgManager.__init__( self, join(util.get_home_dir(), "platforms"), ["http://dl.platformio.org/platforms/manifest.json"] @@ -43,7 +45,7 @@ class PlatformManager(PackageManager): def install(self, # pylint: disable=too-many-arguments,arguments-differ name, requirements=None, with_packages=None, without_packages=None, skip_default_packages=False): - manifest_path = PackageManager.install(self, name, requirements) + manifest_path = BasePkgManager.install(self, name, requirements) p = PlatformFactory.newPlatform(manifest_path, requirements) p.install_packages( with_packages, without_packages, skip_default_packages) @@ -53,14 +55,14 @@ class PlatformManager(PackageManager): def uninstall(self, # pylint: disable=arguments-differ name, requirements=None): p = PlatformFactory.newPlatform(name, requirements) - PackageManager.uninstall(self, name, requirements) + BasePkgManager.uninstall(self, name, requirements) self.cleanup_packages(p.packages.keys()) return True def update(self, # pylint: disable=arguments-differ name, requirements=None, only_packages=False): if not only_packages: - PackageManager.update(self, name, requirements) + BasePkgManager.update(self, name, requirements) p = PlatformFactory.newPlatform(name, requirements) p.update_packages() self.cleanup_packages(p.packages.keys()) @@ -82,7 +84,7 @@ class PlatformManager(PackageManager): deppkgs[pkgname] = set() deppkgs[pkgname].add(pkgmanifest['version']) - pm = PackageManager() + pm = PackageManager(PACKAGE_DIR) for manifest in pm.get_installed(): if manifest['name'] not in names: continue @@ -322,7 +324,7 @@ class PlatformBase(PlatformPackagesMixin, PlatformRunMixin): self._manifest = util.load_json(manifest_path) self.pm = PackageManager( - repositories=self._manifest.get("packageRepositories")) + PACKAGE_DIR, self._manifest.get("packageRepositories")) self._found_error = False self._last_echo_line = None