def do_work(camera_ip, start_datetime_str, end_datetime_str, use_utc_time,
            content_type):
    logger = Logger.get_logger()
    try:
        logger.info('Processing cam {}: downloading {}'.format(
            camera_ip, content_type))
        logger.info('{} time is used'.format(
            "UTC" if use_utc_time else "Camera's local"))

        auth_type = CameraSdk.get_auth_type(camera_ip, user_name,
                                            user_password)
        if auth_type == AuthType.UNAUTHORISED:
            raise RuntimeError('Unauthorised! Check login and password')

        auth_handler = CameraSdk.get_auth(auth_type, user_name, user_password)

        if use_utc_time:
            local_time_offset = timedelta()
        else:
            local_time_offset = CameraSdk.get_time_offset(
                auth_handler, camera_ip)

        utc_time_interval = TimeInterval.from_string(
            start_datetime_str, end_datetime_str, local_time_offset).to_utc()

        download_media(auth_handler, camera_ip, utc_time_interval,
                       content_type)

    except requests.exceptions.ConnectionError as e:
        logger.error('Connection error: {}'.format(e))

    except Exception as e:
        logger.exception(e)
    def get_all_tracks(_1, _2, utc_time_interval, _3):
        start_time_text, end_time_text = utc_time_interval.to_local_time(
        ).to_text()

        Logger.get_logger().info('Start time: {}'.format(start_time_text))
        Logger.get_logger().info('End time: {}'.format(end_time_text))
        Logger.get_logger().info('Getting track list...')
 def reboot_camera(_1, _2):
     Logger.get_logger().info('Rebooting camera...')
 def wait_until_camera_rebooted(result):
     if result:
         Logger.get_logger().info('Camera is up, continue downloading')
     else:
         Logger.get_logger().info('Camera is still down')
 def download_file_after(result):
     if result.result_type != CameraSdk.FileDownloadingResult.OK:
         if result.result_type == CameraSdk.FileDownloadingResult.TIMEOUT:
             Logger.get_logger().error("Timeout during file downloading")
         else:
             Logger.get_logger().error(result.text)
 def download_file_before(_1, _2, _3, file_name):
     Logger.get_logger().info('Downloading {}'.format(file_name))
 def download_tracks(tracks, _1, _2, _3):
     Logger.get_logger().info('Found {} files'.format(len(tracks)))
 def get_video_tracks_info(result):
     if not result:
         error_message = CameraSdk.get_error_message_from(result)
         Logger.get_logger().error(
             'Error occurred during getting track list')
         Logger.get_logger().error(error_message)
 def download_file_after(result):
     if not result:
         error_message = CameraSdk.get_error_message_from(result)
         Logger.get_logger().error(error_message)