Fake Snowflake Connector for Python. Run, mock and test Snowflake DB locally.
Project description
fakesnow ❄️
Fake Snowflake Connector for Python. Run and mock Snowflake DB locally.
Install
pip install fakesnow
Usage
Run script.py with fakesnow:
fakesnow script.py
Or a module, eg: pytest
fakesnow -m pytest
fakesnow
executes fakesnow.patch
before running the script or module.
fakesnow.patch
To use fakesnow within your code:
import fakesnow
import snowflake.connector
with fakesnow.patch():
conn = snowflake.connector.connect()
print(conn.cursor().execute("SELECT 'Hello fake world!'").fetchone())
The following imports are automatically patched:
import snowflake.connector.connect
import snowflake.connector.pandas_tools.write_pandas
To patch modules that use the from ... import
syntax, manually specify them, eg: if mymodule.py has the import:
from snowflake.connector.pandas_tools import write_pandas
Then patch it using:
with fakesnow.patch("mymodule.write_pandas"):
...
By default databases are in-memory. To persist databases between processes, specify a databases path:
with fakesnow.patch(db_path="databases/"):
...
pytest fixtures
pytest fixtures are provided for testing. Example conftest.py:
from typing import Iterator
import fakesnow.fixtures
import pytest
pytest_plugins = fakesnow.fixtures.__name__
@pytest.fixture(scope="session", autouse=True)
def setup(_fakesnow_session: None) -> Iterator[None]:
# the standard imports are now patched
...
yield
Or with from ... import
patch targets:
from typing import Iterator
import fakesnow
import pytest
@pytest.fixture(scope="session", autouse=True)
def _fakesnow_session() -> Iterator[None]:
with fakesnow.patch("mymodule.write_pandas"):
yield
Implementation coverage
- cursors and standard SQL
- get_result_batches()
- information schema
- multiple databases
- parameter binding
- table comments
- write_pandas(..)
- access control
- standalone/out of process api/support for faking non-python connectors
- stored procedures
Partial support
- date functions
- regex functions
- semi-structured data
- tags
- user management (See tests/test_users.py)
For more detail see tests/test_fakes.py
Caveats
- The order of rows is non deterministic and may not match Snowflake unless ORDER BY is fully specified.
- A more liberal Snowflake SQL dialect than used by a real Snowflake instance is supported, ie: some queries might pass using fakesnow that a real Snowflake instance would reject.
Contributing
See CONTRIBUTING.md to get started and develop in this repo.
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
Hashes for fakesnow-0.9.18-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c847ebf7c6eae4abefb916eb382f87fa041a667b14d8de8bea34e6283dab5a0f |
|
MD5 | 91094c8a1bbfb6a4c056c803783cc7cd |
|
BLAKE2b-256 | 24782bd92ca9a477f590ee532b5d9dece5b7d53e34bdf9b825e00be289cd0fd8 |