Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Support the binary store API (alpha) from Dapr 1.19

Aberta
#1,296 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 2 dias

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
grpc, python
Domínio
api, backend

Direção de pesquisa

Start by regenerating the protos with tools/regen_grpcclient.sh (DAPR_BRANCH=release-1.19) and confirm binarystore.proto appears. Then study the existing gRPC methods in dapr/clients/grpc/client.py and dapr/aio/clients/grpc/client.py to see how client-streaming and server-streaming calls are wrapped. Done means set, get and delete *_alpha1 methods exist in both clients, with tests and an examples/ app that uses binarystore.in-memory.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

help wanted kind/enhancement

Summary

Dapr 1.19 adds the binary store building block as an alpha API. An app uses it to store, read and delete files as byte streams through a binary store component. The Python SDK has no client API for it yet. The .NET SDK already supports it, so its implementation is a reference for this work.

Runtime API

gRPC, in the Dapr service (binarystore.proto):

  • SetBinaryFileAlpha1 is a client stream. The first message must contain initial_request with component_name, file_name and overwrite, and it must arrive within 5 seconds. Each later message contains one payload chunk (common.v1.StreamPayload). Its seq starts at 0 and goes up by 1 for each chunk. If overwrite is false (the default), the call fails when the file exists. If overwrite is true, the call replaces the file.
  • GetBinaryFileAlpha1 returns a server stream of payload chunks of up to 32 KiB, with seq from 0.
  • DeleteBinaryFileAlpha1 is a unary call.

HTTP, on /v1.0-alpha1/binarystore/{name}/{fileName}:

  • PUT stores the request body and replaces an existing file.
  • POST stores the request body, and returns 409 if the file exists.
  • GET returns the file as application/octet-stream.
  • DELETE deletes the file.

Components in 1.19: binarystore.aws.s3, binarystore.azure.blobstorage, binarystore.azure.datalake, binarystore.gcp.bucket, binarystore.oci.objectstorage and binarystore.in-memory.

Reference: the .NET SDK

  • dapr/dotnet-sdk#1933 (merged) adds the Dapr.BinaryStore.* packages. IDaprBinaryStoreClient has these methods:
    • SetBinaryFileAsync, from a stream or a byte buffer, with overwrite and a 32 KiB default chunk size
    • GetBinaryFileChunksAsync, GetBinaryFileAsync (to a stream) and GetBinaryFileBytesAsync
    • DeleteBinaryFileAsync
  • dapr/dotnet-sdk#1935 (in review) adds an example app.
  • dapr/docs#5388 (in review) adds the .NET SDK docs.

Related links: the proposal (dapr/proposals#88), the runtime implementation (dapr/dapr#10367) and the components (dapr/components-contrib#4559 and dapr/components-contrib#4637). dapr/dotnet-sdk#1934 stores workflow data references in the binary store. That is a separate feature (dapr/dapr#8706), and it is not part of this issue.

Scope

  • Generate the protos from Dapr 1.19 with tools/regen_grpcclient.sh (for example DAPR_BRANCH=release-1.19). The script takes every runtime/v1 proto, so it picks up binarystore.proto. main and release-1.19 do not have it yet.
  • Add set, get and delete *_alpha1 methods to the sync client (dapr/clients/grpc/client.py) and the async client (dapr/aio/clients/grpc/client.py). Set takes bytes or a file-like object and an overwrite flag. Get returns bytes or an iterator of chunks.
  • Send the upload chunks in order after the initial request, with seq from 0.
  • Add tests, and an example in examples/ that uses the binarystore.in-memory component.
  • Add docs to the Python SDK section of dapr/docs.

The API is alpha, so its names and behavior can change in a later release.

Linguagem predominante
Python
Estrelas
274
Forks
160
Merge médio
5d 15h
PRs com merge (30d)
70

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de dapr/python-sdk

Todas as issues de dapr/python-sdk

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.