meerschaum 2.6.17__py3-none-any.whl → 2.7.0rc1__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.
Files changed (31) hide show
  1. meerschaum/actions/delete.py +65 -69
  2. meerschaum/actions/install.py +1 -2
  3. meerschaum/config/_default.py +1 -1
  4. meerschaum/config/_paths.py +2 -1
  5. meerschaum/config/_version.py +1 -1
  6. meerschaum/connectors/api/_pipes.py +4 -3
  7. meerschaum/connectors/sql/_pipes.py +63 -25
  8. meerschaum/connectors/sql/_sql.py +6 -1
  9. meerschaum/connectors/valkey/_pipes.py +12 -1
  10. meerschaum/core/Pipe/__init__.py +23 -13
  11. meerschaum/core/Pipe/_attributes.py +19 -0
  12. meerschaum/core/Pipe/_dtypes.py +1 -1
  13. meerschaum/core/Pipe/_sync.py +61 -21
  14. meerschaum/core/Pipe/_verify.py +8 -7
  15. meerschaum/plugins/_Plugin.py +11 -14
  16. meerschaum/utils/daemon/Daemon.py +18 -11
  17. meerschaum/utils/dataframe.py +175 -13
  18. meerschaum/utils/dtypes/__init__.py +103 -14
  19. meerschaum/utils/dtypes/sql.py +26 -0
  20. meerschaum/utils/misc.py +8 -8
  21. meerschaum/utils/sql.py +64 -11
  22. meerschaum/utils/venv/_Venv.py +4 -4
  23. meerschaum/utils/venv/__init__.py +33 -13
  24. {meerschaum-2.6.17.dist-info → meerschaum-2.7.0rc1.dist-info}/METADATA +1 -1
  25. {meerschaum-2.6.17.dist-info → meerschaum-2.7.0rc1.dist-info}/RECORD +31 -31
  26. {meerschaum-2.6.17.dist-info → meerschaum-2.7.0rc1.dist-info}/LICENSE +0 -0
  27. {meerschaum-2.6.17.dist-info → meerschaum-2.7.0rc1.dist-info}/NOTICE +0 -0
  28. {meerschaum-2.6.17.dist-info → meerschaum-2.7.0rc1.dist-info}/WHEEL +0 -0
  29. {meerschaum-2.6.17.dist-info → meerschaum-2.7.0rc1.dist-info}/entry_points.txt +0 -0
  30. {meerschaum-2.6.17.dist-info → meerschaum-2.7.0rc1.dist-info}/top_level.txt +0 -0
  31. {meerschaum-2.6.17.dist-info → meerschaum-2.7.0rc1.dist-info}/zip-safe +0 -0
