Sobre o projeto

O fakesnow é uma ferramenta para executar, simular e testar bancos de dados Snowflake falsos localmente. Ele oferece duas abordagens: aplicação de patch no processo do Snowflake Connector for Python, ou um servidor HTTP autônomo utilizável por conectores de qualquer linguagem. Aplicação de patch no processo (Python): instale com pip e execute um script via `fakesnow script.py` ou um módulo como o pytest via `fakesnow -m pytest`. Como alternativa, use `fakesnow.patch()` como gerenciador de contexto no código. Importações padrão de `snowflake.connector.connect` e `snowflake.connector.pandas_tools.write_pandas` são corrigidas automaticamente; módulos que usam a sintaxe `from ... import` devem ser nomeados explicitamente, por exemplo `fakesnow.patch("mymodule.write_pandas")`. A aplicação de patch se aplica apenas ao processo atual, portanto subprocessos e clientes que não sejam Python precisam do servidor. Os bancos de dados ficam em memória por padrão e podem ser persistidos passando um `db_path`. Modo servidor: execute `fakesnow -s` (ou via uvx/docker, com o contêiner escutando na porta 64616) para iniciar um servidor HTTP. Ele também pode ser iniciado dentro de um programa Python com `fakesnow.server()`, que fornece kwargs de conexão e encerra o servidor ao sair. Porta e persistência/isolamento do banco de dados são configuráveis por meio de parâmetros de sessão como `FAKESNOW_DB_PATH` (incluindo o valor `:isolated:`). Qualquer combinação de nome de usuário/senha/conta é aceita; o README documenta a conexão a partir da Snowflake CLI (config.toml com `protocol = http`), do Java via snowflake-jdbc (com observações sobre manter `account` na URL e `--add-opens` da JVM para Arrow) e via Testcontainers. Fixtures do pytest são fornecidas por meio de `pytest_plugins = "fakesnow.fixtures"`, incluindo uma fixture de sessão e uma fixture `fakesnow_server` que fornece kwargs de conexão. Cobertura: itens totalmente suportados incluem operações SQL padrão e cursores, consultas ao information schema, múltiplos bancos de dados, vinculação de parâmetros, comentários de tabela, integração com pandas incluindo write_pandas, recuperação de lotes de resultados via get_result_batches e o servidor HTTP para conectores que não sejam Python. Parcialmente suportados: funções de data, funções de expressão regular, operações com dados semiestruturados, tags, gerenciamento de usuários, stages e PUT, formatos de arquivo nomeados e COPY INTO de fontes e stages do S3. Ainda não implementados: controle de acesso e stored procedures. O README observa ressalvas de que a ordenação de linhas é não determinística, a menos que ORDER BY seja totalmente especificado, e que o dialeto SQL suportado é mais liberal que o Snowflake real, portanto algumas consultas podem funcionar localmente, mas não em uma instância real. O COPY INTO pode usar a cadeia padrão de credenciais da AWS ou uma instrução duckdb CREATE SECRET para credenciais alternativas do S3.