rtquery

Request Tracker Querying Library


Keywords
request, tracker, query, lib, best-practices, query-builder, request-tracker
License
BSD-3-Clause
Install
pip install rtquery==0.10.1

Documentation

RT Query

https://travis-ci.org/tarvitz/rtquery.svg?branch=master https://coveralls.io/repos/github/tarvitz/rtquery/badge.svg?branch=master

Abstract

Simplifies query interface for Request Tracker's rest-api lib RT Library. Main query interface has been take from Django Framework project

Requirements

  • Python 3.4+
  • RT Library (it's not dependency itself, but it uses in examples)

Usage

import rt

client = rt.Rt('http://localhost/rt/REST/1.0/',
               basic_auth=('user', 'password'))
assert client.login()
#: rt filtering does not support `in` operation, so interface looks similar
#: to django querying, but it sticks to its limits.
query = Q(Subject__contains='[improvements]') | Q(Subject__contains='[enhancements]')
query &= Q(Queue='development', Status='sprint', Owner='User',
           Priority__gt=80)
result = client.search(Queue=rt.ALL_QUEUES, raw_query=query.resolve())
print(result)
[{
    "id": "ticket/471147",
    "Queue": "development",
    "Owner": "User",
    "Creator": "User",
    "Subject": "[improvements] Implement Requests Tracker simple querying",
    "Status": "sprint",
    "Priority": "99",
    "InitialPriority": "40",
    "FinalPriority": "40",
    "Requestors": [
        "user@example.org.fake"
    ],
    "Created": "Thu Nov 02 19:26:40 2017",
    "Starts": "Not set",
    "Started": "Thu Nov 02 19:27:12 2017",
    "Due": "Not set",
    "Resolved": "Not set",
    "Told": "Not set",
    "LastUpdated": "Thu Nov 09 17:20:33 2017",
    "TimeEstimated": "180 minutes",
    "TimeWorked": "0",
    "TimeLeft": "0",
    "CF.{Tags}": "extra",
    "CF.{Code Review}": "",
    "CF.{Difficulty}": ""
}]

Extra functionality

In addition to existent rtquery.Q you can also try to use utils.query builder which is simple dsl to make Q objects from user input (argument parser for example)

from rtquery.utils import query
qset = query("Queue = development & Status = sprint & Owner ~ user")
result = client.search(Queue=rt.ALL_QUEUES, raw_query=query.resolve())
# ...