def _download_package(self, class_id, package_version): zip_fpath = os.path.join(get_tmp_dir(), get_random_name()) try: CLIENT.repo_uri = self.uri CLIENT.download(zip_fpath, class_id, package_version) repo_dirpath = self._get_repo_dir() package_id = self._get_package_id(class_id, package_version) package_home = '.'.join(package_id.split('.')[:-1]) add_package(zip_fpath, package_home, repo_dirpath) finally: if os.path.exists(zip_fpath): os.remove(zip_fpath)
def add_packages_from_zip(zip_fpath, tmp_dirpath, package_home, repo_dir, package_info_fn = lambda x: False): # extract contents of zipfile # into a local directory z = zipfile.ZipFile(zip_fpath) z.extractall(tmp_dirpath) z.close() # get list of package dirs # by examining zip contents package_dirs = get_package_dirs(tmp_dirpath) log.debug('package_dirs: %s' % (package_dirs,)) package_home = package_home.replace('.', os.path.sep) # add the package to repository for pdir in package_dirs: full_pdir = os.path.join(package_home, pdir) phome = os.path.dirname(full_pdir) pdir = os.path.join(tmp_dirpath, pdir) pxml_fpath = os.path.join(pdir, 'package.xml') package_id = full_pdir.replace(os.path.sep, '.') screenshots = get_screenshots(pdir) err = package_info_fn(pxml_fpath, package_id, screenshots) if err: continue # add package to repo version = add_package(pdir, phome, repo_dir) # copy the zip file and store in repo pdir = os.path.join(repo_dir, full_pdir) pdir = pdir.replace('.', os.path.sep) to_zip_fpath = os.path.join(pdir, version + '.zip') shutil.copyfile(zip_fpath, to_zip_fpath) return len(package_dirs)