meerschaum 2.7.6__py3-none-any.whl → 2.7.8__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. meerschaum/actions/copy.py +1 -0
  2. meerschaum/actions/drop.py +100 -22
  3. meerschaum/actions/index.py +71 -0
  4. meerschaum/actions/register.py +8 -12
  5. meerschaum/actions/sql.py +1 -1
  6. meerschaum/api/routes/_pipes.py +18 -0
  7. meerschaum/api/routes/_plugins.py +1 -1
  8. meerschaum/api/routes/_users.py +62 -61
  9. meerschaum/config/_version.py +1 -1
  10. meerschaum/connectors/api/_pipes.py +20 -0
  11. meerschaum/connectors/sql/_SQLConnector.py +8 -12
  12. meerschaum/connectors/sql/_create_engine.py +1 -1
  13. meerschaum/connectors/sql/_fetch.py +9 -39
  14. meerschaum/connectors/sql/_instance.py +3 -3
  15. meerschaum/connectors/sql/_pipes.py +262 -70
  16. meerschaum/connectors/sql/_plugins.py +11 -16
  17. meerschaum/connectors/sql/_sql.py +60 -39
  18. meerschaum/connectors/sql/_uri.py +9 -9
  19. meerschaum/connectors/sql/_users.py +10 -12
  20. meerschaum/connectors/sql/tables/__init__.py +13 -14
  21. meerschaum/connectors/valkey/_ValkeyConnector.py +2 -2
  22. meerschaum/core/Pipe/__init__.py +12 -2
  23. meerschaum/core/Pipe/_attributes.py +32 -38
  24. meerschaum/core/Pipe/_drop.py +73 -2
  25. meerschaum/core/Pipe/_fetch.py +4 -0
  26. meerschaum/core/Pipe/_index.py +68 -0
  27. meerschaum/core/Pipe/_sync.py +16 -9
  28. meerschaum/utils/daemon/Daemon.py +9 -2
  29. meerschaum/utils/daemon/RotatingFile.py +3 -3
  30. meerschaum/utils/dataframe.py +42 -12
  31. meerschaum/utils/dtypes/__init__.py +144 -24
  32. meerschaum/utils/dtypes/sql.py +52 -9
  33. meerschaum/utils/formatting/__init__.py +2 -2
  34. meerschaum/utils/formatting/_pprint.py +12 -11
  35. meerschaum/utils/misc.py +16 -18
  36. meerschaum/utils/prompt.py +1 -1
  37. meerschaum/utils/sql.py +106 -42
  38. {meerschaum-2.7.6.dist-info → meerschaum-2.7.8.dist-info}/METADATA +14 -2
  39. {meerschaum-2.7.6.dist-info → meerschaum-2.7.8.dist-info}/RECORD +45 -43
  40. {meerschaum-2.7.6.dist-info → meerschaum-2.7.8.dist-info}/WHEEL +1 -1
  41. {meerschaum-2.7.6.dist-info → meerschaum-2.7.8.dist-info}/LICENSE +0 -0
  42. {meerschaum-2.7.6.dist-info → meerschaum-2.7.8.dist-info}/NOTICE +0 -0
  43. {meerschaum-2.7.6.dist-info → meerschaum-2.7.8.dist-info}/entry_points.txt +0 -0
  44. {meerschaum-2.7.6.dist-info → meerschaum-2.7.8.dist-info}/top_level.txt +0 -0
  45. {meerschaum-2.7.6.dist-info → meerschaum-2.7.8.dist-info}/zip-safe +0 -0
meerschaum/utils/sql.py CHANGED
@@ -43,6 +43,9 @@ SKIP_IF_EXISTS_FLAVORS = {'mssql', 'oracle'}
43
43
  DROP_IF_EXISTS_FLAVORS = {
44
44
  'timescaledb', 'postgresql', 'citus', 'mssql', 'mysql', 'mariadb', 'sqlite',
45
45
  }
46
+ DROP_INDEX_IF_EXISTS_FLAVORS = {
47
+ 'mssql', 'timescaledb', 'postgresql', 'sqlite', 'citus',
48
+ }
46
49
  SKIP_AUTO_INCREMENT_FLAVORS = {'citus', 'duckdb'}
47
50
  COALESCE_UNIQUE_INDEX_FLAVORS = {'timescaledb', 'postgresql', 'citus'}
