leshchenko1979 / fast_bitrix24

Высокопроизводительный API wrapper для Питона для быстрого массового обмена данными с Битрикс24 через REST API
MIT License
149 stars 29 forks source link

extract_from_batch_response #235

Closed MarsMinerstone closed 4 months ago

MarsMinerstone commented 4 months ago

Проблема в методе extract_from_batch_response, в файле fast_bitrix24/server_response.py.

Код, который я выполняю:

result = await bitrix_client.call(
    "crm.item.add",
    {
        "entityTypeId": 1,
        "fields": {
            "first_name": "first_name",
            "family_name": "family_name",
            "third_name": "third_name",
            "age": date(1999, 12, 12),
            "age_": 12,
            "user_tg_id": "user_tg_id",
            "phone": "phone",
        }
    }
)
print(result)

Вот ссылка на используемый мной метод Bitrix24 REST API: https://dev.1c-bitrix.ru/rest_help/crm/dynamic/methodscrmitem/crm_item_add.php

Вот такой результат я получаю: "item"

Следуя по шагам выполнения, выясняю, что в функцию extract_from_batch_response приходит данный словарь, что в целом приемлемый для меня ответ от api, и с которым я бы мог работать:

{'order0000000000': {'item': {'id': 46, 'xmlId': None, 'title': 'Лидерская программа #46', 'createdBy': 6511, 'updatedBy': 6511, 'movedBy': 6511, 'createdTime': '2024-05-20T09:01:39+03:00', 'updatedTime': '2024-05-20T09:01:39+03:00', 'movedTime': '2024-05-20T09:01:39+03:00', 'categoryId': 122, 'opened': 'N', 'stageId': 'DT133_122:NEW', 'previousStageId': '', 'begindate': '2024-05-20T03:00:00+03:00', 'closedate': '2024-05-27T03:00:00+03:00', 'companyId': None, 'contactId': None, 'opportunity': 0, 'isManualOpportunity': 'N', 'taxValue': 0, 'currencyId': 'RUB', 'opportunityAccount': 0, 'taxValueAccount': 0, 'accountCurrencyId': 'RUB', 'mycompanyId': None, 'sourceId': 'CALLBACK', 'sourceDescription': None, 'webformId': None, 'ufCRM_30__I': 'fio[0]', 'ufCRM_30__F': 'fio[1]', 'ufCrm_30_': '', 'ufCrm30Gorod': '', 'ufCRM_30__TG': 'None', 'ufCrm30Spes': '', 'ufCRM_30__DR': '1999-12-12T03:00:00+03:00', 'ufCrm30_1713945028': None, 'ufCrm30_1713945184': None, 'ufCrm30_1713945484': None, 'ufCrm30_1713945543': None, 'ufCrm30_1713945562': None, 'ufCrm30_1713956150473': None, 'ufCRM_30_1714103168': '25', 'ufCrm30_1714103555': None, 'ufCrm30_1714103618': '', 'ufCrm30_1714103630': 'N', 'ufCrm30_1714104884176': None, 'ufCrm30_1714106355377': None, 'ufCrm30_1714111271': None, 'ufCrm30_1714112298027': None, 'ufCrm30_1714113441': None, 'ufCRM_30_1714122056': 'fio[2]', 'ufCrm30_1714131633': None, 'ufCrm30_1714131799': None, 'ufCrm30_1714131815': 'N', 'ufCrm30_1714131831': '', 'ufCRM_30_1714131841': 0, 'ufCrm30_1714204151': None, 'assignedById': 6511, 'lastActivityBy': 6511, 'lastActivityTime': '2024-05-20T09:01:39+03:00', 'utmSource': None, 'utmMedium': None, 'utmCampaign': None, 'utmContent': None, 'utmTerm': None, 'observers': [], 'contactIds': [], 'entityTypeId': 133}}}

однако после условия: if self.is_nested(first_item) or isinstance(first_item, list): результатом метода становится один из ключей "item".

Конкретно, весь словарь обрезается в момент: result_list = list(chain(*result_list)) Избавившись от этого преобразования, у меня получилось получить то, что я хотел. Но я понимаю, что в этой части кода был какой-то смысл, поэтому жду ответа от вас.

Думаю проблема в том, что это взаимодействие с каким-то кастомным смарт-процессом, и подобный вывод не был предусмотрен в разработки библиотеки.

leshchenko1979 commented 4 months ago

Спасибо, посмотрю попозже

leshchenko1979 commented 4 months ago

А можете приложить полный лог выполнения вышеописанного кода?

