shareddata 6.86.0__tar.gz → 6.86.2__tar.gz
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.
- shareddata-6.86.2/PKG-INFO +164 -0
- shareddata-6.86.2/README.md +89 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/setup.py +2 -2
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/apidocs.yml +1 -1
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/SaveTables.py +30 -3
- shareddata-6.86.2/src/shareddata.egg-info/PKG-INFO +164 -0
- shareddata-6.86.0/PKG-INFO +0 -245
- shareddata-6.86.0/README.md +0 -170
- shareddata-6.86.0/src/shareddata.egg-info/PKG-INFO +0 -245
- {shareddata-6.86.0 → shareddata-6.86.2}/LICENSE +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/MANIFEST.in +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/pyproject.toml +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/setup.cfg +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/ServerGunicorn.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/ServerWaitress.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/apidocs-dark.css +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/auth.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/constants.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/download_paths.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/download_slots.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/install/worker.ps1 +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/install/worker.sh +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/listcache.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/cache.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/collections.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/data.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/downloads.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/metadata.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/operations.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/schedules.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/sqlite.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/system.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/tables.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/timeseries.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/web_routes.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/routes/workers.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/API/utils.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Auth/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Auth/bootstrap.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Auth/migrate.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Auth/store.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Auth/workers.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/CacheRedis.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/CollectionMongoDB.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/DataAPI/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/DataAPI/catalog.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/DataAPI/config.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/DataAPI/errors.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/DataAPI/indexes.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/DataAPI/readers.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/DataAPI/resolve.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/DataAPI/service.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Database.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Defaults.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/AWSEC2.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/AWSS3.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/AutoDocstrings.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/ClientAPI.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/ClientSocket.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/ClientWebSocket.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/LogHandlerAPI.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/LogReader.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/MongoDBClient.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/ServerSocket.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/ServerWebSocket.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/StreamsCache.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/StreamsPersist.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/SyncTable.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/TunnelWebSocket.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/IO/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Listing.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/LockWaiters.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Logger.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/MCP/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/MCP/__main__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/MCP/client.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/MCP/server.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Metadata.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/MultiProc.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/OpenFIGI.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Redaction.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/ArchiveOldCollections.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/BatchJob.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/ContainerHealth.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/JobStore.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/RoutineCommand.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/RoutineOrigin.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/Schedule.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/ScheduleMirror.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/ScheduleMonitor.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/ScheduleStore.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/Scheduler.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/UpdateActiveJobs.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/Worker.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/WorkerBootstrap.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/WorkerLib.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/WorkerPool.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Routines/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/SQLite.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/SharedData.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/SharedNumpy.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/StreamKafka.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Symbol.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Table.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableDisk.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableIndex.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableIndexJitFunctions.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableIndexJitFunctionsManual.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableIndexJitGenerate.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableIndexJitHash.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableIndexJitLoc.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableProtocol.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableRead.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TableRewrite.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TimeSeriesDisk.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/TimeseriesContainer.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Users.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Utils.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/ADDING_A_PAGE.md +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/activity_logger.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/app.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/assets/dashAgGridComponentFunctions.js +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/assets/dashAgGridFunctions.js +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/assets/google_logo.png +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/assets/kafka_keys.js +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/assets/logs.css +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/assets/sched.css +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/assets/styles.css +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/auth.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/backends.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/config.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/containers.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/identity.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/kafka_view.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/mongo_view.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/proc.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/redis_view.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/route_health.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/route_registry.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/sched.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/schedule_editor.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/server.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/services.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/shell.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/standalone.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/account.js +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/custom.css +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/favicon.ico +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/favicon.png +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/logo.png +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/logo_96x96.png +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/shareddata-mark.svg +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/shell.css +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/shell.js +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/standalone.css +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/static/standalone.js +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/suggest.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/account.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/base.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/claim.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/claim_done.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/dash.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/index.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/login.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/login_2fa.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/partials/navbar.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/partials/scripts.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/recovery_codes.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/shell.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/templates/standalone.html +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/twofactor.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/utils.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/Web/workerpool.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/__init__.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/build_info.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/fleet.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/preflight.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/private_files.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/release_backup.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/server.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/services.py +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/SharedData/sharedmutexwin.pyd +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/shareddata.egg-info/SOURCES.txt +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/shareddata.egg-info/dependency_links.txt +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/shareddata.egg-info/entry_points.txt +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/shareddata.egg-info/requires.txt +0 -0
- {shareddata-6.86.0 → shareddata-6.86.2}/src/shareddata.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: shareddata
|
|
3
|
+
Version: 6.86.2
|
|
4
|
+
Summary: Memory-mapped record and time-series store with an HTTP API and a distributed scheduler
|
|
5
|
+
Home-page: https://shareddata.net
|
|
6
|
+
Author: shareddata
|
|
7
|
+
Author-email: admin@shareddata.net
|
|
8
|
+
License: MIT
|
|
9
|
+
Project-URL: Homepage, https://shareddata.net
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Requires-Python: >=3.11, <3.13
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: ipykernel<8,>=7.4
|
|
19
|
+
Requires-Dist: python-json-logger<5,>=4.2
|
|
20
|
+
Requires-Dist: python-dotenv<2,>=1.2.4
|
|
21
|
+
Requires-Dist: pandas<3,>=2.2
|
|
22
|
+
Requires-Dist: scipy<1.18,>=1.14
|
|
23
|
+
Requires-Dist: numpy<1.27,>=1.26.4
|
|
24
|
+
Requires-Dist: numba==0.59.1
|
|
25
|
+
Requires-Dist: XlsxWriter<4,>=3.2.9
|
|
26
|
+
Requires-Dist: openpyxl<4,>=3.1.5
|
|
27
|
+
Requires-Dist: tqdm<5,>=4.70.1
|
|
28
|
+
Requires-Dist: cffi<3,>=2.1
|
|
29
|
+
Requires-Dist: tzlocal<6,>=5.4.4
|
|
30
|
+
Requires-Dist: websockets<18,>=17.1
|
|
31
|
+
Requires-Dist: lz4<5,>=4.4.5
|
|
32
|
+
Requires-Dist: flask<4,>=3.1.3
|
|
33
|
+
Requires-Dist: waitress<4,>=3.0.2
|
|
34
|
+
Requires-Dist: requests<3,>=2.34.2
|
|
35
|
+
Requires-Dist: flasgger==0.9.7.1
|
|
36
|
+
Requires-Dist: pymongo<5,>=4.18.2
|
|
37
|
+
Requires-Dist: setuptools>=84
|
|
38
|
+
Requires-Dist: filelock<5,>=4.0.9
|
|
39
|
+
Requires-Dist: gunicorn<27,>=26.2
|
|
40
|
+
Requires-Dist: aiohttp<4,>=3.14.3
|
|
41
|
+
Requires-Dist: boto3<2,>=1.43
|
|
42
|
+
Requires-Dist: confluent-kafka<3,>=2.15.1
|
|
43
|
+
Requires-Dist: aiokafka<1,>=0.14
|
|
44
|
+
Requires-Dist: redis<9,>=8.1
|
|
45
|
+
Requires-Dist: Authlib<2,>=1.8
|
|
46
|
+
Requires-Dist: PyJWT<3,>=2.8
|
|
47
|
+
Requires-Dist: argon2-cffi<26,>=25.1
|
|
48
|
+
Requires-Dist: flask-jwt-extended<5,>=4.6
|
|
49
|
+
Requires-Dist: cryptography<51,>=50.0.2
|
|
50
|
+
Requires-Dist: segno<2,>=1.6
|
|
51
|
+
Requires-Dist: psutil<8,>=5.9
|
|
52
|
+
Requires-Dist: mcp>=1.27
|
|
53
|
+
Requires-Dist: httpx>=0.27
|
|
54
|
+
Provides-Extra: test
|
|
55
|
+
Requires-Dist: pytest<10,>=8.3.4; extra == "test"
|
|
56
|
+
Requires-Dist: pytest-asyncio<2,>=0.24; extra == "test"
|
|
57
|
+
Requires-Dist: playwright<2,>=1.63; extra == "test"
|
|
58
|
+
Provides-Extra: s3
|
|
59
|
+
Provides-Extra: kafka
|
|
60
|
+
Provides-Extra: redis
|
|
61
|
+
Provides-Extra: all
|
|
62
|
+
Dynamic: author
|
|
63
|
+
Dynamic: author-email
|
|
64
|
+
Dynamic: classifier
|
|
65
|
+
Dynamic: description
|
|
66
|
+
Dynamic: description-content-type
|
|
67
|
+
Dynamic: home-page
|
|
68
|
+
Dynamic: license
|
|
69
|
+
Dynamic: license-file
|
|
70
|
+
Dynamic: project-url
|
|
71
|
+
Dynamic: provides-extra
|
|
72
|
+
Dynamic: requires-dist
|
|
73
|
+
Dynamic: requires-python
|
|
74
|
+
Dynamic: summary
|
|
75
|
+
|
|
76
|
+
# SharedData
|
|
77
|
+
|
|
78
|
+
SharedData is an open-source memory-mapped store for records and time series —
|
|
79
|
+
in the workload category of tick stores such as kdb+ — plus the scheduler and
|
|
80
|
+
worker fleet that produce the data. Local processes map the same files through
|
|
81
|
+
the operating system's page cache; indexed writes coordinate through a
|
|
82
|
+
per-table process lock. Remote clients use an authenticated HTTP API; shared
|
|
83
|
+
memory does not span hosts.
|
|
84
|
+
|
|
85
|
+
Website and manual: <https://shareddata.net>
|
|
86
|
+
|
|
87
|
+
## Install
|
|
88
|
+
|
|
89
|
+
Python 3.11 or 3.12:
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
python -m pip install shareddata
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The [quick start](https://shareddata.net/docs/QUICK_START/) uses illustrative
|
|
96
|
+
records in isolated storage. See [configuration](https://shareddata.net/docs/CONFIGURATION/)
|
|
97
|
+
for public environment names and [Windows limitations](https://shareddata.net/docs/WINDOWS/)
|
|
98
|
+
for native requirements and rewrite behavior.
|
|
99
|
+
|
|
100
|
+
## A record in one minute
|
|
101
|
+
|
|
102
|
+
Save as `example.py` after setting up isolated storage in the
|
|
103
|
+
[quick start](https://shareddata.net/docs/QUICK_START/), then run `python example.py`:
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
from SharedData.SharedData import SharedData
|
|
107
|
+
import pandas as pd
|
|
108
|
+
|
|
109
|
+
store = SharedData(__file__, user="example")
|
|
110
|
+
index = pd.MultiIndex.from_tuples(
|
|
111
|
+
[(pd.Timestamp("2026-01-02"), "EXAMPLE")],
|
|
112
|
+
names=["date", "symbol"],
|
|
113
|
+
)
|
|
114
|
+
rows = pd.DataFrame({"close": [100.0]}, index=index)
|
|
115
|
+
records = store.table(
|
|
116
|
+
"MarketData", "D1", "DEMO", "PRICES",
|
|
117
|
+
value=rows,
|
|
118
|
+
)
|
|
119
|
+
print(records.loc["2026-01-02", "EXAMPLE"])
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Containers and execution
|
|
123
|
+
|
|
124
|
+
- [Tables](https://shareddata.net/docs/core/table/): structured NumPy records and primary-key lookup.
|
|
125
|
+
- [Time series](https://shareddata.net/docs/core/timeseries/): timestamped float matrices.
|
|
126
|
+
- Collections, Redis caches, Kafka streams and optional S3 integration.
|
|
127
|
+
- [HTTP API](https://shareddata.net/docs/guide/swagger/): authenticated remote access.
|
|
128
|
+
- [Measured latency](https://shareddata.net/docs/performance/): what the containers cost in practice.
|
|
129
|
+
|
|
130
|
+
## A store and the fleet that fills it
|
|
131
|
+
|
|
132
|
+
A routine is any program the Scheduler owns — a feed collector, a parser, a
|
|
133
|
+
consolidation job, an API server. A schedule lists the routines that should
|
|
134
|
+
stay alive or run at their times. Batch routines wait for their batch dependencies
|
|
135
|
+
to complete; realtime routines wait for their realtime dependencies to be running.
|
|
136
|
+
Dependencies between the two kinds are not enforced at runtime. Commands travel
|
|
137
|
+
through a per-host worker pool that validates the requested source revision
|
|
138
|
+
before every launch; routines report heartbeats and lifecycle messages through
|
|
139
|
+
the logging plane, and the Scheduler writes queryable state into the store.
|
|
140
|
+
|
|
141
|
+
- [Orchestration](https://shareddata.net/docs/orchestration/): the routine model, the Scheduler's tick and the worker pool.
|
|
142
|
+
- [Use cases](https://shareddata.net/docs/use-cases/): the workloads a production deployment runs, generalized.
|
|
143
|
+
- [Schedules](https://shareddata.net/docs/scheduler-store/) and [batch jobs](https://shareddata.net/docs/job-store/): where the state lives.
|
|
144
|
+
|
|
145
|
+
## Data by symbol
|
|
146
|
+
|
|
147
|
+
The [semantic data API](https://shareddata.net/docs/data-api/) resolves a
|
|
148
|
+
symbol or entity to a dataset and includes provenance. It is a convenience,
|
|
149
|
+
not the fast path: producers keep using direct container interfaces for
|
|
150
|
+
performance-critical work.
|
|
151
|
+
|
|
152
|
+
## Client integration
|
|
153
|
+
|
|
154
|
+
[Client integration](https://shareddata.net/docs/ecosystem/) covers
|
|
155
|
+
authenticated API access, the MCP server for compatible agent clients, and
|
|
156
|
+
worker access.
|
|
157
|
+
|
|
158
|
+
## Development and license
|
|
159
|
+
|
|
160
|
+
Submit changes through the repository's review process. Read the
|
|
161
|
+
[development guide](https://shareddata.net/docs/DEVELOPMENT/) and run the
|
|
162
|
+
checks relevant to your change; [building and publishing](https://shareddata.net/docs/guide/building/)
|
|
163
|
+
explains how the public site is produced and audited. SharedData is released
|
|
164
|
+
under the MIT license; see `LICENSE` in the source distribution.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# SharedData
|
|
2
|
+
|
|
3
|
+
SharedData is an open-source memory-mapped store for records and time series —
|
|
4
|
+
in the workload category of tick stores such as kdb+ — plus the scheduler and
|
|
5
|
+
worker fleet that produce the data. Local processes map the same files through
|
|
6
|
+
the operating system's page cache; indexed writes coordinate through a
|
|
7
|
+
per-table process lock. Remote clients use an authenticated HTTP API; shared
|
|
8
|
+
memory does not span hosts.
|
|
9
|
+
|
|
10
|
+
Website and manual: <https://shareddata.net>
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
Python 3.11 or 3.12:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
python -m pip install shareddata
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The [quick start](https://shareddata.net/docs/QUICK_START/) uses illustrative
|
|
21
|
+
records in isolated storage. See [configuration](https://shareddata.net/docs/CONFIGURATION/)
|
|
22
|
+
for public environment names and [Windows limitations](https://shareddata.net/docs/WINDOWS/)
|
|
23
|
+
for native requirements and rewrite behavior.
|
|
24
|
+
|
|
25
|
+
## A record in one minute
|
|
26
|
+
|
|
27
|
+
Save as `example.py` after setting up isolated storage in the
|
|
28
|
+
[quick start](https://shareddata.net/docs/QUICK_START/), then run `python example.py`:
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
from SharedData.SharedData import SharedData
|
|
32
|
+
import pandas as pd
|
|
33
|
+
|
|
34
|
+
store = SharedData(__file__, user="example")
|
|
35
|
+
index = pd.MultiIndex.from_tuples(
|
|
36
|
+
[(pd.Timestamp("2026-01-02"), "EXAMPLE")],
|
|
37
|
+
names=["date", "symbol"],
|
|
38
|
+
)
|
|
39
|
+
rows = pd.DataFrame({"close": [100.0]}, index=index)
|
|
40
|
+
records = store.table(
|
|
41
|
+
"MarketData", "D1", "DEMO", "PRICES",
|
|
42
|
+
value=rows,
|
|
43
|
+
)
|
|
44
|
+
print(records.loc["2026-01-02", "EXAMPLE"])
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Containers and execution
|
|
48
|
+
|
|
49
|
+
- [Tables](https://shareddata.net/docs/core/table/): structured NumPy records and primary-key lookup.
|
|
50
|
+
- [Time series](https://shareddata.net/docs/core/timeseries/): timestamped float matrices.
|
|
51
|
+
- Collections, Redis caches, Kafka streams and optional S3 integration.
|
|
52
|
+
- [HTTP API](https://shareddata.net/docs/guide/swagger/): authenticated remote access.
|
|
53
|
+
- [Measured latency](https://shareddata.net/docs/performance/): what the containers cost in practice.
|
|
54
|
+
|
|
55
|
+
## A store and the fleet that fills it
|
|
56
|
+
|
|
57
|
+
A routine is any program the Scheduler owns — a feed collector, a parser, a
|
|
58
|
+
consolidation job, an API server. A schedule lists the routines that should
|
|
59
|
+
stay alive or run at their times. Batch routines wait for their batch dependencies
|
|
60
|
+
to complete; realtime routines wait for their realtime dependencies to be running.
|
|
61
|
+
Dependencies between the two kinds are not enforced at runtime. Commands travel
|
|
62
|
+
through a per-host worker pool that validates the requested source revision
|
|
63
|
+
before every launch; routines report heartbeats and lifecycle messages through
|
|
64
|
+
the logging plane, and the Scheduler writes queryable state into the store.
|
|
65
|
+
|
|
66
|
+
- [Orchestration](https://shareddata.net/docs/orchestration/): the routine model, the Scheduler's tick and the worker pool.
|
|
67
|
+
- [Use cases](https://shareddata.net/docs/use-cases/): the workloads a production deployment runs, generalized.
|
|
68
|
+
- [Schedules](https://shareddata.net/docs/scheduler-store/) and [batch jobs](https://shareddata.net/docs/job-store/): where the state lives.
|
|
69
|
+
|
|
70
|
+
## Data by symbol
|
|
71
|
+
|
|
72
|
+
The [semantic data API](https://shareddata.net/docs/data-api/) resolves a
|
|
73
|
+
symbol or entity to a dataset and includes provenance. It is a convenience,
|
|
74
|
+
not the fast path: producers keep using direct container interfaces for
|
|
75
|
+
performance-critical work.
|
|
76
|
+
|
|
77
|
+
## Client integration
|
|
78
|
+
|
|
79
|
+
[Client integration](https://shareddata.net/docs/ecosystem/) covers
|
|
80
|
+
authenticated API access, the MCP server for compatible agent clients, and
|
|
81
|
+
worker access.
|
|
82
|
+
|
|
83
|
+
## Development and license
|
|
84
|
+
|
|
85
|
+
Submit changes through the repository's review process. Read the
|
|
86
|
+
[development guide](https://shareddata.net/docs/DEVELOPMENT/) and run the
|
|
87
|
+
checks relevant to your change; [building and publishing](https://shareddata.net/docs/guide/building/)
|
|
88
|
+
explains how the public site is produced and audited. SharedData is released
|
|
89
|
+
under the MIT license; see `LICENSE` in the source distribution.
|
|
@@ -66,8 +66,8 @@ test_requires = [
|
|
|
66
66
|
|
|
67
67
|
setup(
|
|
68
68
|
name='shareddata',
|
|
69
|
-
version='6.86.
|
|
70
|
-
description='Memory
|
|
69
|
+
version='6.86.2',
|
|
70
|
+
description='Memory-mapped record and time-series store with an HTTP API and a distributed scheduler',
|
|
71
71
|
author='shareddata',
|
|
72
72
|
author_email='admin@shareddata.net',
|
|
73
73
|
url='https://shareddata.net',
|
|
@@ -80,6 +80,29 @@ def _failed(row, error):
|
|
|
80
80
|
'error': f'{type(error).__name__}: {error}'.replace('\n', ' ')[:300]}
|
|
81
81
|
|
|
82
82
|
|
|
83
|
+
def live_daily_partitions(dftables: pd.DataFrame, now: datetime = None) -> pd.Series:
|
|
84
|
+
"""Rows of daily partitions (YYYYMMDD) dated today or later in UTC.
|
|
85
|
+
|
|
86
|
+
A realtime writer is still appending to such a partition. Table.write holds the
|
|
87
|
+
table's mutex while it hashes, uploads and flushes the whole partition (minutes
|
|
88
|
+
for a 100 GB table), and every writer of the partition waits for that mutex, so
|
|
89
|
+
a backup would stall live data. The partition is complete the next night, when
|
|
90
|
+
it is still newer than the remote copy and is saved then.
|
|
91
|
+
"""
|
|
92
|
+
now = datetime.now(timezone.utc) if now is None else now
|
|
93
|
+
today = now.astimezone(timezone.utc).strftime('%Y%m%d')
|
|
94
|
+
partition = dftables['partition'].fillna('').astype(str)
|
|
95
|
+
return partition.str.fullmatch(r'\d{8}') & (partition >= today)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def select_tables(dftables: pd.DataFrame, now: datetime = None) -> pd.Series:
|
|
99
|
+
"""Tables to save: local newer than remote (or no remote), not tiny, not live today."""
|
|
100
|
+
saveidx = (dftables['last_modified_local'].notnull())
|
|
101
|
+
saveidx = saveidx & ((dftables['last_modified_local'] > dftables['last_modified_remote']) | (dftables['last_modified_remote'].isnull()))
|
|
102
|
+
saveidx = saveidx & (dftables['size_local'] > 1000)
|
|
103
|
+
return saveidx & ~live_daily_partitions(dftables, now)
|
|
104
|
+
|
|
105
|
+
|
|
83
106
|
def write_table(dftable_row: Dict[str, Any], retry=False) -> Dict[str, str]:
|
|
84
107
|
"""Save one table; return {'table', 'status': saved|failed|skipped, 'error'}."""
|
|
85
108
|
path = table_path(dftable_row)
|
|
@@ -307,9 +330,13 @@ def main():
|
|
|
307
330
|
're-uploading every local table would be catastrophic.')
|
|
308
331
|
sys.exit(1)
|
|
309
332
|
|
|
310
|
-
saveidx = (dftables
|
|
311
|
-
|
|
312
|
-
|
|
333
|
+
saveidx = select_tables(dftables)
|
|
334
|
+
live = dftables[live_daily_partitions(dftables)
|
|
335
|
+
& (dftables['last_modified_local'].notnull())
|
|
336
|
+
& (dftables['size_local'] > 1000)]
|
|
337
|
+
if len(live):
|
|
338
|
+
Logger.log.info(f'SaveTables skipped {len(live)} live daily partitions (saved the next night): '
|
|
339
|
+
+ ', '.join(table_path(r) for r in live.to_dict(orient='records')))
|
|
313
340
|
|
|
314
341
|
Logger.log.info('Saving the following tables:')
|
|
315
342
|
for idx, row in dftables[saveidx].iterrows():
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: shareddata
|
|
3
|
+
Version: 6.86.2
|
|
4
|
+
Summary: Memory-mapped record and time-series store with an HTTP API and a distributed scheduler
|
|
5
|
+
Home-page: https://shareddata.net
|
|
6
|
+
Author: shareddata
|
|
7
|
+
Author-email: admin@shareddata.net
|
|
8
|
+
License: MIT
|
|
9
|
+
Project-URL: Homepage, https://shareddata.net
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Requires-Python: >=3.11, <3.13
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: ipykernel<8,>=7.4
|
|
19
|
+
Requires-Dist: python-json-logger<5,>=4.2
|
|
20
|
+
Requires-Dist: python-dotenv<2,>=1.2.4
|
|
21
|
+
Requires-Dist: pandas<3,>=2.2
|
|
22
|
+
Requires-Dist: scipy<1.18,>=1.14
|
|
23
|
+
Requires-Dist: numpy<1.27,>=1.26.4
|
|
24
|
+
Requires-Dist: numba==0.59.1
|
|
25
|
+
Requires-Dist: XlsxWriter<4,>=3.2.9
|
|
26
|
+
Requires-Dist: openpyxl<4,>=3.1.5
|
|
27
|
+
Requires-Dist: tqdm<5,>=4.70.1
|
|
28
|
+
Requires-Dist: cffi<3,>=2.1
|
|
29
|
+
Requires-Dist: tzlocal<6,>=5.4.4
|
|
30
|
+
Requires-Dist: websockets<18,>=17.1
|
|
31
|
+
Requires-Dist: lz4<5,>=4.4.5
|
|
32
|
+
Requires-Dist: flask<4,>=3.1.3
|
|
33
|
+
Requires-Dist: waitress<4,>=3.0.2
|
|
34
|
+
Requires-Dist: requests<3,>=2.34.2
|
|
35
|
+
Requires-Dist: flasgger==0.9.7.1
|
|
36
|
+
Requires-Dist: pymongo<5,>=4.18.2
|
|
37
|
+
Requires-Dist: setuptools>=84
|
|
38
|
+
Requires-Dist: filelock<5,>=4.0.9
|
|
39
|
+
Requires-Dist: gunicorn<27,>=26.2
|
|
40
|
+
Requires-Dist: aiohttp<4,>=3.14.3
|
|
41
|
+
Requires-Dist: boto3<2,>=1.43
|
|
42
|
+
Requires-Dist: confluent-kafka<3,>=2.15.1
|
|
43
|
+
Requires-Dist: aiokafka<1,>=0.14
|
|
44
|
+
Requires-Dist: redis<9,>=8.1
|
|
45
|
+
Requires-Dist: Authlib<2,>=1.8
|
|
46
|
+
Requires-Dist: PyJWT<3,>=2.8
|
|
47
|
+
Requires-Dist: argon2-cffi<26,>=25.1
|
|
48
|
+
Requires-Dist: flask-jwt-extended<5,>=4.6
|
|
49
|
+
Requires-Dist: cryptography<51,>=50.0.2
|
|
50
|
+
Requires-Dist: segno<2,>=1.6
|
|
51
|
+
Requires-Dist: psutil<8,>=5.9
|
|
52
|
+
Requires-Dist: mcp>=1.27
|
|
53
|
+
Requires-Dist: httpx>=0.27
|
|
54
|
+
Provides-Extra: test
|
|
55
|
+
Requires-Dist: pytest<10,>=8.3.4; extra == "test"
|
|
56
|
+
Requires-Dist: pytest-asyncio<2,>=0.24; extra == "test"
|
|
57
|
+
Requires-Dist: playwright<2,>=1.63; extra == "test"
|
|
58
|
+
Provides-Extra: s3
|
|
59
|
+
Provides-Extra: kafka
|
|
60
|
+
Provides-Extra: redis
|
|
61
|
+
Provides-Extra: all
|
|
62
|
+
Dynamic: author
|
|
63
|
+
Dynamic: author-email
|
|
64
|
+
Dynamic: classifier
|
|
65
|
+
Dynamic: description
|
|
66
|
+
Dynamic: description-content-type
|
|
67
|
+
Dynamic: home-page
|
|
68
|
+
Dynamic: license
|
|
69
|
+
Dynamic: license-file
|
|
70
|
+
Dynamic: project-url
|
|
71
|
+
Dynamic: provides-extra
|
|
72
|
+
Dynamic: requires-dist
|
|
73
|
+
Dynamic: requires-python
|
|
74
|
+
Dynamic: summary
|
|
75
|
+
|
|
76
|
+
# SharedData
|
|
77
|
+
|
|
78
|
+
SharedData is an open-source memory-mapped store for records and time series —
|
|
79
|
+
in the workload category of tick stores such as kdb+ — plus the scheduler and
|
|
80
|
+
worker fleet that produce the data. Local processes map the same files through
|
|
81
|
+
the operating system's page cache; indexed writes coordinate through a
|
|
82
|
+
per-table process lock. Remote clients use an authenticated HTTP API; shared
|
|
83
|
+
memory does not span hosts.
|
|
84
|
+
|
|
85
|
+
Website and manual: <https://shareddata.net>
|
|
86
|
+
|
|
87
|
+
## Install
|
|
88
|
+
|
|
89
|
+
Python 3.11 or 3.12:
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
python -m pip install shareddata
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The [quick start](https://shareddata.net/docs/QUICK_START/) uses illustrative
|
|
96
|
+
records in isolated storage. See [configuration](https://shareddata.net/docs/CONFIGURATION/)
|
|
97
|
+
for public environment names and [Windows limitations](https://shareddata.net/docs/WINDOWS/)
|
|
98
|
+
for native requirements and rewrite behavior.
|
|
99
|
+
|
|
100
|
+
## A record in one minute
|
|
101
|
+
|
|
102
|
+
Save as `example.py` after setting up isolated storage in the
|
|
103
|
+
[quick start](https://shareddata.net/docs/QUICK_START/), then run `python example.py`:
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
from SharedData.SharedData import SharedData
|
|
107
|
+
import pandas as pd
|
|
108
|
+
|
|
109
|
+
store = SharedData(__file__, user="example")
|
|
110
|
+
index = pd.MultiIndex.from_tuples(
|
|
111
|
+
[(pd.Timestamp("2026-01-02"), "EXAMPLE")],
|
|
112
|
+
names=["date", "symbol"],
|
|
113
|
+
)
|
|
114
|
+
rows = pd.DataFrame({"close": [100.0]}, index=index)
|
|
115
|
+
records = store.table(
|
|
116
|
+
"MarketData", "D1", "DEMO", "PRICES",
|
|
117
|
+
value=rows,
|
|
118
|
+
)
|
|
119
|
+
print(records.loc["2026-01-02", "EXAMPLE"])
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Containers and execution
|
|
123
|
+
|
|
124
|
+
- [Tables](https://shareddata.net/docs/core/table/): structured NumPy records and primary-key lookup.
|
|
125
|
+
- [Time series](https://shareddata.net/docs/core/timeseries/): timestamped float matrices.
|
|
126
|
+
- Collections, Redis caches, Kafka streams and optional S3 integration.
|
|
127
|
+
- [HTTP API](https://shareddata.net/docs/guide/swagger/): authenticated remote access.
|
|
128
|
+
- [Measured latency](https://shareddata.net/docs/performance/): what the containers cost in practice.
|
|
129
|
+
|
|
130
|
+
## A store and the fleet that fills it
|
|
131
|
+
|
|
132
|
+
A routine is any program the Scheduler owns — a feed collector, a parser, a
|
|
133
|
+
consolidation job, an API server. A schedule lists the routines that should
|
|
134
|
+
stay alive or run at their times. Batch routines wait for their batch dependencies
|
|
135
|
+
to complete; realtime routines wait for their realtime dependencies to be running.
|
|
136
|
+
Dependencies between the two kinds are not enforced at runtime. Commands travel
|
|
137
|
+
through a per-host worker pool that validates the requested source revision
|
|
138
|
+
before every launch; routines report heartbeats and lifecycle messages through
|
|
139
|
+
the logging plane, and the Scheduler writes queryable state into the store.
|
|
140
|
+
|
|
141
|
+
- [Orchestration](https://shareddata.net/docs/orchestration/): the routine model, the Scheduler's tick and the worker pool.
|
|
142
|
+
- [Use cases](https://shareddata.net/docs/use-cases/): the workloads a production deployment runs, generalized.
|
|
143
|
+
- [Schedules](https://shareddata.net/docs/scheduler-store/) and [batch jobs](https://shareddata.net/docs/job-store/): where the state lives.
|
|
144
|
+
|
|
145
|
+
## Data by symbol
|
|
146
|
+
|
|
147
|
+
The [semantic data API](https://shareddata.net/docs/data-api/) resolves a
|
|
148
|
+
symbol or entity to a dataset and includes provenance. It is a convenience,
|
|
149
|
+
not the fast path: producers keep using direct container interfaces for
|
|
150
|
+
performance-critical work.
|
|
151
|
+
|
|
152
|
+
## Client integration
|
|
153
|
+
|
|
154
|
+
[Client integration](https://shareddata.net/docs/ecosystem/) covers
|
|
155
|
+
authenticated API access, the MCP server for compatible agent clients, and
|
|
156
|
+
worker access.
|
|
157
|
+
|
|
158
|
+
## Development and license
|
|
159
|
+
|
|
160
|
+
Submit changes through the repository's review process. Read the
|
|
161
|
+
[development guide](https://shareddata.net/docs/DEVELOPMENT/) and run the
|
|
162
|
+
checks relevant to your change; [building and publishing](https://shareddata.net/docs/guide/building/)
|
|
163
|
+
explains how the public site is produced and audited. SharedData is released
|
|
164
|
+
under the MIT license; see `LICENSE` in the source distribution.
|