meerschaum 2.6.14__py3-none-any.whl → 2.6.16__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.
@@ -0,0 +1,517 @@
1
+ Metadata-Version: 2.1
2
+ Name: meerschaum
3
+ Version: 2.6.16
4
+ Summary: Sync Time-Series Pipes with Meerschaum
5
+ Home-page: https://meerschaum.io
6
+ Author: Bennett Meares
7
+ Author-email: bennett.meares@gmail.com
8
+ Maintainer-email: bennett.meares@gmail.com
9
+ License: Apache Software License 2.0
10
+ Project-URL: Documentation, https://docs.meerschaum.io
11
+ Project-URL: Changelog, https://meerschaum.io/news/changelog
12
+ Project-URL: GitHub, https://github.com/bmeares/Meerschaum
13
+ Project-URL: Homepage, https://meerschaum.io
14
+ Project-URL: Donate, https://github.com/sponsors/bmeares
15
+ Project-URL: Discord, https://discord.gg/8U8qMUjvcc
16
+ Classifier: Development Status :: 5 - Production/Stable
17
+ Classifier: Intended Audience :: System Administrators
18
+ Classifier: License :: OSI Approved :: Apache Software License
19
+ Classifier: Operating System :: POSIX :: Linux
20
+ Classifier: Operating System :: Microsoft :: Windows
21
+ Classifier: Operating System :: MacOS
22
+ Classifier: Programming Language :: SQL
23
+ Classifier: Programming Language :: Python :: 3.9
24
+ Classifier: Programming Language :: Python :: 3.10
25
+ Classifier: Programming Language :: Python :: 3.11
26
+ Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Programming Language :: Python :: 3.13
28
+ Classifier: Topic :: Database
29
+ Classifier: Natural Language :: English
30
+ Requires-Python: >=3.8
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENSE
33
+ License-File: NOTICE
34
+ Provides-Extra: required
35
+ Provides-Extra: minimal
36
+ Provides-Extra: formatting
37
+ Requires-Dist: pprintpp>=0.4.0; extra == "formatting"
38
+ Requires-Dist: asciitree>=0.3.3; extra == "formatting"
39
+ Requires-Dist: typing-extensions>=4.7.1; extra == "formatting"
40
+ Requires-Dist: pygments>=2.7.2; extra == "formatting"
41
+ Requires-Dist: colorama>=0.4.3; extra == "formatting"
42
+ Requires-Dist: rich>=13.4.2; extra == "formatting"
43
+ Requires-Dist: more-termcolor>=1.1.3; extra == "formatting"
44
+ Requires-Dist: humanfriendly>=10.0.0; extra == "formatting"
45
+ Provides-Extra: core
46
+ Requires-Dist: wheel>=0.34.2; extra == "core"
47
+ Requires-Dist: setuptools>=63.3.0; extra == "core"
48
+ Requires-Dist: PyYAML>=5.3.1; extra == "core"
49
+ Requires-Dist: pip>=22.0.4; extra == "core"
50
+ Requires-Dist: update-checker>=0.18.0; extra == "core"
51
+ Requires-Dist: semver>=3.0.2; extra == "core"
52
+ Requires-Dist: pathspec>=0.9.0; extra == "core"
53
+ Requires-Dist: python-dateutil>=2.7.5; extra == "core"
54
+ Requires-Dist: requests>=2.32.3; extra == "core"
55
+ Requires-Dist: certifi>=2024.8.30; extra == "core"
56
+ Requires-Dist: idna>=3.10.0; extra == "core"
57
+ Requires-Dist: binaryornot>=0.4.4; extra == "core"
58
+ Requires-Dist: pyvim>=3.0.2; extra == "core"
59
+ Requires-Dist: ptpython>=3.0.27; extra == "core"
60
+ Requires-Dist: aiofiles>=0.6.0; extra == "core"
61
+ Requires-Dist: packaging>=21.3.0; extra == "core"
62
+ Requires-Dist: prompt-toolkit>=3.0.39; extra == "core"
63
+ Requires-Dist: more-itertools>=8.7.0; extra == "core"
64
+ Requires-Dist: fasteners>=0.19.0; extra == "core"
65
+ Requires-Dist: virtualenv>=20.1.0; extra == "core"
66
+ Requires-Dist: attrs>=24.2.0; extra == "core"
67
+ Requires-Dist: uv>=0.2.11; extra == "core"
68
+ Provides-Extra: jobs
69
+ Requires-Dist: dill>=0.3.3; extra == "jobs"
70
+ Requires-Dist: python-daemon>=0.2.3; extra == "jobs"
71
+ Requires-Dist: watchfiles>=0.21.0; extra == "jobs"
72
+ Requires-Dist: psutil>=5.8.0; extra == "jobs"
73
+ Provides-Extra: drivers
74
+ Requires-Dist: cryptography>=38.0.1; extra == "drivers"
75
+ Requires-Dist: psycopg[binary]>=3.2.1; extra == "drivers"
76
+ Requires-Dist: PyMySQL>=0.9.0; extra == "drivers"
77
+ Requires-Dist: aiomysql>=0.0.21; extra == "drivers"
78
+ Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "drivers"
79
+ Requires-Dist: duckdb>=1.0.0; extra == "drivers"
80
+ Requires-Dist: duckdb-engine>=0.13.0; extra == "drivers"
81
+ Provides-Extra: drivers-extras
82
+ Requires-Dist: pyodbc>=4.0.30; extra == "drivers-extras"
83
+ Requires-Dist: cx_Oracle>=8.3.0; extra == "drivers-extras"
84
+ Provides-Extra: cli
85
+ Requires-Dist: pgcli>=3.1.0; extra == "cli"
86
+ Requires-Dist: mycli>=1.23.2; extra == "cli"
87
+ Requires-Dist: litecli>=1.5.0; extra == "cli"
88
+ Requires-Dist: mssql-cli>=1.0.0; extra == "cli"
89
+ Requires-Dist: gadwall>=0.2.0; extra == "cli"
90
+ Provides-Extra: stack
91
+ Requires-Dist: docker-compose>=1.29.2; extra == "stack"
92
+ Provides-Extra: build
93
+ Requires-Dist: cx_Freeze>=7.0.0; extra == "build"
94
+ Requires-Dist: pyinstaller>6.6.0; extra == "build"
95
+ Provides-Extra: dev-tools
96
+ Requires-Dist: twine>=3.2.0; extra == "dev-tools"
97
+ Requires-Dist: tuna>=0.5.3; extra == "dev-tools"
98
+ Requires-Dist: snakeviz>=2.1.0; extra == "dev-tools"
99
+ Requires-Dist: mypy>=0.812.0; extra == "dev-tools"
100
+ Requires-Dist: pytest>=6.2.2; extra == "dev-tools"
101
+ Requires-Dist: pytest-xdist>=3.2.1; extra == "dev-tools"
102
+ Requires-Dist: heartrate>=0.2.1; extra == "dev-tools"
103
+ Requires-Dist: build>=1.2.1; extra == "dev-tools"
104
+ Requires-Dist: attrs>=24.2.0; extra == "dev-tools"
105
+ Provides-Extra: setup
106
+ Provides-Extra: docs
107
+ Requires-Dist: mkdocs>=1.1.2; extra == "docs"
108
+ Requires-Dist: mkdocs-material>=6.2.5; extra == "docs"
109
+ Requires-Dist: mkdocs-material-extensions>=1.0.3; extra == "docs"
110
+ Requires-Dist: mkdocs-autolinks-plugin>=0.2.0; extra == "docs"
111
+ Requires-Dist: mkdocs-awesome-pages-plugin>=2.5.0; extra == "docs"
112
+ Requires-Dist: mkdocs-section-index>=0.3.3; extra == "docs"
113
+ Requires-Dist: mkdocs-linkcheck>=1.0.6; extra == "docs"
114
+ Requires-Dist: mkdocs-redirects>=1.0.4; extra == "docs"
115
+ Requires-Dist: jinja2==3.0.3; extra == "docs"
116
+ Provides-Extra: gui
117
+ Requires-Dist: toga>=0.3.0-dev29; extra == "gui"
118
+ Requires-Dist: pywebview>=3.6.3; extra == "gui"
119
+ Requires-Dist: pycparser>=2.21.0; extra == "gui"
120
+ Provides-Extra: extras
121
+ Requires-Dist: cmd2>=1.4.0; extra == "extras"
122
+ Requires-Dist: ruamel.yaml>=0.16.12; extra == "extras"
123
+ Requires-Dist: modin[ray]>=0.8.3; extra == "extras"
124
+ Requires-Dist: nanoid>=2.0.0; extra == "extras"
125
+ Requires-Dist: importlib-metadata>=4.12.0; extra == "extras"
126
+ Provides-Extra: sql
127
+ Requires-Dist: numpy>=1.18.5; extra == "sql"
128
+ Requires-Dist: pandas[parquet]>=2.0.1; extra == "sql"
129
+ Requires-Dist: pyarrow>=16.1.0; extra == "sql"
130
+ Requires-Dist: dask[complete]>=2024.5.1; extra == "sql"
131
+ Requires-Dist: partd>=1.4.2; extra == "sql"
132
+ Requires-Dist: pytz; extra == "sql"
133
+ Requires-Dist: joblib>=0.17.0; extra == "sql"
134
+ Requires-Dist: SQLAlchemy>=2.0.5; extra == "sql"
135
+ Requires-Dist: databases>=0.4.0; extra == "sql"
136
+ Requires-Dist: aiosqlite>=0.16.0; extra == "sql"
137
+ Requires-Dist: asyncpg>=0.21.0; extra == "sql"
138
+ Requires-Dist: cryptography>=38.0.1; extra == "sql"
139
+ Requires-Dist: psycopg[binary]>=3.2.1; extra == "sql"
140
+ Requires-Dist: PyMySQL>=0.9.0; extra == "sql"
141
+ Requires-Dist: aiomysql>=0.0.21; extra == "sql"
142
+ Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "sql"
143
+ Requires-Dist: duckdb>=1.0.0; extra == "sql"
144
+ Requires-Dist: duckdb-engine>=0.13.0; extra == "sql"
145
+ Requires-Dist: wheel>=0.34.2; extra == "sql"
146
+ Requires-Dist: setuptools>=63.3.0; extra == "sql"
147
+ Requires-Dist: PyYAML>=5.3.1; extra == "sql"
148
+ Requires-Dist: pip>=22.0.4; extra == "sql"
149
+ Requires-Dist: update-checker>=0.18.0; extra == "sql"
150
+ Requires-Dist: semver>=3.0.2; extra == "sql"
151
+ Requires-Dist: pathspec>=0.9.0; extra == "sql"
152
+ Requires-Dist: python-dateutil>=2.7.5; extra == "sql"
153
+ Requires-Dist: requests>=2.32.3; extra == "sql"
154
+ Requires-Dist: certifi>=2024.8.30; extra == "sql"
155
+ Requires-Dist: idna>=3.10.0; extra == "sql"
156
+ Requires-Dist: binaryornot>=0.4.4; extra == "sql"
157
+ Requires-Dist: pyvim>=3.0.2; extra == "sql"
158
+ Requires-Dist: ptpython>=3.0.27; extra == "sql"
159
+ Requires-Dist: aiofiles>=0.6.0; extra == "sql"
160
+ Requires-Dist: packaging>=21.3.0; extra == "sql"
161
+ Requires-Dist: prompt-toolkit>=3.0.39; extra == "sql"
162
+ Requires-Dist: more-itertools>=8.7.0; extra == "sql"
163
+ Requires-Dist: fasteners>=0.19.0; extra == "sql"
164
+ Requires-Dist: virtualenv>=20.1.0; extra == "sql"
165
+ Requires-Dist: attrs>=24.2.0; extra == "sql"
166
+ Requires-Dist: uv>=0.2.11; extra == "sql"
167
+ Provides-Extra: dash
168
+ Requires-Dist: Flask-Compress>=1.10.1; extra == "dash"
169
+ Requires-Dist: dash>=2.6.2; extra == "dash"
170
+ Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "dash"
171
+ Requires-Dist: dash-ace>=0.2.1; extra == "dash"
172
+ Requires-Dist: dash-extensions>=1.0.4; extra == "dash"
173
+ Requires-Dist: dash-daq>=0.5.0; extra == "dash"
174
+ Requires-Dist: terminado>=0.12.1; extra == "dash"
175
+ Requires-Dist: tornado>=6.1.0; extra == "dash"
176
+ Provides-Extra: api
177
+ Requires-Dist: uvicorn[standard]>=0.29.0; extra == "api"
178
+ Requires-Dist: gunicorn>=22.0.0; extra == "api"
179
+ Requires-Dist: python-dotenv>=0.20.0; extra == "api"
180
+ Requires-Dist: websockets>=11.0.3; extra == "api"
181
+ Requires-Dist: fastapi>=0.111.0; extra == "api"
182
+ Requires-Dist: fastapi-login>=1.7.2; extra == "api"
183
+ Requires-Dist: python-multipart>=0.0.9; extra == "api"
184
+ Requires-Dist: httpx>=0.27.2; extra == "api"
185
+ Requires-Dist: httpcore>=1.0.6; extra == "api"
186
+ Requires-Dist: valkey>=6.0.0; extra == "api"
187
+ Requires-Dist: numpy>=1.18.5; extra == "api"
188
+ Requires-Dist: pandas[parquet]>=2.0.1; extra == "api"
189
+ Requires-Dist: pyarrow>=16.1.0; extra == "api"
190
+ Requires-Dist: dask[complete]>=2024.5.1; extra == "api"
191
+ Requires-Dist: partd>=1.4.2; extra == "api"
192
+ Requires-Dist: pytz; extra == "api"
193
+ Requires-Dist: joblib>=0.17.0; extra == "api"
194
+ Requires-Dist: SQLAlchemy>=2.0.5; extra == "api"
195
+ Requires-Dist: databases>=0.4.0; extra == "api"
196
+ Requires-Dist: aiosqlite>=0.16.0; extra == "api"
197
+ Requires-Dist: asyncpg>=0.21.0; extra == "api"
198
+ Requires-Dist: cryptography>=38.0.1; extra == "api"
199
+ Requires-Dist: psycopg[binary]>=3.2.1; extra == "api"
200
+ Requires-Dist: PyMySQL>=0.9.0; extra == "api"
201
+ Requires-Dist: aiomysql>=0.0.21; extra == "api"
202
+ Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "api"
203
+ Requires-Dist: duckdb>=1.0.0; extra == "api"
204
+ Requires-Dist: duckdb-engine>=0.13.0; extra == "api"
205
+ Requires-Dist: wheel>=0.34.2; extra == "api"
206
+ Requires-Dist: setuptools>=63.3.0; extra == "api"
207
+ Requires-Dist: PyYAML>=5.3.1; extra == "api"
208
+ Requires-Dist: pip>=22.0.4; extra == "api"
209
+ Requires-Dist: update-checker>=0.18.0; extra == "api"
210
+ Requires-Dist: semver>=3.0.2; extra == "api"
211
+ Requires-Dist: pathspec>=0.9.0; extra == "api"
212
+ Requires-Dist: python-dateutil>=2.7.5; extra == "api"
213
+ Requires-Dist: requests>=2.32.3; extra == "api"
214
+ Requires-Dist: certifi>=2024.8.30; extra == "api"
215
+ Requires-Dist: idna>=3.10.0; extra == "api"
216
+ Requires-Dist: binaryornot>=0.4.4; extra == "api"
217
+ Requires-Dist: pyvim>=3.0.2; extra == "api"
218
+ Requires-Dist: ptpython>=3.0.27; extra == "api"
219
+ Requires-Dist: aiofiles>=0.6.0; extra == "api"
220
+ Requires-Dist: packaging>=21.3.0; extra == "api"
221
+ Requires-Dist: prompt-toolkit>=3.0.39; extra == "api"
222
+ Requires-Dist: more-itertools>=8.7.0; extra == "api"
223
+ Requires-Dist: fasteners>=0.19.0; extra == "api"
224
+ Requires-Dist: virtualenv>=20.1.0; extra == "api"
225
+ Requires-Dist: attrs>=24.2.0; extra == "api"
226
+ Requires-Dist: uv>=0.2.11; extra == "api"
227
+ Requires-Dist: pprintpp>=0.4.0; extra == "api"
228
+ Requires-Dist: asciitree>=0.3.3; extra == "api"
229
+ Requires-Dist: typing-extensions>=4.7.1; extra == "api"
230
+ Requires-Dist: pygments>=2.7.2; extra == "api"
231
+ Requires-Dist: colorama>=0.4.3; extra == "api"
232
+ Requires-Dist: rich>=13.4.2; extra == "api"
233
+ Requires-Dist: more-termcolor>=1.1.3; extra == "api"
234
+ Requires-Dist: humanfriendly>=10.0.0; extra == "api"
235
+ Requires-Dist: Flask-Compress>=1.10.1; extra == "api"
236
+ Requires-Dist: dash>=2.6.2; extra == "api"
237
+ Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "api"
238
+ Requires-Dist: dash-ace>=0.2.1; extra == "api"
239
+ Requires-Dist: dash-extensions>=1.0.4; extra == "api"
240
+ Requires-Dist: dash-daq>=0.5.0; extra == "api"
241
+ Requires-Dist: terminado>=0.12.1; extra == "api"
242
+ Requires-Dist: tornado>=6.1.0; extra == "api"
243
+ Requires-Dist: dill>=0.3.3; extra == "api"
244
+ Requires-Dist: python-daemon>=0.2.3; extra == "api"
245
+ Requires-Dist: watchfiles>=0.21.0; extra == "api"
246
+ Requires-Dist: psutil>=5.8.0; extra == "api"
247
+ Provides-Extra: full
248
+ Requires-Dist: pprintpp>=0.4.0; extra == "full"
249
+ Requires-Dist: asciitree>=0.3.3; extra == "full"
250
+ Requires-Dist: typing-extensions>=4.7.1; extra == "full"
251
+ Requires-Dist: pygments>=2.7.2; extra == "full"
252
+ Requires-Dist: colorama>=0.4.3; extra == "full"
253
+ Requires-Dist: rich>=13.4.2; extra == "full"
254
+ Requires-Dist: more-termcolor>=1.1.3; extra == "full"
255
+ Requires-Dist: humanfriendly>=10.0.0; extra == "full"
256
+ Requires-Dist: wheel>=0.34.2; extra == "full"
257
+ Requires-Dist: setuptools>=63.3.0; extra == "full"
258
+ Requires-Dist: PyYAML>=5.3.1; extra == "full"
259
+ Requires-Dist: pip>=22.0.4; extra == "full"
260
+ Requires-Dist: update-checker>=0.18.0; extra == "full"
261
+ Requires-Dist: semver>=3.0.2; extra == "full"
262
+ Requires-Dist: pathspec>=0.9.0; extra == "full"
263
+ Requires-Dist: python-dateutil>=2.7.5; extra == "full"
264
+ Requires-Dist: requests>=2.32.3; extra == "full"
265
+ Requires-Dist: certifi>=2024.8.30; extra == "full"
266
+ Requires-Dist: idna>=3.10.0; extra == "full"
267
+ Requires-Dist: binaryornot>=0.4.4; extra == "full"
268
+ Requires-Dist: pyvim>=3.0.2; extra == "full"
269
+ Requires-Dist: ptpython>=3.0.27; extra == "full"
270
+ Requires-Dist: aiofiles>=0.6.0; extra == "full"
271
+ Requires-Dist: packaging>=21.3.0; extra == "full"
272
+ Requires-Dist: prompt-toolkit>=3.0.39; extra == "full"
273
+ Requires-Dist: more-itertools>=8.7.0; extra == "full"
274
+ Requires-Dist: fasteners>=0.19.0; extra == "full"
275
+ Requires-Dist: virtualenv>=20.1.0; extra == "full"
276
+ Requires-Dist: attrs>=24.2.0; extra == "full"
277
+ Requires-Dist: uv>=0.2.11; extra == "full"
278
+ Requires-Dist: dill>=0.3.3; extra == "full"
279
+ Requires-Dist: python-daemon>=0.2.3; extra == "full"
280
+ Requires-Dist: watchfiles>=0.21.0; extra == "full"
281
+ Requires-Dist: psutil>=5.8.0; extra == "full"
282
+ Requires-Dist: cryptography>=38.0.1; extra == "full"
283
+ Requires-Dist: psycopg[binary]>=3.2.1; extra == "full"
284
+ Requires-Dist: PyMySQL>=0.9.0; extra == "full"
285
+ Requires-Dist: aiomysql>=0.0.21; extra == "full"
286
+ Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "full"
287
+ Requires-Dist: duckdb>=1.0.0; extra == "full"
288
+ Requires-Dist: duckdb-engine>=0.13.0; extra == "full"
289
+ Requires-Dist: toga>=0.3.0-dev29; extra == "full"
290
+ Requires-Dist: pywebview>=3.6.3; extra == "full"
291
+ Requires-Dist: pycparser>=2.21.0; extra == "full"
292
+ Requires-Dist: numpy>=1.18.5; extra == "full"
293
+ Requires-Dist: pandas[parquet]>=2.0.1; extra == "full"
294
+ Requires-Dist: pyarrow>=16.1.0; extra == "full"
295
+ Requires-Dist: dask[complete]>=2024.5.1; extra == "full"
296
+ Requires-Dist: partd>=1.4.2; extra == "full"
297
+ Requires-Dist: pytz; extra == "full"
298
+ Requires-Dist: joblib>=0.17.0; extra == "full"
299
+ Requires-Dist: SQLAlchemy>=2.0.5; extra == "full"
300
+ Requires-Dist: databases>=0.4.0; extra == "full"
301
+ Requires-Dist: aiosqlite>=0.16.0; extra == "full"
302
+ Requires-Dist: asyncpg>=0.21.0; extra == "full"
303
+ Requires-Dist: Flask-Compress>=1.10.1; extra == "full"
304
+ Requires-Dist: dash>=2.6.2; extra == "full"
305
+ Requires-Dist: dash-bootstrap-components>=1.2.1; extra == "full"
306
+ Requires-Dist: dash-ace>=0.2.1; extra == "full"
307
+ Requires-Dist: dash-extensions>=1.0.4; extra == "full"
308
+ Requires-Dist: dash-daq>=0.5.0; extra == "full"
309
+ Requires-Dist: terminado>=0.12.1; extra == "full"
310
+ Requires-Dist: tornado>=6.1.0; extra == "full"
311
+ Requires-Dist: uvicorn[standard]>=0.29.0; extra == "full"
312
+ Requires-Dist: gunicorn>=22.0.0; extra == "full"
313
+ Requires-Dist: python-dotenv>=0.20.0; extra == "full"
314
+ Requires-Dist: websockets>=11.0.3; extra == "full"
315
+ Requires-Dist: fastapi>=0.111.0; extra == "full"
316
+ Requires-Dist: fastapi-login>=1.7.2; extra == "full"
317
+ Requires-Dist: python-multipart>=0.0.9; extra == "full"
318
+ Requires-Dist: httpx>=0.27.2; extra == "full"
319
+ Requires-Dist: httpcore>=1.0.6; extra == "full"
320
+ Requires-Dist: valkey>=6.0.0; extra == "full"
321
+
322
+ <img src="https://meerschaum.io/assets/banner_1920x320.png" alt="Meerschaum banner" style="width: 100%"/>
323
+
324
+ | PyPI | GitHub | Info | Stats |
325
+ |---|---|---|---|
326
+ | ![PyPI]( https://img.shields.io/pypi/v/meerschaum?color=%2300cc66&label=Version ) | ![GitHub Repo stars](https://img.shields.io/github/stars/bmeares/Meerschaum?style=social) | ![License](https://img.shields.io/github/license/bmeares/Meerschaum?label=License) | ![Number of plugins]( https://img.shields.io/badge/dynamic/json?color=3098c1&label=Public%20Plugins&query=num_plugins&url=https%3A%2F%2Fapi.mrsm.io%2Finfo ) |
327
+ | ![PyPI - Python Version]( https://img.shields.io/pypi/pyversions/meerschaum?label=Python&logo=python&logoColor=%23ffffff ) | ![GitHub Sponsors](https://img.shields.io/github/sponsors/bmeares?color=eadf15&label=Sponsors) | [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/meerschaum)](https://artifacthub.io/packages/search?repo=meerschaum) | ![Number of registered users]( https://img.shields.io/badge/dynamic/json?color=3098c1&label=Registered%20Users&query=num_users&url=https%3A%2F%2Fapi.mrsm.io%2Finfo ) |
328
+
329
+ <p align="center">
330
+ <img src="https://meerschaum.io/files/images/demo.gif" alt="Meerschaum demo" height="450px">
331
+ </p>
332
+
333
+ ## What is Meerschaum?
334
+ Meerschaum is a tool for quickly synchronizing time-series data streams called **pipes**. With Meerschaum, you can have a data visualization stack running in minutes.
335
+
336
+ <p align="center">
337
+ <img src="https://meerschaum.io/assets/screenshots/weather_pipes.png"/>
338
+ </p>
339
+
340
+ ## Why Meerschaum?
341
+
342
+ Two words: *incremental updates*. Fetch the data you need, and Meerschaum will handle the rest.
343
+
344
+ If you've worked with time-series data, you know the headaches that come with ETL.
345
+ Data engineering often gets in analysts' way, and when work needs to get done, every minute spent on pipelining is time taken away from real analysis.
346
+
347
+ Rather than copy / pasting your ETL scripts, simply build pipes with Meerschaum! [Meerschaum gives you the tools to design your data streams how you like](https://towardsdatascience.com/easy-time-series-etl-for-data-scientists-with-meerschaum-5aade339b398) ― and don't worry — you can always incorporate Meerschaum into your existing systems!
348
+
349
+ ### Want to Learn More?
350
+
351
+ You can find a wealth of information at [meerschaum.io](https://meerschaum.io)!
352
+
353
+ Additionally, below are several articles published about Meerschaum:
354
+
355
+ - Interview featured in [*Console 100 - The Open Source Newsletter*](https://console.substack.com/p/console-100)
356
+ - [*A Data Scientist's Guide to Fetching COVID-19 Data in 2022*](https://towardsdatascience.com/a-data-scientists-guide-to-fetching-covid-19-data-in-2022-d952b4697) (Towards Data Science)
357
+ - [*Time-Series ETL with Meerschaum*](https://towardsdatascience.com/easy-time-series-etl-for-data-scientists-with-meerschaum-5aade339b398) (Towards Data Science)
358
+ - [*How I automatically extract my M1 Finance transactions*](https://bmeares.medium.com/how-i-automatically-extract-my-m1-finance-transactions-b43cef857bc7)
359
+
360
+ ## Installation
361
+
362
+ For a more thorough setup guide, visit the [Getting Started](https://meerschaum.io/get-started/) page at [meerschaum.io](https://meerschaum.io).
363
+
364
+ ### TL;DR
365
+
366
+ ```bash
367
+ pip install -U --user meerschaum
368
+ mrsm stack up -d db grafana
369
+ mrsm bootstrap pipes
370
+ ```
371
+
372
+ ## Usage
373
+
374
+ Please visit [meerschaum.io](https://meerschaum.io) for setup, usage, and troubleshooting information. You can find technical documentation at [docs.meerschaum.io](https://docs.meerschaum.io), and here is a complete list of the [Meerschaum actions](https://meerschaum.io/reference/actions/).
375
+
376
+ ### CLI
377
+ ```bash
378
+ ### Install the NOAA weather plugin.
379
+ mrsm install plugin noaa
380
+
381
+ ### Register a new pipe to the built-in SQLite DB.
382
+ ### You can instead run `bootstrap pipe` for a wizard.
383
+ ### Enter 'KATL' for Atlanta when prompted.
384
+ mrsm register pipe -c plugin:noaa -m weather -l atl -i sql:local
385
+
386
+ ### Pull data and create the table "plugin_noaa_weather_atl".
387
+ mrsm sync pipes -l atl -i sql:local
388
+ ```
389
+
390
+ ### Python API
391
+
392
+ ```python
393
+ import meerschaum as mrsm
394
+ pipe = mrsm.Pipe(
395
+ 'foo', 'bar', ### Connector and metric labels.
396
+ target = 'MyTableName!', ### Table name. Defaults to 'foo_bar'.
397
+ instance = 'sql:local', ### Built-in SQLite DB. Defaults to 'sql:main'.
398
+ columns = {
399
+ 'datetime': 'dt', ### Column for the datetime index.
400
+ 'id' : 'id', ### Column for the ID index (optional).
401
+ },
402
+ )
403
+ ### Pass a DataFrame to create the table and indices.
404
+ pipe.sync([{'dt': '2022-07-01', 'id': 1, 'val': 10}])
405
+
406
+ ### Duplicate rows are ignored.
407
+ pipe.sync([{'dt': '2022-07-01', 'id': 1, 'val': 10}])
408
+ assert len(pipe.get_data()) == 1
409
+
410
+ ### Rows with existing keys (datetime and/or id) are updated.
411
+ pipe.sync([{'dt': '2022-07-01', 'id': 1, 'val': 100}])
412
+ assert len(pipe.get_data()) == 1
413
+
414
+ ### Translates to this query for SQLite:
415
+ ###
416
+ ### SELECT *
417
+ ### FROM "MyTableName!"
418
+ ### WHERE "dt" >= datetime('2022-01-01', '0 minute')
419
+ ### AND "dt" < datetime('2023-01-01', '0 minute')
420
+ ### AND "id" IN ('1')
421
+ df = pipe.get_data(
422
+ begin = '2022-01-01',
423
+ end = '2023-01-01',
424
+ params = {'id': [1]},
425
+ )
426
+
427
+ ### Shape of the DataFrame:
428
+ ### dt id val
429
+ ### 0 2022-07-01 1 100
430
+
431
+ ### Drop the table and remove the pipe's metadata.
432
+ pipe.delete()
433
+ ```
434
+
435
+ ### Simple Plugin
436
+
437
+ ```python
438
+ # ~/.config/plugins/example.py
439
+
440
+ __version__ = '1.0.0'
441
+ required = ['requests']
442
+
443
+ def register(pipe, **kw):
444
+ return {
445
+ 'columns': {
446
+ 'datetime': 'dt',
447
+ 'id' : 'id',
448
+ },
449
+ }
450
+
451
+ def fetch(pipe, **kw):
452
+ import requests, datetime, random
453
+ response = requests.get('http://date.jsontest.com/')
454
+
455
+ ### The fetched JSON has the following shape:
456
+ ### {
457
+ ### "date": "07-01-2022",
458
+ ### "milliseconds_since_epoch": 1656718801566,
459
+ ### "time": "11:40:01 PM"
460
+ ### }
461
+ data = response.json()
462
+ timestamp = datetime.datetime.fromtimestamp(
463
+ int(str(data['milliseconds_since_epoch'])[:-3])
464
+ )
465
+
466
+ ### You may also return a Pandas DataFrame.
467
+ return [{
468
+ "dt" : timestamp,
469
+ "id" : random.randint(1, 4),
470
+ "value": random.uniform(1, 100),
471
+ }]
472
+ ```
473
+
474
+ ## Features
475
+
476
+ - 📊 **Built for Data Scientists and Analysts**
477
+ - Integrate with Pandas, Grafana and other popular [data analysis tools](https://meerschaum.io/reference/data-analysis-tools/).
478
+ - Persist your dataframes and always get the latest data.
479
+ - ⚡️ **Production-Ready, Batteries Included**
480
+ - [Synchronization engine](https://meerschaum.io/reference/pipes/syncing/) concurrently updates many time-series data streams.
481
+ - One-click deploy a [TimescaleDB and Grafana stack](https://meerschaum.io/reference/stack/) for prototyping.
482
+ - Serve data to your entire organization through the power of `uvicorn`, `gunicorn`, and `FastAPI`.
483
+ - 🔌 **Easily Expandable**
484
+ - Ingest any data source with a simple [plugin](https://meerschaum.io/reference/plugins/writing-plugins/). Just return a DataFrame, and Meerschaum handles the rest.
485
+ - [Add any function as a command](https://meerschaum.io/reference/plugins/types-of-plugins/#action-plugins) to the Meerschaum system.
486
+ - Include Meerschaum in your projects with its [easy-to-use Python API](https://docs.meerschaum.io).
487
+ - ✨ **Tailored for Your Experience**
488
+ - Rich CLI makes managing your data streams surprisingly enjoyable!
489
+ - Web dashboard for those who prefer a more graphical experience.
490
+ - Manage your database connections with [Meerschaum connectors](https://meerschaum.io/reference/connectors/).
491
+ - Utility commands with sensible syntax let you control many pipes with grace.
492
+ - 💼 **Portable from the Start**
493
+ - The environment variable `$MRSM_ROOT_DIR` lets you emulate multiple installations and group together your [instances](https://meerschaum.io/reference/connectors/#instances-and-repositories).
494
+ - No dependencies required; anything needed will be installed into a virtual environment.
495
+ - [Specify required packages for your plugins](https://meerschaum.io/reference/plugins/writing-plugins/), and users will get those packages in a virtual environment.
496
+
497
+ ## Support Meerschaum's Development
498
+
499
+ For consulting services and to support Meerschaum's development, please considering sponsoring me on [GitHub sponsors](https://github.com/sponsors/bmeares).
500
+
501
+ Additionally, you can always [buy me a coffee☕](https://www.buymeacoffee.com/bmeares)!
502
+
503
+ ### License
504
+
505
+ Copyright 2021 Bennett Meares
506
+
507
+ Licensed under the Apache License, Version 2.0 (the "License");
508
+ you may not use this file except in compliance with the License.
509
+ You may obtain a copy of the License at
510
+
511
+ http://www.apache.org/licenses/LICENSE-2.0
512
+
513
+ Unless required by applicable law or agreed to in writing, software
514
+ distributed under the License is distributed on an "AS IS" BASIS,
515
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
516
+ See the License for the specific language governing permissions and
517
+ limitations under the License.
@@ -24,9 +24,9 @@ meerschaum/_internal/term/tools.py,sha256=dXVAimKD-Yv2fg2WOTr0YGBY7XDKjQqw-RizcS
24
24
  meerschaum/actions/__init__.py,sha256=MHPs8aRBhbZQXnqd_6tVtisTrNCgPAPgnNcXYbn0zP8,11640
25
25
  meerschaum/actions/api.py,sha256=41r3fBh3vAPyNaOrvbh2oh6WUJTR2I-zaOEZN60A66E,12538
26
26
  meerschaum/actions/attach.py,sha256=UV19d9W_2WYcrf7BRz7k3mriDoX1V4rA4AKvbLdor0o,3106
27
- meerschaum/actions/bootstrap.py,sha256=9y4HU1uqjbkAg_706pOOJUMzl196pU7ghfGDCWg0vPE,18234
27
+ meerschaum/actions/bootstrap.py,sha256=08o3PchrJ_Rv8IP30ZBH1Ovk-b8qFBGPedCjF7jRzSo,18084
28
28
  meerschaum/actions/clear.py,sha256=tMacHFv8btWpkNnXHtKDOMiCDNhGb5S6CJhCDIrrNDk,4914
29
- meerschaum/actions/copy.py,sha256=NwTwj3IMdK1TFRuJXCxsbIEFNVeoNGoMkvE6H1ZQZzo,6838
29
+ meerschaum/actions/copy.py,sha256=NHoC9cHJGgoox8L8B0afbu8lAxEh_MKa_pNeVunZsl0,6824
30
30
  meerschaum/actions/deduplicate.py,sha256=puYyxeFYEUy1Sd2IOcZB2e6MrNxAZl2bTLmNzFDkCiw,1167
31
31
  meerschaum/actions/delete.py,sha256=7hW4Ff_WSczW8If-EEDbEUU0U0XzV3fVbFb9gED4S9Q,19032
32
32
  meerschaum/actions/drop.py,sha256=Hd5h4rrWd7qL2rTqglsTonUsEoH7qQlsfqNFSHGeqr0,2453
@@ -132,7 +132,7 @@ meerschaum/api/routes/_webterm.py,sha256=gow_xCsojGI37ZZDVfv2gdM18r_H2b2MR0ovFuG
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
135
- meerschaum/config/_default.py,sha256=gGkF9dGiwiKtMSXAE85LNhZ8ZXQ5EbeBPTSG0A9MBNQ,5675
135
+ meerschaum/config/_default.py,sha256=Anzz-o8cVCNcf2pjV_1RKaLa4Jx6ETNdCcEy74a_E5k,5651
136
136
  meerschaum/config/_edit.py,sha256=M9yX_SDD24gV5kWITZpy7p9AWTizJsIAGWAs3WZx-Ws,9087
137
137
  meerschaum/config/_environment.py,sha256=Vv4DLDfc2vKLbCLsMvkQDj77K4kEvHKEBmUBo-wCrgo,4419
138
138
  meerschaum/config/_formatting.py,sha256=OMuqS1EWOsj_34wSs2tOqGIWci3bTMIZ5l-uelZgsIM,6672
@@ -143,7 +143,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
143
143
  meerschaum/config/_read_config.py,sha256=RLC3HHi_1ndj7ITVDKLD9_uULY3caGRwSz3ATYE-ixA,15014
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=5mra6_XNmYFbg9DX4UeStTMAXv7vGk_HXX1uUygrtUQ,72
146
+ meerschaum/config/_version.py,sha256=y5TgMTY62hP7fysDJbb8SqEN-1AJGSb_MD4uUixEKYo,72
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=2UukC0Lmk-aVL1o1qXzumqmuIrw3vu9fD7iCuz4XD4I,10544
@@ -174,9 +174,9 @@ meerschaum/connectors/sql/_SQLConnector.py,sha256=g9SFK30CZp7CTJI-SdpOanL1NQUBFQ
174
174
  meerschaum/connectors/sql/__init__.py,sha256=3cqYiDkVasn7zWdtOTAZbT4bo95AuvGOmDD2TkaAxtw,205
175
175
  meerschaum/connectors/sql/_cli.py,sha256=1SgnWeMIAihoxp4FzbNrcq1npXf0dSOQnCntpU9hUXA,4405
176
176
  meerschaum/connectors/sql/_create_engine.py,sha256=zqeu1xHOw3n3Zgfjx-diy2aoynfdOlfOjwFuRrzB028,10452
177
- meerschaum/connectors/sql/_fetch.py,sha256=A2R1aLgdEkiIet8P2BZ13OXy31I5e8BzWee74Bj_v4k,13141
177
+ meerschaum/connectors/sql/_fetch.py,sha256=UIBAvMxassP-ofNxk_FoG-ukHzEac4jyu4lA0SXHcBg,13140
178
178
  meerschaum/connectors/sql/_instance.py,sha256=3KJI3ImwWAJkUfdZIrSL24pcW6Nic8wo5IUeGth9HP4,6459
179
- meerschaum/connectors/sql/_pipes.py,sha256=qfAgBT513vZUdBMbsS2O7XTQz-2S_pD02SsfTcfy9pw,117387
179
+ meerschaum/connectors/sql/_pipes.py,sha256=yCyu_wwnyET_W9qKNZt_AORqgVMkuDNCVptmK8CXI1c,117169
180
180
  meerschaum/connectors/sql/_plugins.py,sha256=wbxcNxqTtjfDsxPvdVGTllasYf6NHHzODaQ72hEUSBQ,8135
181
181
  meerschaum/connectors/sql/_sql.py,sha256=vdSslLKm8ftzIzfCs-0mL3q9zY2pmhZPTpzXSbKROag,37598
182
182
  meerschaum/connectors/sql/_uri.py,sha256=0BrhQtqQdzg9mR04gWBZINs_BbPFtSlTECXT_TCUwik,3460
@@ -192,8 +192,8 @@ meerschaum/connectors/valkey/_plugins.py,sha256=ZqiEW4XZCOpw4G8DUK2IKY6Qrph4mYfT
192
192
  meerschaum/connectors/valkey/_users.py,sha256=AS1vLarrkDA9yPK644GWwRiQiTZVa9x3nlLpyntq40g,7730
193
193
  meerschaum/core/__init__.py,sha256=tjASW10n9uLV6bYhcwP4rggh-ESXSJzgxpSBbVsuISs,251
194
194
  meerschaum/core/Pipe/__init__.py,sha256=knkz0gVpIrHb8au2b_YxvnSC9eXMgPKr5b7TxVQE9O0,18529
195
- meerschaum/core/Pipe/_attributes.py,sha256=hvnt1kCdqn9UQU86jMTJ9kDYXJ4hC3Cc48wVX8u9Z7w,21446
196
- meerschaum/core/Pipe/_bootstrap.py,sha256=evyi07kkzAVMj66HfZkbYdcWk_oHUDsl6f13EnSPMYs,7723
195
+ meerschaum/core/Pipe/_attributes.py,sha256=cFQPWthsdlEjdddOjkXHuCIMBI9UHJRSqSoY2ChhvLg,21893
196
+ meerschaum/core/Pipe/_bootstrap.py,sha256=gTNGh5e2LmTMrgIpHqrVaL60uPKWCphhsuz8j-lJ2HI,7348
197
197
  meerschaum/core/Pipe/_clear.py,sha256=LghXabgyyc1tD7FNQrh9ExT71ipcg2poM9FDA3k9e4M,2230
198
198
  meerschaum/core/Pipe/_copy.py,sha256=YDclAapf_spm9phpFr4-CALyYyw7nUsyKyiaLM1cnm4,2965
199
199
  meerschaum/core/Pipe/_data.py,sha256=HOvKlpD9NiBg599mSH1lzUQ_2g8-PsnMbGzMTOJx81E,24047
@@ -205,7 +205,7 @@ meerschaum/core/Pipe/_edit.py,sha256=HrKWe9vhqKaNOjOcJzW5BNbaUBPIbgNAhJEK8OMsy7c
205
205
  meerschaum/core/Pipe/_fetch.py,sha256=Q_LncNi1nv-YwvRPbh1QK0hf6hflL7Hn9v9lT3oQgF4,5451
206
206
  meerschaum/core/Pipe/_register.py,sha256=Sd5xaAW8H7uLTIoommcKb-6kHPRuHJLWNSbPnt2UbvA,2240
207
207
  meerschaum/core/Pipe/_show.py,sha256=nG50y8eBT9TVuKkRgAKtNDNIxysJvMNxfu__lkL1F9k,1352
208
- meerschaum/core/Pipe/_sync.py,sha256=E2egt63tqhVpB0ZteMO36HTF4EYEMtdevKOtN1aLd9o,34753
208
+ meerschaum/core/Pipe/_sync.py,sha256=VsAXcNdjW5kUArQ0PYlB7_0fcgNzAUktlYTgQB-Jcno,34821
209
209
  meerschaum/core/Pipe/_verify.py,sha256=c3HvsZd4QPydqozaV6cDDRtwYiNz4V91b0IcnKvcimA,14158
210
210
  meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_uSJJDc,137
211
211
  meerschaum/core/User/_User.py,sha256=qbI0GIkr3G0PI4d9S49uatbJQ2kH_-z5-GoVJ0fuEtA,6624
@@ -226,9 +226,9 @@ meerschaum/utils/misc.py,sha256=soGmUooT216Dl15KbcUTzf8E-aC6uNM6Zvy1PiUT_Y4,4708
226
226
  meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
227
227
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
228
228
  meerschaum/utils/process.py,sha256=9O8PPPJjY9Q5W2f39I3B3lFU6TlSiRiI3bgrzdOOyOw,7843
229
- meerschaum/utils/prompt.py,sha256=6J--mZJ_NcEdSX6KMjtY4fXXezyILLHP24VdxFFqOIc,18985
229
+ meerschaum/utils/prompt.py,sha256=SOpAvHcVFuk7-J4cqK_LkahWo6oJmLobeHg5fwM_9aY,18949
230
230
  meerschaum/utils/schedule.py,sha256=9BQGEzDbInLAU1aFO-FvL3wKu9XCTUpS0V_aQID6xzc,11228
231
- meerschaum/utils/sql.py,sha256=TAsHcUXg2RN3UfwMh3V8U5MtBrTn1VCIvikUAwsw3q4,72164
231
+ meerschaum/utils/sql.py,sha256=BG_IHaMq8Fjj-x2pQwtp4l1HN0YrKI5miwwD7vU7Rzs,72458
232
232
  meerschaum/utils/threading.py,sha256=awjbVL_QR6G-o_9Qk85utac9cSdqkiC8tQSdERCdrG8,2814
233
233
  meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
234
234
  meerschaum/utils/warnings.py,sha256=n-phr3BftNNgyPnvnXC_VMSjtCvjiCZ-ewmVfcROhkc,6611
@@ -251,11 +251,11 @@ meerschaum/utils/packages/_packages.py,sha256=OndymyIyjMCMCY0IbVBdk1ecJMaBdQJKZj
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.6.14.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
- meerschaum-2.6.14.dist-info/METADATA,sha256=V_BSa9d7bLGuMWsVC5ftrixak5YphY0uWWSVLSKCnsM,24759
256
- meerschaum-2.6.14.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
- meerschaum-2.6.14.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
258
- meerschaum-2.6.14.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
- meerschaum-2.6.14.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
- meerschaum-2.6.14.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
- meerschaum-2.6.14.dist-info/RECORD,,
254
+ meerschaum-2.6.16.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
255
+ meerschaum-2.6.16.dist-info/METADATA,sha256=OBSGnNz09pI-Sa6l0cdOop6ABPQPr7FafOwpKV7XC38,24226
256
+ meerschaum-2.6.16.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
257
+ meerschaum-2.6.16.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
258
+ meerschaum-2.6.16.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
259
+ meerschaum-2.6.16.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
260
+ meerschaum-2.6.16.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
261
+ meerschaum-2.6.16.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.5.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5