meerschaum 2.9.1__py3-none-any.whl → 2.9.2__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.
@@ -10,6 +10,7 @@ import os
10
10
  from copy import deepcopy
11
11
  from itertools import chain
12
12
  import shlex
13
+ import shutil
13
14
 
14
15
  from meerschaum.utils.typing import Union, SuccessTuple, Any, Callable, Optional, List, Dict
15
16
  from meerschaum.utils.packages import attempt_import
@@ -309,7 +310,7 @@ class Shell(cmd.Cmd):
309
310
  try:
310
311
  for c in hidden_commands:
311
312
  self.hidden_commands.append(c)
312
- except Exception as e:
313
+ except Exception:
313
314
  pass
314
315
 
315
316
  ### Finally, spawn the version update thread.
@@ -387,8 +388,9 @@ class Shell(cmd.Cmd):
387
388
  username: Optional[str] = None,
388
389
  executor_keys: Optional[str] = None,
389
390
  ):
390
- from meerschaum.utils.formatting import ANSI, colored
391
+ from meerschaum.utils.formatting import ANSI, colored, UNICODE, get_console
391
392
  from meerschaum._internal.entry import _shell, get_shell
393
+ from meerschaum.utils.misc import truncate_text_for_display, remove_ansi
392
394
 
393
395
  cmd.__builtins__['input'] = input_with_sigint(
394
396
  _old_input,
@@ -414,7 +416,6 @@ class Shell(cmd.Cmd):
414
416
 
415
417
  if '{username}' in shell_attrs['_prompt']:
416
418
  if username is None:
417
- from meerschaum.utils.misc import remove_ansi
418
419
  from meerschaum.connectors.parse import parse_instance_keys
419
420
  from meerschaum.connectors.sql import SQLConnector
420
421
  try:
@@ -422,15 +423,19 @@ class Shell(cmd.Cmd):
422
423
  remove_ansi(shell_attrs['instance_keys']),
423
424
  construct=False,
424
425
  )
425
- if 'username' not in conn_attrs:
426
- if 'uri' in conn_attrs:
426
+ if conn_attrs and 'username' in conn_attrs:
427
+ username = conn_attrs.get('username', '(no username)')
428
+ elif conn_attrs and 'uri' in conn_attrs:
429
+ try:
427
430
  username = SQLConnector.parse_uri(conn_attrs['uri'])['username']
431
+ except Exception:
432
+ username = '(no username)'
428
433
  else:
429
- username = conn_attrs['username']
434
+ username = '(no username)'
430
435
  except KeyError:
431
436
  username = '(no username)'
432
- except Exception as e:
433
- username = str(e)
437
+ except Exception:
438
+ username = None
434
439
  if username is None:
435
440
  username = '(no username)'
