Closed FaNT0m3R closed 1 year ago
Добрый! Приложите, пожалуйста, пример кода для воспроизведения.
Да особо-то кода нечего слать:
`#!c:\Program Files (x86)\Python36-32\python.exe from yandex_tracker_client import TrackerClient import os import requests import json import time
print("Content-type: text/html\n\n")
print
print('INPUT:
')
print(os.environ['QUERY_STRING'])
print ('
curIssue.update(obektWialon = '1234') # если поле ранее никто не вбил, то выкинет ошибку`
Немного поясню только: развернут сервер Апач, к нему прикручен python интерпретатор, страничка на python лежит на сервере, её дергает тригер при создании новой задачи. Ошибку Апач даёт такую: yandex_tracker_client.exceptions.BadRequest: Field [obektWialon] was not found\r: D:/Apache24/htdocs/index.py Пробовал тригер настраивать на добавление комментария - всё также, просто я тогда могу в существующей задаче изменить значение локального поля и тогда уже всё нормально, ошибки нет, поле меняется. Я пробовал для отладки выводить json.dumps(dir(curIssue)), и там нет поля, пока оно пустое и появляется, когда я что-то вобью.
Понял, тут проблема такая - пока поля не заполнено - на get запрос апи трекера его не отдает. Поэтому клиент не знает какой ключ этого поля.
Что с этим можно сделать - посмотреть ключ поля (можно получить issue и print(issue.__dict__)
сделать например)
Там ключ формата 642ec22gjldsfjdsl--obektWialon
Его можно захардкодить, он не поменяется И потом
curIssue.update({'642ec22gjldsfjdsl--obektWialon': '1234'})
Что-то не так. Делаю запрос: curIssue.update({'64a51c6d866ea82411abe756--obektWialon': '1234'}) Ошибка не выскакивает, но ничего не меняется. Я даже вбил в поле значение, думал, может так изменит, но нет, моё старое значение так и оставалось Более того, заметил странную вещь, curIssue.dict становится пустым после запроса. Я сделал себе вывод в комментарии в задаче.
comment+=print_to_string(curIssue.__dict__)
comment+="<hr>"
comment+='---------------------------\n';
addComment(curIssue,comment)
comment+=print_to_string(curIssue.__dict__)
вывод мне прилетел такой:
issue WIALONBTC-935
text
kfield qweqwe
{'_collection': <yandex_tracker_client.collections.Issues object at 0x01A05FB0>, '_connection': <yandex_tracker_client.connection.Connection object at 0x01987530>, '_path': '/v2/issues/WIALONBTC-935', '_value': {'self': ' [ https://api.tracker.yandex.net/v2/issues/WIALONBTC-935'](https://api.tracker.yandex.net/v2/issues/WIALONBTC-935'), 'id': '64fc9204c752cc49fade134f', 'key': 'WIALONBTC-935', 'version': 132, 'lastCommentUpdatedAt': '2023-09-13T14:12:11.113+0000', 'summary': '8922: test', 'statusStartTime': '2023-09-09T15:40:52.075+0000', 'updatedBy': <Reference to Users/b'1130000063263633' (b'\xd0\x90\xd0\xbd\xd1\x82\xd0\xbe\xd0\xbd \xd0\x9c\xd0\xb0\xd0\xbc\xd0\xbe\xd0\xb9\xd0\xba\xd0\xbe')>, 'statusType': None, 'sla': [{'id': '64fc9204c752cc49fade134e', 'settingsId': 3, 'clockStatus': 'NOT_STARTED', 'violationStatus': 'NOT_VIOLATED', 'warnThreshold': None, 'failedThreshold': 10800000, 'warnAt': None, 'failAt': None, 'startedAt': None, 'pausedAt': None, 'stoppedAt': None, 'pausedDuration': 0, 'toFailTimeWorkDuration': None, 'spent': None, 'previousSLAs': [], 'startShiftedByPause': None}], 'description': '', 'boards': [{'id': 3}, {'id': 7}], 'type': <Reference to IssueTypes/b'2' (b'\xd0\x97\xd0\xb0\xd0\xb4\xd0\xb0\xd1\x87\xd0\xb0')>, 'priority': <Reference to Priorities/b'3' (b'\xd0\xa1\xd1\x80\xd0\xb5\xd0\xb4\xd0\xbd\xd0\xb8\xd0\xb9')>, 'createdAt': '2023-09-09T15:40:52.014+0000', 'followers': [<Reference to Users/b'1130000046895076' (b'\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x93\xd0\xb5\xd1\x80\xd0\xb4\xd1\x82')>, <Reference to Users/b'1130000063263633' (b'\xd0\x90\xd0\xbd\xd1\x82\xd0\xbe\xd0\xbd \xd0\x9c\xd0\xb0\xd0\xbc\xd0\xbe\xd0\xb9\xd0\xba\xd0\xbe')>, <Reference to Users/b'1130000062167241' (b'\xd0\x98\xd0\xbb\xd1\x8c\xd1\x8f \xd0\xa2\xd0\xb5\xd0\xbb\xd0\xb8\xd0\xbf\xd0\xba\xd0\xbe')>], '64a51c6d866ea82411abe756--obektWialon': 'qweqwe', 'createdBy': <Reference to Users/b'1130000046895076' (b'\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x93\xd0\xb5\xd1\x80\xd0\xb4\xd1\x82')>, 'commentWithoutExternalMessageCount': 124, 'votes': 0, 'commentWithExternalMessageCount': 0, 'assignee': <Reference to Users/b'1130000046895076' (b'\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x93\xd0\xb5\xd1\x80\xd0\xb4\xd1\x82')>, 'queue': <Reference to Queues/b'3' (b'WIALON_BTC')>, 'updatedAt': '2023-09-13T14:12:11.113+0000', 'status': <Reference to Statuses/b'1' (b'\xd0\x9e\xd1\x82\xd0\xba\xd1\x80\xd1\x8b\xd1\x82')>, 'favorite': False, 'obektWialon': 'qweqwe', 'local_obektWialon': 'qweqwe'}, '_version': 132}
---------------------------
Сейчас там в поле вбито "qweqwe". И оно никак не поменялось.
Эта функция отправки коммента
def addComment(toIssue,comment):
comment = toIssue.comments.create(text=comment)
Более того, заметил странную вещь, curIssue.dict становится пустым после запроса По этому глюку отменa, сам что-то напутал.
Но вот так выглядит curIssue.dict, когда поле пустое. Когда что-то в нем есть, то 64a51c6d866ea82411abe756--obektWialon появляется
{'_collection': <yandex_tracker_client.collections.Issues object at 0x01A05F90>, '_connection': <yandex_tracker_client.connection.Connection object at 0x01968510>, '_path': '/v2/issues/WIALONBTC-935', '_value': {'self': ' [ https://api.tracker.yandex.net/v2/issues/WIALONBTC-935'](https://api.tracker.yandex.net/v2/issues/WIALONBTC-935'), 'id': '64fc9204c752cc49fade134f', 'key': 'WIALONBTC-935', 'version': 158, 'lastCommentUpdatedAt': '2023-09-13T15:05:52.858+0000', 'summary': '8922: test', 'statusStartTime': '2023-09-09T15:40:52.075+0000', 'updatedBy': <Reference to Users/b'1130000063263633' (b'\xd0\x90\xd0\xbd\xd1\x82\xd0\xbe\xd0\xbd \xd0\x9c\xd0\xb0\xd0\xbc\xd0\xbe\xd0\xb9\xd0\xba\xd0\xbe')>, 'statusType': None, 'sla': [{'id': '64fc9204c752cc49fade134e', 'settingsId': 3, 'clockStatus': 'NOT_STARTED', 'violationStatus': 'NOT_VIOLATED', 'warnThreshold': None, 'failedThreshold': 10800000, 'warnAt': None, 'failAt': None, 'startedAt': None, 'pausedAt': None, 'stoppedAt': None, 'pausedDuration': 0, 'toFailTimeWorkDuration': None, 'spent': None, 'previousSLAs': [], 'startShiftedByPause': None}], 'description': '', 'boards': [{'id': 3}, {'id': 7}], 'type': <Reference to IssueTypes/b'2' (b'\xd0\x97\xd0\xb0\xd0\xb4\xd0\xb0\xd1\x87\xd0\xb0')>, 'priority': <Reference to Priorities/b'3' (b'\xd0\xa1\xd1\x80\xd0\xb5\xd0\xb4\xd0\xbd\xd0\xb8\xd0\xb9')>, 'createdAt': '2023-09-09T15:40:52.014+0000', 'followers': [<Reference to Users/b'1130000046895076' (b'\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x93\xd0\xb5\xd1\x80\xd0\xb4\xd1\x82')>, <Reference to Users/b'1130000063263633' (b'\xd0\x90\xd0\xbd\xd1\x82\xd0\xbe\xd0\xbd \xd0\x9c\xd0\xb0\xd0\xbc\xd0\xbe\xd0\xb9\xd0\xba\xd0\xbe')>, <Reference to Users/b'1130000062167241' (b'\xd0\x98\xd0\xbb\xd1\x8c\xd1\x8f \xd0\xa2\xd0\xb5\xd0\xbb\xd0\xb8\xd0\xbf\xd0\xba\xd0\xbe')>], 'createdBy': <Reference to Users/b'1130000046895076' (b'\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x93\xd0\xb5\xd1\x80\xd0\xb4\xd1\x82')>, 'commentWithoutExternalMessageCount': 149, 'votes': 0, 'commentWithExternalMessageCount': 0, 'assignee': <Reference to Users/b'1130000046895076' (b'\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x93\xd0\xb5\xd1\x80\xd0\xb4\xd1\x82')>, 'queue': <Reference to Queues/b'3' (b'WIALON_BTC')>, 'updatedAt': '2023-09-13T15:05:52.858+0000', 'status': <Reference to Statuses/b'1' (b'\xd0\x9e\xd1\x82\xd0\xba\xd1\x80\xd1\x8b\xd1\x82')>, 'favorite': False}, '_version': 158}
Я опечатался выше надо curIssue.update(**{'64a51c6d866ea82411abe756--obektWialon': '1234'})
вместо curIssue.update({'64a51c6d866ea82411abe756--obektWialon': '1234'})
Да, это помогло, спасибо.
@FaNT0m3R
Тоже столкнулся с такой потребностью и реализовал вот такой патерн для YaTracker
Наследуем свой кастомный тип от задачи
from yatracker.types import FullIssue, field
class HelpIssue(FullIssue, kw_only=True):
user_id: int = field(name="64a51c6d866ea82411abe756--userId")
Передаём его при создании
issue = await tracker.create_issue(
summary="Запрос помощи от пользователя 42",
queue="HELP",
user_id=42,
_type=HelpIssue,
)
print(issue.user_id)
# 42
В итоге получаем объект issue
, который по-человечески используем у себя в коде, без всяких этих 64a51c6d866ea82411abe756--
. Единственное место, где лежит оригинальный идентификатор – модель с описанием полей. И ту можно в настройки вынести при необходимости.
Добрый день. Для очереди создано поле obektWialon, оно пустое, но через тригер хочу его заполнять. Через скрипт могу менять значение этого поля curIssue.update(obektWialon = '1234'). Но это работает только тогда, когда я в ручную уже что-то вбил. А вот вбить в пустое поле не могу, ругается на отсутствие obektWialon. Есть какой-то способ?