Example #1
0
    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)
Example #2
0
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)