sqlframe 3.37.0__py3-none-any.whl → 3.38.0__py3-none-any.whl

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.
sqlframe/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '3.37.0'
21
- __version_tuple__ = version_tuple = (3, 37, 0)
20
+ __version__ = version = '3.38.0'
21
+ __version_tuple__ = version_tuple = (3, 38, 0)
sqlframe/base/column.py CHANGED
@@ -222,6 +222,12 @@ class Column:
222
222
  else:
223
223
  value = value.astimezone(datetime.timezone.utc).isoformat(sep=" ")
224
224
  return cls(exp.cast(exp.Literal.string(value), exp.DataType.Type.TIMESTAMPTZ))
225
+ elif isinstance(value, datetime.timedelta):
226
+ return cls(
227
+ exp.Interval(
228
+ this=exp.Literal.string(int(value.total_seconds())), unit=exp.Var(this="SECOND")
229
+ )
230
+ )
225
231
  return cls(exp.convert(value))
226
232
 
227
233
  @classmethod
@@ -413,8 +419,9 @@ class Column:
413
419
  return self.invoke_expression_over_column(self, exp.StartsWith, expression=value.expression)
414
420
 
415
421
  def endswith(self, value: t.Union[str, Column]) -> Column:
422
+ ends_with_func = get_func_from_session("endswith")
416
423
  value = self._lit(value) if not isinstance(value, Column) else value
417
- return self.invoke_anonymous_function(self, "ENDSWITH", value)
424
+ return ends_with_func(self, value)
418
425
 
419
426
  def rlike(self, regexp: str) -> Column:
