meerschaum 2.4.11__py3-none-any.whl → 2.4.13__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 (41) hide show
  1. meerschaum/_internal/arguments/_parse_arguments.py +15 -1
  2. meerschaum/_internal/docs/index.py +1 -0
  3. meerschaum/_internal/entry.py +1 -0
  4. meerschaum/_internal/shell/Shell.py +19 -9
  5. meerschaum/_internal/shell/ShellCompleter.py +11 -6
  6. meerschaum/actions/bootstrap.py +119 -16
  7. meerschaum/actions/clear.py +41 -30
  8. meerschaum/actions/delete.py +1 -1
  9. meerschaum/actions/edit.py +118 -3
  10. meerschaum/actions/sh.py +11 -10
  11. meerschaum/actions/start.py +61 -4
  12. meerschaum/actions/sync.py +14 -16
  13. meerschaum/actions/upgrade.py +5 -4
  14. meerschaum/api/dash/callbacks/dashboard.py +2 -1
  15. meerschaum/api/dash/callbacks/jobs.py +53 -7
  16. meerschaum/api/dash/callbacks/pipes.py +1 -1
  17. meerschaum/api/dash/jobs.py +86 -60
  18. meerschaum/api/dash/pages/__init__.py +1 -0
  19. meerschaum/api/dash/pages/job.py +21 -0
  20. meerschaum/api/routes/_jobs.py +3 -3
  21. meerschaum/config/_version.py +1 -1
  22. meerschaum/connectors/sql/_fetch.py +67 -61
  23. meerschaum/connectors/sql/_pipes.py +36 -29
  24. meerschaum/plugins/__init__.py +6 -2
  25. meerschaum/plugins/bootstrap.py +15 -15
  26. meerschaum/utils/formatting/__init__.py +32 -16
  27. meerschaum/utils/formatting/_pipes.py +1 -1
  28. meerschaum/utils/formatting/_shell.py +4 -3
  29. meerschaum/utils/process.py +18 -8
  30. meerschaum/utils/prompt.py +16 -15
  31. meerschaum/utils/sql.py +107 -35
  32. meerschaum/utils/venv/__init__.py +35 -24
  33. meerschaum/utils/warnings.py +7 -7
  34. {meerschaum-2.4.11.dist-info → meerschaum-2.4.13.dist-info}/METADATA +1 -1
  35. {meerschaum-2.4.11.dist-info → meerschaum-2.4.13.dist-info}/RECORD +41 -40
  36. {meerschaum-2.4.11.dist-info → meerschaum-2.4.13.dist-info}/WHEEL +1 -1
  37. {meerschaum-2.4.11.dist-info → meerschaum-2.4.13.dist-info}/LICENSE +0 -0
  38. {meerschaum-2.4.11.dist-info → meerschaum-2.4.13.dist-info}/NOTICE +0 -0
  39. {meerschaum-2.4.11.dist-info → meerschaum-2.4.13.dist-info}/entry_points.txt +0 -0
  40. {meerschaum-2.4.11.dist-info → meerschaum-2.4.13.dist-info}/top_level.txt +0 -0
  41. {meerschaum-2.4.11.dist-info → meerschaum-2.4.13.dist-info}/zip-safe +0 -0
@@ -10,17 +10,18 @@ from __future__ import annotations
10
10
  import os
11
11
  from meerschaum.utils.typing import Any, Union, Optional, Tuple, List
12
12
 
13
+
13
14
  def prompt(
14
- question: str,
15
- icon: bool = True,
16
- default: Union[str, Tuple[str, str], None] = None,
17
- default_editable: Optional[str] = None,
18
- detect_password: bool = True,
19
- is_password: bool = False,
20
- wrap_lines: bool = True,
21
- noask: bool = False,
22
- **kw: Any
23
- ) -> str:
15
+ question: str,
16
+ icon: bool = True,
17
+ default: Union[str, Tuple[str, str], None] = None,
18
+ default_editable: Optional[str] = None,
19
+ detect_password: bool = True,
20
+ is_password: bool = False,
21
+ wrap_lines: bool = True,
22
+ noask: bool = False,
23
+ **kw: Any
24
+ ) -> str:
24
25
  """
25
26
  Ask the user a question and return the answer.
26
27
  Wrapper around `prompt_toolkit.prompt()` with modified behavior.
@@ -75,7 +76,7 @@ def prompt(
75
76
  ### if a default is provided, append it to the question.
76
77
  default_answer = default
77
78
  if default is not None:
78
- question += f" (default: "
79
+ question += " (default: "
79
80
  if isinstance(default, tuple) and len(default) > 1:
80
81
  question += f"{default[0]} [{default[1]}]"
81
82
  default_answer = default[0]
@@ -86,7 +87,7 @@ def prompt(
86
87
  ### detect password
87
88
  if (detect_password and 'password' in question.lower()) or is_password:
88
89
  kw['is_password'] = True
89
-
90
+
90
91
  ### Add the icon and only color the first line.
91
92
  lines = question.split('\n')
92
93
  first_line = lines[0]
@@ -107,15 +108,15 @@ def prompt(
107
108
  answer = (
108
109
  prompt_toolkit.prompt(
109
110
  prompt_toolkit.formatted_text.ANSI(question),
110
- wrap_lines = wrap_lines,
111
- default = default_editable or '',
111
+ wrap_lines=wrap_lines,
112
+ default=default_editable or '',
112
113
  **filter_keywords(prompt_toolkit.prompt, **kw)
113
114
  ) if not noask else ''
114
115
  )
115
116
  else:
116
117
  print(question, end='\n', flush=True)
117
118
  try:
118
- answer = input()
119
+ answer = input() if not noask else ''
119
120
  except EOFError:
120
121
  answer = ''
121
122
  if noask:
meerschaum/utils/sql.py CHANGED
@@ -758,11 +758,11 @@ def build_where(
758
758
 
759
759
 
760
760
  def table_exists(
761
- table: str,
762
- connector: mrsm.connectors.sql.SQLConnector,
763
- schema: Optional[str] = None,
764
- debug: bool = False,
765
- ) -> bool:
761
+ table: str,
762
+ connector: mrsm.connectors.sql.SQLConnector,
763
+ schema: Optional[str] = None,
764
+ debug: bool = False,
765
+ ) -> bool:
766
766
  """Check if a table exists.
