Source code for tcms.bugs.api
# -*- coding: utf-8 -*-
from modernrpc.core import REQUEST_KEY, rpc_method
from tcms.bugs.models import Bug
from tcms.management.models import Tag
from tcms.rpc.decorators import permissions_required
__all__ = (
"add_tag",
"remove_tag",
"filter",
"remove",
)
[docs]
@permissions_required("bugs.add_bug_tags")
@rpc_method(name="Bug.add_tag")
def add_tag(bug_id, tag, **kwargs):
"""
.. function:: RPC Bug.add_tag(bug_id, tag)
Add one tag to the specified Bug.
:param bug_id: PK of Bug to modify
:type bug_id: int
:param tag: Tag name to add
:type tag: str
:param \\**kwargs: Dict providing access to the current request, protocol,
entry point name and handler instance from the rpc method
:raises PermissionDenied: if missing *bugs.add_bug_tags* permission
:raises Bug.DoesNotExist: if object specified by PK doesn't exist
:raises Tag.DoesNotExist: if missing *management.add_tag* permission and *tag*
doesn't exist in the database!
"""
request = kwargs.get(REQUEST_KEY)
tag, _ = Tag.get_or_create(request.user, tag)
Bug.objects.get(pk=bug_id).tags.add(tag)
[docs]
@permissions_required("bugs.delete_bug_tags")
@rpc_method(name="Bug.remove_tag")
def remove_tag(bug_id, tag):
"""
.. function:: RPC Bug.remove_tag(bug_id, tag)
Remove tag from a Bug.
:param bug_id: PK of Bug to modify
:type bug_id: int
:param tag: Tag name to remove
:type tag: str
:raises PermissionDenied: if missing *bugs.delete_bug_tags* permission
:raises DoesNotExist: if objects specified don't exist
"""
Bug.objects.get(pk=bug_id).tags.remove(Tag.objects.get(name=tag))
[docs]
@permissions_required("bugs.delete_bug")
@rpc_method(name="Bug.remove")
def remove(query):
"""
.. function:: RPC Bug.remove(bug_id)
Remove Bug object(s).
:param query: Field lookups for :class:`tcms.bugs.models.Bug`
:type query: dict
:raises PermissionDenied: if missing *bugs.delete_bugtag* permission
"""
Bug.objects.filter(**query).delete()
[docs]
@permissions_required("bugs.view_bug")
@rpc_method(name="Bug.filter")
def filter(query): # pylint: disable=redefined-builtin
"""
.. function:: RPC Bug.filter(query)
Get list of bugs.
:param query: Field lookups for :class:`tcms.bugs.models.Bug`
:type query: dict
:return: List of serialized :class:`tcms.bugs.models.Bug` objects.
:rtype: list
"""
result = (
Bug.objects.filter(**query)
.values(
"pk",
"summary",
"created_at",
"product__name",
"version__value",
"build__name",
"reporter__username",
"assignee__username",
"severity__name",
"severity__color",
"severity__icon",
)
.distinct()
)
return list(result)