fork download
  1. def handler_ftp_type_msg (xml: str):
  2. """
  3. разбирает входящее сообщение на наличие данных необходимых для забора файлов с ftp сервера
  4. """
  5. res = []
  6. try:
  7. xml_processed = re.sub(r'\n', '', xml)
  8. #выделяем группу ключей MessagePrimaryContent
  9. xml_data_part1 = re.findall(r'<[a-zA-Z]{0,2}[0-9]{0,1}[:]?MessagePrimaryContent>.*<\/[a-zA-Z]{0,2}[0-9]{0,1}[:]?MessagePrimaryContent>', xml_processed)[0]
  10. #выделяем группу ключей FSAttachmentsList
  11. xml_data_part2 = re.findall(r'<[a-zA-z]{0,2}[0-9]{0,1}[:]?FSAttachmentsList>.*<\/[a-zA-z]{0,2}[0-9]{0,1}[:]?FSAttachmentsList>', xml_processed)[0]
  12.  
  13. res = {"files_count":re.findall(r'<FilesCount>(.*)<\/FilesCount>', xml_data_part1)[0], #общее количество файлов в отправке
  14. "total_size":re.findall(r'<TotalSize>(.*)<\/TotalSize>', xml_data_part1)[0], #размер всего файла отправки
  15. "id_msg":re.findall(r'<ID>([a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}).zip[.]?[0-9]{0,3}<\/ID>', xml_data_part1)[0], #единый id отправки
  16. "CRCCheckSum":re.findall(r'<CRCCheckSum>(.*)<\/CRCCheckSum>',xml_data_part1)[0], #контрольная сумма (не ясно единого файла или конкретной отправки)
  17. "number": re.findall(r'<Number>(.*)<\/Number>',xml_data_part1)[0], #порядковый номер файла в отправке
  18. "size":re.findall(r'<Size>(.*)<\/Size>',xml_data_part1)[0], #размер передаваемого файла в даннм сообщении
  19. "uuid": re.findall(r'<[a-zA-z]{0,2}[0-9]{0,1}[:]?uuid>([0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})<\/[a-zA-z]{0,2}[0-9]{0,1}[:]?uuid>',xml_data_part2)[0], #уникальный id всей отправки (не только этого сообщения)
  20. "user_name": re.findall(r'<[a-zA-Z]{0,2}[0-9]{0,1}[:]?UserName>(.*)<\/[a-zA-Z]{0,2}[0-9]{0,1}[:]?UserName>', xml_data_part2)[0], #логин учетной записи ftp сервера
  21. "password":re.findall(r'<[a-zA-Z]{0,2}[0-9]{0,1}[:]?Password>(.*)<\/[a-zA-Z]{0,2}[0-9]{0,1}[:]?Password>', xml_data_part2)[0], #пароль учетной записи ftp сервера
  22. "file_name":re.findall(r'<[a-zA-Z]{0,2}[0-9]{0,1}[:]?FileName>(.*)<\/[a-zA-Z]{0,2}[0-9]{0,1}[:]?FileName>', xml_data_part2)[0] #имя скачиваемого файла
  23. }
  24. except Exception as e:
  25. logging.debug('handler_ftp_type_msg () - сообщение не содержит данных учетных записей для связи с ftp сервером ')
  26. return res
  27.  
  28. def handler_merge_ids_msg(xml: str):
  29. """
  30. Разбирает входящее XML-сообщение, содержащее единственный блок с Ids,
  31. и возвращает словарь с ключом "ids", содержащим список идентификаторов.
  32.  
  33. Ожидаемый формат XML:
  34. <Ids>
  35. <id>12345678-1234-1234-1234-123456789012</id>
  36. <id>abcdefab-cdef-abcd-efab-cdefabcdefab</id>
  37. </Ids>
  38. """
  39. ids_list = []
  40. try:
  41. # Удаляем символы новой строки для упрощения поиска
  42. xml_processed = re.sub(r'\n', '', xml)
  43. # Выделяем блок с тегами <Ids>...</Ids>
  44. xml_data = re.findall(r'<ids>.*<\/ids>', xml_processed, re.IGNORECASE)[0]
  45. # Извлекаем содержимое всех тегов <id>...</id> внутри блока <Ids>
  46. ids_list = re.findall(r'<id>(.*?)<\/id>', xml_data, re.IGNORECASE)
  47. except Exception as e:
  48. logging.debug("handler_merge_ids_msg() - сообщение не содержит корректных данных для Ids: %s", str(e))
  49. return ids_list
Success #stdin #stdout 0.1s 14112KB
stdin
Standard input is empty
stdout
Standard output is empty