Source code for tcms.rpc.api.bugtracker

# Copyright (c) 2025-2026 Alexander Todorov <atodorov@MrSenko.com>
#
# Licensed under the GPL 2.0: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html

from django.forms.models import model_to_dict
from modernrpc.core import rpc_method

from tcms.rpc.api.forms.testcase import BugSystemForm
from tcms.rpc.decorators import permissions_required
from tcms.testcases.models import BugSystem


[docs] @permissions_required("testcases.view_bugsystem") @rpc_method(name="BugTracker.filter") def filter(query): # pylint: disable=redefined-builtin """ .. function:: RPC BugTracker.filter(query) Perform a search and return the resulting list of bug trackers. :param query: Field lookups for :class:`tcms.testcases.models.BugSystem` :type query: dict :return: Serialized list of :class:`tcms.testcases.models.BugSystem` objects :rtype: dict :raises PermissionDenied: if missing *testcases.view_bugsystem* permission """ return list( BugSystem.objects.filter(**query) .values( "id", "name", "tracker_type", "base_url", "api_url", "api_username", # not exposing this field via RPC b/c it will leak # "api_password", ) .order_by("id") .distinct() )
[docs] @permissions_required("testcases.add_bugsystem") @rpc_method(name="BugTracker.create") def create(values): """ .. function:: RPC BugTracker.create(values) Create a new BugSystem object and store it in the database. :param values: Field values for :class:`tcms.testcases.models.BugSystem` :type values: dict :return: Serialized :class:`tcms.testcases.models.BugSystem` object :rtype: dict :raises ValueError: if input values don't validate :raises PermissionDenied: if missing *testcases.add_bugsystem* permission """ form = BugSystemForm(values) if form.is_valid(): bug_system = form.save() result = model_to_dict(bug_system) # not exposing this field via RPC b/c it will leak del result["api_password"] return result raise ValueError(list(form.errors.items()))