العمل مع Jira API مع Python

مرحبا بالجميع. كان هناك تفكير في أتمتة تنزيل التقارير من جيرا. نظرًا لأن Python كانت أداة مفضلة ، فقد وقع الاختيار على وحدة من JIra مما يتيح لك العمل مع واجهة برمجة التطبيقات. إلى من المثير للاهتمام أنني أسأل عن القات.

الصورة

يحتوي Atlassian على مستندات رسمية بشأن استخدام الوحدة الخاصة بهم. الوحدة نفسها تسمى "جيرا". حسب التقاليد ، سنقوم بتثبيت الوحدة باستخدام الأمر

pip install jira 

ثم نستورد الوحدة مباشرة في الكود:

 from jira import JIRA 

من أجل الاتصال بالخادم نفسه ، تحتاج إلى إنشاء عميل عن طريق تمرير المعلمات المطلوبة فيه:

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

من أجل المصادقة باستخدام كلمة مرور ، يمكنك نقل كلمة المرور بدلاً من مفتاح api. بعد تمرير التفويض ، لدينا عميل api نشط يمكنك الوصول إليه.

الاحتمالات ليست بالتأكيد غير محدودة ، ولكن واسعة للغاية. كنت بحاجة لسحب المهام لمدة أسبوع محدد وتجميع تقرير عن الساعات التي قضاها في إكسل. يمكنك الحصول على المهام مباشرة من خلال المشروع نفسه أو حسب رقم المهمة أو عن طريق استعلام JQL. أدوات البحث مرنة للغاية وبسيطة. جميع المعلومات التي يتم إرجاعها بواسطة عميل api تأتي في سلسلة ، لذلك هناك حاجة إلى خطوات إضافية للتعامل معها.
نؤلف طلب jql ونلتقط المهام عليه:

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

لسوء الحظ ، ما زلت لا أفهم لماذا في تلك المهام التي يتم الحصول عليها من خلال هذا الطلب لا توجد خاصية worklog. بعد بعض المحاولات لفهم الخطأ ، سألت بأدب جيرا عن المهمة حسب الرقم:

 issue = jira.issue(issue_key) 

في المهمة التي تم إرجاعها بواسطة هذه الطريقة ، كان حقل التدوين مع قائمة التدوينات. نتيجة لذلك ، بدأت في أداء المهام عن طريق استعلام jql ، وسحبت أرقام المهام وبعد ذلك سحب المعلومات التي أحتاجها:

 worklogs = issue.fields.worklog.worklogs 

يسمح لك خط مماثل بسحب السجلات طوال الوقت من مهمة محددة. يحتوي كل إدخال على معلومات الوقت بالثواني وفي التمثيل النصي (ساعة و 3 ساعات وما إلى ذلك).
ثم كل شيء بسيط ، خذ المرتجعات التي لا تناسب الفترة ، في حالتي لا يتطابق رقم الأسبوع:

 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: 

منذ أن تم إرجاع التاريخ في سلسلة ، استخدمت تعبيرًا عاديًا بسيطًا لاستلامه ، وفي السطر التالي أذكر النوع الضروري. يسمح لك تعبير worklog_date.isocalendar () [1] باكتشاف عدد الأسبوع ، والذي سيتم مقارنته بما يجب أخذه. إذا كان يطابق ، داس على وكتابة بقية البيانات.

بشكل عام ، الوحدة النمطية أعلاه تسمح لك بحل مجموعة واسعة من المهام ، تحتاج فقط إلى الوقت والرغبة.

محدث

لا يمكنك طلب المهام مرة أخرى ، فقط قم بتوسيع الحقل المطلوب
github.com/pycontribs/jira/blob/master/jira/client.py#L2371
شكرا HSerg

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


All Articles