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
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
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
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'))
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
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