def create_bug()

in treeherder/webapp/api/bugzilla.py [0:0]


    def create_bug(self, request):
        """
        Create a bugzilla bug with passed params
        """
        if settings.BUGFILER_API_KEY is None:
            return Response({"failure": "Bugzilla API key not set!"}, status=HTTP_400_BAD_REQUEST)

        params = request.data

        # Arbitrarily cap crash signatures at 2048 characters to prevent perf issues on bmo
        crash_signature = params.get("crash_signature")
        if crash_signature and len(crash_signature) > 2048:
            return Response(
                {"failure": "Crash signature can't be more than 2048 characters."},
                status=HTTP_400_BAD_REQUEST,
            )

        description = "**Filed by:** {}\n{}".format(
            request.user.email.replace("@", " [at] "), params.get("comment", "")
        ).encode("utf-8")
        summary = params.get("summary").encode("utf-8").strip()
        url = settings.BUGFILER_API_URL + "/rest/bug"
        headers = {
            "x-bugzilla-api-key": settings.BUGFILER_API_KEY,
            "Accept": "application/json",
        }
        data = {
            "type": "defect",
            "product": params.get("product"),
            "component": params.get("component"),
            "summary": summary,
            "keywords": params.get("keywords"),
            "whiteboard": params.get("whiteboard"),
            "regressed_by": params.get("regressed_by"),
            "see_also": params.get("see_also"),
            "version": params.get("version"),
            "cf_crash_signature": params.get("crash_signature"),
            "severity": params.get("severity"),
            "priority": params.get("priority"),
            "description": description,
            "comment_tags": "treeherder",
        }
        if params.get("by_treeherder"):
            data["type"] = params.get("type")
            data["description"] = params.get("description").encode("utf-8")
            data["cc"] = params.get("cc")
            if params.get("needinfo_from"):
                data["flags"] = [
                    {
                        "name": "needinfo",
                        "status": "?",
                        "requestee": params.get("needinfo_from"),
                    }
                ]

        if params.get("is_security_issue"):
            security_group_list = list(
                BugzillaSecurityGroup.objects.filter(product=data.get("product")).values_list(
                    "security_group", flat=True
                )
            )
            if len(security_group_list) == 0:
                return Response(
                    {
                        "failure": "Cannot file security bug for product without default security group in Bugzilla."
                    },
                    status=HTTP_400_BAD_REQUEST,
                )
            data["groups"] = security_group_list

        try:
            response = make_request(url, method="POST", headers=headers, json=data)
        except requests.exceptions.HTTPError as e:
            try:
                message = e.response.json()["message"]
            except (ValueError, KeyError):
                message = e.response.text
            return Response({"failure": message}, status=HTTP_400_BAD_REQUEST)

        bug_id = response.json()["id"]
        Bugscache.objects.create(
            bugzilla_id=bug_id,
            modified=timezone.now(),
            summary=summary.decode("utf-8"),
        )
        return Response({"id": bug_id, "url": get_bug_url(bug_id, settings.BUGFILER_API_URL)})