yandex / yandex_tracker_client

Python client for working with Yandex.Tracker Api
Other
59 stars 22 forks source link

Записать в пустое локальное поле значение #11

Closed FaNT0m3R closed 1 year ago

FaNT0m3R commented 1 year ago

Добрый день. Для очереди создано поле obektWialon, оно пустое, но через тригер хочу его заполнять. Через скрипт могу менять значение этого поля curIssue.update(obektWialon = '1234'). Но это работает только тогда, когда я в ручную уже что-то вбил. А вот вбить в пустое поле не могу, ругается на отсутствие obektWialon. Есть какой-то способ?

Smosker commented 1 year ago

Добрый! Приложите, пожалуйста, пример кода для воспроизведения.

FaNT0m3R commented 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 ('


') yaClient = TrackerClient(token=YA_TOKEN, org_id=YA_ORG) curIssue = yaClient.issues["WIALONBTC-79"]

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)), и там нет поля, пока оно пустое и появляется, когда я что-то вобью. image image

Smosker commented 1 year ago

Понял, тут проблема такая - пока поля не заполнено - на get запрос апи трекера его не отдает. Поэтому клиент не знает какой ключ этого поля. Что с этим можно сделать - посмотреть ключ поля (можно получить issue и print(issue.__dict__) сделать например) Там ключ формата 642ec22gjldsfjdsl--obektWialon

Его можно захардкодить, он не поменяется И потом

curIssue.update({'642ec22gjldsfjdsl--obektWialon': '1234'})
FaNT0m3R commented 1 year ago

Что-то не так. Делаю запрос: 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". И оно никак не поменялось.

FaNT0m3R commented 1 year ago

Эта функция отправки коммента

def addComment(toIssue,comment):
    comment = toIssue.comments.create(text=comment)
FaNT0m3R commented 1 year ago

Более того, заметил странную вещь, curIssue.dict становится пустым после запроса По этому глюку отменa, сам что-то напутал.

FaNT0m3R commented 1 year ago

Но вот так выглядит 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}

Smosker commented 1 year ago

Я опечатался выше надо curIssue.update(**{'64a51c6d866ea82411abe756--obektWialon': '1234'}) вместо curIssue.update({'64a51c6d866ea82411abe756--obektWialon': '1234'})

FaNT0m3R commented 1 year ago

Да, это помогло, спасибо.

Olegt0rr commented 1 year ago

@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--. Единственное место, где лежит оригинальный идентификатор – модель с описанием полей. И ту можно в настройки вынести при необходимости.