Bereinigen von Backlog mit Python

Zweck

Ich habe die öffentliche API von Python verwendet, um das Backlog zu organisieren. Als Memorandum.

Beiseite

Wenn Sie es bemerken, ist es das Ende des Jahres. Im Verlauf der Geschichte ist der Ort, an dem ich für die Reinigung verantwortlich bin, Backlog. Wir haben viele Problemmanagementsysteme, denen wir täglich verpflichtet sind.

Was ich machen wollte

Automatisierung des Extrahierens von Ausstellungskarten für nicht zugewiesenes Personal und Zuweisen von neuem Personal. Da es nicht möglich ist, subjektiv darüber zu verfügen, habe ich mich zunächst entschlossen, eine verantwortliche Person zu bestimmen, um die Verantwortung zu klären. Auf einen Blick gibt es Dutzende von Tickets, für die die verantwortliche Person nicht festgelegt wurde, und es wird beurteilt, dass es schwierig ist, sie manuell einzufügen. Ich möchte es automatisch mit einem Werkzeug machen.

Quellenkommentar

Befehlseinstellungen

setup.py


from setuptools import setup

setup(
    name='',
    version='1.0.0',
    author='Der Name der Person, die es gemacht hat',
    author_email='Kontakt-E-Mailadresse',
    install_requires=[
        'requests==2.11.1',
        'docopt==0.6.2'
    ],
    entry_points="""\    #←←←←←←←← Dies!!!!!!!!!!!!
      [console_scripts]
      wariate = update_assignee_id:main
      """,
)

setup.py verfügt über viele nützliche Funktionen, darunter entry_points. Es ist dasselbe wie pserve in Pyramids setup.py, wodurch die Notwendigkeit entfällt, Python-Befehle auszuführen. Es ist klein, aber nützlich, wenn der Name der Python-Datei lang oder die Hierarchie tief ist.

Beispiel) Wenn Sie das Tool ausführen möchten, ohne entry_points festzulegen, aktivieren Sie es zuerst

(venv)python /User/tool/backlog/update_assignee_id.py --api-key=uiwejaefdhpasid8fpa8etw3to

Wenn Sie das Tool mit festgelegten Eintrittspunkten ausführen, aktivieren Sie es zuerst (venv)wariate --api-key=uiwejaefdhpasid8fpa8etw3to

Optionaler Parser

update_assignee_id.py


"""execute update assignee id

usage: wariate (--api-key=<api-key>)

options:
    --api-key=<api-key>     api key
"""

from docopt import docopt

def main():
    args = docopt(__doc__)
    update_assignee_id(args['--api-key'])

Nehmen Sie nur das Dokument am Anfang der Python-Datei und die Hauptfunktion auf. Wenn Sie es so schreiben, werden die erforderlichen Argumente überprüft. Es gibt andere nützliche Funktionen, daher sollten Sie sie verwenden. Im Gegensatz zu anderen Parsern bezieht es sich auf Dokumente. Daher ist es auch von Vorteil, dass Sie die Situation vermeiden können, in der nur Dokumente nicht verwaltet werden.

API-Ausführung

update_assignee_id.py



import json
import requests

__API_KEY = '?apiKey={}'
__BASE_END_POINT = 'https://domein.backlog.jp/api/v2/'
__PROJECT_END_POINT = __BASE_END_POINT + 'projects'

def get_project_ids(api_key):
    r = requests.get(__PROJECT_END_POINT + __API_KEY.format(api_key))
    projects = json.loads(r.text)
    return list(map(lambda project: project['id'], projects))

Nehmen Sie das Teil zur Hand, um die Liste der Projekt-IDs zu erhalten. Immerhin ist Anfragen ein Push, und es ist einfach, es als intuitive Quelle für menschliches Lesen zu verwenden. Übrigens wurde bestätigt, dass diese Quelle mit Python 3.5 funktioniert. Im Fall der Python2-Serie war der Rückgabetyp der Kartenfunktion meiner Meinung nach eine Liste. Im Fall von 2 Serien war die Typkonvertierung in eine Liste meines Erachtens nicht erforderlich. Vielleicht.

Nehmen Sie Datensätze auf, die nicht von der verantwortlichen Person festgelegt wurden

update_assignee_id.py



__GET_ISSUE_QUERY = {
    'statusId[]': [1, 2, 3],
    'sort': 'assignee',
    'order': 'asc'
}
__ISSUE_END_POINT = __BASE_END_POINT + 'issues'

def get_issues(api_key, project_ids):
    is_continue = True
    params = __GET_ISSUE_QUERY
    params['projectId[]'] = project_ids
    while is_continue:
        r = requests.get(__ISSUE_END_POINT + __API_KEY.format(api_key), params=params)
        issues = json.loads(r.text)
        for issue in issues:
            if issue['assignee'] is None:
                yield issue
            else:
                is_continue = False
                break

Es ist möglich, eine Liste der Probleme zu erhalten, indem Sie eine bestimmte verantwortliche Person angeben. Die verantwortliche Person kann jedoch ein nicht festgelegtes Problem nicht absichtlich erkennen (API-Spezifikation). Daher wagte ich es nicht, die verantwortliche Person einzugrenzen, sondern sortierte die verantwortliche Person in aufsteigender Reihenfolge und brachte daraufhin die Fragen ein, für die die verantwortliche Person nicht zuerst festgelegt wurde.

Was ist Patch

update_assignee_id.py



def update_issue(issue, api_key):
    base_url = '/'.join([__ISSUE_END_POINT, issue['issueKey']]) + __API_KEY.format(api_key)
    params = {
        'assigneeId': issue['createdUser']['id']
    }
    r = requests.patch(base_url, params)
    if r.status_code != 200:
        raise Exception('update error occurred:{}'.format(issue['issueKey']))
    print('updated:{}'.format(issue['issueKey']))


Auf diese Weise kann die verantwortliche Person vom Ersteller aktualisiert werden. Ich schäme mich, zum ersten Mal die Anforderungskategorie Patch zu kennen. Zur richtigen Verwendung mit Post post → ganzes Update Patch → Teilweise aktualisiert Es scheint. Ich habe etwas gelernt

Schließlich

Wir sind ein solches Unternehmen, aber wenn Sie interessiert sind, wären wir Ihnen dankbar, wenn Sie uns über am Ende unserer Ingenieur-Blog-Top-Seite von Qiita kontaktieren könnten. Wir freuen uns auf!

Recommended Posts

Bereinigen von Backlog mit Python
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS
Tweets mit Python posten
Fahren Sie WebDriver mit Python
Verwenden Sie Mecab mit Python 3
[Python] Mit CGIHTTPServer umleiten
Sprachanalyse mit Python
Denken Sie an Yaml mit Python
Kinesis mit Python betreiben
Erste Schritte mit Python
Verwenden Sie DynamoDB mit Python
Datenbereinigung mit Python
Behandle Excel mit Python
Ohmsches Gesetz mit Python
Primzahlbeurteilung mit Python
Führen Sie Blender mit Python aus
Löse Mathe mit Python
Python ab Windows 7
Heatmap von Python + matplotlib
Asynchron mit Python verarbeiten