48
51
  UPDATE_QUERIES = {
@@ -196,7 +199,9 @@ columns_types_queries = {
196
199
  table_schema AS schema,
197
200
  table_name AS table,
198
201
  column_name AS column,
199
- data_type AS type
202
+ data_type AS type,
203
+ numeric_precision,
204
+ numeric_scale
200
205
  FROM information_schema.columns
201
206
  WHERE table_name IN ('{table}', '{table_trunc}')
202
207
  """,
@@ -219,7 +224,9 @@ columns_types_queries = {
219
224
  TABLE_SCHEMA AS [schema],
220
225
  TABLE_NAME AS [table],
221
226
  COLUMN_NAME AS [column],
222
- DATA_TYPE AS [type]
227
+ DATA_TYPE AS [type],
228
+ NUMERIC_PRECISION AS [numeric_precision],
229
+ NUMERIC_SCALE AS [numeric_scale]
223
230
  FROM {db_prefix}INFORMATION_SCHEMA.COLUMNS
224
231
  WHERE TABLE_NAME IN (
225
232
  '{table}',
@@ -233,7 +240,9 @@ columns_types_queries = {
233
240
  TABLE_SCHEMA `schema`,
234
241
  TABLE_NAME `table`,
235
242
  COLUMN_NAME `column`,
236
- DATA_TYPE `type`
243
+ DATA_TYPE `type`,
244
+ NUMERIC_PRECISION `numeric_precision`,
245
+ NUMERIC_SCALE `numeric_scale`
237
246
  FROM INFORMATION_SCHEMA.COLUMNS
238
247
  WHERE TABLE_NAME IN ('{table}', '{table_trunc}')
239
248
  """,
@@ -243,7 +252,9 @@ columns_types_queries = {
243
252
  TABLE_SCHEMA `schema`,
244
253
  TABLE_NAME `table`,
245
254
  COLUMN_NAME `column`,
246
- DATA_TYPE `type`
255
+ DATA_TYPE `type`,
256
+ NUMERIC_PRECISION `numeric_precision`,
257
+ NUMERIC_SCALE `numeric_scale`
247
258
  FROM INFORMATION_SCHEMA.COLUMNS
248
259
  WHERE TABLE_NAME IN ('{table}', '{table_trunc}')
249
260
  """,
@@ -253,7 +264,9 @@ columns_types_queries = {
253
264
  NULL AS "schema",
254
265
  TABLE_NAME AS "table",
255
266
  COLUMN_NAME AS "column",
256
- DATA_TYPE AS "type"
267
+ DATA_TYPE AS "type",
268
+ DATA_PRECISION AS "numeric_precision",
269
+ DATA_SCALE AS "numeric_scale"
257
270
  FROM all_tab_columns
258
271
  WHERE TABLE_NAME IN (
259
272
  '{table}',
@@ -376,7 +389,7 @@ columns_indices_queries = {
376
389
  WHERE
377
390
  t.name IN ('{table}', '{table_trunc}')
378
391
  AND s.name = '{schema}'
379
- AND i.type IN (1, 2) -- 1 = CLUSTERED, 2 = NONCLUSTERED
392
+ AND i.type IN (1, 2)
380
393
  """,
381
394
  'oracle': """
382
395
  SELECT
@@ -590,7 +603,14 @@ def dateadd_str(
590
603
  from meerschaum.utils.dtypes.sql import get_db_type_from_pd_type, get_pd_type_from_db_type
591
604
  dateutil_parser = attempt_import('dateutil.parser')
592
605
  if 'int' in str(type(begin)).lower():
593
- return str(begin)
606
+ num_str = str(begin)
607
+ if number is not None and number != 0:
608
+ num_str += (
609
+ f' + {number}'
610
+ if number > 0
611
+ else f" - {number * -1}"
612
+ )
613
+ return num_str
594
614
  if not begin:
595
615
  return ''
596
616
 
@@ -797,7 +817,7 @@ def sql_item_name(item: str, flavor: str, schema: Optional[str] = None) -> str:
797
817
  """
798
818
  truncated_item = truncate_item_name(str(item), flavor)
799
819
  if flavor == 'oracle':
800
- truncated_item = pg_capital(truncated_item)
820
+ truncated_item = pg_capital(truncated_item, quote_capitals=True)
801
821
  ### NOTE: System-reserved words must be quoted.
802
822
  if truncated_item.lower() in (
803
823
  'float', 'varchar', 'nvarchar', 'clob',
@@ -824,14 +844,17 @@ def sql_item_name(item: str, flavor: str, schema: Optional[str] = None) -> str:
824
844
  return schema_prefix + wrappers[0] + truncated_item + wrappers[1]
825
845
 
826
846
 
827
- def pg_capital(s: str) -> str:
847
+ def pg_capital(s: str, quote_capitals: bool = True) -> str:
828
848
  """
829
849
  If string contains a capital letter, wrap it in double quotes.
830
850
 
831
851
  Parameters
832
852
  ----------
833
- s: str :
834
- The string to be escaped.
853
+ s: str
854
+ The string to be escaped.
855
+
856
+ quote_capitals: bool, default True
857
+ If `False`, do not quote strings with contain only a mix of capital and lower-case letters.
835
858
 
836
859
  Returns
837
860
  -------
@@ -845,16 +868,24 @@ def pg_capital(s: str) -> str:
845
868
  'my_table'
846
869
 
847
870
  """
848
- if '"' in s:
871
+ if s.startswith('"') and s.endswith('"'):
849
872
  return s
873
+
874
+ s = s.replace('"', '')
875
+
850
876
  needs_quotes = s.startswith('_')
851
- for c in str(s):
852
- if ord(c) < ord('a') or ord(c) > ord('z'):
853
- if not c.isdigit() and c != '_':
877
+ if not needs_quotes:
878
+ for c in s:
879
+ if c == '_':
880
+ continue
881
+
882
+ if not c.isalnum() or (quote_capitals and c.isupper()):
854
883
  needs_quotes = True
855
884
  break
885
+
856
886
  if needs_quotes:
857
887
  return '"' + s + '"'
888
+
858
889
  return s
859
890
 
860
891
 
@@ -1048,7 +1079,7 @@ def table_exists(
1048
1079
  -------
1049
1080
  A `bool` indicating whether or not the table exists on the database.
1050
1081
  """
1051
- sqlalchemy = mrsm.attempt_import('sqlalchemy')
1082
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
1052
1083
  schema = schema or connector.schema
1053
1084
  insp = sqlalchemy.inspect(connector.engine)
1054
1085
  truncated_table_name = truncate_item_name(str(table), connector.flavor)
@@ -1101,7 +1132,7 @@ def get_sqlalchemy_table(
1101
1132
  if refresh:
1102
1133
  connector.metadata.clear()
1103
1134
  tables = get_tables(mrsm_instance=connector, debug=debug, create=False)
1104
- sqlalchemy = attempt_import('sqlalchemy')
1135
+ sqlalchemy = attempt_import('sqlalchemy', lazy=False)
1105
1136
  truncated_table_name = truncate_item_name(str(table), connector.flavor)
1106
1137
  table_kwargs = {
1107
1138
  'autoload_with': connector.engine,
@@ -1171,7 +1202,7 @@ def get_table_cols_types(
1171
1202
  """
1172
1203
  import textwrap
1173
1204
  from meerschaum.connectors import SQLConnector
1174
- sqlalchemy = mrsm.attempt_import('sqlalchemy')
1205
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
1175
1206
  flavor = flavor or getattr(connectable, 'flavor', None)
1176
1207
  if not flavor:
1177
1208
  raise ValueError("Please provide a database flavor.")
@@ -1209,7 +1240,7 @@ def get_table_cols_types(
1209
1240
  )).lstrip().rstrip()
1210
1241
  )
1211
1242
 
1212
- cols = ['database', 'schema', 'table', 'column', 'type']
1243
+ cols = ['database', 'schema', 'table', 'column', 'type', 'numeric_precision', 'numeric_scale']
1213
1244
  result_cols_ix = dict(enumerate(cols))
1214
1245
 
1215
1246
  debug_kwargs = {'debug': debug} if isinstance(connectable, SQLConnector) else {}
@@ -1265,7 +1296,15 @@ def get_table_cols_types(
1265
1296
  else doc['column']
1266
1297
  )
1267
1298
  )
1268
- ): doc['type'].upper()
1299
+ ): doc['type'].upper() + (
1300
+ f'({precision},{scale})'
1301
+ if (
1302
+ (precision := doc.get('numeric_precision', None))
1303
+ and
1304
+ (scale := doc.get('numeric_scale', None))
1305
+ )
1306
+ else ''
1307
+ )
1269
1308
  for doc in cols_types_docs_filtered