meerschaum/utils/sql.py CHANGED
@@ -108,24 +108,30 @@ update_queries = {
108
108
  {cols_equal_values}
109
109
  """,
110
110
  'mssql': """
111
+ {with_temp_date_bounds}
111
112
  MERGE {target_table_name} f
112
- USING (SELECT DISTINCT {patch_cols_str} FROM {patch_table_name}) p
113
+ USING (SELECT {patch_cols_str} FROM {patch_table_name}) p
113
114
  ON {and_subquery_f}
114
115
  AND {date_bounds_subquery}
115
116
  WHEN MATCHED THEN
116
117
  UPDATE
117
118
  {sets_subquery_none};
118
119
  """,
119
- 'mssql-upsert': """
120
+ 'mssql-upsert': [
121
+ "{identity_insert_on}",
122
+ """
123
+ {with_temp_date_bounds}
120
124
  MERGE {target_table_name} f
121
- USING (SELECT DISTINCT {patch_cols_str} FROM {patch_table_name}) p
125
+ USING (SELECT {patch_cols_str} FROM {patch_table_name}) p
122
126
  ON {and_subquery_f}
123
127
  AND {date_bounds_subquery}
124
128
  {when_matched_update_sets_subquery_none}
125
129
  WHEN NOT MATCHED THEN
126
130
  INSERT ({patch_cols_str})
127
131
  VALUES ({patch_cols_prefixed_str});
128
- """,
132
+ """,
133
+ "{identity_insert_off}",
134
+ ],
129
135
  'oracle': """
130
136
  MERGE INTO {target_table_name} f
131
137
  USING (SELECT DISTINCT {patch_cols_str} FROM {patch_table_name}) p
@@ -1056,7 +1062,7 @@ def get_sqlalchemy_table(
1056
1062
  connector.metadata,
1057
1063
  **table_kwargs
1058
1064
  )
1059
- except sqlalchemy.exc.NoSuchTableError as e:
1065
+ except sqlalchemy.exc.NoSuchTableError:
1060
1066
  warn(f"Table '{truncated_table_name}' does not exist in '{connector}'.")
1061
1067
  return None
1062
1068
  return tables[truncated_table_name]
@@ -1383,6 +1389,7 @@ def get_update_queries(
1383
1389
  datetime_col: Optional[str] = None,
1384
1390
  schema: Optional[str] = None,
1385
1391
  patch_schema: Optional[str] = None,
1392
+ identity_insert: bool = False,
1386
1393
  debug: bool = False,
1387
1394
  ) -> List[str]:
1388
1395
  """
@@ -1420,6 +1427,10 @@ def get_update_queries(
1420
1427
  If provided, use this schema when quoting the patch table.
1421
1428
  Defaults to `schema`.
1422
1429
 
1430
+ identity_insert: bool, default False
1431
+ If `True`, include `SET IDENTITY_INSERT` queries before and after the update queries.
1432
+ Only applies for MSSQL upserts.
1433
+
1423
1434
  debug: bool, default False
1424
1435
  Verbosity toggle.
1425
1436
 
@@ -1554,17 +1565,36 @@ def get_update_queries(
1554
1565
  ) for c_name, c_type in join_cols_types
1555
1566
  ])
1556
1567
 
1568
+ skip_query_val = ""
1557
1569
  target_table_name = sql_item_name(target, flavor, schema)
1558
1570
  patch_table_name = sql_item_name(patch, flavor, patch_schema)
1559
1571
  dt_col_name = sql_item_name(datetime_col, flavor, None) if datetime_col else None
1572
+ date_bounds_table = patch_table_name if flavor != 'mssql' else '[date_bounds]'
1573
+ min_dt_col_name = f"MIN({dt_col_name})" if flavor != 'mssql' else '[Min_dt]'
1574
+ max_dt_col_name = f"MAX({dt_col_name})" if flavor != 'mssql' else '[Max_dt]'
1560
1575
  date_bounds_subquery = (
1561
1576
  f"""
1562
- f.{dt_col_name} >= (SELECT MIN({dt_col_name}) FROM {patch_table_name})
1563
- AND f.{dt_col_name} <= (SELECT MAX({dt_col_name}) FROM {patch_table_name})
1577
+ f.{dt_col_name} >= (SELECT {min_dt_col_name} FROM {date_bounds_table})
1578
+ AND f.{dt_col_name} <= (SELECT {max_dt_col_name} FROM {date_bounds_table})
1564
1579
  """
1565
1580
  if datetime_col
1566
1581
  else "1 = 1"
1567
1582
  )
1583
+ with_temp_date_bounds = f"""
1584
+ WITH [date_bounds] AS (
1585
+ SELECT MIN({dt_col_name}) AS {min_dt_col_name}, MAX({dt_col_name}) AS {max_dt_col_name}
1586
+ FROM {patch_table_name}
1587
+ )""" if datetime_col else ""
1588
+ identity_insert_on = (
1589
+ f"SET IDENTITY_INSERT {target_table_name} ON"
1590
+ if identity_insert
1591
+ else skip_query_val
1592
+ )
1593
+ identity_insert_off = (
1594
+ f"SET IDENTITY_INSERT {target_table_name} OFF"
1595
+ if identity_insert
1596
+ else skip_query_val
1597
+ )
1568
1598
 
1569
1599
  ### NOTE: MSSQL upserts must exclude the update portion if only upserting indices.
1570
1600
  when_matched_update_sets_subquery_none = "" if not value_cols else (
@@ -1585,7 +1615,7 @@ def get_update_queries(
1585
1615
  )
1586
1616
  ignore = "IGNORE " if not value_cols else ""
1587
1617
 
1588
- return [
1618
+ formatted_queries = [
1589
1619
  base_query.format(
1590
1620
  sets_subquery_none=sets_subquery('', 'p.'),
1591
1621
  sets_subquery_none_excluded=sets_subquery('', 'EXCLUDED.'),
@@ -1604,10 +1634,16 @@ def get_update_queries(
1604
1634
  cols_equal_values=cols_equal_values,
1605
1635
  on_duplicate_key_update=on_duplicate_key_update,
1606
1636
  ignore=ignore,
1637
+ with_temp_date_bounds=with_temp_date_bounds,
1638
+ identity_insert_on=identity_insert_on,
1639
+ identity_insert_off=identity_insert_off,
1607
1640
  )
1608
1641
  for base_query in base_queries
1609
1642
  ]
1610
1643
 
1644
+ ### NOTE: Allow for skipping some queries.
1645
+ return [query for query in formatted_queries if query]
1646
+
1611
1647
 
1612
1648
  def get_null_replacement(typ: str, flavor: str) -> str:
1613
1649
  """
@@ -1857,7 +1893,17 @@ def _get_create_table_query_from_dtypes(
1857
1893
 
1858
1894
  table_name = sql_item_name(new_table, schema=schema, flavor=flavor)
1859
1895
  primary_key_name = sql_item_name(primary_key, flavor) if primary_key else None
1896
+ primary_key_constraint_name = (
1897
+ sql_item_name(f'PK_{new_table}', flavor, None)
1898
+ if primary_key
1899
+ else None
1900
+ )
1860
1901
  datetime_column_name = sql_item_name(datetime_column, flavor) if datetime_column else None
1902
+ primary_key_clustered = (
1903
+ "CLUSTERED"
1904
+ if not datetime_column or datetime_column == primary_key
1905
+ else "NONCLUSTERED"
1906
+ )
1861
1907
  query = f"CREATE TABLE {table_name} ("
1862
1908
  if primary_key:
1863
1909
  col_db_type = cols_types[0][1]
@@ -1877,6 +1923,8 @@ def _get_create_table_query_from_dtypes(
1877
1923
  query += f"\n {col_name} {col_db_type} {auto_increment_str} PRIMARY KEY,"
1878
1924
  elif flavor == 'timescaledb' and datetime_column and datetime_column != primary_key:
1879
1925
  query += f"\n {col_name} {col_db_type}{auto_increment_str} NOT NULL,"
1926
+ elif flavor == 'mssql':
1927
+ query += f"\n {col_name} {col_db_type}{auto_increment_str} NOT NULL,"
1880
1928
  else:
1881
1929
  query += f"\n {col_name} {col_db_type} PRIMARY KEY{auto_increment_str} NOT NULL,"
1882
1930
 
@@ -1892,6 +1940,10 @@ def _get_create_table_query_from_dtypes(
1892
1940
  and datetime_column != primary_key
1893
1941
  ):
1894
1942
  query += f"\n PRIMARY KEY({datetime_column_name}, {primary_key_name}),"
1943
+
1944
+ if flavor == 'mssql' and primary_key:
1945
+ query += f"\n CONSTRAINT {primary_key_constraint_name} PRIMARY KEY {primary_key_clustered} ({primary_key_name}),"
1946
+
1895
1947
  query = query[:-1]
1896
1948
  query += "\n)"
1897
1949
 
@@ -1917,7 +1969,7 @@ def _get_create_table_query_from_cte(
1917
1969
  create_cte_name = sql_item_name(create_cte, flavor, None)
1918
1970
  new_table_name = sql_item_name(new_table, flavor, schema)
1919
1971
  primary_key_constraint_name = (
1920
- sql_item_name(f'pk_{new_table}', flavor, None)
1972
+ sql_item_name(f'PK_{new_table}', flavor, None)
1921
1973
  if primary_key
1922
1974
  else None
1923
1975
  )
@@ -1926,6 +1978,7 @@ def _get_create_table_query_from_cte(
1926
1978
  if primary_key
1927
1979
  else None
1928
1980
  )
1981
+ primary_key_clustered = "CLUSTERED" if not datetime_column else "NONCLUSTERED"
1929
1982
  datetime_column_name = (
1930
1983
  sql_item_name(datetime_column, flavor)
1931
1984
  if datetime_column
@@ -1933,7 +1986,7 @@ def _get_create_table_query_from_cte(
1933
1986
  )
1934
1987
  if flavor in ('mssql',):
1935
1988
  query = query.lstrip()
1936
- if 'with ' in query.lower():
1989
+ if query.lower().startswith('with '):
1937
1990
  final_select_ix = query.lower().rfind('select')
1938
1991
  create_table_query = (
1939
1992
  query[:final_select_ix].rstrip() + ',\n'
@@ -1951,7 +2004,7 @@ def _get_create_table_query_from_cte(
1951
2004
 
1952
2005
  alter_type_query = f"""
1953
2006
  ALTER TABLE {new_table_name}
1954
- ADD CONSTRAINT {primary_key_constraint_name} PRIMARY KEY ({primary_key_name})
2007
+ ADD CONSTRAINT {primary_key_constraint_name} PRIMARY KEY {primary_key_clustered} ({primary_key_name})
1955
2008
  """
1956
2009
  elif flavor in (None,):
1957
2010
  create_table_query = f"""
@@ -34,10 +34,10 @@ class Venv:
34
34
  """
35
35
 
36
36
  def __init__(
37
- self,
38
- venv: Union[str, 'meerschaum.plugins.Plugin', None] = 'mrsm',
39
- debug: bool = False,
40
- ) -> None:
37
+ self,
38
+ venv: Union[str, 'meerschaum.plugins.Plugin', None] = 'mrsm',
39
+ debug: bool = False,
40
+ ) -> None:
41
41
  from meerschaum.utils.venv import activate_venv, deactivate_venv, active_venvs
42
42
  ### For some weird threading issue,
43
43
  ### we can't use `isinstance` here.
@@ -65,10 +65,9 @@ def activate_venv(
65
65
  if active_venvs_order and active_venvs_order[0] == venv:
66
66
  if not force:
67
67
  return True
68
- import sys, platform, os
68
+ import sys
69
+ import os
69
70
  from meerschaum.config._paths import VIRTENV_RESOURCES_PATH
70
- if debug:
71
- from meerschaum.utils.debug import dprint
72
71
  if venv is not None:
73
72
  init_venv(venv=venv, debug=debug)
74
73
  with LOCKS['active_venvs']:
@@ -80,12 +79,18 @@ def activate_venv(
80
79
  else:
81
80
  threads_active_venvs[thread_id][venv] += 1
82
81
 
83
- target = venv_target_path(venv, debug=debug).as_posix()
82
+ target_path = venv_target_path(venv, debug=debug, allow_nonexistent=True)
83
+ if not target_path.exists():
84
+ init_venv(venv=venv, force=True, debug=debug)
85
+ if not target_path.exists():
86
+ raise EnvironmentError(f"Could not activate virtual environment '{venv}'.")
87
+ target = target_path.as_posix()
88
+
84
89
  if venv in active_venvs_order:
85
90
  sys.path.remove(target)
86
91
  try:
87
92
  active_venvs_order.remove(venv)
88
- except Exception as e:
93
+ except Exception:
89
94
  pass
90
95
  if venv is not None:
91
96
  sys.path.insert(0, target)
@@ -96,7 +101,7 @@ def activate_venv(
96
101
  sys.path.insert(0, target)
97
102
  try:
98
103
  active_venvs_order.insert(0, venv)
99
- except Exception as e:
104
+ except Exception:
100
105
  pass
101
106
 
102
107
  return True
@@ -245,7 +250,7 @@ def verify_venv(
245
250
  print(f"Unable to remove symlink {current_python_in_venv_path}:\n{e}")
246
251
  try:
247
252
  make_symlink(current_python_in_sys_path, current_python_in_venv_path)
248
- except Exception as e:
253
+ except Exception:
249
254
  print(
250
255
  f"Unable to create symlink {current_python_in_venv_path} "
251
256
  + f"to {current_python_in_sys_path}."
@@ -302,7 +307,7 @@ def verify_venv(
302
307
  if not real_path.exists():
303
308
  try:
304
309
  python_path.unlink()
305
- except Exception as e:
310
+ except Exception:
306
311
  pass
307
312
  init_venv(venv, verify=False, force=True, debug=debug)
308
313
  if not python_path.exists():
@@ -313,7 +318,7 @@ def verify_venv(
313
318
 
314
319
  try:
315
320
  python_path.unlink()
316
- except Exception as e:
321
+ except Exception:
317
322
  pass
318
323
  success, msg = make_symlink(real_path, python_path)
319
324
  if not success:
@@ -366,9 +371,10 @@ def init_venv(
366
371
  from contextlib import redirect_stdout, redirect_stderr
367
372
  import sys, platform, os, pathlib, shutil
368
373
  from meerschaum.config.static import STATIC_CONFIG
369
- from meerschaum.config._paths import VIRTENV_RESOURCES_PATH
374
+ from meerschaum.config._paths import VIRTENV_RESOURCES_PATH, VENVS_CACHE_RESOURCES_PATH
370
375
  from meerschaum.utils.packages import is_uv_enabled
371
376
  venv_path = VIRTENV_RESOURCES_PATH / venv
377
+ vtp = venv_target_path(venv=venv, allow_nonexistent=True, debug=debug)
372
378
  docker_home_venv_path = pathlib.Path('/home/meerschaum/venvs/mrsm')
373
379
 
374
380
  runtime_env_var = STATIC_CONFIG['environment']['runtime']
@@ -397,6 +403,11 @@ def init_venv(
397
403
  virtualenv = None
398
404
 
399
405
  _venv_success = False
406
+ temp_vtp = VENVS_CACHE_RESOURCES_PATH / str(venv)
407
+ rename_vtp = vtp.exists()
408
+
409
+ if rename_vtp:
410
+ vtp.rename(temp_vtp)
400
411
 
401
412
  if uv is not None:
402
413
  _venv_success = run_python_package(
@@ -431,6 +442,8 @@ def init_venv(
431
442
  "Failed to import `venv` or `virtualenv`! "
432
443
  + "Please install `virtualenv` via pip then restart Meerschaum."
433
444
  )
445
+ if rename_vtp and temp_vtp.exists():
446
+ temp_vtp.rename(vtp)
434
447
  return False
435
448
 
436
449
  tried_virtualenv = True
@@ -448,7 +461,7 @@ def init_venv(
448
461
  if bin_path.exists():
449
462
  try:
450
463
  shutil.rmtree(bin_path)
451
- except Exception as e:
464
+ except Exception:
452
465
  import traceback
453
466
  traceback.print_exc()
454
467
  virtualenv.cli_run([venv_path.as_posix()])
@@ -464,13 +477,19 @@ def init_venv(
464
477
  # shutil.move(local_bin_path, bin_path)
465
478
  shutil.rmtree(local_bin_path)
466
479
 
467
- except Exception as e:
480
+ except Exception:
468
481
  import traceback
469
482
  traceback.print_exc()
483
+ if rename_vtp and temp_vtp.exists():
484
+ temp_vtp.rename(vtp)
470
485
  return False
471
486
  if verify:
472
487
  verify_venv(venv, debug=debug)
473
488
  verified_venvs.add(venv)
489
+
490
+ if rename_vtp and temp_vtp.exists():
491
+ temp_vtp.rename(vtp)
492
+
474
493
  return True
475
494
 
476
495
 
@@ -479,7 +498,8 @@ def venv_executable(venv: Optional[str] = 'mrsm') -> str:
479
498
  The Python interpreter executable for a given virtual environment.
480
499
  """
481
500
  from meerschaum.config._paths import VIRTENV_RESOURCES_PATH
482
- import sys, platform, os
501
+ import sys
502
+ import platform
483
503
  return (
484
504
  sys.executable if venv is None
485
505
  else str(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.6.17
3
+ Version: 2.7.0rc1
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -28,10 +28,10 @@ meerschaum/actions/bootstrap.py,sha256=08o3PchrJ_Rv8IP30ZBH1Ovk-b8qFBGPedCjF7jRz
28
28
  meerschaum/actions/clear.py,sha256=tMacHFv8btWpkNnXHtKDOMiCDNhGb5S6CJhCDIrrNDk,4914
29
29
  meerschaum/actions/copy.py,sha256=NHoC9cHJGgoox8L8B0afbu8lAxEh_MKa_pNeVunZsl0,6824
30
30
  meerschaum/actions/deduplicate.py,sha256=puYyxeFYEUy1Sd2IOcZB2e6MrNxAZl2bTLmNzFDkCiw,1167
31
- meerschaum/actions/delete.py,sha256=7hW4Ff_WSczW8If-EEDbEUU0U0XzV3fVbFb9gED4S9Q,19032
31
+ meerschaum/actions/delete.py,sha256=H5oP0nE7qIWnFvkuFhZQZQYBVC0IbUevpaQ_2YQKXRA,18559
32
32
  meerschaum/actions/drop.py,sha256=Hd5h4rrWd7qL2rTqglsTonUsEoH7qQlsfqNFSHGeqr0,2453
33
33
  meerschaum/actions/edit.py,sha256=SN-SnfFkhX0-pymAEofi9NDnq4hhia6gkKqr-zTn4I8,16222
34
- meerschaum/actions/install.py,sha256=jdhOrR_KlvinTKr0YJNkUHsnh5EY6OzA7cRq0Vnp1oU,7494
34
+ meerschaum/actions/install.py,sha256=P_M2dnn3sVC2mAn5hwvu4VHWkoh4r9TBUzNcU_Kukpc,7437
35
35
  meerschaum/actions/login.py,sha256=fNgsgkrFCn9wBQJY50SQhz2PwsN_TvEYYHnXK3JG4ig,4206
36
36
  meerschaum/actions/os.py,sha256=dtoppoBhLzW3rLNF0SFovEfNxA4WJWt_9WrOGlS5KbA,2251
37
37
  meerschaum/actions/pause.py,sha256=WI4dQFfjQ6ObWKUzwQ5FrtYPDyEcnxWwval8cSIzzJw,4221
@@ -132,18 +132,18 @@ meerschaum/api/routes/_webterm.py,sha256=gow_xCsojGI37ZZDVfv2gdM18r_H2b2MR0ovFuG
132
132
  meerschaum/api/tables/__init__.py,sha256=e2aNC0CdlWICTUMx1i9RauF8Pm426J0RZJbsJWv4SWo,482
133
133
  meerschaum/config/__init__.py,sha256=5ZBq71P9t3nb74r5CGvMfNuauPscfegBX-nkaAUi5C4,11541
134
134
  meerschaum/config/_dash.py,sha256=BJHl4xMrQB-YHUEU7ldEW8q_nOPoIRSOqLrfGElc6Dw,187
135
- meerschaum/config/_default.py,sha256=Anzz-o8cVCNcf2pjV_1RKaLa4Jx6ETNdCcEy74a_E5k,5651
135
+ meerschaum/config/_default.py,sha256=3HhlLLceFbf7zn3sciIr0DWGynuHpzRmkmXeTyT9J9s,5652
136
136
  meerschaum/config/_edit.py,sha256=M9yX_SDD24gV5kWITZpy7p9AWTizJsIAGWAs3WZx-Ws,9087
137
137
  meerschaum/config/_environment.py,sha256=Vv4DLDfc2vKLbCLsMvkQDj77K4kEvHKEBmUBo-wCrgo,4419
138
138
  meerschaum/config/_formatting.py,sha256=OMuqS1EWOsj_34wSs2tOqGIWci3bTMIZ5l-uelZgsIM,6672
139
139
  meerschaum/config/_jobs.py,sha256=gS_4mMGdmVP7WB4V5Sz8kYP0HmhWcMY2jSWGR7jX6cw,1279
140
140
  meerschaum/config/_patch.py,sha256=21N30q1ANmWMDQ-2RUjpMx7KafWfPQ3lKx9rrMqg1s4,1526
141
- meerschaum/config/_paths.py,sha256=Ycuj4TYTzXO-6JkWX40fMK0CVV6L5HG_rPlCi-Ckhto,9763
141
+ meerschaum/config/_paths.py,sha256=lpzIaWfu5SaEWGg_rf4Wg8ipFUSW2tQktDMThFqfKMg,9834
142
142
  meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6wLs,1220
143
143
  meerschaum/config/_read_config.py,sha256=RLC3HHi_1ndj7ITVDKLD9_uULY3caGRwSz3ATYE-ixA,15014
144
144
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
145
145
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
146
- meerschaum/config/_version.py,sha256=3MP2d3uOgIHFHI0NYBWcJdnYXKK4IJH4iwN3UKqHZt4,72
146
+ meerschaum/config/_version.py,sha256=36evUT7Ft3s-1kehnNzPZKF86ySwbOhGmHeKhfc9yOg,74
147
147
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
148
148
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
149
  meerschaum/config/stack/__init__.py,sha256=2UukC0Lmk-aVL1o1qXzumqmuIrw3vu9fD7iCuz4XD4I,10544
@@ -163,7 +163,7 @@ meerschaum/connectors/api/_fetch.py,sha256=Khq9AFr1nk8Dsmcedb77aWhAuHw0JGgVeahDG
163
163
  meerschaum/connectors/api/_jobs.py,sha256=N5lpHFGG10jlVgaJeWAOTuLBQw3AdgjXsEPpp1YwZQE,11270
164
164
  meerschaum/connectors/api/_login.py,sha256=5GsD-B214vr5EYfM3XrTUs1sTFApxZA-9dNxq8oNSyg,2050
165
165
  meerschaum/connectors/api/_misc.py,sha256=OZRZBYOokKIEjmQaR8jUYgu6ZRn9VzXBChzR8CfDv_w,1092
166
- meerschaum/connectors/api/_pipes.py,sha256=ceY-6wlmq73iPvYbvWz59xTUMkSoiiXCiz_BWjTZVMk,21443
166
+ meerschaum/connectors/api/_pipes.py,sha256=6yeNYl6scQ01ABRpCWwnEc3mTOhbJTOScooy98rjXtc,21397
167
167
  meerschaum/connectors/api/_plugins.py,sha256=z04tPjfZZWwa7T60mogZH3X3wDmeLdnoN5Oh8m_YsU8,5217
168
168
  meerschaum/connectors/api/_request.py,sha256=Wc4Y70t0VxEj3_ch5fAeeoSAeFMuRnyNLOV-aUFInjY,6996
169
169
  meerschaum/connectors/api/_uri.py,sha256=HWxqGx4R1cHZ3ywy9Ro9ePbFxxusw4RLaC3hpGt9Z6I,1469
@@ -176,9 +176,9 @@ meerschaum/connectors/sql/_cli.py,sha256=1SgnWeMIAihoxp4FzbNrcq1npXf0dSOQnCntpU9
176
176
  meerschaum/connectors/sql/_create_engine.py,sha256=uFpDeTu9v1Duw6EZ8opeOIU5Z9aPgWAbaequV7vbLW0,10449
177
177
  meerschaum/connectors/sql/_fetch.py,sha256=UIBAvMxassP-ofNxk_FoG-ukHzEac4jyu4lA0SXHcBg,13140
178
178
  meerschaum/connectors/sql/_instance.py,sha256=3KJI3ImwWAJkUfdZIrSL24pcW6Nic8wo5IUeGth9HP4,6459
179
- meerschaum/connectors/sql/_pipes.py,sha256=7SrkUAImbDMl7sy9Ciy0OHU_kQEU5tgxIDZn0ak5pQU,117235
179
+ meerschaum/connectors/sql/_pipes.py,sha256=OhozpYLNU3vkm3NtrfW1jUxuAmXdBglzKcab_ohToNw,118529
180
180
  meerschaum/connectors/sql/_plugins.py,sha256=wbxcNxqTtjfDsxPvdVGTllasYf6NHHzODaQ72hEUSBQ,8135
181
- meerschaum/connectors/sql/_sql.py,sha256=vdSslLKm8ftzIzfCs-0mL3q9zY2pmhZPTpzXSbKROag,37598
181
+ meerschaum/connectors/sql/_sql.py,sha256=rZcALX7Ei1rwqmm5mTzdkcTZsmfgDT-6cQkraSapUZA,37655
182
182
  meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
183
183
  meerschaum/connectors/sql/_users.py,sha256=FJjYeJGhr-TDHziNc6p_5mupGRtGjezKPIYgHFEVSnY,9956
184
184
  meerschaum/connectors/sql/tools.py,sha256=jz8huOaRCwGlYdtGfAqAh7SoK8uydYBrasKQba9FT38,187
@@ -187,12 +187,12 @@ meerschaum/connectors/sql/tables/types.py,sha256=Jc_MTHIBM-KHpQt__Lckp39CeOo7tGO
187
187
  meerschaum/connectors/valkey/_ValkeyConnector.py,sha256=xHld4OCnt0SXmAWH8Yintb3931F-MEgXfWerhTthsXc,15849
188
188
  meerschaum/connectors/valkey/__init__.py,sha256=jkVutsygQCvGPLN17cP6wHAjHajxVycnQJbm2eVMuY0,187
189
189
  meerschaum/connectors/valkey/_fetch.py,sha256=MjeE0h3YI4M3LCzy7axQAc_fX_l82vUqX4WXcYoppxE,1920
190
- meerschaum/connectors/valkey/_pipes.py,sha256=V86tln3TE4SZwvLCgliw8kjQG9K0qk-NS4_-6UItObw,24324
190
+ meerschaum/connectors/valkey/_pipes.py,sha256=sjjO1vehNCkN_2bsqQKy81WWWrOg8a8ElupqzCjZ_7c,24594
191
191
  meerschaum/connectors/valkey/_plugins.py,sha256=ZqiEW4XZCOpw4G8DUK2IKY6Qrph4mYfTjgXWimgakYY,6267
192
192
  meerschaum/connectors/valkey/_users.py,sha256=AS1vLarrkDA9yPK644GWwRiQiTZVa9x3nlLpyntq40g,7730
193
193
  meerschaum/core/__init__.py,sha256=tjASW10n9uLV6bYhcwP4rggh-ESXSJzgxpSBbVsuISs,251
194
- meerschaum/core/Pipe/__init__.py,sha256=knkz0gVpIrHb8au2b_YxvnSC9eXMgPKr5b7TxVQE9O0,18529
195
- meerschaum/core/Pipe/_attributes.py,sha256=cFQPWthsdlEjdddOjkXHuCIMBI9UHJRSqSoY2ChhvLg,21893
194
+ meerschaum/core/Pipe/__init__.py,sha256=NqytRbY1QQM_xDcBDqhcpcVPuEdDRWi26Ou3KuoAseM,18902
195
+ meerschaum/core/Pipe/_attributes.py,sha256=wgtCf2sSC9LFJxBJOPotPgXDATRe9EjhEEVacMdvJ4c,22285
196
196
  meerschaum/core/Pipe/_bootstrap.py,sha256=gTNGh5e2LmTMrgIpHqrVaL60uPKWCphhsuz8j-lJ2HI,7348
197
197
  meerschaum/core/Pipe/_clear.py,sha256=LghXabgyyc1tD7FNQrh9ExT71ipcg2poM9FDA3k9e4M,2230
198
198
  meerschaum/core/Pipe/_copy.py,sha256=YDclAapf_spm9phpFr4-CALyYyw7nUsyKyiaLM1cnm4,2965
@@ -200,13 +200,13 @@ meerschaum/core/Pipe/_data.py,sha256=HOvKlpD9NiBg599mSH1lzUQ_2g8-PsnMbGzMTOJx81E
200
200
  meerschaum/core/Pipe/_deduplicate.py,sha256=xthUdsDxGO2t3m0XGDm9K3F6dpaZoemtjNi8gyKm0e0,10177
201
201
  meerschaum/core/Pipe/_delete.py,sha256=1geNp9BgrocXP1gt76dMbnlJWKYFMuSNqPFA4K4-hXE,2118
202
202
  meerschaum/core/Pipe/_drop.py,sha256=qj5L0obDh2_dKAg7LD3WLI3_L0Q5YECTfTmPc8zZUxI,1135
203
- meerschaum/core/Pipe/_dtypes.py,sha256=LNgZ47W5DMtZ2hwrcQamwapjWPWgtVQ42u67g4M0n3k,4143
203
+ meerschaum/core/Pipe/_dtypes.py,sha256=foFDKPTMZWh3vOemr7wDw16XMT-yj3xcFH64JojG7-E,4167
204
204
  meerschaum/core/Pipe/_edit.py,sha256=HrKWe9vhqKaNOjOcJzW5BNbaUBPIbgNAhJEK8OMsy7c,8416
205
205
  meerschaum/core/Pipe/_fetch.py,sha256=Q_LncNi1nv-YwvRPbh1QK0hf6hflL7Hn9v9lT3oQgF4,5451
206
206
  meerschaum/core/Pipe/_register.py,sha256=Sd5xaAW8H7uLTIoommcKb-6kHPRuHJLWNSbPnt2UbvA,2240
207
207
  meerschaum/core/Pipe/_show.py,sha256=nG50y8eBT9TVuKkRgAKtNDNIxysJvMNxfu__lkL1F9k,1352
208
- meerschaum/core/Pipe/_sync.py,sha256=VsAXcNdjW5kUArQ0PYlB7_0fcgNzAUktlYTgQB-Jcno,34821
209
- meerschaum/core/Pipe/_verify.py,sha256=c3HvsZd4QPydqozaV6cDDRtwYiNz4V91b0IcnKvcimA,14158
208
+ meerschaum/core/Pipe/_sync.py,sha256=_yTM6S1F8j-HZN67XfsSNfOafVVM23TPUlvT-qQDmlA,36512
209
+ meerschaum/core/Pipe/_verify.py,sha256=916xwOECAmefemd3HTUGh8_Rk6uYF4t2f71ez1-s6eY,14194
210
210
  meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_uSJJDc,137
211
211
  meerschaum/core/User/_User.py,sha256=qbI0GIkr3G0PI4d9S49uatbJQ2kH_-z5-GoVJ0fuEtA,6624
212
212
  meerschaum/core/User/__init__.py,sha256=9qNy-Gobui4x6GiaE8U7-WOggsdniOM3_wegLN3SVKs,988
@@ -214,33 +214,33 @@ meerschaum/jobs/_Executor.py,sha256=qM62BhFTM4tyJ7p90KOM0y3qyeRY9k3ZV_aTDJMHnO8,
214
214
  meerschaum/jobs/_Job.py,sha256=BQlgjF2jKhdSqp0_yH2woX4YOPf4bODC4D1abobbn64,32093
215
215
  meerschaum/jobs/__init__.py,sha256=q0f_2zWw91sAyafP50IgMM06abe-BIYSR_SCWmI4W3E,12177
216
216
  meerschaum/jobs/systemd.py,sha256=Rq-tsDPslG17ZhpKMrVJ5r8Z0IPr6DEc9APObfIoXCg,24614
217
- meerschaum/plugins/_Plugin.py,sha256=rTiGNQ9nIQeVSG_P9C6DHCMLW0K-J7zzuu3FjNXUOlE,34056
217
+ meerschaum/plugins/_Plugin.py,sha256=bIo4HX8TTWIcwIHROwMt4VK6OoEUhY_3Qc8q-2dp-ZA,33895
218
218
  meerschaum/plugins/__init__.py,sha256=6krcqaMKyzuVqesXMqEL0XEy2SJQ4xfNt2-oI_fJ6v0,26278
219
219
  meerschaum/plugins/bootstrap.py,sha256=VwjpZAuYdqPJW0YoVgAoM_taHkdQHqP902-8T7OWWCI,11339
220
220
  meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
221
221
  meerschaum/utils/_get_pipes.py,sha256=tu4xKPoDn79Dz2kWM13cXTP4DSCkn-3G9M8KiLftopw,11073
222
- meerschaum/utils/dataframe.py,sha256=R-TgFTV6qbJ3xPEl596Dw6m1lF8Lqz35n1PtFjCYmI0,43400
222
+ meerschaum/utils/dataframe.py,sha256=wt662O3ZfWrRHrz0CMv7Af36ELNY0dIn6TzRIOLf0SA,47753
223
223
  meerschaum/utils/debug.py,sha256=GyIzJmunkoPnOcZNYVQdT4Sgd-aOb5MI2VbIgATOjIQ,3695
224
224
  meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
225
- meerschaum/utils/misc.py,sha256=soGmUooT216Dl15KbcUTzf8E-aC6uNM6Zvy1PiUT_Y4,47089
225
+ meerschaum/utils/misc.py,sha256=RW_WmNtAieP828OtJhr4dHKTQI2nxc4kTwn-Q5N3YBw,47055
226
226
  meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
227
227
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
228
228
  meerschaum/utils/process.py,sha256=9O8PPPJjY9Q5W2f39I3B3lFU6TlSiRiI3bgrzdOOyOw,7843
229
229
  meerschaum/utils/prompt.py,sha256=SOpAvHcVFuk7-J4cqK_LkahWo6oJmLobeHg5fwM_9aY,18949
230
230
  meerschaum/utils/schedule.py,sha256=bUsaCO9CGn2vJO5UvoISScHDDGIiMdCPHxpTFmu7vwE,11531
231
- meerschaum/utils/sql.py,sha256=RiAOK3hzWjo-jswEjpOPHIJKKQezJzh_vbnoXtwz4gU,71619
231
+ meerschaum/utils/sql.py,sha256=Q8MSQamoXZn-FQZjFZvaGsPZXWz69veta50OiOw07M0,73704
232
232
  meerschaum/utils/threading.py,sha256=awjbVL_QR6G-o_9Qk85utac9cSdqkiC8tQSdERCdrG8,2814
233
233
  meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
234
234
  meerschaum/utils/warnings.py,sha256=n-phr3BftNNgyPnvnXC_VMSjtCvjiCZ-ewmVfcROhkc,6611
235
235
  meerschaum/utils/yaml.py,sha256=PoC1du0pn2hLwTHwL-zuOf_EBWZSbCGOz-P-AZ4BWN0,3901
236
- meerschaum/utils/daemon/Daemon.py,sha256=n6HlLwXPr4oc_DyRQWfyrvtFQb4KecUSxiz8bf9X4js,42424
236
+ meerschaum/utils/daemon/Daemon.py,sha256=V8DRjjRYezKcSb6jrRqjsHcGAOCth16rxMO91VtfIBc,42597
237
237
  meerschaum/utils/daemon/FileDescriptorInterceptor.py,sha256=MJKMO0Syf3d8yWUs6xXcQzg8Ptsuvh2aCRRoglOjusA,5257
238
238
  meerschaum/utils/daemon/RotatingFile.py,sha256=ePm_svjwyFDWh6V1k-bp1RHXCSWlyxDtlFu4SU4XvPU,24369
239
239
  meerschaum/utils/daemon/StdinFile.py,sha256=J6tyUReM8NEp3bBQAxMfe8mjJG5mWi6CzHN4x86VQBI,3237
240
240
  meerschaum/utils/daemon/__init__.py,sha256=o9jWb4lRTIyny4EPt7fPXFgV_vIf1mUofsTwoE1ZecA,8751
241
241
  meerschaum/utils/daemon/_names.py,sha256=d2ZwTxBoTAqXZkCfZ5LuX2XrkQmLNUq1OTlUqfoH5dA,4515
242
- meerschaum/utils/dtypes/__init__.py,sha256=ZG1Ccy8QmTNuR0IP5NSMtgWj7Cseh_VU4wxSQDw2m94,8352
243
- meerschaum/utils/dtypes/sql.py,sha256=IQihwQy4OKSbRjvJy6ky6SszFKR7W1iMs-ruZDsf2js,18701
242
+ meerschaum/utils/dtypes/__init__.py,sha256=mXDTiT2T2QvI2g15i8TvVTmkNfgWG9-gnYOB7pcuxtc,10748
243
+ meerschaum/utils/dtypes/sql.py,sha256=RXjNCDSrC116aSYs0W5EImS1hXn6RSdpUk0aSAf_O0k,19434
244
244
  meerschaum/utils/formatting/__init__.py,sha256=gN9UYYT68CQ-sQiqYaQyB64JUJkaaZ7pALDnTcaLUsY,16041
245
245
  meerschaum/utils/formatting/_jobs.py,sha256=izsqPJhTtUkXUUtWnbXtReYsUYwulXtci3pBj72Ne64,6637
246
246
  meerschaum/utils/formatting/_pipes.py,sha256=840O5rg2aHhQoraCDOh2ZtBo43_W2W6R60yYufEoXp8,19494
@@ -249,13 +249,13 @@ meerschaum/utils/formatting/_shell.py,sha256=XH7VFLteNv7NGtWhJl7FdIGt80sKeTiDoJo
249
249
  meerschaum/utils/packages/__init__.py,sha256=Op93VJkAX3OL4H-js_p3dAaa_PT82jvjCna27aHOsUk,64199
250
250
  meerschaum/utils/packages/_packages.py,sha256=ykannoLv2Fm4iwZwiIlNAGZvt654cMJhjXr1VJPoEDo,8867
251
251
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
252
- meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
253
- meerschaum/utils/venv/__init__.py,sha256=f3oi67lXYPLKJrnRW9lae7M3A8SFiC7DzaMoBdCVUFs,24609
254
- meerschaum-2.6.17.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
- meerschaum-2.6.17.dist-info/METADATA,sha256=D8iWjbBsvLjjMpwhvtHsXFC2PTIIIqhCDxkmfAytGBg,24225
256
- meerschaum-2.6.17.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
- meerschaum-2.6.17.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
258
- meerschaum-2.6.17.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
- meerschaum-2.6.17.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
- meerschaum-2.6.17.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
- meerschaum-2.6.17.dist-info/RECORD,,
252
+ meerschaum/utils/venv/_Venv.py,sha256=QsnDGEE_YBqXIq53NTWi2TANA1FbkqJBl_xQi9jQP_U,3537
253
+ meerschaum/utils/venv/__init__.py,sha256=6Zxswa8kEXUVN9m4Fw0DhvqKEtzlBMVyf_2k3Y-M4Oo,25275
254
+ meerschaum-2.7.0rc1.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
+ meerschaum-2.7.0rc1.dist-info/METADATA,sha256=2NFIcN6bVYF-FVZcRFrZbBM0eK5N6rywkhh0ekmrY0A,24227
256
+ meerschaum-2.7.0rc1.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
+ meerschaum-2.7.0rc1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
258
+ meerschaum-2.7.0rc1.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
+ meerschaum-2.7.0rc1.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
+ meerschaum-2.7.0rc1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
+ meerschaum-2.7.0rc1.dist-info/RECORD,,