fakesnow 0.9.5__tar.gz → 0.9.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. {fakesnow-0.9.5/fakesnow.egg-info → fakesnow-0.9.7}/PKG-INFO +7 -6
  2. {fakesnow-0.9.5 → fakesnow-0.9.7}/README.md +1 -0
  3. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/fakes.py +15 -3
  4. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/info_schema.py +1 -0
  5. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/transforms.py +406 -98
  6. {fakesnow-0.9.5 → fakesnow-0.9.7/fakesnow.egg-info}/PKG-INFO +7 -6
  7. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow.egg-info/SOURCES.txt +0 -1
  8. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow.egg-info/requires.txt +5 -5
  9. {fakesnow-0.9.5 → fakesnow-0.9.7}/pyproject.toml +38 -51
  10. {fakesnow-0.9.5 → fakesnow-0.9.7}/tests/test_fakes.py +364 -17
  11. {fakesnow-0.9.5 → fakesnow-0.9.7}/tests/test_sqlalchemy.py +16 -9
  12. fakesnow-0.9.7/tests/test_transforms.py +864 -0
  13. fakesnow-0.9.5/MANIFEST.in +0 -1
  14. fakesnow-0.9.5/tests/test_transforms.py +0 -426
  15. {fakesnow-0.9.5 → fakesnow-0.9.7}/LICENSE +0 -0
  16. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/__init__.py +0 -0
  17. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/__main__.py +0 -0
  18. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/checks.py +0 -0
  19. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/cli.py +0 -0
  20. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/expr.py +0 -0
  21. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/fixtures.py +0 -0
  22. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/global_database.py +0 -0
  23. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/macros.py +0 -0
  24. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow/py.typed +0 -0
  25. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow.egg-info/dependency_links.txt +0 -0
  26. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow.egg-info/entry_points.txt +0 -0
  27. {fakesnow-0.9.5 → fakesnow-0.9.7}/fakesnow.egg-info/top_level.txt +0 -0
  28. {fakesnow-0.9.5 → fakesnow-0.9.7}/setup.cfg +0 -0
  29. {fakesnow-0.9.5 → fakesnow-0.9.7}/tests/test_checks.py +0 -0
  30. {fakesnow-0.9.5 → fakesnow-0.9.7}/tests/test_cli.py +0 -0
  31. {fakesnow-0.9.5 → fakesnow-0.9.7}/tests/test_expr.py +0 -0
  32. {fakesnow-0.9.5 → fakesnow-0.9.7}/tests/test_info_schema.py +0 -0
  33. {fakesnow-0.9.5 → fakesnow-0.9.7}/tests/test_patch.py +0 -0
  34. {fakesnow-0.9.5 → fakesnow-0.9.7}/tests/test_users.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fakesnow
3
- Version: 0.9.5
3
+ Version: 0.9.7
4
4
  Summary: Fake Snowflake Connector for Python. Run, mock and test Snowflake DB locally.
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -213,15 +213,15 @@ License-File: LICENSE
213
213
  Requires-Dist: duckdb~=0.10.0
214
214
  Requires-Dist: pyarrow
215
215
  Requires-Dist: snowflake-connector-python
216
- Requires-Dist: sqlglot~=21.1.0
216
+ Requires-Dist: sqlglot~=23.3.0
217
217
  Provides-Extra: dev
218
- Requires-Dist: black~=23.9; extra == "dev"
219
218
  Requires-Dist: build~=1.0; extra == "dev"
219
+ Requires-Dist: pandas-stubs; extra == "dev"
220
220
  Requires-Dist: snowflake-connector-python[pandas,secure-local-storage]; extra == "dev"
221
221
  Requires-Dist: pre-commit~=3.4; extra == "dev"
222
- Requires-Dist: pytest~=7.4; extra == "dev"
223
- Requires-Dist: ruff~=0.1.6; extra == "dev"
224
- Requires-Dist: twine~=4.0; extra == "dev"
222
+ Requires-Dist: pytest~=8.0; extra == "dev"
223
+ Requires-Dist: ruff~=0.3.2; extra == "dev"
224
+ Requires-Dist: twine~=5.0; extra == "dev"
225
225
  Requires-Dist: snowflake-sqlalchemy~=1.5.0; extra == "dev"
226
226
  Provides-Extra: notebook
227
227
  Requires-Dist: duckdb-engine; extra == "notebook"
