gapi-tools
Utilitários em Python para automatizar tarefas no Google Drive (v3) e Google Sheets (v4) via service account. Inclui uma CLI unificada (gapi) e uma API programática.
Funcionalidades
- Listar arquivos (resumido ou detalhado) e localizar por nome.
- Download de planilhas (preserva extensão
.xlsx/.xls/.xlsm/.xlsbou exporta Google Sheets como.xlsx). - Upload de arquivos com mimetype detectado automaticamente.
- Mover, copiar, renomear, criar pasta/arquivo.
- Atualizar metadados, mandar para a lixeira, restaurar, apagar.
- Esvaziar pasta (com paginação).
- Listar permissões e revisões.
- Ler/escrever planilhas a partir de um
pandas.DataFrame.
Requisitos
- Python 3.8.x (cap por compatibilidade com o servidor de produção; veja seção abaixo).
- Service account no Google Cloud com APIs Drive e Sheets habilitadas e arquivo JSON de credenciais.
Instalação
Em ambiente de desenvolvimento (Linux/WSL):
uv sync --extra dev
Em produção (Windows Server):
pip install .
Após instalar, o comando gapi fica disponível no PATH.
Configuração
Aponte para o JSON da service account de uma das três formas (resolvidas nessa ordem):
- variável de ambiente
GAPI_TOOLS_TOKENcom o caminho absoluto do arquivo JSON; - arquivo
.envno diretório atual contendoGTOKEN=/caminho/para/credenciais.json; - arquivo
.envem~/.config/gapi-tools/.
A planilha/arquivo precisa estar compartilhado com o e-mail da service account.
Uso da CLI
gapi list # nome -> id
gapi list --detailed --query "name = 'foo'" # JSON com metadados
gapi download minha-planilha --folder ./out --with-date
gapi upload ./local.csv FOLDER_ID --name remoto.csv
gapi move FILE_ID NEW_PARENT_ID --old-parent OLD
gapi copy FILE_ID --name "Cópia"
gapi create-folder Nova --parent root
gapi rename FILE_ID novo-nome
gapi update FILE_ID name=Foo description=Bar
gapi trash FILE_ID
gapi untrash FILE_ID
gapi delete FILE_ID --yes
gapi empty-folder FOLDER_ID --yes
gapi permissions FILE_ID
gapi revisions FILE_ID
gapi mtime FILE_ID
gapi sheets export-df dados.csv minha-planilha Plan1 --cell A2
gapi --help mostra todos os comandos; cada subcomando tem --help próprio.
Uso programático
from gapi_tools import drive, sheets
import pandas as pd
# listar e baixar
files = drive.list_files_detailed(query="mimeType = 'application/vnd.google-apps.spreadsheet'")
out = drive.download_spreadsheet('minha-planilha', folder='./out', with_date=True)
# upload e organização
drive.upload_file('FOLDER_ID', './relatorio.xlsx')
drive.move_file('FILE_ID', 'NEW_PARENT_ID')
drive.rename_file('FILE_ID', 'novo-nome.xlsx')
# escrever DataFrame numa aba
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
sheets.export_dataframe_to_gsheet(df, 'minha-planilha', 'Plan1', cell_address='A2')
Setup do servidor Windows Server 2008 R2
Este pacote é distribuído para um Windows Server 2008 R2 com Python 3.8.1. Antes de instalar:
-
Atualizações — recomendado aplicar
KB3140245("Update to enable TLS 1.1 and TLS 1.2 as default secure protocols in WinHTTP"). -
Habilitar TLS 1.2 no registro (chamadas à API do Google falham silenciosamente sem isso). Em
regedit, criar/editar:HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client Enabled = 1 (DWORD) DisabledByDefault = 0 (DWORD) HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server Enabled = 1 (DWORD) DisabledByDefault = 0 (DWORD)Reiniciar após alterar.
-
Verificar TLS — após reiniciar:
python -c "import urllib.request; print(urllib.request.urlopen('https://www.googleapis.com').status)"Se falhar com erro de SSL, TLS 1.2 não está ativo.
-
Instalar o pacote — todas as dependências têm wheels
cp38-win_amd64, então não é necessário compilador:pip install . -
Sanity check —
gapi --helpdeve listar todos os subcomandos semImportError.
Nota: o pacote evita
rich(usatyperpuro, nãotyper[all]) para funcionar bem nocmd.exelegado em cp1252.
Testes
pytest -v
Todos os testes usam mocks da Google API e não dependem de rede ou credenciais reais.
Lint e formatação
ruff check .
ruff format .
Licença
MIT — veja LICENSE.
Metadata
Release files for gapi-tools 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gapi_tools-0.2.0.tar.gz | 37.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gapi_tools-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 52.5 kB
Release files / gapi_tools-0.2.0.tar.gz
| Download URL | gapi_tools-0.2.0.tar.gz |
|---|---|
| Size | 37.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff234325a28a26111c3b77d4585b31fe147bd588a73475ab16b83478334d85e3
|
|
BLAKE2b-256 checksum How to use checksums |
bc4563dfe2bfa584600006dae98ead28db10e9ef2fe49ce018139f7f62763d74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.12
|
Release files / gapi_tools-0.2.0-py3-none-any.whl
| Download URL | gapi_tools-0.2.0-py3-none-any.whl |
|---|---|
| Size | 15.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9099353fae719d111d5aaa17d99ea078480efabef7f9f7ed9d869afeb761f28d
|
|
BLAKE2b-256 checksum How to use checksums |
57222af4e9707bafc217be94b2e61e87d4484470d0fffc571023ca13a94cf252
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.12
|