'Push the file pointed to by ``rel_path`` to the object store naming the blob
``rel_path``. If ``source_file`` is provided, push that file instead while
still using ``rel_path`` as the blob name.
If ``from_string`` is provided, set contents of the file to the value of
the string.'

def _push_to_os(self, rel_path, source_file=None, from_string=None):

    try:
        source_file = (source_file or self._get_cache_path(rel_path))
        if (not os.path.exists(source_file)):
            log.error("Tried    updating    blob    '%s'    from    source    file    '%s',    but    source    file    does    not    exist.", rel_path, source_file)
            return False
        if (os.path.getsize(source_file) == 0):
            log.debug("Wanted    to    push    file    '%s'    to    azure    blob    '%s'    but    its    size    is    0;    skipping.", source_file, rel_path)
            return True
        if from_string:
            self.service.create_blob_from_text(self.container_name, rel_path, from_string, progress_callback=self._transfer_cb)
            log.debug("Pushed    data    from    string    '%s'    to    blob    '%s'", from_string, rel_path)
        else:
            start_time = datetime.now()
            log.debug("Pushing    cache    file    '%s'    of    size    %s    bytes    to    '%s'", source_file, os.path.getsize(source_file), rel_path)
            self.transfer_progress = 0
            self.service.create_blob_from_path(self.container_name, rel_path, source_file, progress_callback=self._transfer_cb)
            end_time = datetime.now()
            log.debug("Pushed    cache    file    '%s'    to    blob    '%s'    (%s    bytes    transfered    in    %s    sec)", source_file, rel_path, os.path.getsize(source_file), (end_time - start_time))
        return True
    except AzureHttpError:
        log.exception("Trouble    pushing    to    Azure    Blob    '%s'    from    file    '%s'", rel_path, source_file)
    return False
