2013-02-20 1 views
0
from jira.client import JIRA 
import requests 
import jira.exceptions 
import json 
import re 

class MyJira(JIRA): 

    def _create_http_basic_session(self, username, password): 
     url = self._options['server'] + '/rest/auth/1/session' 
     payload = { 
      'username': username, 
      'password': password 
     } 
     verify = False 
     self._session = requests.session(verify=verify, 
      hooks={'args': self._add_content_type}) 
     r = self._session.post(url, data=json.dumps(payload)) 
     jira.exceptions.raise_on_error(r) 

options = {'server':'http://localhost:8080', 
      'verify': False} 
username = 'usrName' 
password = 'passWord' 

basic_auth =(username,password) 
jira = MyJira(options, basic_auth) 

issue_dict = { 
    'project':{'key':'PROJKEY'}, 
    'summary': 'New Issue from jira-python', 
    'description': 'Test Description for new issue created from jira-python', 
    'issueType': {'name': 'Bug'}} 

new_issue = jira.create_issue(fields=issue_dict,preftech=True) 
print new_issue.id 

это производит мне это StackTrace ошибки/войтиПочему это не создает проблему JIRA?

/home/ve/bin/python/home/PycharmProjects/RestJira/restjira.py 
Traceback (most recent call last): 
    File "/home/PycharmProjects/RestJira/myrestjira.py", line 81, in <module> 
    new_issue = jira.create_issue(fields=issue_dict,preftech=True) 
    File "/home/ve/lib/python2.6/site-packages/jira/client.py", line 369, in create_issue 
    raise_on_error(r) 
    File "/home/ve/lib/python2.6/site-packages/jira/exceptions.py", line 29, in raise_on_error 
    error = errorMessages[0] 

IndexError: list index out of range 

, что я делаю неправильно? Я не понимаю, почему есть ссылка на другой файл (restjira.py), отличный от того, в котором я сейчас работаю (myrestjira.py) Я использую python 2.7, библиотеку jira-python, запросы 0.14.1, jira -python 0.12 и pycharm как IDE Кто-нибудь?

+0

Не могли бы вы исправить отступы? Все в классе 'MyJira' должно быть отступом, но я не на 100%, что вы хотели быть в классе. –

+0

Основываясь на том, как он использует класс, я думаю, что достаточно безопасно сказать, что единственное, что в 'MyJira' - это определение' _create_http_basic_session' – cwallenpoole

+0

@cwallenpoole. Хорошо, я отступом только этот метод. –

ответ

1

Ваша проблема с этими двумя линиями:

r = self._session.post(url, data=json.dumps(payload)) 
jira.exceptions.raise_on_error(r) 

Ваш ответ на self._session.post это ошибка, но есть что-то не так с ошибкой получили. Это приводит к двум вопросам.

  • Вы можете подтвердить, что ваш сервер Jira запущен и работает в localhost:8080?
  • Что произойдет, если вы pprint(r)?
  • Правильно ли указаны имя пользователя и пароль?
  • является self._session.verify установлен на False?

Что касается причины, почему restjira.py называется, ну, вероятно, это модуль, который загрузил этот модуль.


Некоторые другие мысли:

  • Вы не должны назвать свою переменную jira, если не изменить import jira.exceptions к чему-то вроде import jira.exceptions as jiraexceptions. Это упрощает чтение кода.
  • verify = False... verify=verify немного посторонний. Почему бы просто не разместить False в kwargs?
3

Попробуйте это ... это работает ...

from jira.client import JIRA 

jira_options={'server': 'http://abc.xyz.org/jira/'} 

    jira=JIRA(options=jira_options,basic_auth=('user','password')) 

    #Creating an issue: 

new_issue = jira.create_issue(project={'key': 'key'}, summary='New issue from jira- python', description='Look into this one', issuetype={'name': 'Bug'}) 

или создавать проблемы с использованием Dict:

issue_dict = { 
     'project': {'key': 'PROJ'}, 
      'summary': 'New issue from jira-python', 
      'description': 'Look into this one', 
      'issuetype': {'name': 'Bug'}, 
      } 
     new_issue = jira.create_issue(fields=issue_dict) 
+0

Это отлично работает для меня. благодаря – Gourneau

 Смежные вопросы

  • Нет связанных вопросов^_^