def from_bandersnatch(self, request): """ <!-- User-facing documentation, rendered as html--> Takes the fields specified in the Bandersnatch config and creates a Python Remote from it. """ serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) bander_config_file = serializer.validated_data.get("config") name = serializer.validated_data.get("name") bander_config = BandersnatchConfig(bander_config_file.file.name).config data = { "name": name, "url": bander_config.get("mirror", "master"), "download_concurrency": bander_config.get("mirror", "workers"), } enabled = bander_config.get("plugins", "enabled") enabled_all = "all" in enabled data["prereleases"] = enabled_all or "prerelease_release" in enabled if bander_config.has_option("whitelist", "packages") and \ (enabled_all or "whitelist_project" in enabled): data["includes"] = bander_config.get("whitelist", "packages").split() if bander_config.has_option("blacklist", "packages") and \ (enabled_all or "blacklist_project" in enabled): data["excludes"] = bander_config.get("blacklist", "packages").split() remote = python_serializers.PythonRemoteSerializer( data=data, context={"request": request}) remote.is_valid(raise_exception=True) remote.save() headers = self.get_success_headers(remote.data) return Response(remote.data, status=status.HTTP_201_CREATED, headers=headers)
def from_bandersnatch(self, request): """ <!-- User-facing documentation, rendered as html--> Takes the fields specified in the Bandersnatch config and creates a Python Remote from it. """ serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) bander_config_file = serializer.validated_data.get("config") name = serializer.validated_data.get("name") policy = serializer.validated_data.get("policy") bander_config = BandersnatchConfig(bander_config_file.file.name).config data = { "name": name, "policy": policy, "url": bander_config.get("mirror", "master"), "download_concurrency": bander_config.get("mirror", "workers"), } enabled = bander_config.get("plugins", "enabled") enabled_all = "all" in enabled data["prereleases"] = not (enabled_all or "prerelease_release" in enabled) # TODO refactor to use a translation object plugin_filters = { # plugin : (section_name, bander_option, pulp_option) "allowlist_project": ("allowlist", "packages", "includes"), "blocklist_project": ("blocklist", "packages", "excludes"), "regex_release_file_metadata": ( "regex_release_file_metadata", "any:release_file.packagetype", "package_types", ), "latest_release": ("latest_release", "keep", "keep_latest_packages"), "exclude_platform": ("blocklist", "platforms", "exclude_platforms"), } for plugin, options in plugin_filters.items(): if (enabled_all or plugin in enabled) and \ bander_config.has_option(options[0], options[1]): data[options[2]] = bander_config.get(options[0], options[1]).split() remote = python_serializers.PythonRemoteSerializer( data=data, context={"request": request}) remote.is_valid(raise_exception=True) remote.save() headers = self.get_success_headers(remote.data) return Response(remote.data, status=status.HTTP_201_CREATED, headers=headers)