meerschaum 2.7.6__py3-none-any.whl → 2.7.7__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. meerschaum/actions/drop.py +100 -22
  2. meerschaum/actions/index.py +71 -0
  3. meerschaum/actions/register.py +8 -12
  4. meerschaum/actions/sql.py +1 -1
  5. meerschaum/api/routes/_pipes.py +18 -0
  6. meerschaum/api/routes/_plugins.py +1 -1
  7. meerschaum/api/routes/_users.py +62 -61
  8. meerschaum/config/_version.py +1 -1
  9. meerschaum/connectors/api/_pipes.py +20 -0
  10. meerschaum/connectors/sql/_SQLConnector.py +6 -3
  11. meerschaum/connectors/sql/_create_engine.py +1 -1
  12. meerschaum/connectors/sql/_fetch.py +4 -9
  13. meerschaum/connectors/sql/_instance.py +3 -3
  14. meerschaum/connectors/sql/_pipes.py +255 -66
  15. meerschaum/connectors/sql/_plugins.py +11 -16
  16. meerschaum/connectors/sql/_sql.py +4 -8
  17. meerschaum/connectors/sql/_uri.py +9 -9
  18. meerschaum/connectors/sql/_users.py +10 -12
  19. meerschaum/connectors/sql/tables/__init__.py +13 -14
  20. meerschaum/core/Pipe/__init__.py +12 -2
  21. meerschaum/core/Pipe/_attributes.py +32 -38
  22. meerschaum/core/Pipe/_drop.py +73 -2
  23. meerschaum/core/Pipe/_index.py +68 -0
  24. meerschaum/utils/dtypes/sql.py +2 -2
  25. meerschaum/utils/sql.py +80 -34
  26. {meerschaum-2.7.6.dist-info → meerschaum-2.7.7.dist-info}/METADATA +14 -2
  27. {meerschaum-2.7.6.dist-info → meerschaum-2.7.7.dist-info}/RECORD +33 -31
  28. {meerschaum-2.7.6.dist-info → meerschaum-2.7.7.dist-info}/WHEEL +1 -1
  29. {meerschaum-2.7.6.dist-info → meerschaum-2.7.7.dist-info}/LICENSE +0 -0
  30. {meerschaum-2.7.6.dist-info → meerschaum-2.7.7.dist-info}/NOTICE +0 -0
  31. {meerschaum-2.7.6.dist-info → meerschaum-2.7.7.dist-info}/entry_points.txt +0 -0
  32. {meerschaum-2.7.6.dist-info → meerschaum-2.7.7.dist-info}/top_level.txt +0 -0
  33. {meerschaum-2.7.6.dist-info → meerschaum-2.7.7.dist-info}/zip-safe +0 -0
meerschaum/utils/sql.py CHANGED
@@ -43,6 +43,9 @@ SKIP_IF_EXISTS_FLAVORS = {'mssql', 'oracle'}
43
43
  DROP_IF_EXISTS_FLAVORS = {
44
44
  'timescaledb', 'postgresql', 'citus', 'mssql', 'mysql', 'mariadb', 'sqlite',
45
45
  }
46
+ DROP_INDEX_IF_EXISTS_FLAVORS = {
47
+ 'mssql', 'timescaledb', 'postgresql', 'sqlite', 'citus',
48
+ }
46
49
  SKIP_AUTO_INCREMENT_FLAVORS = {'citus', 'duckdb'}
47
50
  COALESCE_UNIQUE_INDEX_FLAVORS = {'timescaledb', 'postgresql', 'citus'}
