Create BasePkgManager for PlatformManager and Library Manager

This commit is contained in:
Ivan Kravets
2016-07-11 13:27:30 +03:00
parent d88997c418
commit 8427b9c7ee
2 changed files with 33 additions and 21 deletions

View File

@ -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"

View File

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