436
441
  shell_attrs['username'] = (
@@ -463,12 +468,32 @@ class Shell(cmd.Cmd):
463
468
  _c = colored(_c, **get_config('shell', 'ansi', 'prompt', 'rich'))
464
469
  remainder_prompt[i] = _c
465
470
 
471
+ truncation_suffix = (
472
+ '…'
473
+ if UNICODE
474
+ else '...'
475
+ )
476
+ console = get_console()
477
+ truncation_kwargs = {
478
+ 'suffix': truncation_suffix,
479
+ 'max_length': int(console.size.width / 4),
480
+ }
481
+
466
482
  self.prompt = ''.join(remainder_prompt).replace(
467
- '{username}', shell_attrs['username']
483
+ '{username}', truncate_text_for_display(
484
+ shell_attrs['username'],
485
+ **truncation_kwargs
486
+ )
468
487
  ).replace(
469
- '{instance}', shell_attrs['instance']
488
+ '{instance}', truncate_text_for_display(
489
+ shell_attrs['instance'],
490
+ **truncation_kwargs
491
+ )
470
492
  ).replace(
471
- '{executor_keys}', shell_attrs['executor_keys']
493
+ '{executor_keys}', truncate_text_for_display(
494
+ shell_attrs['executor_keys'],
495
+ **truncation_kwargs
496
+ )
472
497
  )
473
498
  shell_attrs['prompt'] = self.prompt
474
499
  ### flush stdout
@@ -1018,15 +1043,14 @@ def input_with_sigint(_input, session, shell: Optional[Shell] = None):
1018
1043
  """
1019
1044
  Replace built-in `input()` with prompt_toolkit.prompt.
1020
1045
  """
1021
- from meerschaum.utils.formatting import CHARSET, ANSI, colored
1046
+ from meerschaum.utils.formatting import CHARSET, ANSI, colored, UNICODE
1022
1047
  from meerschaum.connectors import is_connected, connectors
1023
- from meerschaum.utils.misc import remove_ansi
1048
+ from meerschaum.utils.misc import remove_ansi, truncate_text_for_display
1024
1049
  from meerschaum.config import get_config
1025
1050
  import platform
1026
1051
  if shell is None:
1027
1052
  from meerschaum.actions import get_shell
1028
1053
  shell = get_shell()
1029
-
1030
1054
  style = prompt_toolkit_styles.Style.from_dict({
1031
1055
  'bottom-toolbar': 'black',
1032
1056
  })
@@ -1039,46 +1063,71 @@ def input_with_sigint(_input, session, shell: Optional[Shell] = None):
1039
1063
  return shell_attrs['_old_bottom_toolbar']
1040
1064
  size = os.get_terminal_size()
1041
1065
  num_cols, num_lines = size.columns, size.lines
1042
-
1066
+ truncation_suffix = (
1067
+ '…'
1068
+ if UNICODE
1069
+ else '...'
1070
+ )
1071
+ truncation_kwargs = {
1072
+ 'suffix': truncation_suffix,
1073
+ 'max_length': int(num_cols / 4),
1074
+ }
1075
+ instance_text = truncate_text_for_display(
1076
+ remove_ansi(shell_attrs['instance_keys']),
1077
+ **truncation_kwargs
1078
+ )
1043
1079
  instance_colored = (
1044
1080
  colored(
1045
- remove_ansi(shell_attrs['instance_keys']),
1081
+ instance_text,
1046
1082
  'on ' + get_config('shell', 'ansi', 'instance', 'rich', 'style')
1047
1083
  )
1048
1084
  if ANSI
1049
- else colored(shell_attrs['instance_keys'], 'on white')
1085
+ else colored(instance_text, 'on white')
1086
+ )
1087
+ repo_text = truncate_text_for_display(
1088
+ remove_ansi(shell_attrs['repo_keys']),
1089
+ **truncation_kwargs
1050
1090
  )
1051
1091
  repo_colored = (
1052
1092
  colored(
1053
- remove_ansi(shell_attrs['repo_keys']),
1093
+ repo_text,
1054
1094
  'on ' + get_config('shell', 'ansi', 'repo', 'rich', 'style')
1055
1095
  )
1056
1096
  if ANSI
1057
1097
  else colored(shell_attrs['repo_keys'], 'on white')
1058
1098
  )
1099
+ executor_text = truncate_text_for_display(
1100
+ remove_ansi(shell_attrs['executor_keys']),
1101
+ **truncation_kwargs
1102
+ )
1059
1103
  executor_colored = (
1060
1104
  colored(
1061
- remove_ansi(shell_attrs['executor_keys']),
1105
+ executor_text,
1062
1106
  'on ' + get_config('shell', 'ansi', 'executor', 'rich', 'style')
1063
1107
  )
1064
1108
  if ANSI
1065
- else colored(remove_ansi(shell_attrs['executor_keys']), 'on white')
1109
+ else colored(executor_text, 'on white')
1066
1110
  )
1067
1111
 
1068
1112
  try:
1069
1113
  typ, label = shell_attrs['instance_keys'].split(':', maxsplit=1)
1070
1114
  connected = typ in connectors and label in connectors[typ]
1071
- except Exception as e:
1115
+ except Exception:
1072
1116
  connected = False
1073
1117
  last_connected = connected
1074
- connected_str = (('dis' if not connected else '') + 'connected')
1118
+ connected_str = truncate_text_for_display(
1119
+ ('dis' if not connected else '') + 'connected',
1120
+ **truncation_kwargs
1121
+ )
1122
+ connected_icon = get_config(
1123
+ 'formatting', connected_str, CHARSET, 'icon', warn=False,
1124
+ ) or ''
1075
1125
  connection_text = (
1076
- get_config(
1077
- 'formatting', connected_str, CHARSET, 'icon'
1078
- ) + ' ' + (
1079
- colored(connected_str.capitalize(), 'on ' + get_config(
1080
- 'formatting', connected_str, 'ansi', 'rich', 'style'
1081
- ) + ' ') if ANSI else (colored(connected_str.capitalize(), 'on white') + ' ')
1126
+ connected_icon + ' ' + (
1127
+ colored(connected_str.capitalize(), 'on ' + (get_config(
1128
+ 'formatting', connected_str, 'ansi', 'rich', 'style',
1129
+ warn=False,
1130
+ ) or '') + ' ') if ANSI else (colored(connected_str.capitalize(), 'on white') + ' ')
1082
1131
  )
1083
1132
  )
1084
1133
 
@@ -1104,8 +1153,8 @@ def input_with_sigint(_input, session, shell: Optional[Shell] = None):
1104
1153
  _args = []
1105
1154
  for a in args:
1106
1155
  try:
1107
- _a = prompt_toolkit_formatted_text.ANSI(a)
1108
- except Exception as e:
1156
+ _a = prompt_toolkit_formatted_text.ANSI(a) if isinstance(a, str) else str(a)
1157
+ except Exception:
1109
1158
  _a = a
1110
1159
  _args.append(_a)
1111
1160
  try:
@@ -7,13 +7,16 @@ Display pipes via a shareable URL.
7
7
 
8
8
  from meerschaum.api import CHECK_UPDATE
9
9
  from meerschaum.utils.packages import import_html, import_dcc
10
- from meerschaum.api.dash.components import download_dataframe
10
+ from meerschaum.api.dash.components import download_dataframe, pages_navbar
11
11
 
12
12
  html, dcc = import_html(check_update=CHECK_UPDATE), import_dcc(check_update=CHECK_UPDATE)
13
13
  import dash_bootstrap_components as dbc
14
14
 
15
- layout = dbc.Container([
16
- dcc.Location('pipes-location'),
17
- download_dataframe,
18
- html.Div(id='pipe-output-div'),
19
- ])
15
+ layout = [
16
+ pages_navbar,
17
+ dbc.Container([
18
+ dcc.Location('pipes-location'),
19
+ download_dataframe,
20
+ html.Div(id='pipe-output-div'),
21
+ ])
22
+ ]
@@ -55,6 +55,8 @@ window.addEventListener(
55
55
  if (typeof lk === "string"){
56
56
  quote_str = lk.includes(" ") ? "'" : "";
57
57
  location_keys_str += " " + quote_str + lk + quote_str;
58
+ } else if (lk === null) {
59
+ location_keys_str += " None";
58
60
  }
59
61
  }
60
62
  if (location_keys_str === " -l"){
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.9.1"
5
+ __version__ = "2.9.2"
@@ -679,12 +679,15 @@ def get_chunk_bounds(
679
679
  include_greater_than_end = not bounded and end is None
680
680
  if begin is None:
681
681
  begin = self.get_sync_time(newest=False, debug=debug)
682
+ consolidate_end_chunk = False
682
683
  if end is None:
683
684
  end = self.get_sync_time(newest=True, debug=debug)
684
685
  if end is not None and hasattr(end, 'tzinfo'):
685
686
  end += timedelta(minutes=1)
687
+ consolidate_end_chunk = True
686
688
  elif are_dtypes_equal(str(type(end)), 'int'):
687
689
  end += 1
690
+ consolidate_end_chunk = True
688
691
  if begin is None and end is None:
689
692
  return [(None, None)]
690
693
 
@@ -707,9 +710,15 @@ def get_chunk_bounds(
707
710
  num_chunks += 1
708
711
  if num_chunks >= max_chunks:
709
712
  raise ValueError(
710
- f"Too many chunks of size '{interval_str(chunk_interval)}' between '{begin}' and '{end}'."
713
+ f"Too many chunks of size '{interval_str(chunk_interval)}' "
714
+ f"between '{begin}' and '{end}'."
711
715
  )
712
716
 
717
+ if num_chunks > 1 and consolidate_end_chunk:
718
+ last_bounds, second_last_bounds = chunk_bounds[-1], chunk_bounds[-2]
719
+ chunk_bounds = chunk_bounds[:-2]
720
+ chunk_bounds.append((second_last_bounds[0], last_bounds[1]))
721
+
713
722
  ### The chunk interval might be too large.
714
723
  if not chunk_bounds and end >= begin:
715
724
  chunk_bounds = [(begin, end)]
@@ -282,6 +282,7 @@ def verify(
282
282
  )
283
283
  bounds_success_tuples[first_chunk_bounds] = (first_success, first_msg)
284
284
  info(f"Completed first chunk for {self}:\n {first_label}\n")
285
+ chunk_bounds = chunk_bounds[1:]
285
286
 
286
287
  pool = get_pool(workers=workers)
287
288
  batches = self.get_chunk_bounds_batches(chunk_bounds, batchsize=batchsize, workers=workers)
@@ -542,7 +542,7 @@ def serialize_geometry(
542
542
  geom: Any,
543
543
  geometry_format: str = 'wkb_hex',
544
544
  as_wkt: bool = False,
545
- ) -> Union[str, Dict[str, Any]]:
545
+ ) -> Union[str, Dict[str, Any], None]:
546
546
  """
547
547
  Serialize geometry data as a hex-encoded well-known-binary string.
548
548
 
@@ -560,6 +560,8 @@ def serialize_geometry(
560
560
  -------
561
561
  A string containing the geometry data.
562
562
  """
563
+ if value_is_null(geom):
564
+ return None
563
565
  shapely = mrsm.attempt_import('shapely', lazy=False)
564
566
  if geometry_format == 'geojson':
565
567
  geojson_str = shapely.to_geojson(geom)
@@ -579,7 +581,7 @@ def deserialize_geometry(geom_wkb: Union[str, bytes]):
579
581
  return shapely.wkb.loads(geom_wkb)
580
582
 
581
583
 
582
- def deserialize_bytes_string(data: str | None, force_hex: bool = False) -> bytes | None:
584
+ def deserialize_bytes_string(data: Optional[str], force_hex: bool = False) -> Union[bytes, None]:
583
585
  """
584
586
  Given a serialized ASCII string of bytes data, return the original bytes.
585
587
  The input data may either be base64- or hex-encoded.
meerschaum/utils/misc.py CHANGED
@@ -1355,6 +1355,39 @@ def truncate_string_sections(item: str, delimeter: str = '_', max_len: int = 128
1355
1355
  return delimeter.join([s for i, s in new_sections])
1356
1356
 
1357
1357
 
1358
+ def truncate_text_for_display(
1359
+ text: str,
1360
+ max_length: int = 50,
1361
+ suffix: str = '…',
1362
+ ) -> str:
1363
+ """
1364
+ Truncate a potentially long string for display purposes.
1365
+
1366
+ Parameters
1367
+ ----------
1368
+ text: str
1369
+ The string to be truncated.
1370
+
1371
+ max_length: int, default 60
1372
+ The maximum length of `text` before truncation.
1373
+
1374
+ suffix: str, default '…'
1375
+ The string to append to the length of `text` to indicate truncation.
1376
+
1377
+ Returns
1378
+ -------
1379
+ A string of length `max_length` or less.
1380
+ """
1381
+ text_length = len(text)
1382
+ if text_length <= max_length:
1383
+ return text
1384
+
1385
+ suffix_length = len(suffix)
1386
+
1387
+ truncated_text = text[:max_length - suffix_length]
1388
+ return truncated_text + suffix
1389
+
1390
+
1358
1391
  def separate_negation_values(
1359
1392
  vals: Union[List[str], Tuple[str]],
1360
1393
  negation_prefix: Optional[str] = None,
meerschaum/utils/sql.py CHANGED
@@ -975,12 +975,12 @@ def build_where(
975
975
  negation_prefix = STATIC_CONFIG['system']['fetch_pipes_keys']['negation_prefix']
976
976
  try:
977
977
  params_json = json.dumps(params)
978
- except Exception as e:
978
+ except Exception:
979
979
  params_json = str(params)
980
980
  bad_words = ['drop ', '--', ';']
981
981
  for word in bad_words:
982
982
  if word in params_json.lower():
983
- warn(f"Aborting build_where() due to possible SQL injection.")
983
+ warn("Aborting build_where() due to possible SQL injection.")
984
984
  return ''
985
985
 
986
986
  query_flavor = getattr(connector, 'flavor', flavor) if connector is not None else flavor
@@ -2539,9 +2539,10 @@ def get_postgis_geo_columns_types(
2539
2539
  debug: bool = False,
2540
2540
  ) -> Dict[str, str]:
2541
2541
  """
2542
- Return the
2542
+ Return a dictionary mapping PostGIS geometry column names to geometry types.
2543
2543
  """
2544
2544
  from meerschaum.utils.dtypes import get_geometry_type_srid
2545
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
2545
2546
  default_type, default_srid = get_geometry_type_srid()
2546
2547
  default_type = default_type.upper()
2547
2548
 
@@ -2550,7 +2551,7 @@ def get_postgis_geo_columns_types(
2550
2551
  schema = schema or 'public'
2551
2552
  truncated_schema_name = truncate_item_name(schema, flavor='postgis')
2552
2553
  truncated_table_name = truncate_item_name(table, flavor='postgis')
2553
- query = (
2554
+ query = sqlalchemy.text(
2554
2555
  "SELECT \"f_geometry_column\" AS \"column\", 'GEOMETRY' AS \"func\", \"type\", \"srid\"\n"
2555
2556
  "FROM \"geometry_columns\"\n"
2556
2557
  f"WHERE \"f_table_schema\" = '{truncated_schema_name}'\n"
@@ -2603,6 +2604,9 @@ def get_create_schema_if_not_exists_queries(
2603
2604
  if flavor in NO_SCHEMA_FLAVORS:
2604
2605
  return []
2605
2606
 
2607
+ if schema == DEFAULT_SCHEMA_FLAVORS.get(flavor, None):
2608
+ return []
2609
+
2606
2610
  clean(schema)
2607
2611
 
2608
2612
  if flavor == 'mssql':
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: meerschaum
3
- Version: 2.9.1
3
+ Version: 2.9.2
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -339,6 +339,7 @@ Dynamic: description
339
339
  Dynamic: description-content-type
340
340
  Dynamic: home-page
341
341
  Dynamic: license
342
+ Dynamic: license-file
342
343
  Dynamic: maintainer-email
343
344
  Dynamic: project-url
344
345
  Dynamic: provides-extra
@@ -7,7 +7,7 @@ meerschaum/_internal/arguments/_parse_arguments.py,sha256=TtHX7NvdHLD-nVVlMctc6S
7
7
  meerschaum/_internal/arguments/_parser.py,sha256=9AfOJ4Kc37y2gLeRabU3cDwF4RRnW-3nGKfN2l0P3rQ,17163
8
8
  meerschaum/_internal/docs/__init__.py,sha256=ZQYHWo6n0kfLLkyG36YXqTYvv2Pc7it5HZHMylT6cBA,126
9
9
  meerschaum/_internal/docs/index.py,sha256=ZkqXj-GhoLEpgMysy4ugvOlFhWVlnq7tFvzMhy43jUQ,24670
10
- meerschaum/_internal/shell/Shell.py,sha256=R6xW-D9gVuxJxQzf4Bf6E9V8exE40aCdrDJ_snUpoxA,39982
10
+ meerschaum/_internal/shell/Shell.py,sha256=Iky6eXCbEsCCnvINbv7EA-DoglYzT3IjSl6BKMB8Mds,41571
11
11
  meerschaum/_internal/shell/ShellCompleter.py,sha256=Ex6mPv83RUNdC3ufRJCcaoOmQ8q8z6tCHDVzXQmWIpY,3293
12
12
  meerschaum/_internal/shell/ValidAutoSuggest.py,sha256=bARjOWMidz0dvMelLUe6yRPto5l3gcEHYHqFDjoh22I,1280
13
13
  meerschaum/_internal/shell/__init__.py,sha256=vXQoQPEVlYiUYai1b5AwQAlTnja6A2cSABnqXhzlS7I,281
@@ -88,7 +88,7 @@ meerschaum/api/dash/pages/dashboard.py,sha256=d6zPEycsbiFJyvufN6kt5JsOZbpW9zy-mN
88
88
  meerschaum/api/dash/pages/error.py,sha256=-uCrASuIBrceHcc-leLeEoLos2ibSBWG0XMFQzFwtbw,595
89
89
  meerschaum/api/dash/pages/job.py,sha256=bAXXDB0fM3bSiqqJ2XlTwVdg2lohRaWdIGZp7ZtTZOw,544
90
90
  meerschaum/api/dash/pages/login.py,sha256=Qjc-kDL9wW4D1cN48x0MrmWCME4igHDt0VkX9JSipjY,4603
91
- meerschaum/api/dash/pages/pipes.py,sha256=Cd5XY_m4nBIsEk6TQadpcajuBRzxw1cyDaTtojwykcI,506
91
+ meerschaum/api/dash/pages/pipes.py,sha256=s4Ytfmf8kiPEYI5MCPhWtyY6l1nLFh_A_w8cgep8VP8,562
92
92
  meerschaum/api/dash/pages/plugins.py,sha256=EX-M99bxvRSrI-9bIBocj-tmBpf6NgPQ813sJ_HSXS8,1731
93
93
  meerschaum/api/dash/pages/register.py,sha256=dqhsiu2OhrXhs4RL41_CpqipdrWo1-_roASvZIDBAq8,2364
94
94
  meerschaum/api/dash/pages/settings/__init__.py,sha256=UjfD2Pyz504CcbieVQbXbljjU5Wnxx7Pe0aix1zqBOE,153
@@ -118,7 +118,7 @@ meerschaum/api/resources/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
118
118
  meerschaum/api/resources/templates/index.html,sha256=Ck-S0U5abJgB-wTOKIGg0ispGzKlXXqvFUoNAAByzLA,1019
119
119
  meerschaum/api/resources/templates/old_index.html,sha256=BDeOlcXhSsBH3-NaRtuX4Z1sDuhOoCMa_Dq-6g5RMpc,1711
120
120
  meerschaum/api/resources/templates/secret.html,sha256=0QWkm4ZoN81Aw1pd2-62rGCvx3nXPHfFUoegj3Iy8Ls,141
121
- meerschaum/api/resources/templates/termpage.html,sha256=xW1_a7Anbk2RM-P75EuAVKYPOo6_36fByT0OMxD-yos,6168
121
+ meerschaum/api/resources/templates/termpage.html,sha256=UKEUkBprNUPtL8m3gXOBfDU_ewOowi4phdP4GatoLvo,6244
122
122
  meerschaum/api/routes/__init__.py,sha256=38k-iGm7LM30C1jfvkt7_tatRO3tfx-eOd8AnTgLkc0,611
123
123
  meerschaum/api/routes/_actions.py,sha256=VUasS1dpr4d3TXHcR1CXlRZPAqvGKKuHv_f9PsOkQ5c,1732
124
124
  meerschaum/api/routes/_connectors.py,sha256=E2Icawy42nBPM7peRlHBM9_v4vF0daWCf-_Ok14LbqI,1776
@@ -145,7 +145,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
145
145
  meerschaum/config/_read_config.py,sha256=RLC3HHi_1ndj7ITVDKLD9_uULY3caGRwSz3ATYE-ixA,15014
146
146
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
147
147
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
148
- meerschaum/config/_version.py,sha256=7okJtJcqzixKAM_p1_8Xn65bdIYufx5bhsC8mvjwTzU,71
148
+ meerschaum/config/_version.py,sha256=IsNhoHfdCmZpo3XxQo3K-ny9DYKuE8viAyCDbZGWxDs,71
149
149
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
150
150
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
151
  meerschaum/config/stack/__init__.py,sha256=2UukC0Lmk-aVL1o1qXzumqmuIrw3vu9fD7iCuz4XD4I,10544
@@ -198,7 +198,7 @@ meerschaum/core/Pipe/_attributes.py,sha256=wZQBGspZHmqmab_DNEUrvYsJSZtwaDsj0zeXD
198
198
  meerschaum/core/Pipe/_bootstrap.py,sha256=gTNGh5e2LmTMrgIpHqrVaL60uPKWCphhsuz8j-lJ2HI,7348
199
199
  meerschaum/core/Pipe/_clear.py,sha256=LghXabgyyc1tD7FNQrh9ExT71ipcg2poM9FDA3k9e4M,2230
200
200
  meerschaum/core/Pipe/_copy.py,sha256=YDclAapf_spm9phpFr4-CALyYyw7nUsyKyiaLM1cnm4,2965
201
- meerschaum/core/Pipe/_data.py,sha256=5iHl-_Nsp1xizcNF60ZcEbDvtIYzmdLqpx0Q596Kz4Q,26792
201
+ meerschaum/core/Pipe/_data.py,sha256=x98glD6_1oxgnwCl7YvMERe1YHbjCZUmfp5iPPmHk7c,27165
202
202
  meerschaum/core/Pipe/_deduplicate.py,sha256=Wsa1cJk41LgaHwIsJC9OZfPZ_3GoMP26_y8MmJdTrO8,10137
203
203
  meerschaum/core/Pipe/_delete.py,sha256=1geNp9BgrocXP1gt76dMbnlJWKYFMuSNqPFA4K4-hXE,2118
204
204
  meerschaum/core/Pipe/_drop.py,sha256=KDfJVz2aGjHUE1Jkmj7Ej4ICPR5xPiuhyhgRO7Lu9d4,3299
@@ -209,7 +209,7 @@ meerschaum/core/Pipe/_index.py,sha256=cYgaVwBVfAYxJBZ6j6MXDqOxnOrD_QnYi33_kIwy_F
209
209
  meerschaum/core/Pipe/_register.py,sha256=Sd5xaAW8H7uLTIoommcKb-6kHPRuHJLWNSbPnt2UbvA,2240
210
210
  meerschaum/core/Pipe/_show.py,sha256=nG50y8eBT9TVuKkRgAKtNDNIxysJvMNxfu__lkL1F9k,1352
211
211
  meerschaum/core/Pipe/_sync.py,sha256=YsNlWepIPHVxfoBsYtPkdl5jMdTIEEd0kHtMllUyAoI,39968
212
- meerschaum/core/Pipe/_verify.py,sha256=aXRpD6azrN9A9Z3AXkKQw6NJFqNWqZVpgidjh5BsfLE,22565
212
+ meerschaum/core/Pipe/_verify.py,sha256=t9s1874malRdtQjdKAotnkSFwVSFJIPEpOwV8ByVa1s,22605
213
213
  meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_uSJJDc,137
214
214
  meerschaum/core/User/_User.py,sha256=qbI0GIkr3G0PI4d9S49uatbJQ2kH_-z5-GoVJ0fuEtA,6624
215
215
  meerschaum/core/User/__init__.py,sha256=8WkDRSBmxsprnKE7GB6j1yXSfEz9RinRkSzW0bzVP1I,870
@@ -225,13 +225,13 @@ meerschaum/utils/_get_pipes.py,sha256=tu4xKPoDn79Dz2kWM13cXTP4DSCkn-3G9M8KiLftop
225
225
  meerschaum/utils/dataframe.py,sha256=J7L2OWCuRI1Oxi-UMgQK9S_CiduuSopC7bmO1k-eQdM,54091
226
226
  meerschaum/utils/debug.py,sha256=GyIzJmunkoPnOcZNYVQdT4Sgd-aOb5MI2VbIgATOjIQ,3695
227
227
  meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
228
- meerschaum/utils/misc.py,sha256=by_cNQ2qzQoFZYDBLRIimFzsxXW3QLuHSsFUnSahk5E,47419
228
+ meerschaum/utils/misc.py,sha256=dQ7WvcN7Z-LwkaipNeliqjdkKp_1U5JPq6lNLfwuE0U,48160
229
229
  meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
230
230
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
231
231
  meerschaum/utils/process.py,sha256=as0-CjG4mqFP0TydVvmAmgki6er4thS5BqUopeiq98Q,8216
232
232
  meerschaum/utils/prompt.py,sha256=qj1As1tuiL0GZTku_YOC6I5DmOU6L5otDR7DW7LA5fM,19397
233
233
  meerschaum/utils/schedule.py,sha256=Vrcd2Qs-UPVn6xBayNUIgludf0Mlb6Wrgq6ATdyhV8c,11451
234
- meerschaum/utils/sql.py,sha256=sVW1F7BMshmGPiG9yi2nSRVtU9mzQKH8SbqfNrl018Q,84369
234
+ meerschaum/utils/sql.py,sha256=py9PtVyuC1NO2WTcpMiP_ZBkOofLnkGJ5NGrHBIVfBo,84584
235
235
  meerschaum/utils/threading.py,sha256=awjbVL_QR6G-o_9Qk85utac9cSdqkiC8tQSdERCdrG8,2814
236
236
  meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
237
237
  meerschaum/utils/warnings.py,sha256=n-phr3BftNNgyPnvnXC_VMSjtCvjiCZ-ewmVfcROhkc,6611
@@ -242,7 +242,7 @@ meerschaum/utils/daemon/RotatingFile.py,sha256=8_bXegBjjzNRlNEjFZ_EHU4pSaDfjXZTw
242
242
  meerschaum/utils/daemon/StdinFile.py,sha256=qdZ8E_RSOkURypwnS50mWeyWyRig1bAY9tKWMTVKajc,3307
243
243
  meerschaum/utils/daemon/__init__.py,sha256=ziRPyu_IM3l7Xd58y3Uvt0fZLoirJ9nuboFIxxult6c,8741
244
244
  meerschaum/utils/daemon/_names.py,sha256=d2ZwTxBoTAqXZkCfZ5LuX2XrkQmLNUq1OTlUqfoH5dA,4515
245
- meerschaum/utils/dtypes/__init__.py,sha256=CIq3UsBzkq9MHV4RYgn8jfNDIdUdYgLYYpU8kFBRkC8,21285
245
+ meerschaum/utils/dtypes/__init__.py,sha256=NI09GgIcTxwXhGjaxqYFV0FmdrPpvrnjoKfX9gaHKf8,21348
246
246
  meerschaum/utils/dtypes/sql.py,sha256=zhwGnz6MfsaJEH7Sibtd-GfVEImnBSkZh1I3srxgiKE,31428
247
247
  meerschaum/utils/formatting/__init__.py,sha256=bA8qwBeTNIVHVQOBK682bJsKSKik1yS6xYJAoi0RErk,15528
248
248
  meerschaum/utils/formatting/_jobs.py,sha256=izsqPJhTtUkXUUtWnbXtReYsUYwulXtci3pBj72Ne64,6637
@@ -254,11 +254,11 @@ meerschaum/utils/packages/_packages.py,sha256=G3eMtqq4WJo_iTC4ctRAWkzKhN6ZQcdFRp
254
254
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
255
255
  meerschaum/utils/venv/_Venv.py,sha256=gc1TCeAj-kTZbQFAT9xl1bi4HXFV5ApT0dPOJfxwr78,3748
256
256
  meerschaum/utils/venv/__init__.py,sha256=RhWuDohBEROIu_9T6BNPgYCrGtuE14w7nXHR1E2qyh8,27321
257
- meerschaum-2.9.1.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
258
- meerschaum-2.9.1.dist-info/METADATA,sha256=ZPWiGuRYN720zphzsnJzL1fZITZItbScGDWE-tpScMQ,25123
259
- meerschaum-2.9.1.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
260
- meerschaum-2.9.1.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
261
- meerschaum-2.9.1.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
262
- meerschaum-2.9.1.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
263
- meerschaum-2.9.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
264
- meerschaum-2.9.1.dist-info/RECORD,,
257
+ meerschaum-2.9.2.dist-info/licenses/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
258
+ meerschaum-2.9.2.dist-info/licenses/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
259
+ meerschaum-2.9.2.dist-info/METADATA,sha256=iIB9Mvn5MVfTZWCZDaMbjdcYLfxOxJuf1s8nNzKXTOk,25145
260
+ meerschaum-2.9.2.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
261
+ meerschaum-2.9.2.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
262
+ meerschaum-2.9.2.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
263
+ meerschaum-2.9.2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
264
+ meerschaum-2.9.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.1.0)
2
+ Generator: setuptools (77.0.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5