fork download
  1. def handlerMergeFile (*args, **kwargs):
  2. """
  3. Обработчик объединения нескольких файлов в один
  4. """
  5. result = True
  6. if len(args) == 1 and isinstance (args[0], list):
  7. _args, _kwargs = args[0]
  8. args = _args
  9. kwargs = {**_kwargs, **kwargs}
  10. logger.info ('handlerSaveMergeFile ()')
  11. #for value in args:
  12. # logger.info ('args: {0}'.format(value))
  13. #for key, value in kwargs.items():
  14. # logger.info ('kwargs: {0}:{1}'.format(key,value))
  15. #набор обязательных параметров
  16. try:
  17. id = kwargs.get('id',None)
  18. if id is None:
  19. raise InputParametersDoNotMeetExpectationsClass('аргумент id функции handlerSaveMergeFile() не соответствуют ожиданиям' )
  20. ack_id_msg = kwargs.get('ack_id_msg',None)
  21. if ack_id_msg is None:
  22. raise InputParametersDoNotMeetExpectationsClass('аргумент ack_id_msg функции handlerSaveMergeFile() не соответствуют ожиданиям' )
  23. merge_ids: list = kwargs.get('merge_ids', None)
  24. if merge_ids is None:
  25. raise InputParametersDoNotMeetExpectationsClass('аргумент merge_ids функции handlerSaveMergeFile() не соответствуют ожиданиям' )
  26.  
  27. #проверяем наличие всех файлов на диске,
  28. with SessionLocal() as session:
  29. paths = get_files_paths(session, merge_ids)
  30. # если они все скачались объединяем их в один,
  31. try:
  32. merge_file_id, full_path = merge_files(paths)
  33. except Exception as e:
  34. raise MergeFilesError('Ошибка во время слияния файлов')
  35.  
  36. try:
  37. save_file_in_db(session, merge_file_id, full_path)
  38.  
  39. session.query(orm_schema.SmevFile).filter(
  40. orm_schema.SmevFile.id.in_(merge_ids)
  41. ).delete(synchronize_session=False)
  42. session.commit()
  43. except Exception as e:
  44. session.rollback()
  45. logger.info('handlerMergeFile() - ошибка внесения данных в базу данных, текст ошибки: %s', str(e))
  46. raise FileRecordingProblemClass(f'Ошибка сохранения файла в бд, сообщение об ошибке {str(e)}')
  47.  
  48.  
  49. # Удаляем с диска части ранее скачанных архивов
  50. for path in paths:
  51. try:
  52. os.remove(path)
  53. logger.info("Удален файл %s", path)
  54. except Exception as e:
  55. logger.info("Ошибка удаления файла %s: %s", path, str(e))
  56. continue
  57. except MergeFilesError as e:
  58. logger.info(f'handlerMergeFile() - {str(e)}')
  59. result = False
  60. except FileNotExistInDatabase as e:
  61. logger.info(f'handlerMergeFile() - {str(e)}')
  62. result = False
  63.  
  64. kwargs["result"] = result
  65. return args, kwargs
Success #stdin #stdout 0.09s 14120KB
stdin
Standard input is empty
stdout
Standard output is empty