420
427
  return self.invoke_expression_over_column(
sqlframe/base/session.py CHANGED
@@ -12,6 +12,7 @@ from collections import defaultdict
12
12
  from functools import cached_property
13
13
 
14
14
  import sqlglot
15
+ from dateutil.relativedelta import relativedelta
15
16
  from sqlglot import Dialect, exp
16
17
  from sqlglot.dialects.dialect import DialectType, NormalizationStrategy
17
18
  from sqlglot.expressions import parse_identifier
@@ -613,6 +614,11 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, TABLE, CONN, UDF_REGIS
613
614
  return [cls._to_value(x) for x in value]
614
615
  elif isinstance(value, datetime.datetime):
615
616
  return value.replace(tzinfo=None)
617
+ elif isinstance(value, relativedelta):
618
+ return datetime.timedelta(
619
+ days=value.days, hours=value.hours, minutes=value.minutes, seconds=value.seconds
620
+ )
621
+
616
622
  return value
617
623
 
618
624
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sqlframe
3
- Version: 3.37.0
3
+ Version: 3.38.0
4
4
  Summary: Turning PySpark Into a Universal DataFrame API
5
5
  Home-page: https://github.com/eakmanrq/sqlframe
6
6
  Author: Ryan Eakman
@@ -17,7 +17,7 @@ Requires-Python: >=3.9
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENSE
19
19
  Requires-Dist: prettytable <4
20
- Requires-Dist: sqlglot <27.2,>=24.0.0
20
+ Requires-Dist: sqlglot <27.4,>=24.0.0
21
21
  Requires-Dist: typing-extensions
22
22
  Provides-Extra: bigquery
23
23
  Requires-Dist: google-cloud-bigquery-storage <3,>=2 ; extra == 'bigquery'
@@ -1,10 +1,10 @@
1
1
  sqlframe/__init__.py,sha256=SB80yLTITBXHI2GCDS6n6bN5ObHqgPjfpRPAUwxaots,3403
2
- sqlframe/_version.py,sha256=OHLx0CdNTm07UdNGtUV9adqYt8IYPToP_wYMErxuyAQ,513
2
+ sqlframe/_version.py,sha256=QFZM372YAR5g-moTkhEicbj8HSNBFoNWHFgQ704qMgo,513
3
3
  sqlframe/py.typed,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
4
4
  sqlframe/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  sqlframe/base/_typing.py,sha256=b2clI5HI1zEZKB_3Msx3FeAJQyft44ubUifJwQRVXyQ,1298
6
6
  sqlframe/base/catalog.py,sha256=-YulM2BMK8MoWbXi05AsJIPxd4AuiZDBCZuk4HoeMlE,38900
7
- sqlframe/base/column.py,sha256=5ZnZcn6gCCrAL53-EEHxVQWXG2oijN3RCOhlWmsjbJM,21147
7
+ sqlframe/base/column.py,sha256=f6rK6-hTiNx9WwJP7t6tqL3xEC2gwERPDlhWCS5iCBw,21417
8
8
  sqlframe/base/dataframe.py,sha256=0diYONDlet8iZt49LC3vcmfXHAAZ2MovPL2pTXYHj2U,85974
9
9
  sqlframe/base/decorators.py,sha256=IhE5xNQDkwJHacCvulq5WpUKyKmXm7dL2A3o5WuKGP4,2131
10
10
  sqlframe/base/exceptions.py,sha256=9Uwvqn2eAkDpqm4BrRgbL61qM-GMCbJEMAW8otxO46s,370
@@ -14,7 +14,7 @@ sqlframe/base/group.py,sha256=fBm8EUve7W7xz11nybTXr09ih-yZxL_vvEiZVE1eb_0,12025
14
14
  sqlframe/base/normalize.py,sha256=nXAJ5CwxVf4DV0GsH-q1w0p8gmjSMlv96k_ez1eVul8,3880
15
15
  sqlframe/base/operations.py,sha256=g-YNcbvNKTOBbYm23GKfB3fmydlR7ZZDAuZUtXIHtzw,4438
16
16
  sqlframe/base/readerwriter.py,sha256=Nb2VJ_HBmLQp5mK8JhnFooZh2ydAaboCAFVPb-4MNX4,31241
17
- sqlframe/base/session.py,sha256=djXPmuW0cIQYuoE7hegfyvZuKC2D3ABZCjvw-fa1C24,27260
17
+ sqlframe/base/session.py,sha256=ExaGjY_lxkMi2WDwJ8wTd2uf7a2PjOOk9bx1ViEaAqA,27507
18
18
  sqlframe/base/table.py,sha256=rCeh1W5SWbtEVfkLAUiexzrZwNgmZeptLEmLcM1ABkE,6961
19
19
  sqlframe/base/transforms.py,sha256=y0j3SGDz3XCmNGrvassk1S-owllUWfkHyMgZlY6SFO4,467
20
20
  sqlframe/base/types.py,sha256=OktuJ5f7tEogOW0oupI0RBlHfzZMmKh7zGLke9cwllo,12305
@@ -130,8 +130,8 @@ sqlframe/standalone/udf.py,sha256=azmgtUjHNIPs0WMVNId05SHwiYn41MKVBhKXsQJ5dmY,27
130
130
  sqlframe/standalone/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
131
131
  sqlframe/testing/__init__.py,sha256=VVCosQhitU74A3NnE52O4mNtGZONapuEXcc20QmSlnQ,132
132
132
  sqlframe/testing/utils.py,sha256=PFsGZpwNUE_4-g_f43_vstTqsK0AQ2lBneb5Eb6NkFo,13008
133
- sqlframe-3.37.0.dist-info/LICENSE,sha256=VZu79YgW780qxaFJMr0t5ZgbOYEh04xWoxaWOaqIGWk,1068
134
- sqlframe-3.37.0.dist-info/METADATA,sha256=dr_LT2MGEsiXj-1rwsTtx31DtQxM6_Fo9zsJ24ghD30,9039
135
- sqlframe-3.37.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
136
- sqlframe-3.37.0.dist-info/top_level.txt,sha256=T0_RpoygaZSF6heeWwIDQgaP0varUdSK1pzjeJZRjM8,9
137
- sqlframe-3.37.0.dist-info/RECORD,,
133
+ sqlframe-3.38.0.dist-info/LICENSE,sha256=VZu79YgW780qxaFJMr0t5ZgbOYEh04xWoxaWOaqIGWk,1068
134
+ sqlframe-3.38.0.dist-info/METADATA,sha256=9I9SbVhzN2eSfBMmQ1TN9QjFbWXiAKMra4AvhnqYENc,9039
135
+ sqlframe-3.38.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
136
+ sqlframe-3.38.0.dist-info/top_level.txt,sha256=T0_RpoygaZSF6heeWwIDQgaP0varUdSK1pzjeJZRjM8,9
137
+ sqlframe-3.38.0.dist-info/RECORD,,