Utilitários para automação de tarefas no Google Drive e Google Sheets via service account.
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gapi_tools-0.2.0.tar.gz.
File metadata
- Download URL: gapi_tools-0.2.0.tar.gz
- Upload date:
- Size: 37.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff234325a28a26111c3b77d4585b31fe147bd588a73475ab16b83478334d85e3
|
|
| MD5 |
dcc1e2904c5f0ded1a057860dc59cb40
|
|
| BLAKE2b-256 |
bc4563dfe2bfa584600006dae98ead28db10e9ef2fe49ce018139f7f62763d74
|
File details
Details for the file gapi_tools-0.2.0-py3-none-any.whl.
File metadata
- Download URL: gapi_tools-0.2.0-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9099353fae719d111d5aaa17d99ea078480efabef7f9f7ed9d869afeb761f28d
|
|
| MD5 |
667bc82ac476cbc460ca4b2c1af0f13d
|
|
| BLAKE2b-256 |
57222af4e9707bafc217be94b2e61e87d4484470d0fffc571023ca13a94cf252
|