meerschaum 3.0.4__py3-none-any.whl → 3.0.6__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 (33) hide show
  1. meerschaum/_internal/static.py +10 -0
  2. meerschaum/actions/copy.py +1 -1
  3. meerschaum/actions/delete.py +1 -1
  4. meerschaum/api/dash/callbacks/dashboard.py +20 -3
  5. meerschaum/api/dash/pipes.py +25 -9
  6. meerschaum/config/_version.py +1 -1
  7. meerschaum/connectors/__init__.py +13 -6
  8. meerschaum/connectors/parse.py +2 -2
  9. meerschaum/connectors/sql/_SQLConnector.py +4 -3
  10. meerschaum/connectors/sql/_cli.py +6 -1
  11. meerschaum/connectors/sql/_create_engine.py +2 -1
  12. meerschaum/connectors/sql/_fetch.py +25 -22
  13. meerschaum/connectors/sql/_pipes.py +19 -6
  14. meerschaum/connectors/sql/_sql.py +31 -1
  15. meerschaum/connectors/sql/_uri.py +1 -1
  16. meerschaum/connectors/sql/tables/__init__.py +2 -2
  17. meerschaum/core/Pipe/_attributes.py +1 -1
  18. meerschaum/core/Plugin/_Plugin.py +9 -3
  19. meerschaum/plugins/__init__.py +24 -7
  20. meerschaum/utils/_get_pipes.py +2 -2
  21. meerschaum/utils/dtypes/sql.py +68 -1
  22. meerschaum/utils/packages/__init__.py +10 -8
  23. meerschaum/utils/sql.py +86 -9
  24. meerschaum/utils/venv/_Venv.py +18 -6
  25. meerschaum/utils/venv/__init__.py +20 -4
  26. {meerschaum-3.0.4.dist-info → meerschaum-3.0.6.dist-info}/METADATA +1 -1
  27. {meerschaum-3.0.4.dist-info → meerschaum-3.0.6.dist-info}/RECORD +33 -33
  28. {meerschaum-3.0.4.dist-info → meerschaum-3.0.6.dist-info}/WHEEL +0 -0
  29. {meerschaum-3.0.4.dist-info → meerschaum-3.0.6.dist-info}/entry_points.txt +0 -0
  30. {meerschaum-3.0.4.dist-info → meerschaum-3.0.6.dist-info}/licenses/LICENSE +0 -0
  31. {meerschaum-3.0.4.dist-info → meerschaum-3.0.6.dist-info}/licenses/NOTICE +0 -0
  32. {meerschaum-3.0.4.dist-info → meerschaum-3.0.6.dist-info}/top_level.txt +0 -0
  33. {meerschaum-3.0.4.dist-info → meerschaum-3.0.6.dist-info}/zip-safe +0 -0