@@ -233,6 +233,7 @@ Requires-Dist: jupysql; extra == "notebook"
233
233
  [![ci](https://github.com/tekumara/fakesnow/actions/workflows/ci.yml/badge.svg)](https://github.com/tekumara/fakesnow/actions/workflows/ci.yml)
234
234
  [![release](https://github.com/tekumara/fakesnow/actions/workflows/release.yml/badge.svg)](https://github.com/tekumara/fakesnow/actions/workflows/release.yml)
235
235
  [![PyPI](https://img.shields.io/pypi/v/fakesnow?color=violet)](https://pypi.org/project/fakesnow/)
236
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/fakesnow?color=violet)](https://pypi.org/project/fakesnow/)
236
237
 
237
238
  Fake [Snowflake Connector for Python](https://docs.snowflake.com/en/user-guide/python-connector). Run and mock Snowflake DB locally.
238
239
 
@@ -3,6 +3,7 @@
3
3
  [![ci](https://github.com/tekumara/fakesnow/actions/workflows/ci.yml/badge.svg)](https://github.com/tekumara/fakesnow/actions/workflows/ci.yml)
4
4
  [![release](https://github.com/tekumara/fakesnow/actions/workflows/release.yml/badge.svg)](https://github.com/tekumara/fakesnow/actions/workflows/release.yml)
5
5
  [![PyPI](https://img.shields.io/pypi/v/fakesnow?color=violet)](https://pypi.org/project/fakesnow/)
6
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/fakesnow?color=violet)](https://pypi.org/project/fakesnow/)
6
7
 
7
8
  Fake [Snowflake Connector for Python](https://docs.snowflake.com/en/user-guide/python-connector). Run and mock Snowflake DB locally.
8
9
 
@@ -173,7 +173,7 @@ class FakeSnowflakeCursor:
173
173
  .transform(transforms.drop_schema_cascade)
174
174
  .transform(transforms.tag)
175
175
  .transform(transforms.semi_structured_types)
176
- .transform(transforms.parse_json)
176
+ .transform(transforms.try_parse_json)
177
177
  # indices_to_json_extract must be before regex_substr
178
178
  .transform(transforms.indices_to_json_extract)
179
179
  .transform(transforms.json_extract_cast_as_varchar)
@@ -185,6 +185,7 @@ class FakeSnowflakeCursor:
185
185
  .transform(transforms.values_columns)
186
186
  .transform(transforms.to_date)
187
187
  .transform(transforms.to_decimal)
188
+ .transform(transforms.try_to_decimal)
188
189
  .transform(transforms.to_timestamp_ntz)
189
190
  .transform(transforms.to_timestamp)
190
191
  .transform(transforms.object_construct)
@@ -196,11 +197,20 @@ class FakeSnowflakeCursor:
196
197
  .transform(transforms.array_size)
197
198
  .transform(transforms.random)
198
199
  .transform(transforms.identifier)
200
+ .transform(transforms.array_agg_within_group)
201
+ .transform(transforms.array_agg_to_json)
202
+ .transform(transforms.dateadd_date_cast)
203
+ .transform(transforms.dateadd_string_literal_timestamp_cast)
204
+ .transform(transforms.datediff_string_literal_timestamp_cast)
199
205
  .transform(lambda e: transforms.show_schemas(e, self._conn.database))
200
206
  .transform(lambda e: transforms.show_objects_tables(e, self._conn.database))
201
- .transform(lambda e: transforms.show_primary_keys(e, self._conn.database))
207
+ # TODO collapse into a single show_keys function
208
+ .transform(lambda e: transforms.show_keys(e, self._conn.database, kind="PRIMARY"))
209
+ .transform(lambda e: transforms.show_keys(e, self._conn.database, kind="UNIQUE"))
210
+ .transform(lambda e: transforms.show_keys(e, self._conn.database, kind="FOREIGN"))
202
211
  .transform(transforms.show_users)
203
212
  .transform(transforms.create_user)
213
+ .transform(transforms.sha256)
204
214
  )
205
215
  sql = transformed.sql(dialect="duckdb")
206
216
  result_sql = None
@@ -614,7 +624,9 @@ class FakeSnowflakeConnection:
614
624
  # don't jsonify string
615
625
  df[col] = df[col].apply(lambda x: json.dumps(x) if isinstance(x, (dict, list)) else x)
616
626
 
617
- self._duck_conn.execute(f"INSERT INTO {table_name}({','.join(df.columns.to_list())}) SELECT * FROM df")
627
+ escaped_cols = ",".join(f'"{col}"' for col in df.columns.to_list())
628
+ self._duck_conn.execute(f"INSERT INTO {table_name}({escaped_cols}) SELECT * FROM df")
629
+
618
630
  return self._duck_conn.fetchall()[0][0]
619
631
 
620
632
 
@@ -1,4 +1,5 @@
1
1
  """Info schema extension tables/views used for storing snowflake metadata not captured by duckdb."""
2
+
2
3
  from __future__ import annotations
3
4
 
4
5
  from string import Template