API de S3
Os utilitários de armazenamento de objetos compatíveis com S3 estão disponíveis em ptool.s3 e p.s3.
ptool.s3.connect
Unreleased- Introduced.
ptool.s3.connect(options) abre uma conexão de armazenamento de objetos compatível com S3 e retorna um objeto Connection.
Campos de options:
bucket(string, obrigatório): O nome do bucket.region(string, opcional): A região da AWS ou do provedor.endpoint(string, opcional): Uma URL de endpoint compatível com S3 personalizada, como MinIO, R2 ou outro serviço de armazenamento de objetos.access_key_id(string, opcional): O ID da access key.secret_access_key(string, opcional): A secret access key.session_token(string, opcional): O token de sessão.root(string, opcional): Um prefixo raiz aplicado a todas as operações com objetos.allow_anonymous(boolean, opcional): Quandotrue, permite requisições sem assinatura se as credenciais não estiverem configuradas. O padrão éfalse.
Fallback de ambiente:
- Valores explícitos em
optionstêm prioridade. - Valores ausentes de
region,endpoint,access_key_id,secret_access_keyesession_tokenusam fallback para:AWS_REGIONAWS_ENDPOINT,AWS_ENDPOINT_URLouAWS_S3_ENDPOINTAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN
- O fallback de ambiente usa a visão do ambiente de runtime do
ptool, então valores definidos comp.os.setenv(...)também ficam visíveis paraptool.s3.connect(...).
Exemplo:
local s3 = ptool.s3.connect({
bucket = "artifacts",
region = "auto",
endpoint = "https://<account>.r2.cloudflarestorage.com",
access_key_id = p.os.getenv("AWS_ACCESS_KEY_ID"),
secret_access_key = p.os.getenv("AWS_SECRET_ACCESS_KEY"),
root = "builds/",
})
Connection
Unreleased- Introduced.
Connection representa uma conexão aberta de armazenamento de objetos retornada por ptool.s3.connect().
Ela é implementada como um userdata Lua.
Métodos:
conn:read(path)->stringconn:write(path, content)->nilconn:delete(path)->nilconn:exists(path)->booleanconn:list([prefix])->tableconn:stat(path)->table
Regras de caminho:
- Os caminhos de objetos devem ser strings não vazias, salvo indicação em contrário.
- A barra inicial
/é ignorada, então/foo/bar.txtefoo/bar.txtapontam para o mesmo objeto. - Os caminhos são relativos a
rootquandorootestá configurado na conexão.
Estrutura da tabela de entrada:
path(string): O caminho do objeto relativo à raiz da conexão.size(integer): O tamanho do objeto em bytes.etag(string | nil): O ETag do objeto, quando disponível.last_modified(string | nil): O timestamp da última modificação, quando disponível.content_type(string | nil): O tipo de conteúdo do objeto, quando disponível.is_file(boolean): Se a entrada é um arquivo.is_dir(boolean): Se a entrada é um diretório.mode(string): Um entre"file","dir"ou"unknown".
read
Unreleased- Introduced.
Nome canônico da API: ptool.s3.Connection:read.
conn:read(path) lê um objeto como bytes brutos e retorna uma string Lua.
path(string, obrigatório): O caminho do objeto.- Retorna:
string.
Exemplo:
local s3 = ptool.s3.connect({ bucket = "artifacts" })
local content = s3:read("releases/v1.0.0/notes.txt")
print(content)
write
Unreleased- Introduced.
Nome canônico da API: ptool.s3.Connection:write.
conn:write(path, content) grava uma string Lua em um objeto como bytes brutos.
path(string, obrigatório): O caminho do objeto.content(string, obrigatório): Os bytes a enviar.
Comportamento:
contenté enviado byte a byte.- Bytes NUL embutidos e bytes não UTF-8 são preservados.
Exemplo:
local s3 = ptool.s3.connect({ bucket = "artifacts" })
s3:write("tmp/hello.txt", "hello\n")
s3:write("tmp/blob.bin", "\x00\xffABC")
delete
Unreleased- Introduced.
Nome canônico da API: ptool.s3.Connection:delete.
conn:delete(path) exclui um objeto.
path(string, obrigatório): O caminho do objeto.
exists
Unreleased- Introduced.
Nome canônico da API: ptool.s3.Connection:exists.
conn:exists(path) verifica se um objeto existe.
path(string, obrigatório): O caminho do objeto.- Retorna:
boolean.
list
Unreleased- Introduced.
Nome canônico da API: ptool.s3.Connection:list.
conn:list([prefix]) lista entradas sob um prefixo e retorna uma tabela array Lua densa.
prefix(string, opcional): O prefixo a listar. O padrão é a raiz da conexão.- Retorna:
table.
Exemplo:
local s3 = ptool.s3.connect({ bucket = "artifacts", root = "builds/" })
local entries = s3:list("2026/")
for _, entry in ipairs(entries) do
print(entry.path, entry.mode, entry.size)
end
stat
Unreleased- Introduced.
Nome canônico da API: ptool.s3.Connection:stat.
conn:stat(path) retorna metadados de um único objeto.
path(string, obrigatório): O caminho do objeto.- Retorna:
table.
Exemplo:
local s3 = ptool.s3.connect({ bucket = "artifacts" })
local meta = s3:stat("releases/v1.0.0/app.tar.zst")
print(meta.size, meta.etag, meta.last_modified)