Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)