Python делает запрос к Jira API, тип ответа - метод - PullRequest
0 голосов
/ 08 мая 2020

Я делаю довольно простой запрос к нашему экземпляру Jira на создание заявки. Это работает, тикет создается, но когда я попытался разобрать ответ, я получил ошибку.

Traceback (most recent call last):
  File "sdkAutomator.py", line 391, in <module>
    loopThroughDirectory(arrFiles, repoPath)
  File "sdkAutomator.py", line 225, in loopThroughDirectory
    loopThroughDirectory(arrSubFiles, newPath)
  File "sdkAutomator.py", line 225, in loopThroughDirectory
    loopThroughDirectory(arrSubFiles, newPath)
  File "sdkAutomator.py", line 225, in loopThroughDirectory
    loopThroughDirectory(arrSubFiles, newPath)
  File "sdkAutomator.py", line 219, in loopThroughDirectory
    createJiraTicket()
  File "sdkAutomator.py", line 344, in createJiraTicket
    dictJira = json.loads(resp.json)
  File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 341, in loads
    raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not method

Когда я провожу проверку типа на json, отображается method. Если я печатаю ответ, я вижу то, что ожидаю, согласно документации Atlassian:

{'id': '1100908', 'key': 'DOC-8594', 'self': 'https://jira.xxxxxxxx-services.com/rest/api/2/issue/1100908'}

Я новичок в работе с Python, поэтому мне интересно, не делаю ли я что-то не так в моем коде :

def createJiraTicket():

    global strMsg

    printInCyan("Creating JIRA Ticket...")

    url = 'https://jira.xxxxxxxxx-services.com/rest/api/2/issue/'

    #test ticket
    #TO DO: This needs to be updated with variables for content of ticket
    ticket = {'fields':
        {
            'project': {
            'key': 'DOC'
            },
            'summary': 'Repo Updated:',
            'description': 'There has been a change to the repo.',
            'issuetype': {
            'name': 'Task'
        },
        'assignee': {
            'name':'auser'
        },
        'labels': ['automated_docs'],
        'reporter': {
            'name':'auser'
            }
        }
    }

    resp = requests.post(url, json = ticket, auth = ('app_jira_docs', 'FCTJza9D*=Y,I)s'))

    if resp.status_code != 201:
        print(resp.status_code)

    #print(resp.json())
    strMsg = strMsg + "\nJira Ticket Data:\n========================\n"

    #parse json
    dictJira = json.loads(resp.json)
    #strMsg = strMsg + "Ticket ID: " + dictJira["key"] + "\n"
    #strMsg = strMsg + "Ticket Link: " + dictJira["self"] + "\n"

Изменить: я пытался получить доступ к ответу следующим образом:

let jiraId = resp.json["key"] 

, но это тоже привело к ошибке.

...