Exemple #1
0
def releases(db, request, admin_user, tmpdir):
    package_test = Package(name="test-package")
    package_other = Package(name="other-package")

    package_test.maintainers.append(admin_user)
    package_other.maintainers.append(admin_user)

    packages = [package_test, package_other]
    db.session.add_all(packages)

    releases = []
    for p in packages:
        r = Release(
            description="test",
            download_url="http://test",
            home_page="http://test",
            version="0.1",
            keywords="test,other",
        )
        r.package = p
        releases.append(r)

    db.session.add_all(releases)
    db.session.commit()

    def fin():
        db.session.delete(package_test)
        db.session.delete(package_other)
        db.session.commit()

    request.addfinalizer(fin)
    return releases
Exemple #2
0
def releases_dirs(app, request, db, admin_user):
    pdir = app.config['STORAGE_PARAMS']['packages_root']
    package_test = Package(name="test-package")
    os.mkdir(os.path.join(pdir, 'test-package'))

    package_other = Package(name="other-package")
    os.mkdir(os.path.join(pdir, 'other-package'))

    package_test.maintainers.append(admin_user)
    package_other.maintainers.append(admin_user)

    db.session.add_all([package_test, package_other])
    db.session.commit()

    packages = [package_test, package_other]

    releases = []
    for p in packages:
        r = Release(
            description="test",
            download_url="http://test",
            home_page="http://test",
            version="0.1",
            keywords="test,other",
        )
        r.package = p
        with open(os.path.join(pdir, p.name, p.name + '-0.1.tar.gz'),
                  'w') as f:
            f.write("insidepackage")
        releases.append(r)

    db.session.add_all(releases)
    db.session.commit()

    def fin():
        packages = Package.query.filter(
            Package.name.in_(['test-package', 'other-package'])).all()
        for p in packages:
            db.session.delete(p)
        db.session.commit()

        if os.path.isdir(os.path.join(pdir, 'test-package')):
            shutil.rmtree(os.path.join(pdir, 'test-package'))
        if os.path.isdir(os.path.join(pdir, 'other-package')):
            shutil.rmtree(os.path.join(pdir, 'other-package'))

    request.addfinalizer(fin)
    return releases
Exemple #3
0
def packages(db, request, admin_user, app):
    package_test = Package(name="test-package")
    package_other = Package(name="other-package")

    package_test.maintainers.append(admin_user)
    package_other.maintainers.append(admin_user)

    db.session.add_all([package_test, package_other])
    db.session.commit()

    packages = [package_test, package_other]

    def fin():
        for p in packages:
            db.session.delete(p)
        db.session.commit()

    request.addfinalizer(fin)
    return packages
Exemple #4
0
def packages_dirs(db, admin_user, app):
    pdir = app.config['STORAGE_PARAMS']['packages_root']

    package_test = Package(name="test-package")
    os.mkdir(os.path.join(pdir, 'test-package'))

    package_other = Package(name="other-package")
    os.mkdir(os.path.join(pdir, 'other-package'))

    package_test.maintainers.append(admin_user)
    package_other.maintainers.append(admin_user)

    db.session.add_all([package_test, package_other])
    db.session.commit()

    packages = [package_test, package_other]
    yield packages

    for p in packages:
        db.session.delete(p)
    db.session.commit()

    shutil.rmtree(os.path.join(pdir, 'test-package'))
    shutil.rmtree(os.path.join(pdir, 'other-package'))
Exemple #5
0
def create_release_from_source(metadata, user):
    """Create a new release from a raw file. Used for import of existing packages into database

    .. warning::

        This function does not check any permissions since it's never called from web ui

    If a release already exists, it does nothing

    :param dict metadata: metadata of the package
    :param extrapypi.models.User user: user to use as maintainer
    """
    try:
        package = Package.query.filter_by(name=metadata['name']).one()
    except NoResultFound:
        package = Package(name=metadata['name'],
                          summary=metadata.get('summary', 'UNKNOWN'))
        db.session.add(package)

    release = Release.query.filter_by(version=metadata['version'], package=package)\
                           .first()

    if release is None:
        release = Release(description=metadata.get('description', 'UNKNOWN'),
                          download_url=metadata.get('download_url', 'UNKNOW'),
                          home_page=metadata.get('home_page', 'UNKNOWN'),
                          version=metadata['version'],
                          keywords=metadata.get('keywords'),
                          package=package)
        db.session.add(release)

    if user not in package.maintainers:
        package.maintainers.append(user)

    try:
        db.session.commit()
    except Exception:
        db.session.rollback()
        raise

    return release
Exemple #6
0
def create_package(name, summary, store):
    """Create a package for a given release
    if the package don't exists already

    .. note::
        Maintainer and installer cannot create packages

    :param dict data: request data to use to create package
    :param extrapypi.storage.BaseStorage storage: storage object to use
    :raises: PermissionDenied
    """
    dev_permission.test()
    p = Package(name=name, summary=summary)

    if store.create_package(p) is False:
        log.error(
            "Cannot create storage for package {0.name} using {1.NAME}".format(
                p, store))
        raise RuntimeError("Storage missconfigured")

    db.session.add(p)
    db.session.commit()
    return p