MarsMinerstone commented 4 months ago
May 21 12:14:27 ruvds-5d49q python[98072]: 2024-05-21 12:14:27,334 - INFO - fast_bitrix24 - Starting call((<fast_bitrix24.bitrix.BitrixAsync object at 0x7180daf60c90>, 'crm.item.update', {'entityTypeId': 133, 'id': 247, 'fields': {'ufCRM_30_1714103630': None}}), {})
May 21 12:14:27 ruvds-5d49q python[98072]: 2024-05-21 12:14:27,334 - DEBUG - fast_bitrix24 - fast_bitrix24 version: 1.7.2
May 21 12:14:27 ruvds-5d49q python[98072]: 2024-05-21 12:14:27,334 - DEBUG - fast_bitrix24 - No IPython found
May 21 12:14:27 ruvds-5d49q python[98072]: 2024-05-21 12:14:27,334 - DEBUG - fast_bitrix24 - Concurrent requests increased: {'mcr_cur_limit': 50}
May 21 12:14:27 ruvds-5d49q python[98072]: 2024-05-21 12:14:27,334 - DEBUG - fast_bitrix24 - Requesting {'method': batch, 'params': {'halt': 0, 'cmd': {'order0000000000': 'crm.item.update?__order=order0000000000&entityTypeId=133&id=247&fields[ufCRM_30_1714103630]=None&'}}}
May 21 12:14:27 ruvds-5d49q python[98072]: 2024-05-21 12:14:27,524 - DEBUG - fast_bitrix24 - Response: {'result': {'result': {'order0000000000': {'item': {'id': 247, 'xmlId': '', 'title': 'Андрей Макарцев\n', 'createdBy': 6511, 'updatedBy': 6511, 'movedBy': 6511, 'createdTime': '2024-05-21T15:14:26+03:00', 'updatedTime': '2024-05-21T15:14:27+03:00', 'movedTime': '2024-05-21T15:14:26+03:00', 'categoryId': 122, 'opened': 'N', 'stageId': 'DT133_122:NEW', 'previousStageId': '', 'begindate': '2024-05-21T03:00:00+03:00', 'closedate': '2024-05-28T03:00:00+03:00', 'companyId': 0, 'contactId': 0, 'opportunity': 0, 'isManualOpportunity': 'N', 'taxValue': 0, 'currencyId': 'RUB', 'opportunityAccount': 0, 'taxValueAccount': 0, 'accountCurrencyId': 'RUB', 'mycompanyId': 0, 'sourceId': 'CALLBACK', 'sourceDescription': '', 'webformId': 0, 'ufCrm30I': 'Макарцев', 'ufCrm30F': 'Андрей', 'ufCrm_30_': 'celfi@mail.ru', 'ufCrm30Gorod': 'Свердловская область Екатеринбург', 'ufCrm30Tg': '@sdfsdfsfd', 'ufCrm30Spes': 'Управление HR, Служба развития новых площадок (СРНП), ', 'ufCrm30Dr': '1995-03-14T03:00:00+03:00', 'ufCrm30_1713945028': None, 'ufCrm30_1713945184': 3445, 'ufCrm30_1713945484': None, 'ufCrm30_1713945543': None, 'ufCrm30_1713945562': None, 'ufCrm30_1713956150473': None, 'ufCrm30_1714103168': '29', 'ufCrm30_1714103555': None, 'ufCrm30_1714103618': 'None', 'ufCRM_30_1714103630': None, 'ufCrm30_1714104884176': None, 'ufCrm30_1714106355377': None, 'ufCrm30_1714111271': None, 'ufCrm30_1714112298027': None, 'ufCrm30_1714113441': None, 'ufCrm30_1714122056': 'Андреевич', 'ufCrm30_1714131633': None, 'ufCrm30_1714131799': None, 'ufCrm30_1714131815': None, 'ufCrm30_1714131831': '', 'ufCrm30_1714131841': 79991111111, 'ufCrm30_1714204151': None, 'assignedById': 6511, 'lastActivityBy': 6511, 'lastActivityTime': '2024-05-21T15:14:26+03:00', 'utmSource': None, 'utmMedium': None, 'utmCampaign': None, 'utmContent': None, 'utmTerm': None, 'observers': [], 'contactIds': [], 'entityTypeId': 133}}}, 'result_error': [], 'result_total': [], 'result_next': [], 'result_time': {'order0000000000': {'start': 1716293667.476324, 'finish': 1716293667.52081, 'duration': 0.04448580741882324, 'processing': 0.04400205612182617, 'date_start': '2024-05-21T15:14:27+03:00', 'date_finish': '2024-05-21T15:14:27+03:00'}}}, 'time': {'start': 1716293667.454244, 'finish': 1716293667.52083, 'duration': 0.06658601760864258, 'processing': 0.04455399513244629, 'date_start': '2024-05-21T15:14:27+03:00', 'date_finish': '2024-05-21T15:14:27+03:00'}}

что-то типа такого