Uploads a binary bytes array as file(s) in a certain path.

        Params:
        * commit: A tuple, string, or Commit object representing the commit.
        * path: Path in the repo the file(s) will be written to.
        * value: The file contents as bytes, represented as a file-like
        object, bytestring, or iterator of bytestrings.
        * delimiter: Optional. causes data to be broken up into separate files
        with `path` as a prefix.
        * target_file_datums: Optional. Specifies the target number of datums
        in each written file. It may be lower if data does not split evenly,
        but will never be higher, unless the value is 0.
        * target_file_bytes: Specifies the target number of bytes in each
        written file, files may have more or fewer bytes than the target.

def put_file_bytes(self, commit, path, value, delimiter=proto.NONE,
                       target_file_datums=0, target_file_bytes=0, overwrite_index=None):
        """
        Uploads a binary bytes array as file(s) in a certain path.

        Params:
        * commit: A tuple, string, or Commit object representing the commit.
        * path: Path in the repo the file(s) will be written to.
        * value: The file contents as bytes, represented as a file-like
        object, bytestring, or iterator of bytestrings.
        * delimiter: Optional. causes data to be broken up into separate files
        with `path` as a prefix.
        * target_file_datums: Optional. Specifies the target number of datums
        in each written file. It may be lower if data does not split evenly,
        but will never be higher, unless the value is 0.
        * target_file_bytes: Specifies the target number of bytes in each
        written file, files may have more or fewer bytes than the target.
        """

        overwrite_index_proto = proto.OverwriteIndex(index=overwrite_index) if overwrite_index is not None else None

        if hasattr(value, "read"):
            def wrap(value):
                for i in itertools.count():
                    chunk = value.read(BUFFER_SIZE)

                    if len(chunk) == 0:
                        return

                    if i == 0:
                        yield proto.PutFileRequest(
                            file=proto.File(commit=commit_from(commit), path=path),
                            value=chunk,
                            delimiter=delimiter,
                            target_file_datums=target_file_datums,
                            target_file_bytes=target_file_bytes,
                            overwrite_index=overwrite_index_proto
                        )
                    else:
                        yield proto.PutFileRequest(value=chunk)
        elif isinstance(value, collections.Iterable) and not isinstance(value, (six.string_types, six.binary_type)):
            def wrap(value):
                for i, chunk in enumerate(value):
                    if i == 0:
                        yield proto.PutFileRequest(
                            file=proto.File(commit=commit_from(commit), path=path),
                            value=chunk,
                            delimiter=delimiter,
                            target_file_datums=target_file_datums,
                            target_file_bytes=target_file_bytes,
                            overwrite_index=overwrite_index_proto
                        )
                    else:
                        yield proto.PutFileRequest(value=chunk)
        else:
            def wrap(value):
                yield proto.PutFileRequest(
                    file=proto.File(commit=commit_from(commit), path=path),
                    value=value[:BUFFER_SIZE],
                    delimiter=delimiter,
                    target_file_datums=target_file_datums,
                    target_file_bytes=target_file_bytes,
                    overwrite_index=overwrite_index_proto
                )

                for i in range(BUFFER_SIZE, len(value), BUFFER_SIZE):
                    yield proto.PutFileRequest(
                        value=value[i:i + BUFFER_SIZE],
                        overwrite_index=overwrite_index_proto
                    )

        self.stub.PutFile(wrap(value), metadata=self.metadata)