docs: def _check_upload_conditions(self, local_path, rfile):
          # type: (Uploader, blobxfer.models.upload.LocalPath,
          #        blobxfer.models.azure.StorageEntity) -> UploadAction
          """Check for upload conditions
          :param Uploader self: this
          :param blobxfer.models.LocalPath local_path: local path
          :param blobxfer.models.azure.StorageEntity rfile: remote file
          :rtype: UploadAction
          :return: upload action
          """
          lpath = local_path.absolute_path
          # check if local file still exists
          if not local_path.use_stdin and not lpath.exists():
              if self._general_options.verbose:
                  logger.warning(
                      'skipping file that no longer exists: {}'.format(lpath))
              return UploadAction.Skip
          # if remote file doesn't exist, upload
          if rfile is None or rfile.from_local:
              return UploadAction.Upload
          # check overwrite option
          if not self._spec.options.overwrite:
              if rfile.mode == blobxfer.models.azure.StorageModes.Append:
                  rfile.append_create = False
                  return UploadAction.Upload
              logger.info(
                  'not overwriting remote file: {} (local: {})'.format(
                      rfile.path, lpath))
              return UploadAction.Skip
          # check skip on options, MD5 match takes priority
          md5 = blobxfer.models.metadata.get_md5_from_metadata(rfile)
          if self._spec.skip_on.md5_match and blobxfer.util.is_not_empty(md5):
              return UploadAction.CheckMd5
          # if neither of the remaining skip on actions are activated, upload
          if (not self._spec.skip_on.filesize_match and
                  not self._spec.skip_on.lmt_ge):
              return UploadAction.Upload
          # check skip on file size match
          ul_fs = None
          if self._spec.skip_on.filesize_match:
              lsize = local_path.size
              if rfile.mode == blobxfer.models.azure.StorageModes.Page:
                  lsize = blobxfer.util.page_align_content_length(lsize)
              if rfile.size == lsize:
                  ul_fs = False
                  if self._general_options.verbose:
                      logger.debug('filesize match: {} == {} size={}'.format(
                          local_path.absolute_path, rfile.path, lsize))
              else:
                  ul_fs = True
          # check skip on lmt ge
          ul_lmt = None
          if self._spec.skip_on.lmt_ge:
              mtime = blobxfer.util.datetime_from_timestamp(
                  local_path.lmt, as_utc=True)
              if rfile.lmt >= mtime:
                  ul_lmt = False
                  if self._general_options.verbose:
                      logger.debug('lmt ge match: {} lmt={} >= {} lmt={}'.format(
                          rfile.path, rfile.lmt, local_path.absolute_path,
                          mtime))
              else:
                  ul_lmt = True
          # upload if either skip on mismatch is True
          if ul_fs or ul_lmt:
              return UploadAction.Upload
          else:
              return UploadAction.Skip