767
767
 
768
768
  Parameters
@@ -793,12 +793,12 @@ def table_exists(
793
793
 
794
794
 
795
795
  def get_sqlalchemy_table(
796
- table: str,
797
- connector: Optional[meerschaum.connectors.sql.SQLConnector] = None,
798
- schema: Optional[str] = None,
799
- refresh: bool = False,
800
- debug: bool = False,
801
- ) -> 'sqlalchemy.Table':
796
+ table: str,
797
+ connector: Optional[mrsm.connectors.sql.SQLConnector] = None,
798
+ schema: Optional[str] = None,
799
+ refresh: bool = False,
800
+ debug: bool = False,
801
+ ) -> Union['sqlalchemy.Table', None]:
802
802
  """
803
803
  Construct a SQLAlchemy table from its name.
804
804
 
@@ -829,6 +829,9 @@ def get_sqlalchemy_table(
829
829
  from meerschaum import get_connector
830
830
  connector = get_connector('sql')
831
831
 
832
+ if connector.flavor == 'duckdb':
833
+ return None
834
+
832
835
  from meerschaum.connectors.sql.tables import get_tables
833
836
  from meerschaum.utils.packages import attempt_import
834
837
  from meerschaum.utils.warnings import warn
@@ -1333,11 +1336,11 @@ def get_rename_table_queries(
1333
1336
 
1334
1337
 
1335
1338
  def get_create_table_query(
1336
- query: str,
1337
- new_table: str,
1338
- flavor: str,
1339
- schema: Optional[str] = None,
1340
- ) -> str:
1339
+ query: str,
1340
+ new_table: str,
1341
+ flavor: str,
1342
+ schema: Optional[str] = None,
1343
+ ) -> str:
1341
1344
  """
1342
1345
  Return a query to create a new table from a `SELECT` query.
1343
1346
 