1270
1309
  }
1271
1310
  except Exception as e:
@@ -1323,7 +1362,7 @@ def get_table_cols_indices(
1323
1362
  import textwrap
1324
1363
  from collections import defaultdict
1325
1364
  from meerschaum.connectors import SQLConnector
1326
- sqlalchemy = mrsm.attempt_import('sqlalchemy')
1365
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
1327
1366
  flavor = flavor or getattr(connectable, 'flavor', None)
1328
1367
  if not flavor:
1329
1368
  raise ValueError("Please provide a database flavor.")
@@ -1448,6 +1487,7 @@ def get_update_queries(
1448
1487
  schema: Optional[str] = None,
1449
1488
  patch_schema: Optional[str] = None,
1450
1489
  identity_insert: bool = False,
1490
+ null_indices: bool = True,
1451
1491
  debug: bool = False,
1452
1492
  ) -> List[str]:
1453
1493
  """
@@ -1489,6 +1529,9 @@ def get_update_queries(
1489
1529
  If `True`, include `SET IDENTITY_INSERT` queries before and after the update queries.
1490
1530
  Only applies for MSSQL upserts.
1491
1531
 
1532
+ null_indices: bool, default True
1533
+ If `False`, do not coalesce index columns before joining.
1534
+
1492
1535
  debug: bool, default False
1493
1536
  Verbosity toggle.
1494
1537
 
@@ -1579,11 +1622,17 @@ def get_update_queries(
1579
1622
 
1580
1623
  coalesce_join_cols_str = ', '.join(
1581
1624
  [
1582
- 'COALESCE('
1583
- + sql_item_name(c_name, flavor)
1584
- + ', '
1585
- + get_null_replacement(c_type, flavor)
1586
- + ')'
1625
+ (
1626
+ (
1627
+ 'COALESCE('
1628
+ + sql_item_name(c_name, flavor)
1629
+ + ', '
1630
+ + get_null_replacement(c_type, flavor)
1631
+ + ')'
1632
+ )
1633
+ if null_indices
1634
+ else sql_item_name(c_name, flavor)
1635
+ )
1587
1636
  for c_name, c_type in join_cols_types
1588
1637
  ]
1589
1638
  )
@@ -1633,19 +1682,29 @@ def get_update_queries(
1633
1682
  def and_subquery(l_prefix: str, r_prefix: str):
1634
1683
  return '\n AND\n '.join([
1635
1684
  (
1636
- "COALESCE("
1637
- + l_prefix
1638
- + sql_item_name(c_name, flavor, None)
1639
- + ", "
1640
- + get_null_replacement(c_type, flavor)
1641
- + ")"
1642
- + '\n =\n '
1643
- + "COALESCE("
1644
- + r_prefix
1645
- + sql_item_name(c_name, flavor, None)
1646
- + ", "
1647
- + get_null_replacement(c_type, flavor)
1648
- + ")"
1685
+ (
1686
+ "COALESCE("
1687
+ + l_prefix
1688
+ + sql_item_name(c_name, flavor, None)
1689
+ + ", "
1690
+ + get_null_replacement(c_type, flavor)
1691
+ + ")"
1692
+ + '\n =\n '
1693
+ + "COALESCE("
1694
+ + r_prefix
1695
+ + sql_item_name(c_name, flavor, None)
1696
+ + ", "
1697
+ + get_null_replacement(c_type, flavor)
1698
+ + ")"
1699
+ )
1700
+ if null_indices
1701
+ else (
1702
+ l_prefix
1703
+ + sql_item_name(c_name, flavor, None)
1704
+ + ' = '
1705
+ + r_prefix
1706
+ + sql_item_name(c_name, flavor, None)
1707
+ )
1649
1708
  ) for c_name, c_type in join_cols_types
1650
1709
  ])
1651
1710
 
@@ -1973,7 +2032,12 @@ def _get_create_table_query_from_dtypes(
1973
2032
  autoincrement = False
1974
2033
 
1975
2034
  cols_types = (
1976
- [(primary_key, get_db_type_from_pd_type(dtypes.get(primary_key, 'int'), flavor=flavor))]
2035
+ [
2036
+ (
2037
+ primary_key,
2038
+ get_db_type_from_pd_type(dtypes.get(primary_key, 'int') or 'int', flavor=flavor)
2039
+ )
2040
+ ]
1977
2041
  if primary_key
1978
2042
  else []
1979
2043
  ) + [
@@ -2243,7 +2307,7 @@ def wrap_query_with_cte(
2243
2307
  .replace('--MRSM_SUBQUERY--', f"(\n{sub_query}\n) AS {cte_name_quoted}")
2244
2308
  )
2245
2309
 
2246
- if 'with ' in sub_query.lower():
2310
+ if sub_query.lstrip().lower().startswith('with '):
2247
2311
  final_select_ix = sub_query.lower().rfind('select')
2248
2312
  return (
2249
2313
  sub_query[:final_select_ix].rstrip() + ',\n'
@@ -2329,7 +2393,7 @@ def session_execute(
2329
2393
  A `SuccessTuple` indicating the queries were successfully executed.
2330
2394
  If `with_results`, return the `SuccessTuple` and a list of results.
2331
2395
  """
2332
- sqlalchemy = mrsm.attempt_import('sqlalchemy')
2396
+ sqlalchemy = mrsm.attempt_import('sqlalchemy', lazy=False)
2333
2397
  if not isinstance(queries, list):
2334
2398
  queries = [queries]
2335
2399
  successes, msgs, results = [], [], []
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: meerschaum
3
- Version: 2.7.6
3
+ Version: 2.7.8
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -318,6 +318,18 @@ Requires-Dist: python-multipart>=0.0.9; extra == "full"
318
318
  Requires-Dist: httpx>=0.27.2; extra == "full"
319
319
  Requires-Dist: httpcore>=1.0.6; extra == "full"
320
320
  Requires-Dist: valkey>=6.0.0; extra == "full"
321
+ Dynamic: author
322
+ Dynamic: author-email
323
+ Dynamic: classifier
324
+ Dynamic: description
325
+ Dynamic: description-content-type
326
+ Dynamic: home-page
327
+ Dynamic: license
328
+ Dynamic: maintainer-email
329
+ Dynamic: project-url
330
+ Dynamic: provides-extra
331
+ Dynamic: requires-python
332
+ Dynamic: summary
321
333
 
322
334
  <img src="https://meerschaum.io/assets/banner_1920x320.png" alt="Meerschaum banner" style="width: 100%"/>
323
335
 
@@ -26,23 +26,24 @@ meerschaum/actions/api.py,sha256=41r3fBh3vAPyNaOrvbh2oh6WUJTR2I-zaOEZN60A66E,125
26
26
  meerschaum/actions/attach.py,sha256=UV19d9W_2WYcrf7BRz7k3mriDoX1V4rA4AKvbLdor0o,3106
27
27
  meerschaum/actions/bootstrap.py,sha256=08o3PchrJ_Rv8IP30ZBH1Ovk-b8qFBGPedCjF7jRzSo,18084
28
28
  meerschaum/actions/clear.py,sha256=v_xHn7-Pu7iwFNJ07q9eJt2hqPV7OwNZHUYa9dvixs4,4976
29
- meerschaum/actions/copy.py,sha256=z_51zEQCKDXnAGfICIGKS3klZ2OTPdiZPJACvpuheDY,6861
29
+ meerschaum/actions/copy.py,sha256=bEKWvFVwxq8yoye7Iy_sfkvNVCJFYbAZHfxraX1U7hM,6862
30
30
  meerschaum/actions/deduplicate.py,sha256=puYyxeFYEUy1Sd2IOcZB2e6MrNxAZl2bTLmNzFDkCiw,1167
31
31
  meerschaum/actions/delete.py,sha256=H5oP0nE7qIWnFvkuFhZQZQYBVC0IbUevpaQ_2YQKXRA,18559
32
- meerschaum/actions/drop.py,sha256=Hd5h4rrWd7qL2rTqglsTonUsEoH7qQlsfqNFSHGeqr0,2453
32
+ meerschaum/actions/drop.py,sha256=UZg16dPx1o9f-hBrbIiZ6-F2QOTaTAdmFqLaSQla0t8,4434
33
33
  meerschaum/actions/edit.py,sha256=VpP6bJ-i7GR3tRzs_PILcDKcFCBeTUaeXpZDwxJ4fFk,16224
34
+ meerschaum/actions/index.py,sha256=JukgmLYhVkbV4eDgw_WbJwOGadNXQCVJfsGvND8HaEs,1800
34
35
  meerschaum/actions/install.py,sha256=P_M2dnn3sVC2mAn5hwvu4VHWkoh4r9TBUzNcU_Kukpc,7437
35
36
  meerschaum/actions/login.py,sha256=fNgsgkrFCn9wBQJY50SQhz2PwsN_TvEYYHnXK3JG4ig,4206
36
37
  meerschaum/actions/os.py,sha256=dtoppoBhLzW3rLNF0SFovEfNxA4WJWt_9WrOGlS5KbA,2251
37
38
  meerschaum/actions/pause.py,sha256=WI4dQFfjQ6ObWKUzwQ5FrtYPDyEcnxWwval8cSIzzJw,4221
38
39
  meerschaum/actions/python.py,sha256=k3Oo64RhyPd49W8bSjYvm6DOXuqY17NpR6BmfZb3-os,4737
39
- meerschaum/actions/register.py,sha256=By4eCJn-nvrWKs8dPG5GqMClUMm9y_yvIwU_FwRqJXw,14441
40
+ meerschaum/actions/register.py,sha256=GR9Q8ml0S_bKPQDFlXarmzNkx4vMn9Un6UKS5qQN38c,14172
40
41
  meerschaum/actions/reload.py,sha256=gMXeFBGVfyQ7uhKhYf6bLaDMD0fLPcA9BrLBSiuvWIc,508
41
42
  meerschaum/actions/restart.py,sha256=6ffp3-X9eTEgunVSdD41HnOwqp71yjuSAmXJ5j39ONI,3038
42
43
  meerschaum/actions/setup.py,sha256=KkAGWcgwzl_L6A19fTmTX1KtBjW2FwD8QenLjPy0mQQ,3205
43
44
  meerschaum/actions/sh.py,sha256=hSkGNTVqP5dNjhJ64zy3V3VCFPTKnDlH3PxdKdxtkGQ,1990
44
45
  meerschaum/actions/show.py,sha256=T8Ol1o-762cI9rlUzd-8svvwgT4slYXYfOPQETh9Koo,28446
45
- meerschaum/actions/sql.py,sha256=zG-KydYR654RHaF-O4Id3ACCDWeogk2B1R-OFLwFbG0,4515
46
+ meerschaum/actions/sql.py,sha256=PhbBMBq20LL8Yh3q-yqGMe7f8ffmyjbD8q_G8Q0WxZc,4527
46
47
  meerschaum/actions/stack.py,sha256=ZwrCTGJ0x3jjZkRieWcvqasQHYCqNtB1HYvTX-r3Z3g,5996
47
48
  meerschaum/actions/start.py,sha256=NtdVzeB00PQBnDSUSu8ypHmMrZT8_Idmw5BfVZ--Zic,21296
48
49
  meerschaum/actions/stop.py,sha256=5fdUw70YN-yuUWrC-NhA88cxr9FZ5NbssbQ8xXO8nFU,4632
@@ -124,9 +125,9 @@ meerschaum/api/routes/_index.py,sha256=QI6CBo6pI2Zi0a6fJHDjZfiLa9f4okb0BGe3A_JD0
124
125
  meerschaum/api/routes/_jobs.py,sha256=sEt-UtVd5pN-hJgikTvj1oTKJQ2hhNe8XhjkclwOXOE,12568
125
126
  meerschaum/api/routes/_login.py,sha256=tygEp50EVOMgvTG6CEASlShflbtEK8viJ9O07o0lnnE,2434
126
127
  meerschaum/api/routes/_misc.py,sha256=05--9ZVFeaCgZrHER2kA3SYdK4TyfkEXOCjLvPbum-w,2469
127
- meerschaum/api/routes/_pipes.py,sha256=Ix4N46qZ2YIEv7bd8SA9fy1k67n8zFlmPznSeK8micw,21535
128
- meerschaum/api/routes/_plugins.py,sha256=vR6-uTJraY1YEJMuRvds1-xFLB2mexxnp2dJwN_0rVo,6216
129
- meerschaum/api/routes/_users.py,sha256=SfAkZFKrKnGjpzj8SFIKzPemzQJOH3oB72h19EaUvcQ,7204
128
+ meerschaum/api/routes/_pipes.py,sha256=kykrEP6A75WBjn2wP28BLiPVRpwtfd8sVhfOhzjHaBY,22013
129
+ meerschaum/api/routes/_plugins.py,sha256=zzUyCiylJGeoLoa3dNjeRMSspvKfywTVXBpB-ghJ7ls,6228
130
+ meerschaum/api/routes/_users.py,sha256=Gts7gltQc5uxgjfL5pQS_R-cAhkHJZJWBCKGPRS1gmQ,6809
130
131
  meerschaum/api/routes/_version.py,sha256=2t-nw_9IxCVZCNEar0LOwmut2zsClRVHjiOOUx16cu0,825
131
132
  meerschaum/api/routes/_webterm.py,sha256=MenDvWXnZ8CWEmryB46pKohMf0PN6o1xJGZ3LFjxTOc,3909
132
133
  meerschaum/api/tables/__init__.py,sha256=e2aNC0CdlWICTUMx1i9RauF8Pm426J0RZJbsJWv4SWo,482
@@ -143,7 +144,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
143
144
  meerschaum/config/_read_config.py,sha256=RLC3HHi_1ndj7ITVDKLD9_uULY3caGRwSz3ATYE-ixA,15014
144
145
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
145
146
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
146
- meerschaum/config/_version.py,sha256=EePnAdxzJgKO-MgeMY2aPKqoD0YcmJBjbRii3glP9Q4,71
147
+ meerschaum/config/_version.py,sha256=4gZBseXxG1QTm6f5OOjglU5B2-n_LdqvQG4bLr5Nth0,71
147
148
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
148
149
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
150
  meerschaum/config/stack/__init__.py,sha256=2UukC0Lmk-aVL1o1qXzumqmuIrw3vu9fD7iCuz4XD4I,10544
@@ -163,49 +164,50 @@ meerschaum/connectors/api/_fetch.py,sha256=Khq9AFr1nk8Dsmcedb77aWhAuHw0JGgVeahDG
163
164
  meerschaum/connectors/api/_jobs.py,sha256=N5lpHFGG10jlVgaJeWAOTuLBQw3AdgjXsEPpp1YwZQE,11270
164
165
  meerschaum/connectors/api/_login.py,sha256=5GsD-B214vr5EYfM3XrTUs1sTFApxZA-9dNxq8oNSyg,2050
165
166
  meerschaum/connectors/api/_misc.py,sha256=XK0LLexNUEKZjAAqoJ-9oOgwLlMdwxSOvcpqO5NuOas,1083
166
- meerschaum/connectors/api/_pipes.py,sha256=hk6Qj3tgog8naxl0Y2l6TfJsG4AZmel3bFIaLxuy0XY,21248
167
+ meerschaum/connectors/api/_pipes.py,sha256=9i3KZ0S9960AaVYMlecxEEMKq8nTvT_Y3jNaFkoRU7E,21739
167
168
  meerschaum/connectors/api/_plugins.py,sha256=z04tPjfZZWwa7T60mogZH3X3wDmeLdnoN5Oh8m_YsU8,5217
168
169
  meerschaum/connectors/api/_request.py,sha256=Wc4Y70t0VxEj3_ch5fAeeoSAeFMuRnyNLOV-aUFInjY,6996
169
170
  meerschaum/connectors/api/_uri.py,sha256=HWxqGx4R1cHZ3ywy9Ro9ePbFxxusw4RLaC3hpGt9Z6I,1469
170
171
  meerschaum/connectors/api/_users.py,sha256=kzb7ENgXwQ19OJYKOuuWzx2rwVuUZCly9dTnyvVuT2Q,5275
171
172
  meerschaum/connectors/plugin/PluginConnector.py,sha256=aQ1QaB7MordCFimZqoGLb0R12PfDUN_nWks2J5mzeAs,2084
172
173
  meerschaum/connectors/plugin/__init__.py,sha256=pwF7TGY4WNz2_HaVdmK4rPQ9ZwTOEuPHgzOqsGcoXJw,198
173
- meerschaum/connectors/sql/_SQLConnector.py,sha256=uyGoCshgL-u6j3VbCDiBJn8LkVuveLeE62y8MWxSo24,12015
174
+ meerschaum/connectors/sql/_SQLConnector.py,sha256=B2-ltIIQy_n2qjeeT-sZk60tLJrg2Oefscytt7sGqb4,12083
174
175
  meerschaum/connectors/sql/__init__.py,sha256=3cqYiDkVasn7zWdtOTAZbT4bo95AuvGOmDD2TkaAxtw,205
175
176
  meerschaum/connectors/sql/_cli.py,sha256=VqAHkdXC0HVXuHaZik2q-cTVmIsuS4DWMcPMJPP_g-Q,4514
176
- meerschaum/connectors/sql/_create_engine.py,sha256=RzJz4Qc43P4JS6tkgVvAhbdjEejIepWbxymIfVZ44Nk,10555
177
- meerschaum/connectors/sql/_fetch.py,sha256=GOU1JnPOBgaI3dDr0JdAmfTMPLIMM0EFHrsqDgDIO74,14070
178
- meerschaum/connectors/sql/_instance.py,sha256=mmZnodccuCqmZN-UnznnFZ7JodxtT47kwjDDaDKgwUg,6274
179
- meerschaum/connectors/sql/_pipes.py,sha256=M0VQqkwd9sSyyttyKxonjoGi61guVc-oa1KiuWS7sd8,122315
180
- meerschaum/connectors/sql/_plugins.py,sha256=wbxcNxqTtjfDsxPvdVGTllasYf6NHHzODaQ72hEUSBQ,8135
181
- meerschaum/connectors/sql/_sql.py,sha256=brYLHJFt6BYlFYUhK--4okkll7UTkRR_PnvjjIJvXNY,41289
182
- meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
183
- meerschaum/connectors/sql/_users.py,sha256=FJjYeJGhr-TDHziNc6p_5mupGRtGjezKPIYgHFEVSnY,9956
177
+ meerschaum/connectors/sql/_create_engine.py,sha256=VfGtqF2hDNbgl2g-ZPcz28gKkfL6UOk4rKxUB4tKHdU,10567
178
+ meerschaum/connectors/sql/_fetch.py,sha256=mVe5zQo7SM9PSUU3Vjhacg4Bq1-Vttb7KkXL4p5YQdQ,12818
179
+ meerschaum/connectors/sql/_instance.py,sha256=KUTDrWWD9uf8G94_n_VM_J0HdggXQofJbekZ4errypw,6310
180
+ meerschaum/connectors/sql/_pipes.py,sha256=rYePCZfUuY43jPV8ysX9OznyXeGIEFAqvIXeffYD1eA,128088
181
+ meerschaum/connectors/sql/_plugins.py,sha256=OVEdZ_UHTi-x5sF-5lu2TmR9ONxddp6SwDOmFo5TpU8,8051
182
+ meerschaum/connectors/sql/_sql.py,sha256=VDRrfWBS0XbI8Jcr-MiQyXfY9OTHvR2EUtiazFoN-Qw,41999
183
+ meerschaum/connectors/sql/_uri.py,sha256=BFzu5pjlbL3kxLH13vHWlpKGYTPfg8wuA2j58O9NsCM,3440
184
+ meerschaum/connectors/sql/_users.py,sha256=Dbe79FV07ms5QVHwp68cruDzkGeKR4cE1-xc9Gza8Hs,9932
184
185
  meerschaum/connectors/sql/tools.py,sha256=jz8huOaRCwGlYdtGfAqAh7SoK8uydYBrasKQba9FT38,187
185
- meerschaum/connectors/sql/tables/__init__.py,sha256=e2dALTtThqbrq0soMNQ9QwgccyfTAjOrFkEClstLp3A,9001
186
+ meerschaum/connectors/sql/tables/__init__.py,sha256=53EeJsvmGjj68SpSShdt6kyLuk5Md5O8DnvWC1ra3u8,8876
186
187
  meerschaum/connectors/sql/tables/types.py,sha256=Jc_MTHIBM-KHpQt__Lckp39CeOo7tGOiAk5faDx-znY,1573
187
- meerschaum/connectors/valkey/_ValkeyConnector.py,sha256=xHld4OCnt0SXmAWH8Yintb3931F-MEgXfWerhTthsXc,15849
188
+ meerschaum/connectors/valkey/_ValkeyConnector.py,sha256=_KjJSgUcZhNJZuPfn0vhDBjnOzjtk_jZrjScfhio0Ww,15794
188
189
  meerschaum/connectors/valkey/__init__.py,sha256=jkVutsygQCvGPLN17cP6wHAjHajxVycnQJbm2eVMuY0,187
189
190
  meerschaum/connectors/valkey/_fetch.py,sha256=MjeE0h3YI4M3LCzy7axQAc_fX_l82vUqX4WXcYoppxE,1920
190
191
  meerschaum/connectors/valkey/_pipes.py,sha256=sjjO1vehNCkN_2bsqQKy81WWWrOg8a8ElupqzCjZ_7c,24594
191
192
  meerschaum/connectors/valkey/_plugins.py,sha256=ZqiEW4XZCOpw4G8DUK2IKY6Qrph4mYfTjgXWimgakYY,6267
192
193
  meerschaum/connectors/valkey/_users.py,sha256=AS1vLarrkDA9yPK644GWwRiQiTZVa9x3nlLpyntq40g,7730
193
194
  meerschaum/core/__init__.py,sha256=tjASW10n9uLV6bYhcwP4rggh-ESXSJzgxpSBbVsuISs,251
194
- meerschaum/core/Pipe/__init__.py,sha256=NqytRbY1QQM_xDcBDqhcpcVPuEdDRWi26Ou3KuoAseM,18902
195
- meerschaum/core/Pipe/_attributes.py,sha256=ionfZkDOJmcbcHT44cnzbSKcjoBV4_IHj6fdrAi6Jnc,22450
195
+ meerschaum/core/Pipe/__init__.py,sha256=OG2oKBfNmwGbdCI-m8wgdmFKflFbMkziP-YzAiTLww8,19304
196
+ meerschaum/core/Pipe/_attributes.py,sha256=ZUfgN7Vk8liu_lbF4nORtCjFlJB7LBNhrgZdgmEqTpU,22215
196
197
  meerschaum/core/Pipe/_bootstrap.py,sha256=gTNGh5e2LmTMrgIpHqrVaL60uPKWCphhsuz8j-lJ2HI,7348
197
198
  meerschaum/core/Pipe/_clear.py,sha256=LghXabgyyc1tD7FNQrh9ExT71ipcg2poM9FDA3k9e4M,2230
198
199
  meerschaum/core/Pipe/_copy.py,sha256=YDclAapf_spm9phpFr4-CALyYyw7nUsyKyiaLM1cnm4,2965
199
200
  meerschaum/core/Pipe/_data.py,sha256=HOvKlpD9NiBg599mSH1lzUQ_2g8-PsnMbGzMTOJx81E,24047
200
201
  meerschaum/core/Pipe/_deduplicate.py,sha256=xthUdsDxGO2t3m0XGDm9K3F6dpaZoemtjNi8gyKm0e0,10177
201
202
  meerschaum/core/Pipe/_delete.py,sha256=1geNp9BgrocXP1gt76dMbnlJWKYFMuSNqPFA4K4-hXE,2118
202
- meerschaum/core/Pipe/_drop.py,sha256=qj5L0obDh2_dKAg7LD3WLI3_L0Q5YECTfTmPc8zZUxI,1135
203
+ meerschaum/core/Pipe/_drop.py,sha256=KDfJVz2aGjHUE1Jkmj7Ej4ICPR5xPiuhyhgRO7Lu9d4,3299
203
204
  meerschaum/core/Pipe/_dtypes.py,sha256=-D3Dr64rSX7twuGNieZOYJOIdEKTknhBFHPmwj_QSQw,4274
204
205
  meerschaum/core/Pipe/_edit.py,sha256=HrKWe9vhqKaNOjOcJzW5BNbaUBPIbgNAhJEK8OMsy7c,8416
205
- meerschaum/core/Pipe/_fetch.py,sha256=dI2WFqaXVSi-xhgRcpp8Dh1g_ALgm5w6umvOj1cyCFk,5368
206
+ meerschaum/core/Pipe/_fetch.py,sha256=IojFSA_EXBSm0I8BmlDgmUh3M85FFtXjmDJhdxZ8LlE,5477
207
+ meerschaum/core/Pipe/_index.py,sha256=cYgaVwBVfAYxJBZ6j6MXDqOxnOrD_QnYi33_kIwy_FQ,1944
206
208
  meerschaum/core/Pipe/_register.py,sha256=Sd5xaAW8H7uLTIoommcKb-6kHPRuHJLWNSbPnt2UbvA,2240
207
209
  meerschaum/core/Pipe/_show.py,sha256=nG50y8eBT9TVuKkRgAKtNDNIxysJvMNxfu__lkL1F9k,1352
208
- meerschaum/core/Pipe/_sync.py,sha256=Bl-DJTuo-iZvPFlSeTbSjje36NeyUTW0yVcJZLEQMtA,36258
210
+ meerschaum/core/Pipe/_sync.py,sha256=AftRrXkWl8Gdpz-IT2MyBmxWcSrwVsWR7oE6JqwLBaM,36602
209
211
  meerschaum/core/Pipe/_verify.py,sha256=IdaAgQBjtxrGBVRnfBcfDZKn4zSynN2WUgq_-NnmEps,14356
210
212
  meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_uSJJDc,137
211
213
  meerschaum/core/User/_User.py,sha256=qbI0GIkr3G0PI4d9S49uatbJQ2kH_-z5-GoVJ0fuEtA,6624
@@ -219,43 +221,43 @@ meerschaum/plugins/__init__.py,sha256=Kl7Dz0CwUUxyjRC5RWnYo6WMLsOvdX2eQ38Rh3Bjdz
219
221
  meerschaum/plugins/bootstrap.py,sha256=VwjpZAuYdqPJW0YoVgAoM_taHkdQHqP902-8T7OWWCI,11339
220
222
  meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
221
223
  meerschaum/utils/_get_pipes.py,sha256=tu4xKPoDn79Dz2kWM13cXTP4DSCkn-3G9M8KiLftopw,11073
222
- meerschaum/utils/dataframe.py,sha256=fM8_DxnMTMhXDUqWIVXR-bOOwzBGO-cRcjarOIN3jdQ,47990
224
+ meerschaum/utils/dataframe.py,sha256=2wiZcD0Z5ItxMSTapzgVATJ3ny457pSsnHFVovWdk6g,49320
223
225
  meerschaum/utils/debug.py,sha256=GyIzJmunkoPnOcZNYVQdT4Sgd-aOb5MI2VbIgATOjIQ,3695
224
226
  meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
225
- meerschaum/utils/misc.py,sha256=Ut__DxYXuu-WtF9Mg2Z1CrnQMBmhPuqGsjOgiZMhAww,47079
227
+ meerschaum/utils/misc.py,sha256=Fv81Pkn1MGWwuoOZqWpe6OcZPL2hwHL8B_9K6dvcEIk,47028
226
228
  meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
227
229
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
228
230
  meerschaum/utils/process.py,sha256=9O8PPPJjY9Q5W2f39I3B3lFU6TlSiRiI3bgrzdOOyOw,7843
229
- meerschaum/utils/prompt.py,sha256=qbS8l0DfD6eRB9_RRbfkKLPs3m-Hw2zXSeQCf0TDJgU,19370
231
+ meerschaum/utils/prompt.py,sha256=qj1As1tuiL0GZTku_YOC6I5DmOU6L5otDR7DW7LA5fM,19397
230
232
  meerschaum/utils/schedule.py,sha256=bUsaCO9CGn2vJO5UvoISScHDDGIiMdCPHxpTFmu7vwE,11531
231
- meerschaum/utils/sql.py,sha256=JqOfWCHWAlm1fr7mtZMquoGCOnPyIlX5LDshcRFDgdo,77993
233
+ meerschaum/utils/sql.py,sha256=dAC002vPcalR96p4hK7EM62G3SmD1TPIP_h4oytfTtQ,80165
232
234
  meerschaum/utils/threading.py,sha256=awjbVL_QR6G-o_9Qk85utac9cSdqkiC8tQSdERCdrG8,2814
233
235
  meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
234
236
  meerschaum/utils/warnings.py,sha256=n-phr3BftNNgyPnvnXC_VMSjtCvjiCZ-ewmVfcROhkc,6611
235
237
  meerschaum/utils/yaml.py,sha256=PoC1du0pn2hLwTHwL-zuOf_EBWZSbCGOz-P-AZ4BWN0,3901
236
- meerschaum/utils/daemon/Daemon.py,sha256=jNhzpkcR-kXgIQKBqr--cFx6ZhAb0a0sdjnCOUkLEL0,42885
238
+ meerschaum/utils/daemon/Daemon.py,sha256=laRdFXkmXdobmjTILSwdSvveVLpKo8AEvCgQYcpXO48,43141
237
239
  meerschaum/utils/daemon/FileDescriptorInterceptor.py,sha256=MJKMO0Syf3d8yWUs6xXcQzg8Ptsuvh2aCRRoglOjusA,5257
238
- meerschaum/utils/daemon/RotatingFile.py,sha256=ePm_svjwyFDWh6V1k-bp1RHXCSWlyxDtlFu4SU4XvPU,24369
240
+ meerschaum/utils/daemon/RotatingFile.py,sha256=8_bXegBjjzNRlNEjFZ_EHU4pSaDfjXZTwO9F9kbAU1I,24337
239
241
  meerschaum/utils/daemon/StdinFile.py,sha256=qdZ8E_RSOkURypwnS50mWeyWyRig1bAY9tKWMTVKajc,3307
240
242
  meerschaum/utils/daemon/__init__.py,sha256=ziRPyu_IM3l7Xd58y3Uvt0fZLoirJ9nuboFIxxult6c,8741
241
243
  meerschaum/utils/daemon/_names.py,sha256=d2ZwTxBoTAqXZkCfZ5LuX2XrkQmLNUq1OTlUqfoH5dA,4515
242
- meerschaum/utils/dtypes/__init__.py,sha256=c6DoYyCbWvMdRapBRKP5UJYLRUWtkTIlC_8HRzXFh2s,12166
243
- meerschaum/utils/dtypes/sql.py,sha256=Ew-ULDAJipzWpq_W-3fGGgTORhtoIqRZzZcS7k0L4B4,19582
244
- meerschaum/utils/formatting/__init__.py,sha256=6MAIpkLG7inFvPGRZqV8EpVRmMB3BGQsgAh5KBP4tsg,15528
244
+ meerschaum/utils/dtypes/__init__.py,sha256=dO9xChsOzoaoULjJYHDr13lkjyVjG51Up3tlAQWS3pQ,15315
245
+ meerschaum/utils/dtypes/sql.py,sha256=ubPxiYlYEFegRA4wcKkF4zuVrla1rzG0eW97DWWZjNw,21099
246
+ meerschaum/utils/formatting/__init__.py,sha256=bA8qwBeTNIVHVQOBK682bJsKSKik1yS6xYJAoi0RErk,15528
245
247
  meerschaum/utils/formatting/_jobs.py,sha256=izsqPJhTtUkXUUtWnbXtReYsUYwulXtci3pBj72Ne64,6637
246
248
  meerschaum/utils/formatting/_pipes.py,sha256=OISJmmFiilaDbZxkiXck_g39MnnTfk_fJJyJ-YInvXA,19559
247
- meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
249
+ meerschaum/utils/formatting/_pprint.py,sha256=hU7g7zONT0QYYMLLnDbz7G3ccLFWfZV--OTiuzzELlA,3058
248
250
  meerschaum/utils/formatting/_shell.py,sha256=XH7VFLteNv7NGtWhJl7FdIGt80sKeTiDoJokGSDAwBM,3761
249
251
  meerschaum/utils/packages/__init__.py,sha256=TdKaj2tmN4bFwzusOfMv24P5ET7Zv73vyoOf9GOIr5E,64427
250
252
  meerschaum/utils/packages/_packages.py,sha256=_xODMSz1FAcx3XHrn9RXUhGJ1zg-QKsVu9zYZV2UJeY,8868
251
253
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
252
254
  meerschaum/utils/venv/_Venv.py,sha256=gc1TCeAj-kTZbQFAT9xl1bi4HXFV5ApT0dPOJfxwr78,3748
253
255
  meerschaum/utils/venv/__init__.py,sha256=vVU9vj7t-HTiRU--ReQZ9kRLesVqcHnSJDbmcfC-Dzg,27030
254
- meerschaum-2.7.6.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
- meerschaum-2.7.6.dist-info/METADATA,sha256=fWChi6YW7sc_kNoXq7H3ryE-RdPH0fSR5UsFWQfMhps,24227
256
- meerschaum-2.7.6.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
- meerschaum-2.7.6.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
258
- meerschaum-2.7.6.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
- meerschaum-2.7.6.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
- meerschaum-2.7.6.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
- meerschaum-2.7.6.dist-info/RECORD,,
256
+ meerschaum-2.7.8.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
257
+ meerschaum-2.7.8.dist-info/METADATA,sha256=85GGmc3PHmkk_G9gr5QCl8IqADTfa76D_u6PoZC2uzc,24489
258
+ meerschaum-2.7.8.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
259
+ meerschaum-2.7.8.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
260
+ meerschaum-2.7.8.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
261
+ meerschaum-2.7.8.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
262
+ meerschaum-2.7.8.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
263
+ meerschaum-2.7.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.7.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5