Travailler avec l'API Jira avec Python

Bonjour à tous. On a pensé à automatiser le téléchargement des rapports de Jira. Puisque Python était un outil préféré, le choix s'est porté sur un module de JIra vous permettant de travailler avec leur API. À qui c'est intéressant je demande sur kat.

image

Atlassian dispose d'une documentation officielle sur l'utilisation de son module. Le module lui-même est appelé «jira». Par tradition, nous installerons le module avec la commande:

pip install jira 

Ensuite, nous importons le module directement dans le code:

 from jira import JIRA 

Pour vous connecter au serveur lui-même, vous devez créer un client en lui passant les paramètres requis:

 jira_options = {'server': 'https://project-name.atlassian.net'} jira = JIRA(options=jira_options, basic_auth=(login, api_key)) 

Afin de vous authentifier avec un mot de passe, vous pouvez transférer le mot de passe au lieu de la clé api. Une fois l'autorisation passée, nous avons un client api actif auquel vous pouvez accéder.

Les possibilités ne sont certes pas illimitées, mais assez larges. J'avais besoin de retirer des tâches pour une semaine spécifique et de compiler un rapport sur les heures passées à Excell. Vous pouvez obtenir des tâches directement par le projet lui-même, par numéro de tâche ou par requête JQL. Les outils de recherche sont assez flexibles et simples. Toutes les informations retournées par le client api sont fournies sous forme de chaîne, des étapes supplémentaires sont donc nécessaires pour travailler avec.
Nous composons une requête jql et prenons les tâches dessus:

 jql = 'project = ' + project_key + ' AND worklogDate >= ' + work_date issues_list = jira.search_issues(jql) 

Malheureusement, je ne comprenais toujours pas pourquoi, dans les tâches obtenues grâce à une telle demande, il n'y a pas de propriété de journal de travail. Après quelques tentatives pour comprendre ce qui n'allait pas, j'ai poliment demandé à jira la tâche par numéro:

 issue = jira.issue(issue_key) 

Dans la tâche renvoyée par cette méthode, le champ du journal de travail avec une liste de journaux de travail était. En conséquence, j'ai commencé à prendre des tâches par requête jql, j'ai retiré les numéros de tâche et après cela j'ai retiré les informations dont j'avais besoin:

 worklogs = issue.fields.worklog.worklogs 

Une ligne similaire vous permet d'extraire tous les enregistrements de temps d'une tâche spécifique. Chaque entrée a des informations de temps en secondes et en représentation textuelle (1h, 3d etc.).
Alors tout est simple, prenez les rejets qui ne correspondent pas à la période, dans mon cas le numéro de semaine ne correspond pas:

 worklog_date_str = re.search(r'(\d{4}-\d{2}-\d{2})', worklog.started) worklog_date = datetime.strptime(worklog_date_str.group(0), '%Y-%m-%d') if worklog_date.isocalendar()[1] == weak_number: 

Étant donné que la date est renvoyée dans une chaîne, j'ai utilisé une expression régulière simple pour la récupérer, et dans la ligne suivante, je donne le type dont vous avez besoin. L'expression worklog_date.isocalendar () [1] vous permet de connaître le numéro de la semaine, qui sera comparé à ce qui doit être pris. S'il correspond, écrasez et écrivez le reste des données.

En général, le module ci-dessus vous permet de résoudre un éventail assez large de tâches, vous n'avez besoin que de temps et de désir.

UPD

Vous ne pouvez plus demander de tâches, développez simplement le champ requis
github.com/pycontribs/jira/blob/master/jira/client.py#L2371
merci HSerg

Source: https://habr.com/ru/post/fr442078/


All Articles