meerschaum 2.4.8__py3-none-any.whl → 2.4.9__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 @@ from __future__ import annotations
10
10
  import sys
11
11
  import argparse
12
12
  import json
13
+ import re
13
14
  from datetime import datetime, timedelta, timezone
14
15
  from meerschaum.utils.typing import Union, Dict, List, Any, Tuple, Callable
15
16
  from meerschaum.utils.misc import string_to_dict
@@ -39,7 +40,7 @@ class ArgumentParser(argparse.ArgumentParser):
39
40
 
40
41
  def parse_datetime(dt_str: str) -> Union[datetime, int, str]:
41
42
  """Parse a string into a datetime."""
42
- from meerschaum.utils.misc import is_int
43
+ from meerschaum.utils.misc import is_int, round_time
43
44
  if is_int(dt_str):
44
45
  return int(dt_str)
45
46
 
@@ -47,11 +48,43 @@ def parse_datetime(dt_str: str) -> Union[datetime, int, str]:
47
48
  return 'None'
48
49
 
49
50
  from meerschaum.utils.packages import attempt_import
50
- dateutil_parser = attempt_import('dateutil.parser')
51
+ dateutil_parser, dateutil_relativedelta = attempt_import(
52
+ 'dateutil.parser', 'dateutil.relativedelta'
53
+ )
54
+ relativedelta = dateutil_relativedelta.relativedelta
55
+
56
+ ago_pattern = r'(\d+)\s+(days?|minutes?|seconds?|hours?|weeks?|months?|years?)\s+ago'
57
+ round_pattern = r'(\d+)\s+(days?|minutes?|seconds?|hours?|weeks?|years?)'
58
+ now = datetime.now(timezone.utc).replace(tzinfo=None)
59
+ ago_matches = re.findall(ago_pattern, dt_str.lower())
51
60
 
52
61
  try:
53
62
  if dt_str.lower() == 'now':
54
- dt = datetime.now(timezone.utc).replace(tzinfo=None)
63
+ dt = now
64
+ elif ago_matches:
65
+ val_str, unit_str = ago_matches[0]
66
+ if not unit_str.endswith('s'):
67
+ unit_str += 's'
68
+ val = int(val_str) if is_int(val_str) else float(val_str)
69
+ ago_delta = relativedelta(**{unit_str: val})
70
+ round_part = dt_str.lower().split('ago ')[-1]
71
+ round_delta = None
72
+ if round_part:
73
+ round_matches = re.findall(round_pattern, round_part)
74
+ if round_matches:
75
+ round_val_str, round_unit_str = round_matches[0]
76
+ if not round_unit_str.endswith('s'):
77
+ round_unit_str += 's'
78
+ round_val = (
79
+ int(round_val_str)
80
+ if is_int(round_val_str)
81
+ else float(round_val_str)
82
+ )
83
+ round_delta = timedelta(**{round_unit_str: round_val})
84
+
85
+ dt = now - ago_delta
86
+ if round_delta is not None:
87
+ dt = round_time(dt, round_delta)
55
88
  else:
56
89
  dt = dateutil_parser.parse(dt_str)
57
90
  except Exception as e:
@@ -7,6 +7,8 @@ This module contains functions for printing elements.
7
7
  """
8
8
 
9
9
  from __future__ import annotations
10
+
11
+ from datetime import datetime
10
12
  import meerschaum as mrsm
11
13
  from meerschaum.utils.typing import SuccessTuple, Union, Sequence, Any, Optional, List, Dict, Tuple
12
14
 
@@ -274,8 +276,8 @@ def _show_arguments(
274
276
  def _show_data(
275
277
  action: Optional[List[str]] = None,
276
278
  gui: bool = False,
277
- begin: Optional[datetime.datetime] = None,
278
- end: Optional[datetime.datetime] = None,
279
+ begin: Union[datetime, int, None] = None,
280
+ end: Union[datetime, int, None] = None,
279
281
  params: Optional[Dict[str, Any]] = None,
280
282
  chunksize: Optional[int] = -1,
281
283
  nopretty: bool = False,
@@ -401,12 +403,15 @@ def _show_columns(
401
403
  def _show_rowcounts(
402
404
  action: Optional[List[str]] = None,
403
405
  workers: Optional[int] = None,
406
+ begin: Union[datetime, int, None] = None,
407
+ end: Union[datetime, int, None] = None,
408
+ params: Optional[Dict[str, Any]] = None,
404
409
  debug: bool = False,
405
410
  **kw: Any
406
411
  ) -> SuccessTuple:
407
412
  """