@@ -1365,10 +1368,8 @@ def get_create_table_query(
1365
1368
  new_table_name = sql_item_name(new_table, flavor, schema)
1366
1369
  if flavor in ('mssql',):
1367
1370
  query = query.lstrip()
1368
- original_query = query
1369
1371
  if 'with ' in query.lower():
1370
1372
  final_select_ix = query.lower().rfind('select')
1371
- def_name = query[len('WITH '):].split(' ', maxsplit=1)[0]
1372
1373
  return (
1373
1374
  query[:final_select_ix].rstrip() + ',\n'
1374
1375
  + f"{create_cte_name} AS (\n"
@@ -1405,12 +1406,86 @@ def get_create_table_query(
1405
1406
  return textwrap.dedent(create_table_query)
1406
1407
 
1407
1408
 
1409
+ def wrap_query_with_cte(
1410
+ sub_query: str,
1411
+ parent_query: str,
1412
+ flavor: str,
1413
+ cte_name: str = "src",
1414
+ ) -> str:
1415
+ """
1416
+ Wrap a subquery in a CTE and append an encapsulating query.
1417
+
1418
+ Parameters
1419
+ ----------
1420
+ sub_query: str
1421
+ The query to be referenced. This may itself contain CTEs.
1422
+ Unless `cte_name` is provided, this will be aliased as `src`.
1423
+
1424
+ parent_query: str
1425
+ The larger query to append which references the subquery.
1426
+ This must not contain CTEs.
1427
+
1428
+ flavor: str
1429
+ The database flavor, e.g. `'mssql'`.
1430
+
1431
+ cte_name: str, default 'src'
1432
+ The CTE alias, defaults to `src`.
1433
+
1434
+ Returns
1435
+ -------
1436
+ An encapsulating query which allows you to treat `sub_query` as a temporary table.
1437
+
1438
+ Examples
1439
+ --------
1440
+
1441
+ ```python
1442
+ from meerschaum.utils.sql import wrap_query_with_cte
1443
+ sub_query = "WITH foo AS (SELECT 1 AS val) SELECT (val * 2) AS newval FROM foo"
1444
+ parent_query = "SELECT newval * 3 FROM src"
1445
+ query = wrap_query_with_cte(sub_query, parent_query, 'mssql')
1446
+ print(query)
1447
+ # WITH foo AS (SELECT 1 AS val),
1448
+ # [src] AS (
1449
+ # SELECT (val * 2) AS newval FROM foo
1450
+ # )
1451
+ # SELECT newval * 3 FROM src
1452
+ ```
1453
+
1454
+ """
1455
+ sub_query = sub_query.lstrip()
1456
+ cte_name_quoted = sql_item_name(cte_name, flavor, None)
1457
+
1458
+ if flavor in NO_CTE_FLAVORS:
1459
+ return (
1460
+ parent_query
1461
+ .replace(cte_name_quoted, '--MRSM_SUBQUERY--')
1462
+ .replace(cte_name, '--MRSM_SUBQUERY--')
1463
+ .replace('--MRSM_SUBQUERY--', f"(\n{sub_query}\n) AS {cte_name_quoted}")
1464
+ )
1465
+
1466
+ if 'with ' in sub_query.lower():
1467
+ final_select_ix = sub_query.lower().rfind('select')
1468
+ return (
1469
+ sub_query[:final_select_ix].rstrip() + ',\n'
1470
+ + f"{cte_name_quoted} AS (\n"
1471
+ + ' ' + sub_query[final_select_ix:]
1472
+ + "\n)\n"
1473
+ + parent_query
1474
+ )
1475
+
1476
+ return (
1477
+ f"WITH {cte_name_quoted} AS (\n"
1478
+ f" {sub_query}\n"
1479
+ f")\n{parent_query}"
1480
+ )
1481
+
1482
+
1408
1483
  def format_cte_subquery(
1409
- sub_query: str,
1410
- flavor: str,
1411
- sub_name: str = 'src',
1412
- cols_to_select: Union[List[str], str] = '*',
1413
- ) -> str:
1484
+ sub_query: str,
1485
+ flavor: str,
1486
+ sub_name: str = 'src',
1487
+ cols_to_select: Union[List[str], str] = '*',
1488
+ ) -> str:
1414
1489
  """
1415
1490
  Given a subquery, build a wrapper query that selects from the CTE subquery.
1416
1491
 
@@ -1434,28 +1509,25 @@ def format_cte_subquery(
1434
1509
  -------
1435
1510
  A wrapper query that selects from the CTE.
1436
1511
  """
1437
- import textwrap
1438
1512
  quoted_sub_name = sql_item_name(sub_name, flavor, None)
1439
1513
  cols_str = (
1440
1514
  cols_to_select
1441
1515
  if isinstance(cols_to_select, str)
1442
1516
  else ', '.join([sql_item_name(col, flavor, None) for col in cols_to_select])
1443
1517
  )
1444
- return textwrap.dedent(
1445
- f"""
1446
- SELECT {cols_str}
1447
- FROM ({sub_query})"""
1448
- + (f' AS {quoted_sub_name}' if flavor != 'oracle' else '') + """
1449
- """
1518
+ parent_query = (
1519
+ f"SELECT {cols_str}\n"
1520
+ f"FROM {quoted_sub_name}"
1450
1521
  )
1522
+ return wrap_query_with_cte(sub_query, parent_query, flavor, cte_name=sub_name)
1451
1523
 
1452
1524
 
1453
1525
  def session_execute(
1454
- session: 'sqlalchemy.orm.session.Session',
1455
- queries: Union[List[str], str],
1456
- with_results: bool = False,
1457
- debug: bool = False,
1458
- ) -> Union[mrsm.SuccessTuple, Tuple[mrsm.SuccessTuple, List['sqlalchemy.sql.ResultProxy']]]:
1526
+ session: 'sqlalchemy.orm.session.Session',
1527
+ queries: Union[List[str], str],
1528
+ with_results: bool = False,
1529
+ debug: bool = False,
1530
+ ) -> Union[mrsm.SuccessTuple, Tuple[mrsm.SuccessTuple, List['sqlalchemy.sql.ResultProxy']]]:
1459
1531
  """
1460
1532
  Similar to `SQLConnector.exec_queries()`, execute a list of queries
1461
1533
  and roll back when one fails.
@@ -29,15 +29,16 @@ active_venvs = set()
29
29
  active_venvs_counts: Dict[str, int] = {}
30
30
  active_venvs_order: List[Optional[str]] = []
31
31
  threads_active_venvs: Dict[int, 'set[str]'] = {}
32
+ CREATE_NEW_PROCESS_GROUP = 0x00000200
32
33
 
33
34
 
34
35
  def activate_venv(
35
- venv: Optional[str] = 'mrsm',
36
- color: bool = True,
37
- force: bool = False,
38
- debug: bool = False,
39
- **kw
40
- ) -> bool:
36
+ venv: Optional[str] = 'mrsm',
37
+ color: bool = True,
38
+ force: bool = False,
39
+ debug: bool = False,
40
+ **kw
41
+ ) -> bool:
41
42
  """
42
43
  Create a virtual environment (if it doesn't exist) and add it to `sys.path` if necessary.
43
44
 
@@ -102,13 +103,13 @@ def activate_venv(
102
103
 
103
104
 
104
105
  def deactivate_venv(
105
- venv: str = 'mrsm',
106
- color: bool = True,
107
- debug: bool = False,
108
- previously_active_venvs: Union['set[str]', List[str], None] = None,
109
- force: bool = False,
110
- **kw
111
- ) -> bool:
106
+ venv: str = 'mrsm',
107
+ color: bool = True,
108
+ debug: bool = False,
109
+ previously_active_venvs: Union['set[str]', List[str], None] = None,
110
+ force: bool = False,
111
+ **kw
112
+ ) -> bool:
112
113
  """
113
114
  Remove a virtual environment from `sys.path` (if it's been activated).
114
115
 
@@ -498,14 +499,14 @@ def venv_executable(venv: Optional[str] = 'mrsm') -> str:
498
499
 
499
500
 
500
501
  def venv_exec(
501
- code: str,
502
- venv: Optional[str] = 'mrsm',
503
- env: Optional[Dict[str, str]] = None,
504
- with_extras: bool = False,
505
- as_proc: bool = False,
506
- capture_output: bool = True,
507
- debug: bool = False,
508
- ) -> Union[bool, Tuple[int, bytes, bytes]]:
502
+ code: str,
503
+ venv: Optional[str] = 'mrsm',
504
+ env: Optional[Dict[str, str]] = None,
505
+ with_extras: bool = False,
506
+ as_proc: bool = False,
507
+ capture_output: bool = True,
508
+ debug: bool = False,
509
+ ) -> Union[bool, Tuple[int, bytes, bytes]]:
509
510
  """
510
511
  Execute Python code in a subprocess via a virtual environment's interpeter.
511
512
  Return `True` if the code successfully executes, `False` on failure.
@@ -538,6 +539,7 @@ def venv_exec(
538
539
  """
539
540
  import os
540
541
  import subprocess
542
+ import platform
541
543
  from meerschaum.utils.debug import dprint
542
544
  executable = venv_executable(venv=venv)
543
545
  cmd_list = [executable, '-c', code]
@@ -549,11 +551,20 @@ def venv_exec(
549
551
  return subprocess.call(cmd_list, env=env) == 0
550
552
 
551
553
  stdout, stderr = (None, None) if not capture_output else (subprocess.PIPE, subprocess.PIPE)
554
+ group_kwargs = (
555
+ {
556
+ 'preexec_fn': os.setsid,
557
+ } if platform.system() != 'Windows'
558
+ else {
559
+ 'creationflags': CREATE_NEW_PROCESS_GROUP,
560
+ }
561
+ )
552
562
  process = subprocess.Popen(
553
563
  cmd_list,
554
- stdout = stdout,
555
- stderr = stderr,
556
- env = env,
564
+ stdout=stdout,
565
+ stderr=stderr,
566
+ env=env,
567
+ **group_kwargs
557
568
  )
558
569
  if as_proc:
559
570
  return process
@@ -154,13 +154,13 @@ def exception_with_traceback(
154
154
 
155
155
 
156
156
  def error(
157
- message: str,
158
- exception_class = Exception,
159
- nopretty: bool = False,
160
- silent: bool = True,
161
- stack: bool = True,
162
- raise_: bool = True,
163
- ):
157
+ message: str,
158
+ exception_class = Exception,
159
+ nopretty: bool = False,
160
+ silent: bool = True,
161
+ stack: bool = True,
162
+ raise_: bool = True,
163
+ ):
164
164
  """
165
165
  Raise an exception with supressed traceback.
166
166
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.4.11
3
+ Version: 2.4.13
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -1,19 +1,19 @@
1
1
  meerschaum/__init__.py,sha256=6bn5zz7VInDP4fE_FGBMzJYrM6rQhBMJNQqsf1pU7eI,1701
2
2
  meerschaum/__main__.py,sha256=r5UjYxH1WA6dGG9YGBPul5xOdgF3Iwl0X4dWDtXU-30,2646
3
3
  meerschaum/_internal/__init__.py,sha256=ilC7utfKtin7GAvuN34fKyUQYfPyqH0Mm3MJF5iyEf4,169
4
- meerschaum/_internal/entry.py,sha256=5vBZxQbtN0l9lia9HcvvLVWDCpSeThg-505dGhKiOBo,12234
4
+ meerschaum/_internal/entry.py,sha256=6attwMETUtFUtWq17asaSaNoeEvrwSLIVV_e5RX0pCc,12235
5
5
  meerschaum/_internal/arguments/__init__.py,sha256=_nSKKVLXNsJeSv-buxEZsx8_c0BAbkhRyE4nT6Bv6q0,541
6
- meerschaum/_internal/arguments/_parse_arguments.py,sha256=602U0rQrKKGfJQYY_c13GcCD0avjOa44c5GoqIAD_iE,15805
6
+ meerschaum/_internal/arguments/_parse_arguments.py,sha256=H492J571CetGVIEzOZhwQVS3bcm4t6hjWg8Gsf6dw0Y,16340
7
7
  meerschaum/_internal/arguments/_parser.py,sha256=l2RYIn-1MEpjyUz2yczkeeuwg2liYaO2MNvEZ4Amk1o,16364
8
8
  meerschaum/_internal/docs/__init__.py,sha256=ZQYHWo6n0kfLLkyG36YXqTYvv2Pc7it5HZHMylT6cBA,126
9
- meerschaum/_internal/docs/index.py,sha256=IBVotNZ6f9KTSefXq5cCikcZ7mnjDy98JOeb-KPLkyg,24514
9
+ meerschaum/_internal/docs/index.py,sha256=8nU5Ck4I8ZrTTT2yWRCJYx92g2OfL23LWNZZ2eFSXaU,24585
10
10
  meerschaum/_internal/gui/__init__.py,sha256=KF6Opae0aBOjIndMZ2txoPs7ozCXRlR-lcTsicLO7fc,1313
11
11
  meerschaum/_internal/gui/app/__init__.py,sha256=rKUa8hHk6Fai-PDF61tQcpT1myxKcfmvEMDHxThNp7o,1565
12
12
  meerschaum/_internal/gui/app/_windows.py,sha256=-VHdjTzA3V596fVqnbmTxemONSp_80-sTNJ0CTB8FwU,2632
13
13
  meerschaum/_internal/gui/app/actions.py,sha256=rx37qXf3uoa7Ou0n1cISqNFZNL0nr4wO7vSUmWO8f2E,935
14
14
  meerschaum/_internal/gui/app/pipes.py,sha256=4nAQ0rrHb_2bNgDF0Ru2YlbPaCDDzAl5beOGU4Af-4A,1596
15
- meerschaum/_internal/shell/Shell.py,sha256=KfJBubM9ajjPgTF8p-QBbv-UvcpG9m5BD4lNEdngQuk,39883
16
- meerschaum/_internal/shell/ShellCompleter.py,sha256=bbG-mExNXO4pltWBOXdbMp8P2wLgy8_BgipIr5aGp5s,3114
15
+ meerschaum/_internal/shell/Shell.py,sha256=-dw1k9NbG0VGX0Sve1c8gQ1_XsMYcmYl0VwSO98ERVk,40099
16
+ meerschaum/_internal/shell/ShellCompleter.py,sha256=uWo-SYBXDGEeKExsjVWi-u7yfnc5XWWCy4Nl4eSO8j4,3340
17
17
  meerschaum/_internal/shell/ValidAutoSuggest.py,sha256=bARjOWMidz0dvMelLUe6yRPto5l3gcEHYHqFDjoh22I,1280
18
18
  meerschaum/_internal/shell/__init__.py,sha256=vXQoQPEVlYiUYai1b5AwQAlTnja6A2cSABnqXhzlS7I,281
19
19
  meerschaum/_internal/shell/updates.py,sha256=FmKu1NsIE7AI1zq8zNeKneZzORv6BeURQeX0lRR81Ag,5040
@@ -24,13 +24,13 @@ meerschaum/_internal/term/tools.py,sha256=dXVAimKD-Yv2fg2WOTr0YGBY7XDKjQqw-RizcS
24
24
  meerschaum/actions/__init__.py,sha256=MHPs8aRBhbZQXnqd_6tVtisTrNCgPAPgnNcXYbn0zP8,11640
25
25
  meerschaum/actions/api.py,sha256=xeqkf4S-DEzFR8roIF1mzy-i_mAnUPkF7y3nIu8twCo,12593
26
26
  meerschaum/actions/attach.py,sha256=UV19d9W_2WYcrf7BRz7k3mriDoX1V4rA4AKvbLdor0o,3106
27
- meerschaum/actions/bootstrap.py,sha256=z6Wmx9EDKr5gfyMyMmyiTf_oVDASdcgChkKyzHYPOmQ,14924
28
- meerschaum/actions/clear.py,sha256=OoFZE0bK5m8s3GLNZcixuVT0DMj1izXVxGCATcmUGbI,4851
27
+ meerschaum/actions/bootstrap.py,sha256=9y4HU1uqjbkAg_706pOOJUMzl196pU7ghfGDCWg0vPE,18234
28
+ meerschaum/actions/clear.py,sha256=tMacHFv8btWpkNnXHtKDOMiCDNhGb5S6CJhCDIrrNDk,4914
29
29
  meerschaum/actions/copy.py,sha256=NwTwj3IMdK1TFRuJXCxsbIEFNVeoNGoMkvE6H1ZQZzo,6838
30
30
  meerschaum/actions/deduplicate.py,sha256=puYyxeFYEUy1Sd2IOcZB2e6MrNxAZl2bTLmNzFDkCiw,1167
31
- meerschaum/actions/delete.py,sha256=DnEdkt_H4OYoee2DG-1mSDpTBp_Ay2aI1euRa4twPJU,19029
31
+ meerschaum/actions/delete.py,sha256=7hW4Ff_WSczW8If-EEDbEUU0U0XzV3fVbFb9gED4S9Q,19032
32
32
  meerschaum/actions/drop.py,sha256=Hd5h4rrWd7qL2rTqglsTonUsEoH7qQlsfqNFSHGeqr0,2453
33
- meerschaum/actions/edit.py,sha256=6d1Y8Ejd4zQWVARvx04cvbGyRA2r4ihJXWqMFiFX0aM,11740
33
+ meerschaum/actions/edit.py,sha256=bJ9DaPXGOySjq_rGFPVlbK99Ls9ajbQ5q5MksX_3WVY,15440
34
34
  meerschaum/actions/install.py,sha256=jdhOrR_KlvinTKr0YJNkUHsnh5EY6OzA7cRq0Vnp1oU,7494
35
35
  meerschaum/actions/login.py,sha256=fNgsgkrFCn9wBQJY50SQhz2PwsN_TvEYYHnXK3JG4ig,4206
36
36
  meerschaum/actions/os.py,sha256=dtoppoBhLzW3rLNF0SFovEfNxA4WJWt_9WrOGlS5KbA,2251
@@ -40,16 +40,16 @@ meerschaum/actions/register.py,sha256=By4eCJn-nvrWKs8dPG5GqMClUMm9y_yvIwU_FwRqJX
40
40
  meerschaum/actions/reload.py,sha256=gMXeFBGVfyQ7uhKhYf6bLaDMD0fLPcA9BrLBSiuvWIc,508
41
41
  meerschaum/actions/restart.py,sha256=6ffp3-X9eTEgunVSdD41HnOwqp71yjuSAmXJ5j39ONI,3038
42
42
  meerschaum/actions/setup.py,sha256=KkAGWcgwzl_L6A19fTmTX1KtBjW2FwD8QenLjPy0mQQ,3205
43
- meerschaum/actions/sh.py,sha256=fLfTJaacKu4sjLTRqEzzYlT2WbbdZBEczsKb6F-qAek,2026
43
+ meerschaum/actions/sh.py,sha256=hSkGNTVqP5dNjhJ64zy3V3VCFPTKnDlH3PxdKdxtkGQ,1990
44
44
  meerschaum/actions/show.py,sha256=T8Ol1o-762cI9rlUzd-8svvwgT4slYXYfOPQETh9Koo,28446
45
45
  meerschaum/actions/sql.py,sha256=8BSvlnccfEqLrscLq67Toa5D4FJ7I598IdxEe_yzmV8,4263
46
46
  meerschaum/actions/stack.py,sha256=ZwrCTGJ0x3jjZkRieWcvqasQHYCqNtB1HYvTX-r3Z3g,5996
47
- meerschaum/actions/start.py,sha256=7B6zLHh-DNWnJta1h_RV9ccGJ4EnbEDu3k-GdwAsU8M,19208
47
+ meerschaum/actions/start.py,sha256=26i2Pqg3c_Ltw3lgYzl3sZL2wG0XBgOuJrPK8qPPHdI,21281
48
48
  meerschaum/actions/stop.py,sha256=5fdUw70YN-yuUWrC-NhA88cxr9FZ5NbssbQ8xXO8nFU,4632
49
- meerschaum/actions/sync.py,sha256=DTWDIx7QGwh9zCxwG9L1k3k598h_ePPkrVkybwWUt4w,17225
49
+ meerschaum/actions/sync.py,sha256=uXneLSykNH0LapE4kn_9fzwUQ-kJcRUzJ42pyuoFNaI,17161
50
50
  meerschaum/actions/tag.py,sha256=SJf5qFW0ccLXjqlTdkK_0MCcrCMdg6xhYrhKdco0hdA,3053
51
51
  meerschaum/actions/uninstall.py,sha256=tBXhdXggSieGEQe4EPGxpgMK0MZTJCweNvAJ9-59El0,5776
52
- meerschaum/actions/upgrade.py,sha256=uhFhAPmguGDgxLa1UkVZnPQ-JRcbmOdExE38v-HrLvo,6471
52
+ meerschaum/actions/upgrade.py,sha256=1oXzK05WH-l8wq8Dxidr7c0hn7UQa3SuwRk0yyQH5vI,6462
53
53
  meerschaum/actions/verify.py,sha256=tY5slGpHiWiE0v9TDnjbmxSKn86zBnu9WBpixUgKNQU,4885
54
54
  meerschaum/api/__init__.py,sha256=5q2XelZvqZSyfCyGIf1mlrWVxrsDaG2_I4L5ACeqMso,8456
55
55
  meerschaum/api/_chain.py,sha256=h8-WXUGXX6AqzdALfsBC5uv0FkAcLdHJXCGzqzuq89k,875
@@ -60,7 +60,7 @@ meerschaum/api/dash/__init__.py,sha256=Qs7Q1wMI3TWl1gRECgHyJpPb7Zh70F_6TLIF8_qDv
60
60
  meerschaum/api/dash/components.py,sha256=t2goHW7oioao5Ew6Dro9U4LZDnHF-YWb4flLPx46GP8,6293
61
61
  meerschaum/api/dash/connectors.py,sha256=nJxBOFldtCMJLYjUSVYZwX5BO-LNjTNHgoEaXe-0XMo,843
62
62
  meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
63
- meerschaum/api/dash/jobs.py,sha256=kcWBdOk3tNQTTuN91nd5qbS4u8MmAl3SX0gkAfdKnpk,7279
63
+ meerschaum/api/dash/jobs.py,sha256=mj9STE6AaQY4fwkjD1JcYRG0iW3VEcP04bO1SlKgiXw,7681
64
64
  meerschaum/api/dash/keys.py,sha256=hzEVeN60SAfVTVSO5lajGaykxRIKGhj9Ph00HRJnNoE,12598
65
65
  meerschaum/api/dash/pipes.py,sha256=Bgp33bGkIFcqjrLiUxEubpxcXVVssY8bzwi7kLp6UQ8,21814
66
66
  meerschaum/api/dash/plugins.py,sha256=KdfG04f6SsUpBg-nm7MUJegFGuElOj-GAkxDX98hi60,3768
@@ -77,15 +77,16 @@ meerschaum/api/dash/assets/logo_48x48.png,sha256=hTR5BHUHEN4yP2xiqAcDciuigoII9T3
77
77
  meerschaum/api/dash/assets/logo_500x500.png,sha256=9EUtf6wQcEZTXHKfQ2kjNXod6Rn_4DTB_BkTgxggq00,67702
78
78
  meerschaum/api/dash/callbacks/__init__.py,sha256=5nLDkziaWWWt5ivmuMNG3kVBMOfqB6KQNIAS8f16bmA,493
79
79
  meerschaum/api/dash/callbacks/custom.py,sha256=N9pVolAF8sIuJD3V6xBSgS7k8THJo_f8d1qAoh1Kg60,1161
80
- meerschaum/api/dash/callbacks/dashboard.py,sha256=c0gEHVfxR4QeB87F3Bx4_cLK5xSrfqAzsiz7MwQRvdU,32731
81
- meerschaum/api/dash/callbacks/jobs.py,sha256=F0H8dDUMOr_1C6Pr8yNQCAHhqgJQklHBiOzstOjiQQo,7282
80
+ meerschaum/api/dash/callbacks/dashboard.py,sha256=aXZ22qcVq_MOn2GWBuFV1MUjmojLjyDk24QyaUnkkk4,32757
81
+ meerschaum/api/dash/callbacks/jobs.py,sha256=JYTrDcUEte_MIT3EegLDmQDsmU_Mxqw8L60dvF71ho4,8418
82
82
  meerschaum/api/dash/callbacks/login.py,sha256=mEvMgV-f85H6DvqNdTvJPoiwHqTnhWY2nf_zLB26ipE,2876
83
- meerschaum/api/dash/callbacks/pipes.py,sha256=AJcs-1BTc_gCxIE6Y2-DM7GB2Cg4QS3V_1HMCzwHF1Q,1688
83
+ meerschaum/api/dash/callbacks/pipes.py,sha256=byphQn-wJOe8ft-fGU9wac0n5xsMjVHJzNvYYb9NsKU,1693
84
84
  meerschaum/api/dash/callbacks/plugins.py,sha256=znPgw_Uf3__QEjKxoIHADfjVNubTehCDaTJ02b16pQo,2760
85
85
  meerschaum/api/dash/callbacks/register.py,sha256=KfMFgXWiFkemz0YriSPaLQBVnFDG8q6_t9gHuempOS0,3666
86
- meerschaum/api/dash/pages/__init__.py,sha256=ZZAWLCgFjl8Gh5MzqeWM7HkXP3uSUuUn-73vQisnAKc,312
86
+ meerschaum/api/dash/pages/__init__.py,sha256=E3MI73_FR21R_-npTJ9HBNd7hdbOwQ75V-TMpq3ohz8,349
87
87
  meerschaum/api/dash/pages/dashboard.py,sha256=WKwy40kgm2Qy0k1ZTIueFnnVu0YBzFAd_8AT6CHHvfM,3835
88
88
  meerschaum/api/dash/pages/error.py,sha256=-uCrASuIBrceHcc-leLeEoLos2ibSBWG0XMFQzFwtbw,595
89
+ meerschaum/api/dash/pages/job.py,sha256=bAXXDB0fM3bSiqqJ2XlTwVdg2lohRaWdIGZp7ZtTZOw,544
89
90
  meerschaum/api/dash/pages/login.py,sha256=w8Cy1l4HSiMMgUndE4X_8pB0odU_iG7x1dwe9JrwR88,4633
90
91
  meerschaum/api/dash/pages/pipes.py,sha256=Cd5XY_m4nBIsEk6TQadpcajuBRzxw1cyDaTtojwykcI,506
91
92
  meerschaum/api/dash/pages/plugins.py,sha256=9VpRqWW-3OhgZDUoo4J8PYswd231HaxlcSntxOOKsQA,1549
@@ -120,7 +121,7 @@ meerschaum/api/routes/__init__.py,sha256=jbkeFNl51Tg8aT5gWe560ZLZLojFJsLMe5IENRj
120
121
  meerschaum/api/routes/_actions.py,sha256=KGUlPyWiO0e7t7Fj8-nIowWokDVP22Gr9z1XxLx5tpw,3063
121
122
  meerschaum/api/routes/_connectors.py,sha256=NNbcn5xWhKqw2PqueSEaqRaZ95hFGDKazG5lE7gsssc,1849
122
123
  meerschaum/api/routes/_index.py,sha256=QI6CBo6pI2Zi0a6fJHDjZfiLa9f4okb0BGe3A_JD0kM,578
123
- meerschaum/api/routes/_jobs.py,sha256=vO6CJYUme7bHIOy9gAv6VyEM1M8EKdJmtfw2nSnZ24Q,11639
124
+ meerschaum/api/routes/_jobs.py,sha256=deKv9Y9XtCAB6u3ZyI2_zeMbrzkA8Q8-o6PWmTf9sxc,11702
124
125
  meerschaum/api/routes/_login.py,sha256=ti2onNOemOGLHLoPubAQOYtD7eq7FA1jOlbOSVSjXVo,2466
125
126
  meerschaum/api/routes/_misc.py,sha256=05--9ZVFeaCgZrHER2kA3SYdK4TyfkEXOCjLvPbum-w,2469
126
127
  meerschaum/api/routes/_pipes.py,sha256=g88AU_NUM6tlX3bFl4EOGiQWZYqvDxDFlaLIYbYn1c4,21397
@@ -142,7 +143,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
142
143
  meerschaum/config/_read_config.py,sha256=oxnLjuhy6JBBld886FkBX07wUdkpzEzTItYMUa9qw1Q,14688
143
144
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
144
145
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
145
- meerschaum/config/_version.py,sha256=9NLPMqpdHoxcmqv9rrCsNQ_rVMY6J9XihmkfJDNleHI,72
146
+ meerschaum/config/_version.py,sha256=kz1QZdlaaIVseDrdmhCpAtbsywLZfvnZsEoYBk9hyyE,72
146
147
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
147
148
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
149
  meerschaum/config/stack/__init__.py,sha256=gGVxXgNnGb9u25iF__IiNPlZt1BLUVmHmFJ0jvnJg3Q,10548
@@ -173,9 +174,9 @@ meerschaum/connectors/sql/_SQLConnector.py,sha256=QlC2Af7AM7bIlPHjUO57mTyzot3zU7
173
174
  meerschaum/connectors/sql/__init__.py,sha256=3cqYiDkVasn7zWdtOTAZbT4bo95AuvGOmDD2TkaAxtw,205
174
175
  meerschaum/connectors/sql/_cli.py,sha256=1SgnWeMIAihoxp4FzbNrcq1npXf0dSOQnCntpU9hUXA,4405
175
176
  meerschaum/connectors/sql/_create_engine.py,sha256=pZPjy-ne8DtVfu-wqMJopIGkgm8vul-y3E9d4tUyTgM,10215
176
- meerschaum/connectors/sql/_fetch.py,sha256=NYYWDoEd-aGIS337KwH-D9_3KVWVCZOHAspGLfdEuUE,13086
177
+ meerschaum/connectors/sql/_fetch.py,sha256=4-Bc4X8dFo6bikVGE5X16s4qmdqbN7NpGPeYB3MlqAA,13014
177
178
  meerschaum/connectors/sql/_instance.py,sha256=zXPZnEqvOAeOUPMeh6CcfkB1pOjjwJxdUOwXccRbuwk,6465
178
- meerschaum/connectors/sql/_pipes.py,sha256=zrpdCOaAnVN0I_XVkSQu-voDMpRYibj5Y0k358IgkRQ,100593
179
+ meerschaum/connectors/sql/_pipes.py,sha256=-jbuBjZ8EET2bkhgAWQmqci5FNcBCZUqnOcF_tuHq8M,101055
179
180
  meerschaum/connectors/sql/_plugins.py,sha256=wbxcNxqTtjfDsxPvdVGTllasYf6NHHzODaQ72hEUSBQ,8135
180
181
  meerschaum/connectors/sql/_sql.py,sha256=zEh6fbOLJhfLOF-4x9OTQ5Fi3NMSVES3oixmnGYcNG8,36381
181
182
  meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
@@ -214,8 +215,8 @@ meerschaum/jobs/_Job.py,sha256=hkjHqG5YPej5rC4nwdU7Ay_mjep9Fy4HO5B-eqdBdfo,31984
214
215
  meerschaum/jobs/__init__.py,sha256=q0f_2zWw91sAyafP50IgMM06abe-BIYSR_SCWmI4W3E,12177
215
216
  meerschaum/jobs/systemd.py,sha256=Rq-tsDPslG17ZhpKMrVJ5r8Z0IPr6DEc9APObfIoXCg,24614
216
217
  meerschaum/plugins/_Plugin.py,sha256=rTiGNQ9nIQeVSG_P9C6DHCMLW0K-J7zzuu3FjNXUOlE,34056
217
- meerschaum/plugins/__init__.py,sha256=trMQ53qgP7ikJhhV_uXzqJw6X1NDz2rPOGXFk40bb1Y,26190
218
- meerschaum/plugins/bootstrap.py,sha256=qg9MQ1YAU8ShwGqWDl38WjiXLIxDPl95pSIGDLN9rOw,11423
218
+ meerschaum/plugins/__init__.py,sha256=6krcqaMKyzuVqesXMqEL0XEy2SJQ4xfNt2-oI_fJ6v0,26278
219
+ meerschaum/plugins/bootstrap.py,sha256=VwjpZAuYdqPJW0YoVgAoM_taHkdQHqP902-8T7OWWCI,11339
219
220
  meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
220
221
  meerschaum/utils/_get_pipes.py,sha256=tu4xKPoDn79Dz2kWM13cXTP4DSCkn-3G9M8KiLftopw,11073
221
222
  meerschaum/utils/dataframe.py,sha256=qV_6ecpxMIZOoiUb0pIk8u5ZPBn-h6O1yS_DtdLFX_U,41937
@@ -224,13 +225,13 @@ meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mi
224
225
  meerschaum/utils/misc.py,sha256=OijhS1TMjlqkDvahbxhqfUdo0Myeor-kTKrvqqG8wN0,46349
225
226
  meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
226
227
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
227
- meerschaum/utils/process.py,sha256=o7UtTQX87YGkg2dItPhlvN7gNQPkElXTYSzKf5Ro8Uc,7474
228
- meerschaum/utils/prompt.py,sha256=0asF_ndumQIN7p5kEOzK-ldsdE4m8FFapcT3-4wgPi8,19010
228
+ meerschaum/utils/process.py,sha256=9O8PPPJjY9Q5W2f39I3B3lFU6TlSiRiI3bgrzdOOyOw,7843
229
+ meerschaum/utils/prompt.py,sha256=6J--mZJ_NcEdSX6KMjtY4fXXezyILLHP24VdxFFqOIc,18985
229
230
  meerschaum/utils/schedule.py,sha256=6I2TFGa1aPRU9wTdd3YFrJq-DCPpnl-sTWeFEnrINYA,10886
230
- meerschaum/utils/sql.py,sha256=vZx6HyvaFKrvWDMZYSzHZaSQWMMWQOUmK-LLW5Kx7Lg,47993
231
+ meerschaum/utils/sql.py,sha256=R_hX92brvZDqID7c85-PNUVVR6RWXGXEgn1vFpHmi88,49869
231
232
  meerschaum/utils/threading.py,sha256=3N8JXPAnwqJiSjuQcbbJg3Rv9-CCUMJpeQRfKFR7MaA,2489
232
233
  meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
233
- meerschaum/utils/warnings.py,sha256=IDiwYspsfjIi1gtk3V9cSo9vNLckB9bCsHhRClpPJTc,6639
234
+ meerschaum/utils/warnings.py,sha256=n-phr3BftNNgyPnvnXC_VMSjtCvjiCZ-ewmVfcROhkc,6611
234
235
  meerschaum/utils/yaml.py,sha256=PoC1du0pn2hLwTHwL-zuOf_EBWZSbCGOz-P-AZ4BWN0,3901
235
236
  meerschaum/utils/daemon/Daemon.py,sha256=rLUjJTGwKVUGVTHyz_A_lUJ_Wb2CgzT1ZFLhLwvGiNk,42142
236
237
  meerschaum/utils/daemon/FileDescriptorInterceptor.py,sha256=MJKMO0Syf3d8yWUs6xXcQzg8Ptsuvh2aCRRoglOjusA,5257
@@ -240,21 +241,21 @@ meerschaum/utils/daemon/__init__.py,sha256=o9jWb4lRTIyny4EPt7fPXFgV_vIf1mUofsTwo
240
241
  meerschaum/utils/daemon/_names.py,sha256=d2ZwTxBoTAqXZkCfZ5LuX2XrkQmLNUq1OTlUqfoH5dA,4515
241
242
  meerschaum/utils/dtypes/__init__.py,sha256=LawV4XrCLZRhyGquUen3i0HvK2IRHG-Ud4MYi3L4phA,7391
242
243
  meerschaum/utils/dtypes/sql.py,sha256=K0pginy3U5UvgtM9af-HRoiqdvFlwiAmKNQBPGChIUA,16267
243
- meerschaum/utils/formatting/__init__.py,sha256=GLx3fvTQi7EnC9fo31WggpMRpmR7yTWIuZmHdZgqvuM,15370
244
+ meerschaum/utils/formatting/__init__.py,sha256=GpJQWeqkdWw5IuDmW4Rgmapjzv-KkI4jhBZllJi4QIg,15999
244
245
  meerschaum/utils/formatting/_jobs.py,sha256=izsqPJhTtUkXUUtWnbXtReYsUYwulXtci3pBj72Ne64,6637
245
- meerschaum/utils/formatting/_pipes.py,sha256=qud_zaGKP3gh-Z5BMYadwEKWSwzUyR44Jg1RGCzAsXI,19476
246
+ meerschaum/utils/formatting/_pipes.py,sha256=840O5rg2aHhQoraCDOh2ZtBo43_W2W6R60yYufEoXp8,19494
246
247
  meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
247
- meerschaum/utils/formatting/_shell.py,sha256=OMFh3cSZNr83z8m265irkS_JtEWHwjkEY2ybnMIOllY,3774
248
+ meerschaum/utils/formatting/_shell.py,sha256=XH7VFLteNv7NGtWhJl7FdIGt80sKeTiDoJokGSDAwBM,3761
248
249
  meerschaum/utils/packages/__init__.py,sha256=m3HLTkKJxXco1g-h75q2l5skBwKXWaJtNmfQOsijchI,63965
249
250
  meerschaum/utils/packages/_packages.py,sha256=8Ox9fiQTVmmKAmlxZBV-7Wtq_jhPnnf3AMXvktGE-KY,8319
250
251
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
251
252
  meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
252
- meerschaum/utils/venv/__init__.py,sha256=G3KXL4ByWNqVxBRLs_RaJbO3h3tOKXkazkAYuoUW568,24420
253
- meerschaum-2.4.11.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
254
- meerschaum-2.4.11.dist-info/METADATA,sha256=wM7_OUJbfvPeKsipK-mBIrh8ffGAWhPB1yP3HiI3-lA,24820
255
- meerschaum-2.4.11.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
256
- meerschaum-2.4.11.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
257
- meerschaum-2.4.11.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
258
- meerschaum-2.4.11.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
259
- meerschaum-2.4.11.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
260
- meerschaum-2.4.11.dist-info/RECORD,,
253
+ meerschaum/utils/venv/__init__.py,sha256=f3oi67lXYPLKJrnRW9lae7M3A8SFiC7DzaMoBdCVUFs,24609
254
+ meerschaum-2.4.13.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
+ meerschaum-2.4.13.dist-info/METADATA,sha256=y0OKNCTNx9iyL9PI80-yYa_Yg9SYcSK8Td172EBl5Fo,24820
256
+ meerschaum-2.4.13.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
+ meerschaum-2.4.13.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
258
+ meerschaum-2.4.13.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
+ meerschaum-2.4.13.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
+ meerschaum-2.4.13.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
+ meerschaum-2.4.13.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5