48
51
  UPDATE_QUERIES = {
@@ -376,7 +379,7 @@ columns_indices_queries = {
376
379
  WHERE
377
380
  t.name IN ('{table}', '{table_trunc}')
378
381
  AND s.name = '{schema}'
379
- AND i.type IN (1, 2) -- 1 = CLUSTERED, 2 = NONCLUSTERED
382
+ AND i.type IN (1, 2)
380
383
  """,
381
384
  'oracle': """
382
385
  SELECT
@@ -590,7 +593,14 @@ def dateadd_str(
590
593
  from meerschaum.utils.dtypes.sql import get_db_type_from_pd_type, get_pd_type_from_db_type
591
594
  dateutil_parser = attempt_import('dateutil.parser')
592
595
  if 'int' in str(type(begin)).lower():
593
- return str(begin)
596
+ num_str = str(begin)
597
+ if number is not None and number != 0:
598
+ num_str += (
599
+ f' + {number}'
600
+ if number > 0
601
+ else f" - {number * -1}"
602
+ )
603
+ return num_str
594
604
  if not begin:
595
605
  return ''
596
606
 
@@ -797,7 +807,7 @@ def sql_item_name(item: str, flavor: str, schema: Optional[str] = None) -> str:
797
807
  """
798
808
  truncated_item = truncate_item_name(str(item), flavor)
799
809
  if flavor == 'oracle':
800
- truncated_item = pg_capital(truncated_item)
810
+ truncated_item = pg_capital(truncated_item, quote_capitals=True)
801
811
  ### NOTE: System-reserved words must be quoted.
802
812
  if truncated_item.lower() in (
803
813
  'float', 'varchar', 'nvarchar', 'clob',
@@ -824,14 +834,17 @@ def sql_item_name(item: str, flavor: str, schema: Optional[str] = None) -> str:
824
834
  return schema_prefix + wrappers[0] + truncated_item + wrappers[1]
825
835
 
826
836
 
827
- def pg_capital(s: str) -> str:
837
+ def pg_capital(s: str, quote_capitals: bool = True) -> str:
828
838
  """
829
839
  If string contains a capital letter, wrap it in double quotes.
830
840
 
831
841
  Parameters
832
842
  ----------
833
- s: str :
834
- The string to be escaped.
843
+ s: str
844
+ The string to be escaped.
845
+
846
+ quote_capitals: bool, default True
847
+ If `False`, do not quote strings with contain only a mix of capital and lower-case letters.
835
848
 
836
849
  Returns
837
850
  -------
@@ -845,16 +858,24 @@ def pg_capital(s: str) -> str:
845
858
  'my_table'
846
859
 
847
860
  """
848
- if '"' in s:
861
+ if s.startswith('"') and s.endswith('"'):
849
862
  return s
863
+
864
+ s = s.replace('"', '')
865
+
850
866
  needs_quotes = s.startswith('_')
851
- for c in str(s):
852
- if ord(c) < ord('a') or ord(c) > ord('z'):
853
- if not c.isdigit() and c != '_':
867
+ if not needs_quotes:
868
+ for c in s:
869
+ if c == '_':
870
+ continue
871
+
872
+ if not c.isalnum() or (quote_capitals and c.isupper()):
854
873
  needs_quotes = True
855
874
  break
875
+
856
876
  if needs_quotes:
857
877
  return '"' + s + '"'
878
+
858
879
  return s
859
880
 
860
881
 
@@ -1048,7 +1069,7 @@ def table_exists(
1048
1069
  -------
1049
1070
  A `bool` indicating whether or not the table exists on the database.
1050
1071
  """
1051
- sqlalchemy = mrsm.attempt_import('sqlalchemy')
1072
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
1052
1073
  schema = schema or connector.schema
1053
1074
  insp = sqlalchemy.inspect(connector.engine)
1054
1075
  truncated_table_name = truncate_item_name(str(table), connector.flavor)
@@ -1101,7 +1122,7 @@ def get_sqlalchemy_table(
1101
1122
  if refresh:
1102
1123
  connector.metadata.clear()
1103
1124
  tables = get_tables(mrsm_instance=connector, debug=debug, create=False)
1104
- sqlalchemy = attempt_import('sqlalchemy')
1125
+ sqlalchemy = attempt_import('sqlalchemy', lazy=False)
1105
1126
  truncated_table_name = truncate_item_name(str(table), connector.flavor)
1106
1127
  table_kwargs = {
1107
1128
  'autoload_with': connector.engine,
@@ -1171,7 +1192,7 @@ def get_table_cols_types(
1171
1192
  """
1172
1193
  import textwrap
1173
1194
  from meerschaum.connectors import SQLConnector
1174
- sqlalchemy = mrsm.attempt_import('sqlalchemy')
1195
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
1175
1196
  flavor = flavor or getattr(connectable, 'flavor', None)
1176
1197
  if not flavor:
1177
1198
  raise ValueError("Please provide a database flavor.")
@@ -1323,7 +1344,7 @@ def get_table_cols_indices(
1323
1344
  import textwrap
1324
1345
  from collections import defaultdict
1325
1346
  from meerschaum.connectors import SQLConnector
1326
- sqlalchemy = mrsm.attempt_import('sqlalchemy')
1347
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
1327
1348
  flavor = flavor or getattr(connectable, 'flavor', None)
1328
1349
  if not flavor:
1329
1350
  raise ValueError("Please provide a database flavor.")
@@ -1448,6 +1469,7 @@ def get_update_queries(
1448
1469
  schema: Optional[str] = None,
1449
1470
  patch_schema: Optional[str] = None,
1450
1471
  identity_insert: bool = False,
1472
+ null_indices: bool = True,
1451
1473
  debug: bool = False,
1452
1474
  ) -> List[str]:
1453
1475
  """
@@ -1489,6 +1511,9 @@ def get_update_queries(
1489
1511
  If `True`, include `SET IDENTITY_INSERT` queries before and after the update queries.
1490
1512
  Only applies for MSSQL upserts.
1491
1513
 
1514
+ null_indices: bool, default True
1515
+ If `False`, do not coalesce index columns before joining.
1516
+
1492
1517
  debug: bool, default False
1493
1518
  Verbosity toggle.
1494
1519
 
@@ -1579,11 +1604,17 @@ def get_update_queries(
1579
1604
 
1580
1605
  coalesce_join_cols_str = ', '.join(
1581
1606
  [
1582
- 'COALESCE('
1583
- + sql_item_name(c_name, flavor)
1584
- + ', '
1585
- + get_null_replacement(c_type, flavor)
1586
- + ')'
1607
+ (
1608
+ (
1609
+ 'COALESCE('
1610
+ + sql_item_name(c_name, flavor)
1611
+ + ', '
1612
+ + get_null_replacement(c_type, flavor)
1613
+ + ')'
1614
+ )
1615
+ if null_indices
1616
+ else sql_item_name(c_name, flavor)
1617
+ )
1587
1618
  for c_name, c_type in join_cols_types
1588
1619
  ]
1589
1620
  )
@@ -1633,19 +1664,29 @@ def get_update_queries(
1633
1664
  def and_subquery(l_prefix: str, r_prefix: str):
1634
1665
  return '\n AND\n '.join([
1635
1666
  (
1636
- "COALESCE("
1637
- + l_prefix
1638
- + sql_item_name(c_name, flavor, None)
1639
- + ", "
1640
- + get_null_replacement(c_type, flavor)
1641
- + ")"
1642
- + '\n =\n '
1643
- + "COALESCE("
1644
- + r_prefix
1645
- + sql_item_name(c_name, flavor, None)
1646
- + ", "
1647
- + get_null_replacement(c_type, flavor)
1648
- + ")"
1667
+ (
1668
+ "COALESCE("
1669
+ + l_prefix
1670
+ + sql_item_name(c_name, flavor, None)
1671
+ + ", "
1672
+ + get_null_replacement(c_type, flavor)
1673
+ + ")"
1674
+ + '\n =\n '
1675
+ + "COALESCE("
1676
+ + r_prefix
1677
+ + sql_item_name(c_name, flavor, None)
1678
+ + ", "
1679
+ + get_null_replacement(c_type, flavor)
1680
+ + ")"
1681
+ )
1682
+ if null_indices
1683
+ else (
1684
+ l_prefix
1685
+ + sql_item_name(c_name, flavor, None)
1686
+ + ' = '
1687
+ + r_prefix
1688
+ + sql_item_name(c_name, flavor, None)
1689
+ )
1649
1690
  ) for c_name, c_type in join_cols_types
1650
1691
  ])
1651
1692
 
@@ -1973,7 +2014,12 @@ def _get_create_table_query_from_dtypes(
1973
2014
  autoincrement = False
1974
2015
 
1975
2016
  cols_types = (
1976
- [(primary_key, get_db_type_from_pd_type(dtypes.get(primary_key, 'int'), flavor=flavor))]
2017
+ [
2018
+ (
2019
+ primary_key,
2020
+ get_db_type_from_pd_type(dtypes.get(primary_key, 'int') or 'int', flavor=flavor)
2021
+ )
2022
+ ]
1977
2023
  if primary_key
1978
2024
  else []
1979
2025
  ) + [
@@ -2329,7 +2375,7 @@ def session_execute(
2329
2375
  A `SuccessTuple` indicating the queries were successfully executed.
2330
2376
  If `with_results`, return the `SuccessTuple` and a list of results.
2331
2377
  """
2332
- sqlalchemy = mrsm.attempt_import('sqlalchemy')
2378
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
2333
2379
  if not isinstance(queries, list):
2334
2380
  queries = [queries]
2335
2381
  successes, msgs, results = [], [], []
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: meerschaum
3
- Version: 2.7.6
3
+ Version: 2.7.7
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -318,6 +318,18 @@ Requires-Dist: python-multipart>=0.0.9; extra == "full"
318
318
  Requires-Dist: httpx>=0.27.2; extra == "full"
319
319
  Requires-Dist: httpcore>=1.0.6; extra == "full"
320
320
  Requires-Dist: valkey>=6.0.0; extra == "full"
321
+ Dynamic: author
322
+ Dynamic: author-email
323
+ Dynamic: classifier
324
+ Dynamic: description
325
+ Dynamic: description-content-type
326
+ Dynamic: home-page
327
+ Dynamic: license
328
+ Dynamic: maintainer-email
329
+ Dynamic: project-url
330
+ Dynamic: provides-extra
331
+ Dynamic: requires-python
332
+ Dynamic: summary
321
333
 
322
334
  <img src="https://meerschaum.io/assets/banner_1920x320.png" alt="Meerschaum banner" style="width: 100%"/>
323
335
 
@@ -29,20 +29,21 @@ meerschaum/actions/clear.py,sha256=v_xHn7-Pu7iwFNJ07q9eJt2hqPV7OwNZHUYa9dvixs4,4
29
29
  meerschaum/actions/copy.py,sha256=z_51zEQCKDXnAGfICIGKS3klZ2OTPdiZPJACvpuheDY,6861
30
30
  meerschaum/actions/deduplicate.py,sha256=puYyxeFYEUy1Sd2IOcZB2e6MrNxAZl2bTLmNzFDkCiw,1167
31
31
  meerschaum/actions/delete.py,sha256=H5oP0nE7qIWnFvkuFhZQZQYBVC0IbUevpaQ_2YQKXRA,18559
32
- meerschaum/actions/drop.py,sha256=Hd5h4rrWd7qL2rTqglsTonUsEoH7qQlsfqNFSHGeqr0,2453
32
+ meerschaum/actions/drop.py,sha256=UZg16dPx1o9f-hBrbIiZ6-F2QOTaTAdmFqLaSQla0t8,4434
33
33
  meerschaum/actions/edit.py,sha256=VpP6bJ-i7GR3tRzs_PILcDKcFCBeTUaeXpZDwxJ4fFk,16224
34
+ meerschaum/actions/index.py,sha256=JukgmLYhVkbV4eDgw_WbJwOGadNXQCVJfsGvND8HaEs,1800
34
35
  meerschaum/actions/install.py,sha256=P_M2dnn3sVC2mAn5hwvu4VHWkoh4r9TBUzNcU_Kukpc,7437
35
36
  meerschaum/actions/login.py,sha256=fNgsgkrFCn9wBQJY50SQhz2PwsN_TvEYYHnXK3JG4ig,4206
36
37
  meerschaum/actions/os.py,sha256=dtoppoBhLzW3rLNF0SFovEfNxA4WJWt_9WrOGlS5KbA,2251
37
38
  meerschaum/actions/pause.py,sha256=WI4dQFfjQ6ObWKUzwQ5FrtYPDyEcnxWwval8cSIzzJw,4221
38
39
  meerschaum/actions/python.py,sha256=k3Oo64RhyPd49W8bSjYvm6DOXuqY17NpR6BmfZb3-os,4737
39
- meerschaum/actions/register.py,sha256=By4eCJn-nvrWKs8dPG5GqMClUMm9y_yvIwU_FwRqJXw,14441
40
+ meerschaum/actions/register.py,sha256=GR9Q8ml0S_bKPQDFlXarmzNkx4vMn9Un6UKS5qQN38c,14172
40
41
  meerschaum/actions/reload.py,sha256=gMXeFBGVfyQ7uhKhYf6bLaDMD0fLPcA9BrLBSiuvWIc,508
41
42
  meerschaum/actions/restart.py,sha256=6ffp3-X9eTEgunVSdD41HnOwqp71yjuSAmXJ5j39ONI,3038
42
43
  meerschaum/actions/setup.py,sha256=KkAGWcgwzl_L6A19fTmTX1KtBjW2FwD8QenLjPy0mQQ,3205
43
44
  meerschaum/actions/sh.py,sha256=hSkGNTVqP5dNjhJ64zy3V3VCFPTKnDlH3PxdKdxtkGQ,1990
44
45
  meerschaum/actions/show.py,sha256=T8Ol1o-762cI9rlUzd-8svvwgT4slYXYfOPQETh9Koo,28446
45
- meerschaum/actions/sql.py,sha256=zG-KydYR654RHaF-O4Id3ACCDWeogk2B1R-OFLwFbG0,4515
46
+ meerschaum/actions/sql.py,sha256=PhbBMBq20LL8Yh3q-yqGMe7f8ffmyjbD8q_G8Q0WxZc,4527
46
47
  meerschaum/actions/stack.py,sha256=ZwrCTGJ0x3jjZkRieWcvqasQHYCqNtB1HYvTX-r3Z3g,5996
47
48
  meerschaum/actions/start.py,sha256=NtdVzeB00PQBnDSUSu8ypHmMrZT8_Idmw5BfVZ--Zic,21296
48
49
  meerschaum/actions/stop.py,sha256=5fdUw70YN-yuUWrC-NhA88cxr9FZ5NbssbQ8xXO8nFU,4632
@@ -124,9 +125,9 @@ meerschaum/api/routes/_index.py,sha256=QI6CBo6pI2Zi0a6fJHDjZfiLa9f4okb0BGe3A_JD0
124
125
  meerschaum/api/routes/_jobs.py,sha256=sEt-UtVd5pN-hJgikTvj1oTKJQ2hhNe8XhjkclwOXOE,12568
125
126
  meerschaum/api/routes/_login.py,sha256=tygEp50EVOMgvTG6CEASlShflbtEK8viJ9O07o0lnnE,2434
126
127
  meerschaum/api/routes/_misc.py,sha256=05--9ZVFeaCgZrHER2kA3SYdK4TyfkEXOCjLvPbum-w,2469
127
- meerschaum/api/routes/_pipes.py,sha256=Ix4N46qZ2YIEv7bd8SA9fy1k67n8zFlmPznSeK8micw,21535
128
- meerschaum/api/routes/_plugins.py,sha256=vR6-uTJraY1YEJMuRvds1-xFLB2mexxnp2dJwN_0rVo,6216
129
- meerschaum/api/routes/_users.py,sha256=SfAkZFKrKnGjpzj8SFIKzPemzQJOH3oB72h19EaUvcQ,7204
128
+ meerschaum/api/routes/_pipes.py,sha256=kykrEP6A75WBjn2wP28BLiPVRpwtfd8sVhfOhzjHaBY,22013
129
+ meerschaum/api/routes/_plugins.py,sha256=zzUyCiylJGeoLoa3dNjeRMSspvKfywTVXBpB-ghJ7ls,6228
130
+ meerschaum/api/routes/_users.py,sha256=Gts7gltQc5uxgjfL5pQS_R-cAhkHJZJWBCKGPRS1gmQ,6809
130
131
  meerschaum/api/routes/_version.py,sha256=2t-nw_9IxCVZCNEar0LOwmut2zsClRVHjiOOUx16cu0,825
131
132
  meerschaum/api/routes/_webterm.py,sha256=MenDvWXnZ8CWEmryB46pKohMf0PN6o1xJGZ3LFjxTOc,3909
132
133
  meerschaum/api/tables/__init__.py,sha256=e2aNC0CdlWICTUMx1i9RauF8Pm426J0RZJbsJWv4SWo,482
@@ -143,7 +144,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
143
144
  meerschaum/config/_read_config.py,sha256=RLC3HHi_1ndj7ITVDKLD9_uULY3caGRwSz3ATYE-ixA,15014
144
145
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
145
146
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
146
- meerschaum/config/_version.py,sha256=EePnAdxzJgKO-MgeMY2aPKqoD0YcmJBjbRii3glP9Q4,71
147
+ meerschaum/config/_version.py,sha256=zI3Zi2dLLwmP_AO5KiSMWcMgpQo8y2osXT-ZmhrXGXU,71
147
148
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
148
149
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
150
  meerschaum/config/stack/__init__.py,sha256=2UukC0Lmk-aVL1o1qXzumqmuIrw3vu9fD7iCuz4XD4I,10544
@@ -163,26 +164,26 @@ meerschaum/connectors/api/_fetch.py,sha256=Khq9AFr1nk8Dsmcedb77aWhAuHw0JGgVeahDG
163
164
  meerschaum/connectors/api/_jobs.py,sha256=N5lpHFGG10jlVgaJeWAOTuLBQw3AdgjXsEPpp1YwZQE,11270
164
165
  meerschaum/connectors/api/_login.py,sha256=5GsD-B214vr5EYfM3XrTUs1sTFApxZA-9dNxq8oNSyg,2050
165
166
  meerschaum/connectors/api/_misc.py,sha256=XK0LLexNUEKZjAAqoJ-9oOgwLlMdwxSOvcpqO5NuOas,1083
166
- meerschaum/connectors/api/_pipes.py,sha256=hk6Qj3tgog8naxl0Y2l6TfJsG4AZmel3bFIaLxuy0XY,21248
167
+ meerschaum/connectors/api/_pipes.py,sha256=9i3KZ0S9960AaVYMlecxEEMKq8nTvT_Y3jNaFkoRU7E,21739
167
168
  meerschaum/connectors/api/_plugins.py,sha256=z04tPjfZZWwa7T60mogZH3X3wDmeLdnoN5Oh8m_YsU8,5217
168
169
  meerschaum/connectors/api/_request.py,sha256=Wc4Y70t0VxEj3_ch5fAeeoSAeFMuRnyNLOV-aUFInjY,6996
169
170
  meerschaum/connectors/api/_uri.py,sha256=HWxqGx4R1cHZ3ywy9Ro9ePbFxxusw4RLaC3hpGt9Z6I,1469
170
171
  meerschaum/connectors/api/_users.py,sha256=kzb7ENgXwQ19OJYKOuuWzx2rwVuUZCly9dTnyvVuT2Q,5275
171
172
  meerschaum/connectors/plugin/PluginConnector.py,sha256=aQ1QaB7MordCFimZqoGLb0R12PfDUN_nWks2J5mzeAs,2084
172
173
  meerschaum/connectors/plugin/__init__.py,sha256=pwF7TGY4WNz2_HaVdmK4rPQ9ZwTOEuPHgzOqsGcoXJw,198
173
- meerschaum/connectors/sql/_SQLConnector.py,sha256=uyGoCshgL-u6j3VbCDiBJn8LkVuveLeE62y8MWxSo24,12015
174
+ meerschaum/connectors/sql/_SQLConnector.py,sha256=fAYXt2BrW6PmCJyEGRGfKjY0IffLT-5wrxCT31H4vdE,12137
174
175
  meerschaum/connectors/sql/__init__.py,sha256=3cqYiDkVasn7zWdtOTAZbT4bo95AuvGOmDD2TkaAxtw,205
175
176
  meerschaum/connectors/sql/_cli.py,sha256=VqAHkdXC0HVXuHaZik2q-cTVmIsuS4DWMcPMJPP_g-Q,4514
176
- meerschaum/connectors/sql/_create_engine.py,sha256=RzJz4Qc43P4JS6tkgVvAhbdjEejIepWbxymIfVZ44Nk,10555
177
- meerschaum/connectors/sql/_fetch.py,sha256=GOU1JnPOBgaI3dDr0JdAmfTMPLIMM0EFHrsqDgDIO74,14070
178
- meerschaum/connectors/sql/_instance.py,sha256=mmZnodccuCqmZN-UnznnFZ7JodxtT47kwjDDaDKgwUg,6274
179
- meerschaum/connectors/sql/_pipes.py,sha256=M0VQqkwd9sSyyttyKxonjoGi61guVc-oa1KiuWS7sd8,122315
180
- meerschaum/connectors/sql/_plugins.py,sha256=wbxcNxqTtjfDsxPvdVGTllasYf6NHHzODaQ72hEUSBQ,8135
181
- meerschaum/connectors/sql/_sql.py,sha256=brYLHJFt6BYlFYUhK--4okkll7UTkRR_PnvjjIJvXNY,41289
182
- meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
183
- meerschaum/connectors/sql/_users.py,sha256=FJjYeJGhr-TDHziNc6p_5mupGRtGjezKPIYgHFEVSnY,9956
177
+ meerschaum/connectors/sql/_create_engine.py,sha256=VfGtqF2hDNbgl2g-ZPcz28gKkfL6UOk4rKxUB4tKHdU,10567
178
+ meerschaum/connectors/sql/_fetch.py,sha256=5zkyzTrH0atsXmUduPw9sY1CPoX_l8_rUo-lzgBS49U,13907
179
+ meerschaum/connectors/sql/_instance.py,sha256=KUTDrWWD9uf8G94_n_VM_J0HdggXQofJbekZ4errypw,6310
180
+ meerschaum/connectors/sql/_pipes.py,sha256=gMRHe8WrdO60YzTV2j0pgyr8U4CPC1Mujn8NaohpTe0,127996
181
+ meerschaum/connectors/sql/_plugins.py,sha256=OVEdZ_UHTi-x5sF-5lu2TmR9ONxddp6SwDOmFo5TpU8,8051
182
+ meerschaum/connectors/sql/_sql.py,sha256=R57E2-QVeCEzvz4j85b_tmYvkXTUSvCDB40LuocrAiw,41247
183
+ meerschaum/connectors/sql/_uri.py,sha256=BFzu5pjlbL3kxLH13vHWlpKGYTPfg8wuA2j58O9NsCM,3440
184
+ meerschaum/connectors/sql/_users.py,sha256=Dbe79FV07ms5QVHwp68cruDzkGeKR4cE1-xc9Gza8Hs,9932
184
185
  meerschaum/connectors/sql/tools.py,sha256=jz8huOaRCwGlYdtGfAqAh7SoK8uydYBrasKQba9FT38,187
185
- meerschaum/connectors/sql/tables/__init__.py,sha256=e2dALTtThqbrq0soMNQ9QwgccyfTAjOrFkEClstLp3A,9001
186
+ meerschaum/connectors/sql/tables/__init__.py,sha256=53EeJsvmGjj68SpSShdt6kyLuk5Md5O8DnvWC1ra3u8,8876
186
187
  meerschaum/connectors/sql/tables/types.py,sha256=Jc_MTHIBM-KHpQt__Lckp39CeOo7tGOiAk5faDx-znY,1573
187
188
  meerschaum/connectors/valkey/_ValkeyConnector.py,sha256=xHld4OCnt0SXmAWH8Yintb3931F-MEgXfWerhTthsXc,15849
188
189
  meerschaum/connectors/valkey/__init__.py,sha256=jkVutsygQCvGPLN17cP6wHAjHajxVycnQJbm2eVMuY0,187
@@ -191,18 +192,19 @@ meerschaum/connectors/valkey/_pipes.py,sha256=sjjO1vehNCkN_2bsqQKy81WWWrOg8a8Elu
191
192
  meerschaum/connectors/valkey/_plugins.py,sha256=ZqiEW4XZCOpw4G8DUK2IKY6Qrph4mYfTjgXWimgakYY,6267
192
193
  meerschaum/connectors/valkey/_users.py,sha256=AS1vLarrkDA9yPK644GWwRiQiTZVa9x3nlLpyntq40g,7730
193
194
  meerschaum/core/__init__.py,sha256=tjASW10n9uLV6bYhcwP4rggh-ESXSJzgxpSBbVsuISs,251
194
- meerschaum/core/Pipe/__init__.py,sha256=NqytRbY1QQM_xDcBDqhcpcVPuEdDRWi26Ou3KuoAseM,18902
195
- meerschaum/core/Pipe/_attributes.py,sha256=ionfZkDOJmcbcHT44cnzbSKcjoBV4_IHj6fdrAi6Jnc,22450
195
+ meerschaum/core/Pipe/__init__.py,sha256=OG2oKBfNmwGbdCI-m8wgdmFKflFbMkziP-YzAiTLww8,19304
196
+ meerschaum/core/Pipe/_attributes.py,sha256=ZUfgN7Vk8liu_lbF4nORtCjFlJB7LBNhrgZdgmEqTpU,22215
196
197
  meerschaum/core/Pipe/_bootstrap.py,sha256=gTNGh5e2LmTMrgIpHqrVaL60uPKWCphhsuz8j-lJ2HI,7348
197
198
  meerschaum/core/Pipe/_clear.py,sha256=LghXabgyyc1tD7FNQrh9ExT71ipcg2poM9FDA3k9e4M,2230
198
199
  meerschaum/core/Pipe/_copy.py,sha256=YDclAapf_spm9phpFr4-CALyYyw7nUsyKyiaLM1cnm4,2965
199
200
  meerschaum/core/Pipe/_data.py,sha256=HOvKlpD9NiBg599mSH1lzUQ_2g8-PsnMbGzMTOJx81E,24047
200
201
  meerschaum/core/Pipe/_deduplicate.py,sha256=xthUdsDxGO2t3m0XGDm9K3F6dpaZoemtjNi8gyKm0e0,10177
201
202
  meerschaum/core/Pipe/_delete.py,sha256=1geNp9BgrocXP1gt76dMbnlJWKYFMuSNqPFA4K4-hXE,2118
202
- meerschaum/core/Pipe/_drop.py,sha256=qj5L0obDh2_dKAg7LD3WLI3_L0Q5YECTfTmPc8zZUxI,1135
203
+ meerschaum/core/Pipe/_drop.py,sha256=KDfJVz2aGjHUE1Jkmj7Ej4ICPR5xPiuhyhgRO7Lu9d4,3299
203
204
  meerschaum/core/Pipe/_dtypes.py,sha256=-D3Dr64rSX7twuGNieZOYJOIdEKTknhBFHPmwj_QSQw,4274
204
205
  meerschaum/core/Pipe/_edit.py,sha256=HrKWe9vhqKaNOjOcJzW5BNbaUBPIbgNAhJEK8OMsy7c,8416
205
206
  meerschaum/core/Pipe/_fetch.py,sha256=dI2WFqaXVSi-xhgRcpp8Dh1g_ALgm5w6umvOj1cyCFk,5368
207
+ meerschaum/core/Pipe/_index.py,sha256=cYgaVwBVfAYxJBZ6j6MXDqOxnOrD_QnYi33_kIwy_FQ,1944
206
208
  meerschaum/core/Pipe/_register.py,sha256=Sd5xaAW8H7uLTIoommcKb-6kHPRuHJLWNSbPnt2UbvA,2240
207
209
  meerschaum/core/Pipe/_show.py,sha256=nG50y8eBT9TVuKkRgAKtNDNIxysJvMNxfu__lkL1F9k,1352
208
210
  meerschaum/core/Pipe/_sync.py,sha256=Bl-DJTuo-iZvPFlSeTbSjje36NeyUTW0yVcJZLEQMtA,36258
@@ -228,7 +230,7 @@ meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
228
230
  meerschaum/utils/process.py,sha256=9O8PPPJjY9Q5W2f39I3B3lFU6TlSiRiI3bgrzdOOyOw,7843
229
231
  meerschaum/utils/prompt.py,sha256=qbS8l0DfD6eRB9_RRbfkKLPs3m-Hw2zXSeQCf0TDJgU,19370
230
232
  meerschaum/utils/schedule.py,sha256=bUsaCO9CGn2vJO5UvoISScHDDGIiMdCPHxpTFmu7vwE,11531
231
- meerschaum/utils/sql.py,sha256=JqOfWCHWAlm1fr7mtZMquoGCOnPyIlX5LDshcRFDgdo,77993
233
+ meerschaum/utils/sql.py,sha256=3UAC4KnH2tl4bojvFCwIV2uQqdV9RKxwXZRsmfjBfWM,79390
232
234
  meerschaum/utils/threading.py,sha256=awjbVL_QR6G-o_9Qk85utac9cSdqkiC8tQSdERCdrG8,2814
233
235
  meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
234
236
  meerschaum/utils/warnings.py,sha256=n-phr3BftNNgyPnvnXC_VMSjtCvjiCZ-ewmVfcROhkc,6611
@@ -240,7 +242,7 @@ meerschaum/utils/daemon/StdinFile.py,sha256=qdZ8E_RSOkURypwnS50mWeyWyRig1bAY9tKW
240
242
  meerschaum/utils/daemon/__init__.py,sha256=ziRPyu_IM3l7Xd58y3Uvt0fZLoirJ9nuboFIxxult6c,8741
241
243
  meerschaum/utils/daemon/_names.py,sha256=d2ZwTxBoTAqXZkCfZ5LuX2XrkQmLNUq1OTlUqfoH5dA,4515
242
244
  meerschaum/utils/dtypes/__init__.py,sha256=c6DoYyCbWvMdRapBRKP5UJYLRUWtkTIlC_8HRzXFh2s,12166
243
- meerschaum/utils/dtypes/sql.py,sha256=Ew-ULDAJipzWpq_W-3fGGgTORhtoIqRZzZcS7k0L4B4,19582
245
+ meerschaum/utils/dtypes/sql.py,sha256=4rd33hXyyzdY51oCMch97z2DPFz_UUd2eoyiFr89VOc,19608
244
246
  meerschaum/utils/formatting/__init__.py,sha256=6MAIpkLG7inFvPGRZqV8EpVRmMB3BGQsgAh5KBP4tsg,15528
245
247
  meerschaum/utils/formatting/_jobs.py,sha256=izsqPJhTtUkXUUtWnbXtReYsUYwulXtci3pBj72Ne64,6637
246
248
  meerschaum/utils/formatting/_pipes.py,sha256=OISJmmFiilaDbZxkiXck_g39MnnTfk_fJJyJ-YInvXA,19559
@@ -251,11 +253,11 @@ meerschaum/utils/packages/_packages.py,sha256=_xODMSz1FAcx3XHrn9RXUhGJ1zg-QKsVu9
251
253
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
252
254
  meerschaum/utils/venv/_Venv.py,sha256=gc1TCeAj-kTZbQFAT9xl1bi4HXFV5ApT0dPOJfxwr78,3748
253
255
  meerschaum/utils/venv/__init__.py,sha256=vVU9vj7t-HTiRU--ReQZ9kRLesVqcHnSJDbmcfC-Dzg,27030
254
- meerschaum-2.7.6.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
- meerschaum-2.7.6.dist-info/METADATA,sha256=fWChi6YW7sc_kNoXq7H3ryE-RdPH0fSR5UsFWQfMhps,24227
256
- meerschaum-2.7.6.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
- meerschaum-2.7.6.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
258
- meerschaum-2.7.6.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
- meerschaum-2.7.6.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
- meerschaum-2.7.6.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
- meerschaum-2.7.6.dist-info/RECORD,,
256
+ meerschaum-2.7.7.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
257
+ meerschaum-2.7.7.dist-info/METADATA,sha256=8zR70RhmNHVVh2Lt91DYBmEJ6OVR_kNb4EFok9wpEeU,24489
258
+ meerschaum-2.7.7.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
259
+ meerschaum-2.7.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
260
+ meerschaum-2.7.7.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
261
+ meerschaum-2.7.7.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
262
+ meerschaum-2.7.7.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
263
+ meerschaum-2.7.7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.7.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5