meerschaum 2.5.0__py3-none-any.whl → 2.5.1__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.
@@ -13,6 +13,7 @@ import os
13
13
  import sys
14
14
  import pathlib
15
15
 
16
+ import meerschaum as mrsm
16
17
  from meerschaum.utils.typing import SuccessTuple, List, Optional, Dict, Callable, Any
17
18
  from meerschaum.config.static import STATIC_CONFIG as _STATIC_CONFIG
18
19
 
@@ -229,7 +230,7 @@ def entry_with_args(
229
230
  _ = get_shell(**kw).cmdloop()
230
231
  return True, "Success"
231
232
 
232
- skip_schedule = False
233
+ _skip_schedule = False
233
234
 
234
235
  executor_keys = kw.get('executor_keys', None)
235
236
  if executor_keys is None:
@@ -246,7 +247,7 @@ def entry_with_args(
246
247
  api_label = executor_keys.split(':')[-1]
247
248
  kw['action'].insert(0, 'api')
248
249
  kw['action'].insert(1, api_label)
249
- skip_schedule = True
250
+ _skip_schedule = True
250
251
 
251
252
  ### If the `--daemon` flag is present, prepend 'start job'.
252
253
  if kw.get('daemon', False) and kw['action'][0] != 'stack':
@@ -271,7 +272,7 @@ def entry_with_args(
271
272
  and kw['action'][0] == 'start'
272
273
  and kw['action'][1] in ('job', 'jobs')
273
274
  ):
274
- skip_schedule = True
275
+ _skip_schedule = True
275
276
 
276
277
  kw['action'] = remove_leading_action(kw['action'], _actions=_actions)
277
278
 
@@ -279,10 +280,11 @@ def entry_with_args(
279
280
  _do_action_wrapper,
280
281
  action_function,
281
282
  plugin_name,
283
+ _skip_schedule=_skip_schedule,
282
284
  **kw
283
285
  )
284
286
 
285
- if kw.get('schedule', None) and not skip_schedule:
287
+ if kw.get('schedule', None) and not _skip_schedule:
286
288
  from meerschaum.utils.schedule import schedule_function
287
289
  from meerschaum.utils.misc import interval_str
288
290
  import time
@@ -304,7 +306,12 @@ def entry_with_args(
304
306
  return result
305
307
 
306
308
 
307
- def _do_action_wrapper(action_function, plugin_name, **kw):
309
+ def _do_action_wrapper(
310
+ action_function,
311
+ plugin_name,
312
+ _skip_schedule: bool = False,
313
+ **kw
314
+ ):
308
315
  from meerschaum.plugins import Plugin
309
316
  from meerschaum.utils.venv import Venv
310
317
  from meerschaum.utils.misc import filter_keywords
@@ -328,6 +335,10 @@ def _do_action_wrapper(action_function, plugin_name, **kw):
328
335
  )
329
336
  except KeyboardInterrupt:
330
337
  result = False, f"Cancelled action `{action_name.lstrip()}`."
338
+
339
+ if kw.get('schedule', None) and not _skip_schedule:
340
+ mrsm.pprint(result)
341
+
331
342
  return result
332
343
 
333
344
  _shells = []
@@ -346,6 +346,8 @@ def accordion_items_from_pipe(
346
346
  for item in skip_items:
347
347
  _ = items_titles.pop(item, None)
348
348
 
349
+ pipe_meta_str = json.dumps(pipe.meta, sort_keys=True)
350
+
349
351
  ### Only generate items if they're in the `active_items` list.
350
352
  items_bodies = {}
351
353
  if 'overview' in active_items:
@@ -358,22 +360,103 @@ def accordion_items_from_pipe(
358
360
  html.Tr([html.Td("Instance"), html.Td(html.Pre(f"{pipe.instance_keys}"))]),
359
361
  html.Tr([html.Td("Target Table"), html.Td(html.Pre(f"{pipe.target}"))]),
360
362
  ]
361
- columns = pipe.columns.copy()
362
- if columns:
363
- datetime_index = columns.pop('datetime', None)
364
- columns_items = []
365
- if datetime_index:
366
- columns_items.append(html.Li(f"{datetime_index} (datetime)"))
367
- columns_items.extend([
368
- html.Li(f"{col}")
369
- for col_key, col in columns.items()
370
- ])
363
+
364
+ indices_header = [
365
+ html.Thead(
366
+ html.Tr(
367
+ [
368
+ html.Th(
369
+ html.Span(
370
+ "Key",
371
+ id={'type': 'key-table-header', 'id': pipe_meta_str},
372
+ style={"textDecoration": "underline", "cursor": "pointer"},
373
+ ),
374
+ ),
375
+ html.Th(
376
+ html.Span(
377
+ "Column",
378
+ id={'type': 'column-table-header', 'id': pipe_meta_str},
379
+ style={"textDecoration": "underline", "cursor": "pointer"},
380
+ ),
381
+ ),
382
+ html.Th(
383
+ html.Span(
384
+ "Index",
385
+ id={'type': 'index-table-header', 'id': pipe_meta_str},
386
+ style={"textDecoration": "underline", "cursor": "pointer"},
387
+ ),
388
+ ),
389
+ html.Th(
390
+ html.Span(
391
+ "Is Composite",
392
+ id={'type': 'is-composite-table-header', 'id': pipe_meta_str},
393
+ style={"textDecoration": "underline", "cursor": "pointer"},
394
+ ),
395
+ ),
396
+ dbc.Tooltip(
397
+ "Unique reference name for the index "
398
+ "(e.g. `datetime` for the range axis)",
399
+ target={'type': 'key-table-header', 'id': pipe_meta_str},
400
+ ),
401
+ dbc.Tooltip(
402
+ "The actual column (field name) in the target dataset.",
403
+ target={'type': 'column-table-header', 'id': pipe_meta_str},
404
+ ),
405
+ dbc.Tooltip(
406
+ "The name of the index created on the given columns.",
407
+ target={'type': 'index-table-header', 'id': pipe_meta_str},
408
+ ),
409
+ dbc.Tooltip(
410
+ "Whether the column is used in the composite primary key "
411
+ "to determine updates.",
412
+ target={'type': 'is-composite-table-header', 'id': pipe_meta_str},
413
+ ),
414
+ ]
415
+ )
416
+ )
417
+ ]
418
+
419
+ indices = pipe.indices
420
+ columns = pipe.columns
421
+ index_column_names = pipe.get_indices()
422
+ indices_rows = []
423
+ for ix_key, ix_name in index_column_names.items():
424
+ col = columns.get(ix_key, None)
425
+ ix_cols = indices.get(ix_key, None)
426
+ if not col and not ix_cols:
427
+ continue
428
+ if not isinstance(ix_cols, (list, tuple)):
429
+ ix_cols = [ix_cols]
430
+ if col:
431
+ col_item = html.Pre(col)
432
+ elif len(ix_cols) == 1:
433
+ col_item = html.Pre(ix_cols[0])
434
+ else:
435
+ col_item = html.Pre(html.Ul([html.Li(_c) for _c in ix_cols]))
436
+ is_composite_item = "✅" if col else ""
437
+ ix_key_item = html.Pre(ix_key) if ix_key != 'datetime' else html.Pre(f"🕓 {ix_key}")
438
+ indices_rows.append(
439
+ html.Tr([
440
+ html.Td(ix_key_item),
441
+ html.Td(col_item),
442
+ html.Td(html.Pre(ix_name)),
443
+ html.Td(is_composite_item),
444
+ ])
445
+ )
446
+ indices_table = dbc.Table(
447
+ indices_header + [html.Tbody(indices_rows)],
448
+ bordered=True,
449
+ hover=False,
450
+ striped=True,
451
+ )
452
+ if indices_rows:
371
453
  overview_rows.append(
372
454
  html.Tr([
373
- html.Td("Indices" if len(columns_items) != 1 else "Index"),
374
- html.Td(html.Pre(html.Ul(columns_items))),
455
+ html.Td("Indices" if len(indices_rows) != 1 else "Index"),
456
+ html.Td(indices_table),
375
457
  ])
376
458
  )
459
+
377
460
  tags = pipe.tags
378
461
  if tags:
379
462
  tags_items = html.Ul([
@@ -420,7 +503,6 @@ def accordion_items_from_pipe(
420
503
  if newest_time is not None:
421
504
  stats_rows.append(html.Tr([html.Td("Newest time"), html.Td(str(newest_time))]))
422
505
 
423
-
424
506
  items_bodies['stats'] = dbc.Table(stats_header + [html.Tbody(stats_rows)], hover=True)
425
507
 
426
508
  if 'columns' in active_items:
@@ -13,6 +13,7 @@ from meerschaum.utils.packages import attempt_import
13
13
  from meerschaum.api.dash.sessions import is_session_authenticated
14
14
  fastapi, fastapi_responses = attempt_import('fastapi', 'fastapi.responses')
15
15
  import starlette
16
+ httpcore = attempt_import('httpcore')
16
17
  httpx = attempt_import('httpx')
17
18
  websockets = attempt_import('websockets')
18
19
  Request = fastapi.Request
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.5.0"
5
+ __version__ = "2.5.1"
@@ -1194,9 +1194,9 @@ def query_df(
1194
1194
  dtypes = {col: str(typ) for col, typ in df.dtypes.items()}
1195
1195
 
1196
1196
  if inplace:
1197
- df.infer_objects(copy=False).fillna(NA, inplace=True)
1197
+ df.fillna(NA, inplace=True)
1198
1198
  else:
1199
- df = df.infer_objects(copy=False).fillna(NA)
1199
+ df = df.infer_objects().fillna(NA)
1200
1200
 
1201
1201
  if isinstance(begin, str):
1202
1202
  begin = dateutil_parser.parse(begin)
@@ -163,7 +163,8 @@ packages['api'] = {
163
163
  'fastapi' : 'fastapi>=0.111.0',
164
164
  'fastapi_login' : 'fastapi-login>=1.7.2',
165
165
  'multipart' : 'python-multipart>=0.0.9',
166
- 'httpx' : 'httpx>=0.24.1',
166
+ 'httpx' : 'httpx>=0.27.2',
167
+ 'httpcore' : 'httpcore>=1.0.6',
167
168
  'valkey' : 'valkey>=6.0.0',
168
169
  }
169
170
  packages['api'].update(packages['sql'])
@@ -111,16 +111,18 @@ def schedule_function(
111
111
  except RuntimeError:
112
112
  loop = asyncio.new_event_loop()
113
113
 
114
-
115
114
  async def run_scheduler():
116
115
  async with _scheduler:
117
116
  job = await _scheduler.add_schedule(
118
117
  function,
119
118
  trigger,
120
- args=args,
121
- kwargs=kw,
122
- max_running_jobs=1,
123
- conflict_policy=apscheduler.ConflictPolicy.replace,
119
+ **filter_keywords(
120
+ _scheduler.add_schedule,
121
+ args=args,
122
+ kwargs=kw,
123
+ max_running_jobs=1,
124
+ conflict_policy=apscheduler.ConflictPolicy.replace,
125
+ )
124
126
  )
125
127
  try:
126
128
  await _scheduler.run_until_stopped()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.5.0
3
+ Version: 2.5.1
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -39,7 +39,8 @@ Requires-Dist: websockets >=11.0.3 ; extra == 'api'
39
39
  Requires-Dist: fastapi >=0.111.0 ; extra == 'api'
40
40
  Requires-Dist: fastapi-login >=1.7.2 ; extra == 'api'
41
41
  Requires-Dist: python-multipart >=0.0.9 ; extra == 'api'
42
- Requires-Dist: httpx >=0.24.1 ; extra == 'api'
42
+ Requires-Dist: httpx >=0.27.2 ; extra == 'api'
43
+ Requires-Dist: httpcore >=1.0.6 ; extra == 'api'
43
44
  Requires-Dist: valkey >=6.0.0 ; extra == 'api'
44
45
  Requires-Dist: numpy >=1.18.5 ; extra == 'api'
45
46
  Requires-Dist: pandas[parquet] >=2.0.1 ; extra == 'api'
@@ -258,7 +259,8 @@ Requires-Dist: websockets >=11.0.3 ; extra == 'full'
258
259
  Requires-Dist: fastapi >=0.111.0 ; extra == 'full'
259
260
  Requires-Dist: fastapi-login >=1.7.2 ; extra == 'full'
260
261
  Requires-Dist: python-multipart >=0.0.9 ; extra == 'full'
261
- Requires-Dist: httpx >=0.24.1 ; extra == 'full'
262
+ Requires-Dist: httpx >=0.27.2 ; extra == 'full'
263
+ Requires-Dist: httpcore >=1.0.6 ; extra == 'full'
262
264
  Requires-Dist: valkey >=6.0.0 ; extra == 'full'
263
265
  Provides-Extra: gui
264
266
  Requires-Dist: toga >=0.3.0-dev29 ; extra == 'gui'
@@ -1,7 +1,7 @@
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=6attwMETUtFUtWq17asaSaNoeEvrwSLIVV_e5RX0pCc,12235
4
+ meerschaum/_internal/entry.py,sha256=Y1m2ar3TWBo_XntPL1P9ehUpjEAfXp2ZGZ-V6r5fXWQ,12438
5
5
  meerschaum/_internal/arguments/__init__.py,sha256=_nSKKVLXNsJeSv-buxEZsx8_c0BAbkhRyE4nT6Bv6q0,541
6
6
  meerschaum/_internal/arguments/_parse_arguments.py,sha256=H492J571CetGVIEzOZhwQVS3bcm4t6hjWg8Gsf6dw0Y,16340
7
7
  meerschaum/_internal/arguments/_parser.py,sha256=l2RYIn-1MEpjyUz2yczkeeuwg2liYaO2MNvEZ4Amk1o,16364
@@ -62,7 +62,7 @@ meerschaum/api/dash/connectors.py,sha256=nJxBOFldtCMJLYjUSVYZwX5BO-LNjTNHgoEaXe-
62
62
  meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
63
63
  meerschaum/api/dash/jobs.py,sha256=mj9STE6AaQY4fwkjD1JcYRG0iW3VEcP04bO1SlKgiXw,7681
64
64
  meerschaum/api/dash/keys.py,sha256=hzEVeN60SAfVTVSO5lajGaykxRIKGhj9Ph00HRJnNoE,12598
65
- meerschaum/api/dash/pipes.py,sha256=Bgp33bGkIFcqjrLiUxEubpxcXVVssY8bzwi7kLp6UQ8,21814
65
+ meerschaum/api/dash/pipes.py,sha256=WleVXiRGpR0A-moypjpOx3tSciUvkSkI6nJMkFgBXB8,25407
66
66
  meerschaum/api/dash/plugins.py,sha256=KdfG04f6SsUpBg-nm7MUJegFGuElOj-GAkxDX98hi60,3768
67
67
  meerschaum/api/dash/sessions.py,sha256=-y5p4MYKh1eFzppkBfMsd6T7-rJs1nYS2-4fbVRAeRA,5029
68
68
  meerschaum/api/dash/sync.py,sha256=9lt7IRdG-fe9gf_ZO_viPiGlerX7ic6r_VFocv3I51A,504
@@ -128,7 +128,7 @@ meerschaum/api/routes/_pipes.py,sha256=g88AU_NUM6tlX3bFl4EOGiQWZYqvDxDFlaLIYbYn1
128
128
  meerschaum/api/routes/_plugins.py,sha256=vR6-uTJraY1YEJMuRvds1-xFLB2mexxnp2dJwN_0rVo,6216
129
129
  meerschaum/api/routes/_users.py,sha256=SfAkZFKrKnGjpzj8SFIKzPemzQJOH3oB72h19EaUvcQ,7204
130
130
  meerschaum/api/routes/_version.py,sha256=2t-nw_9IxCVZCNEar0LOwmut2zsClRVHjiOOUx16cu0,825
131
- meerschaum/api/routes/_webterm.py,sha256=twjQyVReYwXypvxLPICYWjB5hR-XHzUWEuYRbSq27nc,3834
131
+ meerschaum/api/routes/_webterm.py,sha256=gow_xCsojGI37ZZDVfv2gdM18r_H2b2MR0ovFuG0uJ8,3872
132
132
  meerschaum/api/tables/__init__.py,sha256=e2aNC0CdlWICTUMx1i9RauF8Pm426J0RZJbsJWv4SWo,482
133
133
  meerschaum/config/__init__.py,sha256=5ZBq71P9t3nb74r5CGvMfNuauPscfegBX-nkaAUi5C4,11541
134
134
  meerschaum/config/_dash.py,sha256=BJHl4xMrQB-YHUEU7ldEW8q_nOPoIRSOqLrfGElc6Dw,187
@@ -143,7 +143,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
143
143
  meerschaum/config/_read_config.py,sha256=oxnLjuhy6JBBld886FkBX07wUdkpzEzTItYMUa9qw1Q,14688
144
144
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
145
145
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
146
- meerschaum/config/_version.py,sha256=wtE11BYLrlYRUUbwWnx12ho0mgFDv-guHaABMWLfMLY,71
146
+ meerschaum/config/_version.py,sha256=u3wv1cA4KB5sEnIGr1kMx8clvBa3XWg80tChn-ZLn00,71
147
147
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
148
148
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
149
  meerschaum/config/stack/__init__.py,sha256=gGVxXgNnGb9u25iF__IiNPlZt1BLUVmHmFJ0jvnJg3Q,10548
@@ -219,7 +219,7 @@ meerschaum/plugins/__init__.py,sha256=6krcqaMKyzuVqesXMqEL0XEy2SJQ4xfNt2-oI_fJ6v
219
219
  meerschaum/plugins/bootstrap.py,sha256=VwjpZAuYdqPJW0YoVgAoM_taHkdQHqP902-8T7OWWCI,11339
220
220
  meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
221
221
  meerschaum/utils/_get_pipes.py,sha256=tu4xKPoDn79Dz2kWM13cXTP4DSCkn-3G9M8KiLftopw,11073
222
- meerschaum/utils/dataframe.py,sha256=Sg4tUZbqgstwQnnnNR-zALzxJ6kRMeej_4n29HC9pWU,42157
222
+ meerschaum/utils/dataframe.py,sha256=XMG7Vy_grgYJpz79sVtZBXZk7kD9Ljz3q9Snd-EGOEU,42121
223
223
  meerschaum/utils/debug.py,sha256=GyIzJmunkoPnOcZNYVQdT4Sgd-aOb5MI2VbIgATOjIQ,3695
224
224
  meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
225
225
  meerschaum/utils/misc.py,sha256=OijhS1TMjlqkDvahbxhqfUdo0Myeor-kTKrvqqG8wN0,46349
@@ -227,7 +227,7 @@ meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRU
227
227
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
228
228
  meerschaum/utils/process.py,sha256=9O8PPPJjY9Q5W2f39I3B3lFU6TlSiRiI3bgrzdOOyOw,7843
229
229
  meerschaum/utils/prompt.py,sha256=6J--mZJ_NcEdSX6KMjtY4fXXezyILLHP24VdxFFqOIc,18985
230
- meerschaum/utils/schedule.py,sha256=zKOtfVdr1QRSZYBOSrO2MRIz8DTMbkWfQA6CjahbSso,11115
230
+ meerschaum/utils/schedule.py,sha256=9BQGEzDbInLAU1aFO-FvL3wKu9XCTUpS0V_aQID6xzc,11228
231
231
  meerschaum/utils/sql.py,sha256=R_hX92brvZDqID7c85-PNUVVR6RWXGXEgn1vFpHmi88,49869
232
232
  meerschaum/utils/threading.py,sha256=3N8JXPAnwqJiSjuQcbbJg3Rv9-CCUMJpeQRfKFR7MaA,2489
233
233
  meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
@@ -247,15 +247,15 @@ meerschaum/utils/formatting/_pipes.py,sha256=840O5rg2aHhQoraCDOh2ZtBo43_W2W6R60y
247
247
  meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
248
248
  meerschaum/utils/formatting/_shell.py,sha256=XH7VFLteNv7NGtWhJl7FdIGt80sKeTiDoJokGSDAwBM,3761
249
249
  meerschaum/utils/packages/__init__.py,sha256=KNs1Qc8-DX7r6LlZxyl9-Qr2FnsCtZfjSbiwo-sGNf8,64196
250
- meerschaum/utils/packages/_packages.py,sha256=L8G9mQtiDyFp2pKesHufZrtbPAty0DH4u8k2wmCTxVY,8687
250
+ meerschaum/utils/packages/_packages.py,sha256=KqQqa5ipPMuzEwy0IO3sWXbw7fLk552fZ-6KZmYMS2M,8745
251
251
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
252
252
  meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
253
253
  meerschaum/utils/venv/__init__.py,sha256=f3oi67lXYPLKJrnRW9lae7M3A8SFiC7DzaMoBdCVUFs,24609
254
- meerschaum-2.5.0.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
- meerschaum-2.5.0.dist-info/METADATA,sha256=oUofV2VmX4Ip1K7Sg8Hj-H0JYCwJjfMcLWSJPkLm0-s,24605
256
- meerschaum-2.5.0.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
- meerschaum-2.5.0.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
258
- meerschaum-2.5.0.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
- meerschaum-2.5.0.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
- meerschaum-2.5.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
- meerschaum-2.5.0.dist-info/RECORD,,
254
+ meerschaum-2.5.1.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
+ meerschaum-2.5.1.dist-info/METADATA,sha256=pjQMA0SMUdufdQHTfQewfyixEMOCw9zJyR7zvw3vJ6w,24704
256
+ meerschaum-2.5.1.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
+ meerschaum-2.5.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
258
+ meerschaum-2.5.1.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
+ meerschaum-2.5.1.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
+ meerschaum-2.5.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
+ meerschaum-2.5.1.dist-info/RECORD,,