408
413
  Show the rowcounts for pipes.
409
-
414
+
410
415
  To see remote rowcounts (execute `COUNT(*)` on the source server),
411
416
  execute `show rowcounts remote`.
412
417
  """
@@ -421,7 +426,13 @@ def _show_rowcounts(
421
426
  pipes = get_pipes(as_list=True, debug=debug, **kw)
422
427
  pool = get_pool(workers=workers)
423
428
  def _get_rc(_pipe):
424
- return _pipe.get_rowcount(remote=remote, debug=debug)
429
+ return _pipe.get_rowcount(
430
+ begin=begin,
431
+ end=end,
432
+ params=params,
433
+ remote=remote,
434
+ debug=debug
435
+ )
425
436
 
426
437
  rowcounts = pool.map(_get_rc, pipes) if pool is not None else [_get_rc(p) for p in pipes]
427
438
 
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.4.8"
5
+ __version__ = "2.4.9"
@@ -2075,7 +2075,7 @@ def get_pipe_rowcount(
2075
2075
  ----------
2076
2076
  pipe: mrsm.Pipe
2077
2077
  The pipe to query with.
2078
-
2078
+
2079
2079
  begin: Union[datetime, int, None], default None
2080
2080
  The begin datetime value.
2081
2081
 
@@ -2124,14 +2124,14 @@ def get_pipe_rowcount(
2124
2124
  warn(
2125
2125
  f"No datetime could be determined for {pipe}."
2126
2126
  + "\n Ignoring begin and end...",
2127
- stack = False,
2127
+ stack=False,
2128
2128
  )
2129
2129
  begin, end = None, None
2130
2130
  else:
2131
2131
  warn(
2132
2132
  f"A datetime wasn't specified for {pipe}.\n"
2133
2133
  + f" Using column \"{_dt}\" for datetime bounds...",
2134
- stack = False,
2134
+ stack=False,
2135
2135
  )
2136
2136
 
2137
2137
 
@@ -2187,6 +2187,8 @@ def get_pipe_rowcount(
2187
2187
  FROM ({src}) AS src
2188
2188
  """
2189
2189
  )
2190
+ print(f"{begin=}")
2191
+ print(f"{end=}")
2190
2192
  if begin is not None or end is not None:
2191
2193
  query += "WHERE"
2192
2194
  if begin is not None:
@@ -515,15 +515,14 @@ def get_backtrack_data(
515
515
  )
516
516
 
517
517
 
518
-
519
518
  def get_rowcount(
520
- self,
521
- begin: Optional[datetime] = None,
522
- end: Optional['datetime'] = None,
523
- params: Optional[Dict[str, Any]] = None,
524
- remote: bool = False,
525
- debug: bool = False
526
- ) -> int:
519
+ self,
520
+ begin: Union[datetime, int, None] = None,
521
+ end: Union[datetime, int, None] = None,
522
+ params: Optional[Dict[str, Any]] = None,
523
+ remote: bool = False,
524
+ debug: bool = False
525
+ ) -> int:
527
526
  """
528
527
  Get a Pipe's instance or remote rowcount.
529
528
 
@@ -556,11 +555,11 @@ def get_rowcount(
556
555
  with Venv(get_connector_plugin(connector)):
557
556
  rowcount = connector.get_pipe_rowcount(
558
557
  self,
559
- begin = begin,
560
- end = end,
561
- params = params,
562
- remote = remote,
563
- debug = debug,
558
+ begin=begin,
559
+ end=end,
560
+ params=params,
561
+ remote=remote,
562
+ debug=debug,
564
563
  )
565
564
  if rowcount is None:
566
565
  return 0
@@ -627,12 +627,12 @@ def get_numeric_cols(df: 'pd.DataFrame') -> List[str]:
627
627
 
628
628
  def get_uuid_cols(df: 'pd.DataFrame') -> List[str]:
629
629
  """
630
- Get the columns which contain `decimal.Decimal` objects from a Pandas DataFrame.
630
+ Get the columns which contain `uuid.UUID` objects from a Pandas DataFrame.
631
631
 
