async def get_package_from_pypi(package_name, plugin_path): """ Download a package from PyPI. :param name: name of the package to download from PyPI :return: String path to the package """ config = BandersnatchConfig().config config["mirror"]["master"] = "https://pypi.org" config["mirror"]["workers"] = "1" config["mirror"]["directory"] = plugin_path if not config.has_section("plugins"): config.add_section("plugins") config["plugins"]["enabled"] = "blocklist_release\n" if not config.has_section("allowlist"): config.add_section("allowlist") config["plugins"]["enabled"] += "allowlist_release\nallowlist_project\n" config["allowlist"]["packages"] = "\n".join([package_name]) os.makedirs(os.path.join(plugin_path, "dist"), exist_ok=True) async with Master("https://pypi.org/") as master: mirror = BandersnatchMirror(homedir=plugin_path, master=master) name = Requirement(package_name).name result = await mirror.synchronize([name]) package_found = False for package in result[name]: current_path = os.path.join(plugin_path, package) destination_path = os.path.join(plugin_path, "dist", os.path.basename(package)) shutil.move(current_path, destination_path) package_found = True return package_found
def create_bandersnatch_config(remote): """Modifies the global Bandersnatch config state for this sync""" config = BandersnatchConfig().config config["mirror"]["master"] = remote.url config["mirror"]["workers"] = str(remote.download_concurrency) if not config.has_section("plugins"): config.add_section("plugins") config["plugins"]["enabled"] = "blocklist_release\n" if remote.includes: if not config.has_section("allowlist"): config.add_section("allowlist") config["plugins"]["enabled"] += "allowlist_release\nallowlist_project\n" config["allowlist"]["packages"] = "\n".join(remote.includes) if remote.excludes: if not config.has_section("blocklist"): config.add_section("blocklist") config["plugins"]["enabled"] += "blocklist_project\n" config["blocklist"]["packages"] = "\n".join(remote.excludes) if not remote.prereleases: config["plugins"]["enabled"] += "prerelease_release\n"
def create_bandersnatch_config(remote): """Modifies the global Bandersnatch config state for this sync""" config = BandersnatchConfig().config config["mirror"]["master"] = remote.url config["mirror"]["workers"] = str(remote.download_concurrency) if not config.has_section("plugins"): config.add_section("plugins") config["plugins"]["enabled"] = "blocklist_release\n" if remote.includes: if not config.has_section("allowlist"): config.add_section("allowlist") config["plugins"]["enabled"] += "allowlist_release\nallowlist_project\n" config["allowlist"]["packages"] = "\n".join(remote.includes) if remote.excludes: if not config.has_section("blocklist"): config.add_section("blocklist") config["plugins"]["enabled"] += "blocklist_project\n" config["blocklist"]["packages"] = "\n".join(remote.excludes) if not remote.prereleases: config["plugins"]["enabled"] += "prerelease_release\n" if remote.package_types: rrfm = "regex_release_file_metadata" config["plugins"]["enabled"] += rrfm if not config.has_section(rrfm): config.add_section(rrfm) config[rrfm]["any:release_file.packagetype"] = "\n".join(remote.package_types) if remote.keep_latest_packages: config["plugins"]["enabled"] += "latest_release\n" if not config.has_section("latest_release"): config.add_section("latest_release") config["latest_release"]["keep"] = str(remote.keep_latest_packages) if remote.exclude_platforms: config["plugins"]["enabled"] += "exclude_platform\n" if not config.has_section("blocklist"): config.add_section("blocklist") config["blocklist"]["platforms"] = "\n".join(remote.exclude_platforms)