meerschaum/utils/sql.py CHANGED
@@ -36,6 +36,7 @@ exists_queries = {
36
36
  version_queries = {
37
37
  'default': "SELECT VERSION() AS {version_name}",
38
38
  'sqlite': "SELECT SQLITE_VERSION() AS {version_name}",
39
+ 'geopackage': "SELECT SQLITE_VERSION() AS {version_name}",
39
40
  'mssql': "SELECT @@version",
40
41
  'oracle': "SELECT version from PRODUCT_COMPONENT_VERSION WHERE rownum = 1",
41
42
  }
@@ -50,6 +51,7 @@ DROP_IF_EXISTS_FLAVORS = {
50
51
  'mysql',
51
52
  'mariadb',
52
53
  'sqlite',
54
+ 'geopackage',
53
55
  }
54
56
  DROP_INDEX_IF_EXISTS_FLAVORS = {
55
57
  'mssql',
@@ -58,6 +60,7 @@ DROP_INDEX_IF_EXISTS_FLAVORS = {
58
60
  'postgresql',
59
61
  'postgis',
60
62
  'sqlite',
63
+ 'geopackage',
61
64
  'citus',
62
65
  }
63
66
  SKIP_AUTO_INCREMENT_FLAVORS = {'citus', 'duckdb'}
@@ -223,6 +226,13 @@ UPDATE_QUERIES = {
223
226
  SELECT {patch_cols_str} FROM {patch_table_name} AS p
224
227
  """,
225
228
  ],
229
+ 'geopackage-upsert': """
230
+ INSERT INTO {target_table_name} ({patch_cols_str})
231
+ SELECT {patch_cols_str}
232
+ FROM {patch_table_name}
233
+ WHERE true
234
+ ON CONFLICT ({join_cols_str}) DO {update_or_nothing} {sets_subquery_none_excluded}
235
+ """,
226
236
  }
227
237
  columns_types_queries = {
228
238
  'default': """
@@ -250,6 +260,19 @@ columns_types_queries = {
250
260
  WHERE m.type = 'table'
251
261
  AND m.name IN ('{table}', '{table_trunc}')
252
262
  """,
263
+ 'geopackage': """
264
+ SELECT
265
+ '' "database",
266
+ '' "schema",
267
+ m.name "table",
268
+ p.name "column",
269
+ p.type "type"
270
+ FROM sqlite_master m
271
+ LEFT OUTER JOIN pragma_table_info(m.name) p
272
+ ON m.name <> p.name
273
+ WHERE m.type = 'table'
274
+ AND m.name IN ('{table}', '{table_trunc}')
275
+ """,
253
276
  'mssql': """
254
277
  SELECT
255
278
  TABLE_CATALOG AS [database],
@@ -388,6 +411,49 @@ columns_indices_queries = {
388
411
  index_type
389
412
  FROM primary_key_columns
390
413
  """,
414
+ 'geopackage': """
415
+ WITH indexed_columns AS (
416
+ SELECT
417
+ '{table}' AS table_name,
418
+ pi.name AS column_name,
419
+ i.name AS index_name,
420
+ 'INDEX' AS index_type
421
+ FROM
422
+ sqlite_master AS i,
423
+ pragma_index_info(i.name) AS pi
424
+ WHERE
425
+ i.type = 'index'
426
+ AND i.tbl_name = '{table}'
427
+ ),
428
+ primary_key_columns AS (
429
+ SELECT
430
+ '{table}' AS table_name,
431
+ ti.name AS column_name,
432
+ 'PRIMARY_KEY' AS index_name,
433
+ 'PRIMARY KEY' AS index_type
434
+ FROM
435
+ pragma_table_info('{table}') AS ti
436
+ WHERE
437
+ ti.pk > 0
438
+ )
439
+ SELECT
440
+ NULL AS "database",
441
+ NULL AS "schema",
442
+ "table_name" AS "table",
443
+ "column_name" AS "column",
444
+ "index_name" AS "index",
445
+ "index_type"
446
+ FROM indexed_columns
447
+ UNION ALL
448
+ SELECT
449
+ NULL AS "database",
450
+ NULL AS "schema",
451
+ table_name AS "table",
452
+ column_name AS "column",
453
+ index_name AS "index",
454
+ index_type
455
+ FROM primary_key_columns
456
+ """,
391
457
  'mssql': """
392
458
  SELECT
393
459
  NULL AS [database],
@@ -504,6 +570,11 @@ reset_autoincrement_queries: Dict[str, Union[str, List[str]]] = {
504
570
  SET seq = {val}
505
571
  WHERE name = '{table}'
506
572
  """,
573
+ 'geopackage': """
574
+ UPDATE sqlite_sequence
575
+ SET seq = {val}
576
+ WHERE name = '{table}'
577
+ """,
507
578
  'oracle': (
508
579
  "ALTER TABLE {table_name} MODIFY {column_name} "
509
580
  "GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH {val_plus_1})"
@@ -518,6 +589,7 @@ table_wrappers = {
518
589
  'postgresql' : ('"', '"'),
519
590
  'postgis' : ('"', '"'),
520
591
  'sqlite' : ('"', '"'),
592
+ 'geopackage' : ('"', '"'),
521
593
  'mysql' : ('`', '`'),
522
594
  'mariadb' : ('`', '`'),
523
595
  'mssql' : ('[', ']'),
@@ -534,7 +606,8 @@ max_name_lens = {
534
606
  'timescaledb-ha': 64,
535
607
  'citus' : 64,
536
608
  'cockroachdb' : 64,
537
- 'sqlite' : 1024, ### Probably more, but 1024 seems more than reasonable.
609
+ 'sqlite' : 1024,
610
+ 'geopackage' : 1024,
538
611
  'mysql' : 64,
539
612
  'mariadb' : 64,
540
613
  }
@@ -549,6 +622,7 @@ json_flavors = {
549
622
  NO_SCHEMA_FLAVORS = {
550
623
  'oracle',
551
624
  'sqlite',
625
+ 'geopackage',
552
626
  'mysql',
553
627
  'mariadb',
554
628
  'duckdb',
@@ -573,6 +647,7 @@ OMIT_NULLSFIRST_FLAVORS = {
573
647
  SINGLE_ALTER_TABLE_FLAVORS = {
574
648
  'duckdb',
575
649
  'sqlite',
650
+ 'geopackage',
576
651
  'mssql',
577
652
  'oracle',
578
653
  }
@@ -582,6 +657,7 @@ NO_CTE_FLAVORS = {
582
657
  }
583
658
  NO_SELECT_INTO_FLAVORS = {
584
659
  'sqlite',
660
+ 'geopackage',
585
661
  'oracle',
586
662
  'mysql',
587
663
  'mariadb',
@@ -629,6 +705,7 @@ def dateadd_str(
629
705
  - `'mysql'`
630
706
  - `'mariadb'`
631
707
  - `'sqlite'`
708
+ - `'geopackage'`
632
709
  - `'oracle'`
633
710
 
634
711
  datepart: str, default `'day'`
@@ -763,7 +840,7 @@ def dateadd_str(
763
840
  )
764
841
  da = (f"DATE_ADD({begin}, INTERVAL {number} {datepart})" if number != 0 else begin)
765
842
 
766
- elif flavor == 'sqlite':
843
+ elif flavor in ('sqlite', 'geopackage'):
767
844
  da = f"datetime({begin}, '{number} {datepart}')"
768
845
 
769
846
  elif flavor == 'oracle':
@@ -909,7 +986,7 @@ def sql_item_name(item: str, flavor: str, schema: Optional[str] = None) -> str:
909
986
  wrappers = table_wrappers.get(flavor, table_wrappers['default'])
910
987
 
911
988
  ### NOTE: SQLite does not support schemas.
912
- if flavor == 'sqlite':
989
+ if flavor in ('sqlite', 'geopackage'):
913
990
  schema = None
914
991
  elif flavor == 'mssql' and str(item).startswith('#'):
915
992
  schema = None
@@ -1293,7 +1370,7 @@ def get_table_cols_types(
1293
1370
  schema = None
1294
1371
  if schema is None:
1295
1372
  schema = DEFAULT_SCHEMA_FLAVORS.get(flavor, None)
1296
- if flavor in ('sqlite', 'duckdb', 'oracle'):
1373
+ if flavor in ('sqlite', 'duckdb', 'oracle', 'geopackage'):
1297
1374
  database = None
1298
1375
  table_trunc = truncate_item_name(table, flavor=flavor)
1299
1376
  table_lower = table.lower()
@@ -1472,7 +1549,7 @@ def get_table_cols_indices(
1472
1549
  schema = None
1473
1550
  if schema is None:
1474
1551
  schema = DEFAULT_SCHEMA_FLAVORS.get(flavor, None)
1475
- if flavor in ('sqlite', 'duckdb', 'oracle'):
1552
+ if flavor in ('sqlite', 'duckdb', 'oracle', 'geopackage'):
1476
1553
  database = None
1477
1554
  table_trunc = truncate_item_name(table, flavor=flavor)
1478
1555
  table_lower = table.lower()
@@ -1662,7 +1739,7 @@ def get_update_queries(
1662
1739
  if not flavor:
1663
1740
  raise ValueError("Provide a flavor if using a SQLAlchemy session.")
1664
1741
  if (
1665
- flavor == 'sqlite'
1742
+ flavor in ('sqlite', 'geopackage')
1666
1743
  and isinstance(connectable, SQLConnector)
1667
1744
  and connectable.db_version < '3.33.0'
1668
1745
  ):
@@ -1776,7 +1853,7 @@ def get_update_queries(
1776
1853
  if c_name in utc_value_cols
1777
1854
  else ''
1778
1855
  ))
1779
- if flavor != 'sqlite'
1856
+ if flavor not in ('sqlite', 'geopackage')
1780
1857
  else ('', '', '')
1781
1858
  )
1782
1859
  )
@@ -2183,7 +2260,7 @@ def _get_create_table_query_from_dtypes(
2183
2260
  )) if autoincrement or primary_key not in dtypes else ''
2184
2261
  col_name = sql_item_name(primary_key, flavor=flavor, schema=None)
2185
2262
 
2186
- if flavor == 'sqlite':
2263
+ if flavor in ('sqlite', 'geopackage'):
2187
2264
  query += (
2188
2265
  f"\n {col_name} "
2189
2266
  + (f"{col_db_type}" if not auto_increment_str else 'INTEGER')
@@ -2315,7 +2392,7 @@ def _get_create_table_query_from_cte(
2315
2392
  f"ADD PRIMARY KEY ({primary_key_name})"
2316
2393
  ),
2317
2394
  ]
2318
- elif flavor in ('sqlite', 'mysql', 'mariadb', 'duckdb', 'oracle'):
2395
+ elif flavor in ('sqlite', 'mysql', 'mariadb', 'duckdb', 'oracle', 'geopackage'):
2319
2396
  create_table_queries = [
2320
2397
  (
2321
2398
  f"CREATE TABLE {new_table_name} AS\n"
@@ -11,7 +11,8 @@ from __future__ import annotations
11
11
  import copy
12
12
  import pathlib
13
13
  from meerschaum.utils.typing import Union
14
- from meerschaum.utils.threading import RLock
14
+
15
+ import meerschaum as mrsm
15
16
 
16
17
 
17
18
  class Venv:
@@ -35,7 +36,8 @@ class Venv:
35
36
 
36
37
  def __init__(
37
38
  self,
38
- venv: Union[str, 'meerschaum.core.Plugin', None] = 'mrsm',
39
+ venv: Union[str, 'mrsm.core.Plugin', None] = 'mrsm',
40
+ init_if_not_exists: bool = True,
39
41
  debug: bool = False,
40
42
  ) -> None:
41
43
  from meerschaum.utils.venv import activate_venv, deactivate_venv, active_venvs
@@ -52,6 +54,7 @@ class Venv:
52
54
  self._deactivate = deactivate_venv
53
55
  self._kwargs = {'venv': venv}
54
56
  self._debug = debug
57
+ self._init_if_not_exists = init_if_not_exists
55
58
  ### In case someone calls `deactivate()` before `activate()`.
56
59
  self._kwargs['previously_active_venvs'] = copy.deepcopy(active_venvs)
57
60
 
@@ -65,11 +68,20 @@ class Venv:
65
68
  from meerschaum.utils.venv import active_venvs, init_venv
66
69
  self._kwargs['previously_active_venvs'] = copy.deepcopy(active_venvs)
67
70
  try:
68
- return self._activate(debug=(debug or self._debug), **self._kwargs)
71
+ return self._activate(
72
+ debug=(debug or self._debug),
73
+ init_if_not_exists=self._init_if_not_exists,
74
+ **self._kwargs
75
+ )
69
76
  except OSError as e:
70
- if not init_venv(self._venv, force=True):
71
- raise e
72
- return self._activate(debug=(debug or self._debug), **self._kwargs)
77
+ if self._init_if_not_exists:
78
+ if not init_venv(self._venv, force=True):
79
+ raise e
80
+ return self._activate(
81
+ debug=(debug or self._debug),
82
+ init_if_not_exists=self._init_if_not_exists,
83
+ **self._kwargs
84
+ )
73
85
 
74
86
 
75
87
  def deactivate(self, debug: bool = False) -> bool:
@@ -39,6 +39,7 @@ def activate_venv(
39
39
  venv: Optional[str] = 'mrsm',
40
40
  color: bool = True,
41
41
  force: bool = False,
42
+ init_if_not_exists: bool = True,
42
43
  debug: bool = False,
43
44
  **kw
44
45
  ) -> bool:
@@ -53,6 +54,9 @@ def activate_venv(
53
54
  color: bool, default True
54
55
  If `True`, include color in debug text.
55
56
 
57
+ init_if_not_exists: bool, default True
58
+ If `True`, create the virtual environment if it does not exist.
59
+
56
60
  force: bool, default False
57
61
  If `True`, do not exit early even if the venv is currently active.
58
62
 
@@ -68,10 +72,12 @@ def activate_venv(
68
72
  if active_venvs_order and active_venvs_order[0] == venv:
69
73
  if not force:
70
74
  return True
75
+
71
76
  import sys
72
77
  import os
73
- if venv is not None:
78
+ if venv is not None and init_if_not_exists:
74
79
  init_venv(venv=venv, debug=debug)
80
+
75
81
  with LOCKS['active_venvs']:
76
82
  if thread_id not in threads_active_venvs:
77
83
  threads_active_venvs[thread_id] = {}
@@ -82,10 +88,14 @@ def activate_venv(
82
88
  threads_active_venvs[thread_id][venv] += 1
83
89
 
84
90
  target_path = venv_target_path(venv, debug=debug, allow_nonexistent=True)
85
- if not target_path.exists():
91
+ if not target_path.exists() and venv is not None and init_if_not_exists:
86
92
  init_venv(venv=venv, force=True, debug=debug)
93
+
87
94
  if not target_path.exists():
95
+ if init_if_not_exists:
96
+ return False
88
97
  raise EnvironmentError(f"Could not activate virtual environment '{venv}'.")
98
+
89
99
  target = target_path.as_posix()
90
100
 
91
101
  if venv in active_venvs_order:
@@ -97,6 +107,7 @@ def activate_venv(
97
107
  active_venvs_order.remove(venv)
98
108
  except Exception:
99
109
  pass
110
+
100
111
  if venv is not None:
101
112
  sys.path.insert(0, target)
102
113
  else:
@@ -315,8 +326,13 @@ def verify_venv(
315
326
 
316
327
  ### E.g. python3.10 actually links to Python 3.10.
317
328
  if filename == python_versioned_name:
318
- real_path = pathlib.Path(os.path.realpath(python_path))
319
- if not real_path.exists():
329
+ try:
330
+ real_path = pathlib.Path(os.path.realpath(python_path))
331
+ real_path_exists = real_path.exists()
332
+ except Exception:
333
+ real_path_exists = False
334
+
335
+ if not real_path_exists:
320
336
  try:
321
337
  python_path.unlink()
322
338
  except Exception:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meerschaum
3
- Version: 3.0.4
3
+ Version: 3.0.6
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Author-email: Bennett Meares <bennett.meares@gmail.com>
6
6
  Maintainer-email: Bennett Meares <bennett.meares@gmail.com>
@@ -2,7 +2,7 @@ meerschaum/__init__.py,sha256=4gb50vOezjYiFHw6oHZfV7enCvCnUqTdZycWyD8BSzE,1766
2
2
  meerschaum/__main__.py,sha256=r5UjYxH1WA6dGG9YGBPul5xOdgF3Iwl0X4dWDtXU-30,2646
3
3
  meerschaum/_internal/__init__.py,sha256=5Z41PIj8BbJ2bZJykk7EE4ulyEKKZLCHGVgaTZLfkmY,223
4
4
  meerschaum/_internal/entry.py,sha256=dNk_3KYHx8NgvkVvl5OqAX4MwqYVqfg0GbsGHBiC5Ng,13889
5
- meerschaum/_internal/static.py,sha256=TSSDB6fXObS9MNBCtZiRPYtFzsbwmyvWrwaNlV1nwTg,12225
5
+ meerschaum/_internal/static.py,sha256=CG_hzIhNb05CryfaYO-KcobKdXGgyXpLqGvRU_A5BiA,12581
6
6
  meerschaum/_internal/arguments/__init__.py,sha256=_nSKKVLXNsJeSv-buxEZsx8_c0BAbkhRyE4nT6Bv6q0,541
7
7
  meerschaum/_internal/arguments/_parse_arguments.py,sha256=B7eXnz2fGrDb_lWy2wagWVaIlPAGLJdDEtd39pv87fA,16442
8
8
  meerschaum/_internal/arguments/_parser.py,sha256=v4dlR5ElJFmKGiw35UGCiDI1XiH8-ma8PJwoV3O--c4,18082
@@ -26,9 +26,9 @@ meerschaum/actions/api.py,sha256=7mQSSXkYIqetjOAiAGYHOjpzJSx4MN99ts6JwHlrNTc,146
26
26
  meerschaum/actions/attach.py,sha256=Vy41f8alMp3P-lXzyQkHqyDSDamtYGe2THWjFFrAdf4,3107
27
27
  meerschaum/actions/bootstrap.py,sha256=z2O5sJSssZ1eUzGx6_lG599uGwGsNPnMxzYNXeBh0Fc,18076
28
28
  meerschaum/actions/clear.py,sha256=v_xHn7-Pu7iwFNJ07q9eJt2hqPV7OwNZHUYa9dvixs4,4976
29
- meerschaum/actions/copy.py,sha256=QmlR_Ky-9SSgCV4Tmd3tgOBF63xchA1iZoEPFCYX8zc,6981
29
+ meerschaum/actions/copy.py,sha256=PlYXhtkRroReAI0wHHqevb0a4nTJOKgcVkEGASdVJNk,7000
30
30
  meerschaum/actions/deduplicate.py,sha256=puYyxeFYEUy1Sd2IOcZB2e6MrNxAZl2bTLmNzFDkCiw,1167
31
- meerschaum/actions/delete.py,sha256=9NhWrClsdsiJ6ih-Yxyi6gZ05MMI9ykTSnL6dpPC1Z0,18591
31
+ meerschaum/actions/delete.py,sha256=3jWlGnTkwmK-KV3oxUiqgFy7oaqeL6H673INwNfpHAM,18605
32
32
  meerschaum/actions/drop.py,sha256=xNgHWFPyvs4lm923BCRwYJULUqGYMbcVnRPb25Y-lzs,4433
33
33
  meerschaum/actions/edit.py,sha256=JTvXMkL_9v46mI6P0FhHXhgg9vQjIdz1ebXc2Ei2Dws,20471
34
34
  meerschaum/actions/index.py,sha256=byhcGi7P1S0TTcJPBxq3jGKmBF_gZ8t77oqtg0kGSdI,1826
@@ -66,7 +66,7 @@ meerschaum/api/dash/connectors.py,sha256=-Wd40ieYJI2nOASXi4V1C4bvLekjnN_tj6zp7Hg
66
66
  meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
67
67
  meerschaum/api/dash/jobs.py,sha256=p0mC30jO7aYS0vUbfn540d66-s19_c-GgjyfNmVXgrs,7682
68
68
  meerschaum/api/dash/keys.py,sha256=pGIbKxp5RsIelzAU4WZMcYGDN835tF4mGhoktydc42M,8561
69
- meerschaum/api/dash/pipes.py,sha256=mFssfAkA8tW1PB2WHpXE22r-XlGN67GY37QPrmVbFUQ,37438
69
+ meerschaum/api/dash/pipes.py,sha256=PUWvuoVGKKwqWb2yIc5l_CLClzcmBk5di4OTWYwlPkg,37992
70
70
  meerschaum/api/dash/plugins.py,sha256=KdfG04f6SsUpBg-nm7MUJegFGuElOj-GAkxDX98hi60,3768
71
71
  meerschaum/api/dash/sessions.py,sha256=jUM0a9CXNZC3j7SF3QkZim-8ZAbDom-V1iXklvMyBZE,5382
72
72
  meerschaum/api/dash/sync.py,sha256=9lt7IRdG-fe9gf_ZO_viPiGlerX7ic6r_VFocv3I51A,504
@@ -82,7 +82,7 @@ meerschaum/api/dash/assets/logo_48x48.png,sha256=hTR5BHUHEN4yP2xiqAcDciuigoII9T3
82
82
  meerschaum/api/dash/assets/logo_500x500.png,sha256=9EUtf6wQcEZTXHKfQ2kjNXod6Rn_4DTB_BkTgxggq00,67702
83
83
  meerschaum/api/dash/callbacks/__init__.py,sha256=flHWiTSjrdgVNLgFutSnaqYogVUgnqRFWy3K0-n0wFo,651
84
84
  meerschaum/api/dash/callbacks/custom.py,sha256=e9wU2gZ8hutYNe7T4mKjJPFwpR32-dcbEXWyOOJKCEk,1884
85
- meerschaum/api/dash/callbacks/dashboard.py,sha256=Wrwx91D6srkkpL1ScGE0R-yKjdxhwgcxWEGwxRQjUKI,38876
85
+ meerschaum/api/dash/callbacks/dashboard.py,sha256=aJRwgwYvJbcE5H9KMaRYSuu9Mt_9hmP6kgK55_qarRg,39360
86
86
  meerschaum/api/dash/callbacks/jobs.py,sha256=mwYYjxZxHte1g4uCtv6T8nGXR2-JPoWrAgZZdBlvDyQ,8817
87
87
  meerschaum/api/dash/callbacks/login.py,sha256=Eygp71kdWRO_fFrkuUN3hIT-nG9HKYOgebf8ACeuyPs,3175
88
88
  meerschaum/api/dash/callbacks/pipes.py,sha256=t46Mu6-1Pq9FTlE57QzXmEVjt6deZUEdf13hxtDEKeE,7811
@@ -154,7 +154,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
154
154
  meerschaum/config/_read_config.py,sha256=Y4O-eozH94FsucqLWXb5hS57RLPMHsLUQe7a24doi0o,16231
155
155
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
156
156
  meerschaum/config/_sync.py,sha256=nN5bLCHU8sFDdlPi7pQXuRVFcX457rZjOiALTvqRS_E,4332
157
- meerschaum/config/_version.py,sha256=XePMeRwPxnziKgqCJG_d7nZQVMdmL3oHJQnL0Z3047s,71
157
+ meerschaum/config/_version.py,sha256=n_QQMtQ9-WXprfhW3j-OxjwbwRq-50WX3f9QvOq_8Gc,71
158
158
  meerschaum/config/environment.py,sha256=hTyjPLrGp3R4sytg_Jqv4TnCVI1WdmbX2YoRBCWSNt8,8277
159
159
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
160
160
  meerschaum/config/static.py,sha256=92fSGxoHFDOK9GEsN8NVbAEh9W7-eZ1BS6thyEqcjeI,359
@@ -165,8 +165,8 @@ meerschaum/config/stack/mosquitto/__init__.py,sha256=-OwOjq8KiBoSH_pmgCAAF3Dp3CR
165
165
  meerschaum/config/stack/mosquitto/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
166
  meerschaum/config/stack/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  meerschaum/connectors/_Connector.py,sha256=aC3hkLZ4wT-0FDgeMSdhBHsTW1Ct3Oqe9s5lCB52CG8,6927
168
- meerschaum/connectors/__init__.py,sha256=EXIjC70Yz0NTahBWy8lqSyitgr3C2vIXc7C9Yz06fJo,13617
169
- meerschaum/connectors/parse.py,sha256=EtcZveY4SKkrFChdBbSeKxbi72LmCs496gPdv3Xg178,4299
168
+ meerschaum/connectors/__init__.py,sha256=XqyvAtYhj1ftzHmDCRdXz-1Hyk8WZns686nVodqh5jw,13760
169
+ meerschaum/connectors/parse.py,sha256=yOp9tIZuxbQzsAVJicdg8yhFGiw1dkJvTub1rO6JCps,4364
170
170
  meerschaum/connectors/poll.py,sha256=23yRUeIqqyNVt8VoJErhirW543YZ6X0ocfBauMJnC_g,7465
171
171
  meerschaum/connectors/api/_APIConnector.py,sha256=qWBLROceCazhZrjYsh5fNUPBizsu8PcOFKFs7pWV-eQ,6566
172
172
  meerschaum/connectors/api/__init__.py,sha256=rYHDMK7n-5X5HoxiRITt-sVLgePnPQbgwntkhzvJvOk,234
@@ -189,19 +189,19 @@ meerschaum/connectors/instance/_tokens.py,sha256=PejT6UEhkxkOCuEQf3Skvh0vTKTtE7c
189
189
  meerschaum/connectors/instance/_users.py,sha256=NijU5wrBLjc67OUeJkyUNZYMC8KtAI-2ALFt36inT9g,5539
190
190
  meerschaum/connectors/plugin/PluginConnector.py,sha256=aQ1QaB7MordCFimZqoGLb0R12PfDUN_nWks2J5mzeAs,2084
191
191
  meerschaum/connectors/plugin/__init__.py,sha256=pwF7TGY4WNz2_HaVdmK4rPQ9ZwTOEuPHgzOqsGcoXJw,198
192
- meerschaum/connectors/sql/_SQLConnector.py,sha256=dLv0pdgPkPBMklY_EqXvC8zaxGa8VZ8dtCdSZ5cxQSg,12911
192
+ meerschaum/connectors/sql/_SQLConnector.py,sha256=nZE3Ujr9rfpVWNGrJNi70d44c_9Hvm9iFlGaI7VcVnA,12981
193
193
  meerschaum/connectors/sql/__init__.py,sha256=3cqYiDkVasn7zWdtOTAZbT4bo95AuvGOmDD2TkaAxtw,205
194
- meerschaum/connectors/sql/_cli.py,sha256=D4c_S-xTmhLRxl2dMhNSF0bMb1fDrMwWP2SVRBmUiUE,5210
195
- meerschaum/connectors/sql/_create_engine.py,sha256=M_uP6HlMIJvwKn_K-GXPBO9oVlGA2ULrWTR3fuEDfPY,7678
196
- meerschaum/connectors/sql/_fetch.py,sha256=eJIqVAc4qI0xrbkZedO85sfB1-Hd3_Jkk12D6-OuzRU,12208
194
+ meerschaum/connectors/sql/_cli.py,sha256=OTMmiOLgRzQn2F_CXsIry4oWhvBek_D0wsX486Fq9jo,5345
195
+ meerschaum/connectors/sql/_create_engine.py,sha256=yTimP668KAmnA6p8AK4q2OnColwahpRahsluByEgVXU,7725
196
+ meerschaum/connectors/sql/_fetch.py,sha256=ZqtYd1LSGmz-UVXLcEppRAhY2mAUNAkE2SU-uubwRfk,12154
197
197
  meerschaum/connectors/sql/_instance.py,sha256=xCc8M0xWMzF5Tu_1uWIFivAoHey5N1ccFhN_Z7u04zk,6304
198
- meerschaum/connectors/sql/_pipes.py,sha256=hts5BUQTD8p9oLireNWw0Dio-ilQ1Aimw6uMrZaOHxo,130234
198
+ meerschaum/connectors/sql/_pipes.py,sha256=tlIAgzGY2vEeO9a891QpuE9UBCiAj7MiCo5r0xrQd5M,130705
199
199
  meerschaum/connectors/sql/_plugins.py,sha256=SubR5HUJaetoUCv83YNEMwhv4wTTBCMcxSOEUgyMML4,8747
200
- meerschaum/connectors/sql/_sql.py,sha256=7x54ED3WYNASBBb50JKX37-d-LLQsp2fqR59S7qK6HQ,44490
201
- meerschaum/connectors/sql/_uri.py,sha256=BFzu5pjlbL3kxLH13vHWlpKGYTPfg8wuA2j58O9NsCM,3440
200
+ meerschaum/connectors/sql/_sql.py,sha256=T94jbuiZ1IRqkt_s_LQNTXyRc8OmzWLZSYnWIityFkU,45313
201
+ meerschaum/connectors/sql/_uri.py,sha256=pSqGo6DfSvCUl2rjk833W3Foi20goZ0301pyqZR4R2I,3454
202
202
  meerschaum/connectors/sql/_users.py,sha256=n3bW01GHWNT5QpI_uGyQV6aZA_FEwgV61QrhFmgNit8,10837
203
203
  meerschaum/connectors/sql/tools.py,sha256=jz8huOaRCwGlYdtGfAqAh7SoK8uydYBrasKQba9FT38,187
204
- meerschaum/connectors/sql/tables/__init__.py,sha256=DphdLWgztzNGIDDZcjq8c8YO-mqq6q4nDKEN5k0DQG4,13345
204
+ meerschaum/connectors/sql/tables/__init__.py,sha256=4Uhxz3U_4u5P7z-Ocu-n_UWr5mMBdo-Ha6GgG3MbsZ8,13405
205
205
  meerschaum/connectors/sql/tables/types.py,sha256=Jc_MTHIBM-KHpQt__Lckp39CeOo7tGOiAk5faDx-znY,1573
206
206
  meerschaum/connectors/valkey/_ValkeyConnector.py,sha256=yYbqw93qbOY1eFOXg97fEB4niU_4YxisltX8167M37s,15860
207
207
  meerschaum/connectors/valkey/__init__.py,sha256=jkVutsygQCvGPLN17cP6wHAjHajxVycnQJbm2eVMuY0,187
@@ -211,7 +211,7 @@ meerschaum/connectors/valkey/_plugins.py,sha256=KjNE2RDJ90b96ynoPz30iOiWU86bfJjF
211
211
  meerschaum/connectors/valkey/_users.py,sha256=AS1vLarrkDA9yPK644GWwRiQiTZVa9x3nlLpyntq40g,7730
212
212
  meerschaum/core/__init__.py,sha256=Qx0s4KANuYCjTCHEaE70cfgCPxiYPPkr9DnmCTw33Z0,291
213
213
  meerschaum/core/Pipe/__init__.py,sha256=5ibU7Cnz3vLsKtfVINkmR4maNE_jOdX6bA4ZpyIm_Pc,19979
214
- meerschaum/core/Pipe/_attributes.py,sha256=ww6P90OYt-hFGRxznSfx-uy1ecor1YgwvbIBvtu-5fg,32457
214
+ meerschaum/core/Pipe/_attributes.py,sha256=3ErBBZIWU4hMmE9wH2Zw0116aVh1jPFrw1DW8I0PPYM,32468
215
215
  meerschaum/core/Pipe/_bootstrap.py,sha256=4RLDD25BvqyukHhejTIJFaECOvCgZk6tjtNQfS9qgA8,8150
216
216
  meerschaum/core/Pipe/_cache.py,sha256=p8ckGqqVmm1g9OKDR6OhzpgBCuP7gbYHopmIS9qQR3A,15731
217
217
  meerschaum/core/Pipe/_clear.py,sha256=vCv4imPcMVdJXWwArOcnNlxEOk5HPOHSDZ9omrexzGc,1972
@@ -228,7 +228,7 @@ meerschaum/core/Pipe/_register.py,sha256=Sd5xaAW8H7uLTIoommcKb-6kHPRuHJLWNSbPnt2
228
228
  meerschaum/core/Pipe/_show.py,sha256=nKLk9uzUIS8HVemwVOYsXTnat8n4mSXqXhCDsb5sfgU,1332
229
229
  meerschaum/core/Pipe/_sync.py,sha256=PZ8j3j_u6cDi7ykOwRKd8aTSedJGMIYdcr87kAt3Z10,37623
230
230
  meerschaum/core/Pipe/_verify.py,sha256=u7Caut9BDZbaZno4A35O7TmYRT6Z-iuOsNROhki5FWg,22621
231
- meerschaum/core/Plugin/_Plugin.py,sha256=WlnUddr99Qx1qFiPQB_5q3JVosUJ7Wr__gcOE5gf1SM,34526
231
+ meerschaum/core/Plugin/_Plugin.py,sha256=DClQRovx9YT4pWir04ahuEzwqdV0YNb-PgRDnG5SWJc,34687
232
232
  meerschaum/core/Plugin/__init__.py,sha256=t1gXBcNkq1hlVVZunBVGv-bpl4MFLpZbVqxw75jocE4,149
233
233
  meerschaum/core/Token/_Token.py,sha256=n1Q47z4Oa_xY-__0dvvVYD9VfQKRebNi_cDedvpkQ4s,7599
234
234
  meerschaum/core/Token/__init__.py,sha256=QYgyoCVkt7bru3CynDKP3wy41BY1NVyAta8smURxnO4,177
@@ -242,10 +242,10 @@ meerschaum/models/__init__.py,sha256=9OCElgSTRzgqAIpi_FSUzTAVJtUwOIi71BGFsqkn6PU
242
242
  meerschaum/models/pipes.py,sha256=vGSGm5UuyfwfPDqM9iq-PjFeiGrWYW52bJAKNZ4pcHs,7839
243
243
  meerschaum/models/tokens.py,sha256=57cFisjhx47EFbJLfsp8iHX8-qZiRY8ztFWahylWOJQ,1067
244
244
  meerschaum/models/users.py,sha256=E1ambl2g6f2tdnLkwAquyqjvflrb2AMiVhI9nXXHYR0,683
245
- meerschaum/plugins/__init__.py,sha256=3ButbAcVQVdOlgai7kEvid7TYMNdDW-zqRbEL0Ka2C8,35100
245
+ meerschaum/plugins/__init__.py,sha256=-MOhPcbxDne0r_nFm7blg7frtuYgJxO069x_Hesk3ss,35692
246
246
  meerschaum/plugins/bootstrap.py,sha256=sSvdh2g78AYwTTNMTdHw62Nj2v95pmbd77HFznuErUE,27728
247
247
  meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
248
- meerschaum/utils/_get_pipes.py,sha256=TbV77VjQ9qqCLOy06-hlnfQI_hS6PTcXkbO7aQ2csdM,13275
248
+ meerschaum/utils/_get_pipes.py,sha256=p66b52CdP-FfYamcUf12JYOHHlOHoTAqxFeuf4LdddI,13300
249
249
  meerschaum/utils/dataframe.py,sha256=bxcf04SRlt0tI7vNQXYvoTLHM35e5QMVm4IJYT82mMo,67686
250
250
  meerschaum/utils/debug.py,sha256=zBYxcLJ5Ymzz1J5BVv7DXAZ7CWd6vYN9uFFdWKmny9U,4334
251
251
  meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
@@ -256,7 +256,7 @@ meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
256
256
  meerschaum/utils/process.py,sha256=Y7yk7b-OEADd28E40ffvIGLS3shi4-e604YWX5aFUDo,8214
257
257
  meerschaum/utils/prompt.py,sha256=NmbSRJyrapH7UKMV1Ry_LIjj2POVTpNCLS2QeIogge0,19740
258
258
  meerschaum/utils/schedule.py,sha256=TMUjQ57UFStfZfQk7GdQItDHrH888O178vum1ID_Drk,11454
259
- meerschaum/utils/sql.py,sha256=qTD3IHGT1NEL2wXN0A0icKY8xSjax3ox0V7kZ3aRM8k,86250
259
+ meerschaum/utils/sql.py,sha256=FW6ihjXk-muG4w2tfMIkwZ-TakzfFCuOLVV_Mgxgq84,88621
260
260
  meerschaum/utils/threading.py,sha256=FV6mtQecZNmXJgirMcElX_6S0UXVaQHqhC4vzfqarbs,4022
261
261
  meerschaum/utils/typing.py,sha256=LEoM4LbAbGIArBAecdRrtiMfrP8ctm9idjqCGJszVi4,2772
262
262
  meerschaum/utils/warnings.py,sha256=voneQTz4OHFaL5JJ0Hu1lZS_8DrhJJfomPIvnFGq6pQ,6521
@@ -268,22 +268,22 @@ meerschaum/utils/daemon/StdinFile.py,sha256=jzJTqo36-XPVjzPCctvY_nHbhAUjLk7wN1Eq
268
268
  meerschaum/utils/daemon/__init__.py,sha256=TM2U2m84s7Y80xHJ8BAIQOmGJc7XwjQNXvpQK-SNIJo,9587
269
269
  meerschaum/utils/daemon/_names.py,sha256=DM98kaw6Th-ZO_3eKeysFoyCaod_q3gRS4ig_QPDT7k,4520
270
270
  meerschaum/utils/dtypes/__init__.py,sha256=pUjAKZQGU3wELiRBIMcFQsmN0mDhZFIyOQQgQ5GwSjc,35885
271
- meerschaum/utils/dtypes/sql.py,sha256=bVBzpagFLPJKYvW3EaQyPa6WkpBEHtllVL38r4CUBIA,43431
271
+ meerschaum/utils/dtypes/sql.py,sha256=2uIziZYgS7_cJHoWnqiuYNu1_bimBmrmP1xv9-yg8V0,45702
272
272
  meerschaum/utils/formatting/__init__.py,sha256=gP-vHE6iqyqdrTHXVjKc5ML5lUz2MFwaJYwLilduIUE,15585
273
273
  meerschaum/utils/formatting/_jobs.py,sha256=c2Kp51vRJkDs2OeYLiePjSJCYhWj5az4b8uGodhG2a0,6637
274
274
  meerschaum/utils/formatting/_pipes.py,sha256=CbCgUQadFR7i9gKogTPQ7vCgFguy9BW_hIT_aIwPhCw,19565
275
275
  meerschaum/utils/formatting/_pprint.py,sha256=DCwopIQUu2xsCETsmbfSYVupG6Uz95gyZ63pa_nDMPo,3097
276
276
  meerschaum/utils/formatting/_shell.py,sha256=e1SPZIUGRF6TkiKn4tULPGCE6ZbaxFdOTqosJA5rWX4,4378
277
- meerschaum/utils/packages/__init__.py,sha256=bgMYbbFanPLgqGchwxYiUoB-45XvjoMFdJdeqXX_MSo,63886
277
+ meerschaum/utils/packages/__init__.py,sha256=h7Q5H2nI6XQLV4FlDfWL06YZu8NgphjUyb3b8xUzCIA,63824
278
278
  meerschaum/utils/packages/_packages.py,sha256=KWVfxsm-6ZdffpskIjHPki6wSQvf0LK9MWZgllS3dMo,9432
279
279
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
280
- meerschaum/utils/venv/_Venv.py,sha256=dF-FqP7Boq-g-anj2Ps-UkTOL2qJtxY3bdz0HWF2zT8,3726
281
- meerschaum/utils/venv/__init__.py,sha256=tMxoGCrUZ_1OEzeZAM8KQyfYMBR0L0V7huBJ2dZNx7k,27333
282
- meerschaum-3.0.4.dist-info/licenses/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
283
- meerschaum-3.0.4.dist-info/licenses/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
284
- meerschaum-3.0.4.dist-info/METADATA,sha256=85H_Xm43ujqNqu3nNxBZWyrAxjME5uV-vJOfYPnDtUI,25325
285
- meerschaum-3.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
286
- meerschaum-3.0.4.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
287
- meerschaum-3.0.4.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
288
- meerschaum-3.0.4.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
289
- meerschaum-3.0.4.dist-info/RECORD,,
280
+ meerschaum/utils/venv/_Venv.py,sha256=lYiuyCloG1OmKh_8xMMXHkAq1VIMUWLhYGtCVm6nvdA,4044
281
+ meerschaum/utils/venv/__init__.py,sha256=P40aC-RMz3iGrMnED6D4tha6Tj0Mz-pDgUqJVibgjwo,27767
282
+ meerschaum-3.0.6.dist-info/licenses/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
283
+ meerschaum-3.0.6.dist-info/licenses/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
284
+ meerschaum-3.0.6.dist-info/METADATA,sha256=g0QWm96vMEp03QxtpG03iUoN096UGYkLe6noa3uny4Y,25325
285
+ meerschaum-3.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
286
+ meerschaum-3.0.6.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
287
+ meerschaum-3.0.6.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
288
+ meerschaum-3.0.6.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
289
+ meerschaum-3.0.6.dist-info/RECORD,,