meerschaum 2.2.0rc4__py3-none-any.whl → 2.2.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.
@@ -47,9 +47,9 @@ def entry(sysargs: Optional[List[str]] = None) -> SuccessTuple:
47
47
  )
48
48
  )
49
49
 
50
- if args.get('schedule', None):
51
- from meerschaum.utils.schedule import schedule_function
52
- return schedule_function(entry_with_args, **args)
50
+ # if args.get('schedule', None):
51
+ # from meerschaum.utils.schedule import schedule_function
52
+ # return schedule_function(entry_with_args, **args)
53
53
  return entry_with_args(**args)
54
54
 
55
55
 
@@ -61,7 +61,7 @@ def entry_with_args(
61
61
  Use `_entry()` for parsing sysargs before executing.
62
62
  """
63
63
  import sys
64
- from meerschaum.plugins import Plugin
64
+ import functools
65
65
  from meerschaum.actions import get_action, get_main_action_name
66
66
  from meerschaum._internal.arguments import remove_leading_action
67
67
  from meerschaum.utils.venv import Venv, active_venvs, deactivate_venv
@@ -88,10 +88,41 @@ def entry_with_args(
88
88
  action_function.__module__.startswith('plugins.')
89
89
  ) else None
90
90
  )
91
- plugin = Plugin(plugin_name) if plugin_name else None
91
+
92
+ skip_schedule = False
93
+ if (
94
+ kw['action']
95
+ and kw['action'][0] == 'start'
96
+ and kw['action'][1] in ('job', 'jobs')
97
+ ):
98
+ skip_schedule = True
92
99
 
93
100
  kw['action'] = remove_leading_action(kw['action'], _actions=_actions)
94
101
 
102
+ do_action = functools.partial(_do_action_wrapper, action_function, plugin_name, **kw)
103
+ if kw.get('schedule', None) and not skip_schedule:
104
+ from meerschaum.utils.schedule import schedule_function
105
+ from meerschaum.utils.misc import interval_str
106
+ import time
107
+ from datetime import timedelta
108
+ start_time = time.perf_counter()
109
+ schedule_function(do_action, **kw)
110
+ delta = timedelta(seconds=(time.perf_counter() - start_time))
111
+ result = True, f"Exited scheduler after {interval_str(delta)}."
112
+ else:
113
+ result = do_action()
114
+
115
+ ### Clean up stray virtual environments.
116
+ for venv in [venv for venv in active_venvs]:
117
+ deactivate_venv(venv, debug=kw.get('debug', False), force=True)
118
+
119
+ return result
120
+
121
+
122
+ def _do_action_wrapper(action_function, plugin_name, **kw):
123
+ from meerschaum.plugins import Plugin
124
+ from meerschaum.utils.venv import Venv, active_venvs, deactivate_venv
125
+ plugin = Plugin(plugin_name) if plugin_name else None
95
126
  with Venv(plugin, debug=kw.get('debug', False)):
96
127
  action_name = ' '.join(action_function.__name__.split('_') + kw.get('action', []))
97
128
  try:
@@ -111,14 +142,8 @@ def entry_with_args(
111
142
  )
112
143
  except KeyboardInterrupt:
113
144
  result = False, f"Cancelled action `{action_name}`."
114
-
115
- ### Clean up stray virtual environments.
116
- for venv in [venv for venv in active_venvs]:
117
- deactivate_venv(venv, debug=kw.get('debug', False), force=True)
118
-
119
145
  return result
120
146
 
121
-
122
147
  _shells = []
123
148
  _shell = None
124
149
  def get_shell(
@@ -2,4 +2,4 @@
2
2
  Specify the Meerschaum release version.
3
3
  """
4
4
 
5
- __version__ = "2.2.0rc4"
5
+ __version__ = "2.2.1"
@@ -23,7 +23,14 @@ from meerschaum.connectors.sql.SQLConnector import SQLConnector
23
23
  from meerschaum.connectors.api.APIConnector import APIConnector
24
24
  from meerschaum.connectors.sql._create_engine import flavor_configs as sql_flavor_configs
25
25
 
26
- __all__ = ("Connector", "SQLConnector", "APIConnector", "get_connector", "is_connected")
26
+ __all__ = (
27
+ "Connector",
28
+ "SQLConnector",
29
+ "APIConnector",
30
+ "get_connector",
31
+ "is_connected",
32
+ "poll",
33
+ )
27
34
 
28
35
  ### store connectors partitioned by
29
36
  ### type, label for reuse
@@ -42,9 +42,13 @@ def cli(
42
42
  env = copy.deepcopy(dict(os.environ))
43
43
  env[f'MRSM_SQL_{self.label.upper()}'] = json.dumps(self.meta)
44
44
  cli_code = (
45
+ "import sys\n"
45
46
  "import meerschaum as mrsm\n"
46
47
  f"conn = mrsm.get_connector('sql:{self.label}')\n"
47
- f"conn._cli_exit()"
48
+ "success, msg = conn._cli_exit()\n"
49
+ "mrsm.pprint((success, msg))\n"
50
+ "if not success:\n"
51
+ " raise Exception(msg)"
48
52
  )
49
53
  try:
50
54
  _ = venv_exec(cli_code, venv=None, debug=debug, capture_output=False)
@@ -91,6 +95,8 @@ def _cli_exit(
91
95
  cli_arg_str = self.DATABASE_URL
92
96
  if self.flavor in ('sqlite', 'duckdb'):
93
97
  cli_arg_str = str(self.database)
98
+ if cli_arg_str.startswith('postgresql+psycopg://'):
99
+ cli_arg_str = cli_arg_str.replace('postgresql+psycopg://', 'postgresql://')
94
100
 
95
101
  ### Define the script to execute to launch the CLI.
96
102
  ### The `mssqlcli` script is manually written to avoid telemetry
@@ -385,6 +385,9 @@ def get_create_index_queries(
385
385
  -------
386
386
  A dictionary of column names mapping to lists of queries.
387
387
  """
388
+ ### NOTE: Due to recent breaking changes in DuckDB, indices don't behave properly.
389
+ if self.flavor == 'duckdb':
390
+ return {}
388
391
  from meerschaum.utils.sql import (
389
392
  sql_item_name,
390
393
  get_distinct_col_count,
@@ -554,6 +557,9 @@ def get_drop_index_queries(
554
557
  -------
555
558
  A dictionary of column names mapping to lists of queries.
556
559
  """
560
+ ### NOTE: Due to breaking changes within DuckDB, indices must be skipped.
561
+ if self.flavor == 'duckdb':
562
+ return {}
557
563
  if not pipe.exists(debug=debug):
558
564
  return {}
559
565
  from meerschaum.utils.sql import sql_item_name, table_exists, hypertable_queries
@@ -60,8 +60,8 @@ packages: Dict[str, Dict[str, str]] = {
60
60
  'pymysql' : 'PyMySQL>=0.9.0',
61
61
  'aiomysql' : 'aiomysql>=0.0.21',
62
62
  'sqlalchemy_cockroachdb' : 'sqlalchemy-cockroachdb>=2.0.0',
63
- 'duckdb' : 'duckdb<0.10.3',
64
- 'duckdb_engine' : 'duckdb-engine>=0.9.2',
63
+ 'duckdb' : 'duckdb>=1.0.0',
64
+ 'duckdb_engine' : 'duckdb-engine>=0.13.0',
65
65
  },
66
66
  'drivers-extras': {
67
67
  'pyodbc' : 'pyodbc>=4.0.30',
@@ -99,7 +99,7 @@ def schedule_function(
99
99
  apscheduler = mrsm.attempt_import('apscheduler', lazy=False)
100
100
  now = round_time(datetime.now(timezone.utc), timedelta(minutes=1))
101
101
  trigger = parse_schedule(schedule, now=now)
102
- _scheduler = apscheduler.AsyncScheduler()
102
+ _scheduler = apscheduler.AsyncScheduler(identity='mrsm-scheduler')
103
103
  try:
104
104
  loop = asyncio.get_running_loop()
105
105
  except RuntimeError:
@@ -107,7 +107,14 @@ def schedule_function(
107
107
 
108
108
  async def run_scheduler():
109
109
  async with _scheduler:
110
- job = await _scheduler.add_schedule(function, trigger, args=args, kwargs=kw)
110
+ job = await _scheduler.add_schedule(
111
+ function,
112
+ trigger,
113
+ args = args,
114
+ kwargs = kw,
115
+ max_running_jobs = 1,
116
+ conflict_policy = apscheduler.ConflictPolicy.replace,
117
+ )
111
118
  try:
112
119
  await _scheduler.run_until_stopped()
113
120
  except (KeyboardInterrupt, SystemExit) as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerschaum
3
- Version: 2.2.0rc4
3
+ Version: 2.2.1
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -55,8 +55,8 @@ Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'api'
55
55
  Requires-Dist: PyMySQL >=0.9.0 ; extra == 'api'
56
56
  Requires-Dist: aiomysql >=0.0.21 ; extra == 'api'
57
57
  Requires-Dist: sqlalchemy-cockroachdb >=2.0.0 ; extra == 'api'
58
- Requires-Dist: duckdb <0.10.3 ; extra == 'api'
59
- Requires-Dist: duckdb-engine >=0.9.2 ; extra == 'api'
58
+ Requires-Dist: duckdb >=1.0.0 ; extra == 'api'
59
+ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'api'
60
60
  Requires-Dist: wheel >=0.34.2 ; extra == 'api'
61
61
  Requires-Dist: setuptools >=63.3.0 ; extra == 'api'
62
62
  Requires-Dist: PyYAML >=5.3.1 ; extra == 'api'
@@ -161,8 +161,8 @@ Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'drivers'
161
161
  Requires-Dist: PyMySQL >=0.9.0 ; extra == 'drivers'
162
162
  Requires-Dist: aiomysql >=0.0.21 ; extra == 'drivers'
163
163
  Requires-Dist: sqlalchemy-cockroachdb >=2.0.0 ; extra == 'drivers'
164
- Requires-Dist: duckdb <0.10.3 ; extra == 'drivers'
165
- Requires-Dist: duckdb-engine >=0.9.2 ; extra == 'drivers'
164
+ Requires-Dist: duckdb >=1.0.0 ; extra == 'drivers'
165
+ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'drivers'
166
166
  Provides-Extra: drivers-extras
167
167
  Requires-Dist: pyodbc >=4.0.30 ; extra == 'drivers-extras'
168
168
  Requires-Dist: cx-Oracle >=8.3.0 ; extra == 'drivers-extras'
@@ -217,8 +217,8 @@ Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'full'
217
217
  Requires-Dist: PyMySQL >=0.9.0 ; extra == 'full'
218
218
  Requires-Dist: aiomysql >=0.0.21 ; extra == 'full'
219
219
  Requires-Dist: sqlalchemy-cockroachdb >=2.0.0 ; extra == 'full'
220
- Requires-Dist: duckdb <0.10.3 ; extra == 'full'
221
- Requires-Dist: duckdb-engine >=0.9.2 ; extra == 'full'
220
+ Requires-Dist: duckdb >=1.0.0 ; extra == 'full'
221
+ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'full'
222
222
  Requires-Dist: toga >=0.3.0-dev29 ; extra == 'full'
223
223
  Requires-Dist: pywebview >=3.6.3 ; extra == 'full'
224
224
  Requires-Dist: pycparser >=2.21.0 ; extra == 'full'
@@ -271,8 +271,8 @@ Requires-Dist: psycopg[binary] >=3.1.18 ; extra == 'sql'
271
271
  Requires-Dist: PyMySQL >=0.9.0 ; extra == 'sql'
272
272
  Requires-Dist: aiomysql >=0.0.21 ; extra == 'sql'
273
273
  Requires-Dist: sqlalchemy-cockroachdb >=2.0.0 ; extra == 'sql'
274
- Requires-Dist: duckdb <0.10.3 ; extra == 'sql'
275
- Requires-Dist: duckdb-engine >=0.9.2 ; extra == 'sql'
274
+ Requires-Dist: duckdb >=1.0.0 ; extra == 'sql'
275
+ Requires-Dist: duckdb-engine >=0.13.0 ; extra == 'sql'
276
276
  Requires-Dist: wheel >=0.34.2 ; extra == 'sql'
277
277
  Requires-Dist: setuptools >=63.3.0 ; extra == 'sql'
278
278
  Requires-Dist: PyYAML >=5.3.1 ; extra == 'sql'
@@ -1,7 +1,7 @@
1
1
  meerschaum/__init__.py,sha256=mw_PhxT7155SW8d_S51T4-WTibL5g205CwMa3qX8qyA,1487
2
2
  meerschaum/__main__.py,sha256=Q43yra6APe5CdhDp9ngaorUjs8ZoabeYnMa6C5kQchA,2763
3
3
  meerschaum/_internal/__init__.py,sha256=ilC7utfKtin7GAvuN34fKyUQYfPyqH0Mm3MJF5iyEf4,169
4
- meerschaum/_internal/entry.py,sha256=Oga0OH808UtTJGvvkQQFRKjVCjSCRYjJe3M1A9-yf1k,4806
4
+ meerschaum/_internal/entry.py,sha256=_pfnlnXhqzP4XQ5syZ04sDG9LxS5UhNdziBlETDMUhc,5756
5
5
  meerschaum/_internal/arguments/__init__.py,sha256=HFciFQgo2ZOT19Mo6CpLhPYlpLYh2sNn1C9Lo7NMADc,519
6
6
  meerschaum/_internal/arguments/_parse_arguments.py,sha256=dNVDBvXYNgEw-TrlZJ9A6VPlG696EpQcQm6FOAhseqw,10249
7
7
  meerschaum/_internal/arguments/_parser.py,sha256=OtcrZK-_qV9a5qpdcP9NLKOGRevjmCU9fBLbB88px3c,13719
@@ -135,7 +135,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
135
135
  meerschaum/config/_read_config.py,sha256=WFZKIXZMDe_ca0ES7ivgM_mnwShvFxLdoeisT_X5-h0,14720
136
136
  meerschaum/config/_shell.py,sha256=s74cmJl8NrhM_Y1cB_P41_JDUYXV0g4WXnKFZWMtnrY,3551
137
137
  meerschaum/config/_sync.py,sha256=oK2ZujO2T1he08BXCFyiniBUevNGWSQKXLcS_jRv_7Y,4155
138
- meerschaum/config/_version.py,sha256=6-VmhSVm61Y2uCa9nlsUwmkBFChw3Ft25iUS-WOY4Ts,74
138
+ meerschaum/config/_version.py,sha256=OydT3amCDUZG1dyzap3MREBRuMd53MMaduOv0qZtPL8,71
139
139
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
140
  meerschaum/config/stack/__init__.py,sha256=c_WdTSejVdj8lqSE_pK5MhIBkHoftiZWDuEuB9dmk2I,9007
141
141
  meerschaum/config/stack/grafana/__init__.py,sha256=LNXQw2FvHKrD68RDhqDmi2wJjAHaKw9IWx8rNuyWEPo,2010
@@ -144,7 +144,7 @@ meerschaum/config/stack/mosquitto/resources/__init__.py,sha256=47DEQpj8HBSa-_TIm
144
144
  meerschaum/config/stack/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
145
  meerschaum/config/static/__init__.py,sha256=zsSq54OkLqjfG_QGyH6zXzZnoaGpDyjmV0OCvbygFr8,4474
146
146
  meerschaum/connectors/Connector.py,sha256=cJKinmk7eWZwCBvtX4H9r66macTZOY1qjxR7JUEmDmg,6381
147
- meerschaum/connectors/__init__.py,sha256=OCNfIEeuom6g7GOO3xj37YAuxLOesGCZ-VrcltyHsSY,12071
147
+ meerschaum/connectors/__init__.py,sha256=zXumYuKTWOyu3U6J1zvMQS30HImYLE8ssBdJs-I134M,12106
148
148
  meerschaum/connectors/parse.py,sha256=gidA2jvOLTvEeL5hM9JjcUwkMRBadUhd4IfA5Jy1tgg,4044
149
149
  meerschaum/connectors/poll.py,sha256=gIY9TvFBqMvMNQvR0O2No7koLLz2PjfExBr_Dsosgpg,7363
150
150
  meerschaum/connectors/api/APIConnector.py,sha256=pj-RncLhDUEBK7R4tByH6nrxZWU8zxGVOS2Wyik36zs,4355
@@ -162,11 +162,11 @@ meerschaum/connectors/plugin/PluginConnector.py,sha256=aQ1QaB7MordCFimZqoGLb0R12
162
162
  meerschaum/connectors/plugin/__init__.py,sha256=pwF7TGY4WNz2_HaVdmK4rPQ9ZwTOEuPHgzOqsGcoXJw,198
163
163
  meerschaum/connectors/sql/SQLConnector.py,sha256=QvsFgAv2NAUdsJrcNYZIkQ9x_ow5JRe4Ie_UgSrDz3M,11709
164
164
  meerschaum/connectors/sql/__init__.py,sha256=xwSYhYuketTXhQLXyD9pZ0NNBPboW5Oqv9zrKfjx0Ic,175
165
- meerschaum/connectors/sql/_cli.py,sha256=XaWjWZzGIfhMiYoXAs2FrwHUGNyZpxIzH4g4xugLKsw,4123
165
+ meerschaum/connectors/sql/_cli.py,sha256=1SgnWeMIAihoxp4FzbNrcq1npXf0dSOQnCntpU9hUXA,4405
166
166
  meerschaum/connectors/sql/_create_engine.py,sha256=vPVwR3cpfcQm0aW9xo_DUWA3gMdlkuB0wJ8JoTpRYD0,10396
167
167
  meerschaum/connectors/sql/_fetch.py,sha256=NYYWDoEd-aGIS337KwH-D9_3KVWVCZOHAspGLfdEuUE,13086
168
168
  meerschaum/connectors/sql/_instance.py,sha256=r_S96vzSuKnBVGROSKQAPl-DnFnOOEPUkz1KFDFPHFQ,6509
169
- meerschaum/connectors/sql/_pipes.py,sha256=rVNHYo7BwVe7PTNYBQVsjxH2bKT2XFqZO4Kakzv9AW8,101362
169
+ meerschaum/connectors/sql/_pipes.py,sha256=0FeRmmZueWBfgBo6XFKcidC7l8eBTDUY12-DbdrXOsk,101627
170
170
  meerschaum/connectors/sql/_plugins.py,sha256=OsCmDlZKyJnY77QAWghmpuXR0z_CmFq5uHpZK7Cj-ZI,8321
171
171
  meerschaum/connectors/sql/_sql.py,sha256=553BTPtvnnLMERYK8IcxR4CS3R4Sq7id-5hbApOEsIU,34199
172
172
  meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
@@ -205,7 +205,7 @@ meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRU
205
205
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
206
206
  meerschaum/utils/process.py,sha256=IHnUhX79XofHwMsOs1A_irLMa7i48xXB-GCL83MtZOY,7192
207
207
  meerschaum/utils/prompt.py,sha256=0mBFbgi_l9rCou9UnC_6qKTHkqyl1Z_jSRzfmc0xRXM,16490
208
- meerschaum/utils/schedule.py,sha256=coJm8s91DZjezv4h9dkgUkU3R_O7gWJUBojxjItkrCQ,10654
208
+ meerschaum/utils/schedule.py,sha256=2UpXg5E9mfjg83w3N6C2_Q7tlE2exVJehro2Bvp6PzQ,10871
209
209
  meerschaum/utils/sql.py,sha256=4sCNEpgUd6uFz6ySs4nnUMVaOT0YAvPM1ZlQYJTSF-0,46656
210
210
  meerschaum/utils/threading.py,sha256=3N8JXPAnwqJiSjuQcbbJg3Rv9-CCUMJpeQRfKFR7MaA,2489
211
211
  meerschaum/utils/typing.py,sha256=L05wOXfWdn_nJ0KnZVr-2zdMYcqjdyOW_7InT3xe6-s,2807
@@ -224,15 +224,15 @@ meerschaum/utils/formatting/_pipes.py,sha256=wy0iWJFsFl3X2VloaiA_gp9Yx9w6tD3FQZv
224
224
  meerschaum/utils/formatting/_pprint.py,sha256=tgrT3FyGyu5CWJYysqK3kX1xdZYorlbOk9fcU_vt9Qg,3096
225
225
  meerschaum/utils/formatting/_shell.py,sha256=ox75O7VHDAiwzSvdMSJZhXLadvAqYJVeihU6WeZ2Ogc,3677
226
226
  meerschaum/utils/packages/__init__.py,sha256=HEJYz_rceqljpyRFlnToLR6vc_b7r-2d2K8zh_th2lg,57185
227
- meerschaum/utils/packages/_packages.py,sha256=eAw_5D9AHblnUnKEiBMCElVgtCosxgrhQUAAktITSNA,7864
227
+ meerschaum/utils/packages/_packages.py,sha256=P1Y0mc0TlX5iCL08U-4WkMG9LpEt_REWo30GJUn38cM,7865
228
228
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
229
229
  meerschaum/utils/venv/_Venv.py,sha256=sBnlmxHdAh2bx8btfVoD79-H9-cYsv5lP02IIXkyECs,3553
230
230
  meerschaum/utils/venv/__init__.py,sha256=sj-n8scWH2NPDJGAxfpqzsYqVUt2jMEr-7Uq9G7YUNQ,23183
231
- meerschaum-2.2.0rc4.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
232
- meerschaum-2.2.0rc4.dist-info/METADATA,sha256=KBLySrydHzynnwn50qWE8vmaRC7G5UjrRDU-R65BgoY,23806
233
- meerschaum-2.2.0rc4.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
234
- meerschaum-2.2.0rc4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
235
- meerschaum-2.2.0rc4.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
236
- meerschaum-2.2.0rc4.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
237
- meerschaum-2.2.0rc4.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
238
- meerschaum-2.2.0rc4.dist-info/RECORD,,
231
+ meerschaum-2.2.1.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
232
+ meerschaum-2.2.1.dist-info/METADATA,sha256=XUYdU9OV2qtydf3XiXIvkA0gE-Nikh43zj_KRqA4ruo,23807
233
+ meerschaum-2.2.1.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
234
+ meerschaum-2.2.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
235
+ meerschaum-2.2.1.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
236
+ meerschaum-2.2.1.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
237
+ meerschaum-2.2.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
238
+ meerschaum-2.2.1.dist-info/RECORD,,