632
632
  Parameters
633
633
  ----------
634
634
  df: pd.DataFrame
635
- The DataFrame which may contain decimal objects.
635
+ The DataFrame which may contain UUID objects.
636
636
 
637
637
  Returns
638
638
  -------
@@ -276,10 +276,10 @@ def pprint_pipe_columns(
276
276
 
277
277
 
278
278
  def pipe_repr(
279
- pipe: mrsm.Pipe,
280
- as_rich_text: bool = False,
281
- ansi: Optional[bool] = None,
282
- ) -> Union[str, 'rich.text.Text']:
279
+ pipe: mrsm.Pipe,
280
+ as_rich_text: bool = False,
281
+ ansi: Optional[bool] = None,
282
+ ) -> Union[str, 'rich.text.Text']:
283
283
  """
284
284
  Return a formatted string for representing a `meerschaum.Pipe`.
285
285
  """
meerschaum/utils/misc.py CHANGED
@@ -390,10 +390,10 @@ def flatten_pipes_dict(pipes_dict: PipesDict) -> List[Pipe]:
390
390
 
391
391
 
392
392
  def round_time(
393
- dt: Optional[datetime] = None,
394
- date_delta: Optional[timedelta] = None,
395
- to: 'str' = 'down'
396
- ) -> datetime:
393
+ dt: Optional[datetime] = None,
394
+ date_delta: Optional[timedelta] = None,
395
+ to: 'str' = 'down'
396
+ ) -> datetime:
397
397
  """
398
398
  Round a datetime object to a multiple of a timedelta.
399
399
  http://stackoverflow.com/questions/3463930/how-to-round-the-minute-of-a-datetime-object-python
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.4.8
3
+ Version: 2.4.9
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -4,7 +4,7 @@ meerschaum/_internal/__init__.py,sha256=ilC7utfKtin7GAvuN34fKyUQYfPyqH0Mm3MJF5iy
4
4
  meerschaum/_internal/entry.py,sha256=5vBZxQbtN0l9lia9HcvvLVWDCpSeThg-505dGhKiOBo,12234
5
5
  meerschaum/_internal/arguments/__init__.py,sha256=_nSKKVLXNsJeSv-buxEZsx8_c0BAbkhRyE4nT6Bv6q0,541
6
6
  meerschaum/_internal/arguments/_parse_arguments.py,sha256=602U0rQrKKGfJQYY_c13GcCD0avjOa44c5GoqIAD_iE,15805
7
- meerschaum/_internal/arguments/_parser.py,sha256=LfiVDTr1akj5D31qpJAAXKxMcnLQiD3jRpZtvvHWrAo,14917
7
+ meerschaum/_internal/arguments/_parser.py,sha256=l2RYIn-1MEpjyUz2yczkeeuwg2liYaO2MNvEZ4Amk1o,16364
8
8
  meerschaum/_internal/docs/__init__.py,sha256=ZQYHWo6n0kfLLkyG36YXqTYvv2Pc7it5HZHMylT6cBA,126
9
9
  meerschaum/_internal/docs/index.py,sha256=IBVotNZ6f9KTSefXq5cCikcZ7mnjDy98JOeb-KPLkyg,24514
10
10
  meerschaum/_internal/gui/__init__.py,sha256=KF6Opae0aBOjIndMZ2txoPs7ozCXRlR-lcTsicLO7fc,1313
@@ -41,7 +41,7 @@ meerschaum/actions/reload.py,sha256=gMXeFBGVfyQ7uhKhYf6bLaDMD0fLPcA9BrLBSiuvWIc,
41
41
  meerschaum/actions/restart.py,sha256=6ffp3-X9eTEgunVSdD41HnOwqp71yjuSAmXJ5j39ONI,3038
42
42
  meerschaum/actions/setup.py,sha256=KkAGWcgwzl_L6A19fTmTX1KtBjW2FwD8QenLjPy0mQQ,3205
43
43
  meerschaum/actions/sh.py,sha256=fLfTJaacKu4sjLTRqEzzYlT2WbbdZBEczsKb6F-qAek,2026
44
- meerschaum/actions/show.py,sha256=uNXOfh1Z44i6YpmAcE_uM_6s9r3lNh8CnstpvS6tTjE,28179
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
47
  meerschaum/actions/start.py,sha256=7B6zLHh-DNWnJta1h_RV9ccGJ4EnbEDu3k-GdwAsU8M,19208
@@ -142,7 +142,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
142
142
  meerschaum/config/_read_config.py,sha256=oxnLjuhy6JBBld886FkBX07wUdkpzEzTItYMUa9qw1Q,14688
143
143
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
144
144
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
145
- meerschaum/config/_version.py,sha256=1oWpjLUymKmrkEXNSCmeb0HaJEmpVYs4n7VzxwE3Z6M,71
145
+ meerschaum/config/_version.py,sha256=htHEYhloxhFm_vcPba-bk08zxppyNo-i76pJPh7DqqI,71
146
146
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
147
147
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
148
  meerschaum/config/stack/__init__.py,sha256=gGVxXgNnGb9u25iF__IiNPlZt1BLUVmHmFJ0jvnJg3Q,10548
@@ -175,7 +175,7 @@ meerschaum/connectors/sql/_cli.py,sha256=1SgnWeMIAihoxp4FzbNrcq1npXf0dSOQnCntpU9
175
175
  meerschaum/connectors/sql/_create_engine.py,sha256=pZPjy-ne8DtVfu-wqMJopIGkgm8vul-y3E9d4tUyTgM,10215
176
176
  meerschaum/connectors/sql/_fetch.py,sha256=NYYWDoEd-aGIS337KwH-D9_3KVWVCZOHAspGLfdEuUE,13086
177
177
  meerschaum/connectors/sql/_instance.py,sha256=zXPZnEqvOAeOUPMeh6CcfkB1pOjjwJxdUOwXccRbuwk,6465
178
- meerschaum/connectors/sql/_pipes.py,sha256=m82E9GdBxdfcYCtFWECqmC3HjaZ7Y5ukhQ9LBlEymc4,100605
178
+ meerschaum/connectors/sql/_pipes.py,sha256=0XQo4RF2DjpPp6-KvdSjkMpKknWd68QnnhgjfrREBvE,100637
179
179
  meerschaum/connectors/sql/_plugins.py,sha256=wbxcNxqTtjfDsxPvdVGTllasYf6NHHzODaQ72hEUSBQ,8135
180
180
  meerschaum/connectors/sql/_sql.py,sha256=zEh6fbOLJhfLOF-4x9OTQ5Fi3NMSVES3oixmnGYcNG8,36381
181
181
  meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
@@ -195,7 +195,7 @@ meerschaum/core/Pipe/_attributes.py,sha256=yAHYvizRSkqqkIRcaGAYvUjE2qe5H4xNKBmxU
195
195
  meerschaum/core/Pipe/_bootstrap.py,sha256=evyi07kkzAVMj66HfZkbYdcWk_oHUDsl6f13EnSPMYs,7723
196
196
  meerschaum/core/Pipe/_clear.py,sha256=yFAYQnDmL3m6DzyAutgnBDXSOL9gjIrLvlQXd86YFV0,2193
197
197
  meerschaum/core/Pipe/_copy.py,sha256=PcOeNUb0B4-HehTAAnBpjyT4uLLTR6VQOarY0SFA9wk,2912
198
- meerschaum/core/Pipe/_data.py,sha256=WduKc7hrO8wAnFQr5nA5o-BpF6G6_v0E7gJSRCgKv2I,22709
198
+ meerschaum/core/Pipe/_data.py,sha256=Z4-B03-RP-PZtA9MnYe3-7oQSiNWTLRBwZsblvuXml4,22684
199
199
  meerschaum/core/Pipe/_deduplicate.py,sha256=ZiuYZBb6d8tUkgHp6Nj8Xle20u4sjxqW45Rk2N-up54,10191
200
200
  meerschaum/core/Pipe/_delete.py,sha256=1geNp9BgrocXP1gt76dMbnlJWKYFMuSNqPFA4K4-hXE,2118
201
201
  meerschaum/core/Pipe/_drop.py,sha256=gIKdHWm0RsIgC2nu768MtFnPbCXyiJjNxaiT1obyuIo,1036
@@ -218,10 +218,10 @@ meerschaum/plugins/__init__.py,sha256=trMQ53qgP7ikJhhV_uXzqJw6X1NDz2rPOGXFk40bb1
218
218
  meerschaum/plugins/bootstrap.py,sha256=qg9MQ1YAU8ShwGqWDl38WjiXLIxDPl95pSIGDLN9rOw,11423
219
219
  meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
220
220
  meerschaum/utils/_get_pipes.py,sha256=tu4xKPoDn79Dz2kWM13cXTP4DSCkn-3G9M8KiLftopw,11073
221
- meerschaum/utils/dataframe.py,sha256=G5rD3998mYAVeTlIat7gTPZKvhlpHSMvLo9EHTXocgM,41946
221
+ meerschaum/utils/dataframe.py,sha256=qV_6ecpxMIZOoiUb0pIk8u5ZPBn-h6O1yS_DtdLFX_U,41937
222
222
  meerschaum/utils/debug.py,sha256=GyIzJmunkoPnOcZNYVQdT4Sgd-aOb5MI2VbIgATOjIQ,3695
223
223
  meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
224
- meerschaum/utils/misc.py,sha256=ws-8v7gvD2uwmdIDDSRSUVL10XV7YZGUCEFBllC-xbY,46365
224
+ meerschaum/utils/misc.py,sha256=OijhS1TMjlqkDvahbxhqfUdo0Myeor-kTKrvqqG8wN0,46349
225
225
  meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
226
226
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
227
227
  meerschaum/utils/process.py,sha256=o7UtTQX87YGkg2dItPhlvN7gNQPkElXTYSzKf5Ro8Uc,7474
@@ -242,7 +242,7 @@ meerschaum/utils/dtypes/__init__.py,sha256=LawV4XrCLZRhyGquUen3i0HvK2IRHG-Ud4MYi
242
242
  meerschaum/utils/dtypes/sql.py,sha256=K0pginy3U5UvgtM9af-HRoiqdvFlwiAmKNQBPGChIUA,16267
243
243
  meerschaum/utils/formatting/__init__.py,sha256=GLx3fvTQi7EnC9fo31WggpMRpmR7yTWIuZmHdZgqvuM,15370
244
244
  meerschaum/utils/formatting/_jobs.py,sha256=izsqPJhTtUkXUUtWnbXtReYsUYwulXtci3pBj72Ne64,6637
245
- meerschaum/utils/formatting/_pipes.py,sha256=wy0iWJFsFl3X2VloaiA_gp9Yx9w6tD3FQZvAQAqef4A,19492
245
+ meerschaum/utils/formatting/_pipes.py,sha256=qud_zaGKP3gh-Z5BMYadwEKWSwzUyR44Jg1RGCzAsXI,19476
246
246
  meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
247
247
  meerschaum/utils/formatting/_shell.py,sha256=OMFh3cSZNr83z8m265irkS_JtEWHwjkEY2ybnMIOllY,3774
248
248
  meerschaum/utils/packages/__init__.py,sha256=m3HLTkKJxXco1g-h75q2l5skBwKXWaJtNmfQOsijchI,63965
@@ -250,11 +250,11 @@ meerschaum/utils/packages/_packages.py,sha256=8Ox9fiQTVmmKAmlxZBV-7Wtq_jhPnnf3AM
250
250
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
251
251
  meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
252
252
  meerschaum/utils/venv/__init__.py,sha256=G3KXL4ByWNqVxBRLs_RaJbO3h3tOKXkazkAYuoUW568,24420
253
- meerschaum-2.4.8.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
254
- meerschaum-2.4.8.dist-info/METADATA,sha256=9y7GjQHhEDP9mdJWBFuIfZwZ7vtHV0N4Wk0MqF6xuDg,24819
255
- meerschaum-2.4.8.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
256
- meerschaum-2.4.8.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
257
- meerschaum-2.4.8.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
258
- meerschaum-2.4.8.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
259
- meerschaum-2.4.8.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
260
- meerschaum-2.4.8.dist-info/RECORD,,
253
+ meerschaum-2.4.9.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
254
+ meerschaum-2.4.9.dist-info/METADATA,sha256=Gb8bbSaia30M8sGjWj52E0DDAdgyELhNUA4yNlw8Mw0,24819
255
+ meerschaum-2.4.9.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
256
+ meerschaum-2.4.9.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
257
+ meerschaum-2.4.9.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
258
+ meerschaum-2.4.9.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
259
+ meerschaum-2.4.9.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
260
+ meerschaum-2.4.9.dist-info/RECORD,,