ceres-engine 0.41.0__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.
Files changed (243) hide show
  1. ceres_engine-0.41.0/.cargo/config.toml +41 -0
  2. ceres_engine-0.41.0/LICENSE +21 -0
  3. ceres_engine-0.41.0/PKG-INFO +122 -0
  4. ceres_engine-0.41.0/ceres/__init__.py +232 -0
  5. ceres_engine-0.41.0/ceres/__internal__/__init__.py +0 -0
  6. ceres_engine-0.41.0/ceres/__internal__/app/__init__.py +5 -0
  7. ceres_engine-0.41.0/ceres/__internal__/app/handlers/__init__.py +6 -0
  8. ceres_engine-0.41.0/ceres/__internal__/app/handlers/components.py +550 -0
  9. ceres_engine-0.41.0/ceres/__internal__/app/handlers/engine.py +115 -0
  10. ceres_engine-0.41.0/ceres/__internal__/app/handlers/permissions.py +200 -0
  11. ceres_engine-0.41.0/ceres/__internal__/app/handlers/settings.py +52 -0
  12. ceres_engine-0.41.0/ceres/__internal__/app/handlers/workspace_edits.py +137 -0
  13. ceres_engine-0.41.0/ceres/__internal__/app/handlers/workspaces.py +384 -0
  14. ceres_engine-0.41.0/ceres/__internal__/app/host.py +372 -0
  15. ceres_engine-0.41.0/ceres/__internal__/app/operations.py +842 -0
  16. ceres_engine-0.41.0/ceres/__internal__/app/shared.py +269 -0
  17. ceres_engine-0.41.0/ceres/__internal__/auth.py +118 -0
  18. ceres_engine-0.41.0/ceres/__internal__/cli/__init__.py +0 -0
  19. ceres_engine-0.41.0/ceres/__internal__/cli/__main__.py +17 -0
  20. ceres_engine-0.41.0/ceres/__internal__/cli/main.py +459 -0
  21. ceres_engine-0.41.0/ceres/__internal__/cli/shared.py +551 -0
  22. ceres_engine-0.41.0/ceres/__internal__/cli/subcommands/__init__.py +0 -0
  23. ceres_engine-0.41.0/ceres/__internal__/cli/subcommands/database.py +272 -0
  24. ceres_engine-0.41.0/ceres/__internal__/cli/subcommands/generate.py +56 -0
  25. ceres_engine-0.41.0/ceres/__internal__/core.pyi +1293 -0
  26. ceres_engine-0.41.0/ceres/__internal__/database/__init__.py +0 -0
  27. ceres_engine-0.41.0/ceres/__internal__/database/errors.py +72 -0
  28. ceres_engine-0.41.0/ceres/__internal__/database/writer.py +238 -0
  29. ceres_engine-0.41.0/ceres/__internal__/entity.py +1494 -0
  30. ceres_engine-0.41.0/ceres/__internal__/filter.py +42 -0
  31. ceres_engine-0.41.0/ceres/__internal__/interop.py +152 -0
  32. ceres_engine-0.41.0/ceres/__internal__/lazy.py +288 -0
  33. ceres_engine-0.41.0/ceres/__internal__/manager.py +203 -0
  34. ceres_engine-0.41.0/ceres/__internal__/project.py +98 -0
  35. ceres_engine-0.41.0/ceres/__internal__/protocols.py +48 -0
  36. ceres_engine-0.41.0/ceres/__internal__/record.py +173 -0
  37. ceres_engine-0.41.0/ceres/__internal__/server.py +169 -0
  38. ceres_engine-0.41.0/ceres/__internal__/templates/__init__.py +5 -0
  39. ceres_engine-0.41.0/ceres/__internal__/templates/html-email-dispatch.jinja +50 -0
  40. ceres_engine-0.41.0/ceres/__internal__/templates/html-email-style.jinja +89 -0
  41. ceres_engine-0.41.0/ceres/__internal__/utilities/__init__.py +0 -0
  42. ceres_engine-0.41.0/ceres/__internal__/utilities/algorithms.py +58 -0
  43. ceres_engine-0.41.0/ceres/__internal__/utilities/caching.py +216 -0
  44. ceres_engine-0.41.0/ceres/__internal__/utilities/case.py +84 -0
  45. ceres_engine-0.41.0/ceres/__internal__/utilities/classes.py +214 -0
  46. ceres_engine-0.41.0/ceres/__internal__/utilities/collections.py +296 -0
  47. ceres_engine-0.41.0/ceres/__internal__/utilities/exceptions.py +13 -0
  48. ceres_engine-0.41.0/ceres/__internal__/utilities/functions.py +89 -0
  49. ceres_engine-0.41.0/ceres/__internal__/utilities/platforms.py +19 -0
  50. ceres_engine-0.41.0/ceres/__internal__/utilities/randomize.py +13 -0
  51. ceres_engine-0.41.0/ceres/__internal__/utilities/text.py +28 -0
  52. ceres_engine-0.41.0/ceres/__internal__/utilities/typing.py +759 -0
  53. ceres_engine-0.41.0/ceres/__internal__/utilities/undefined.py +27 -0
  54. ceres_engine-0.41.0/ceres/__internal__/utilities/validation.py +176 -0
  55. ceres_engine-0.41.0/ceres/__internal__/workspace_redaction.py +206 -0
  56. ceres_engine-0.41.0/ceres/__main__.py +48 -0
  57. ceres_engine-0.41.0/ceres/access.py +304 -0
  58. ceres_engine-0.41.0/ceres/address.py +463 -0
  59. ceres_engine-0.41.0/ceres/alert.py +321 -0
  60. ceres_engine-0.41.0/ceres/channel.py +339 -0
  61. ceres_engine-0.41.0/ceres/component.py +2724 -0
  62. ceres_engine-0.41.0/ceres/concurrency.py +352 -0
  63. ceres_engine-0.41.0/ceres/config.py +1224 -0
  64. ceres_engine-0.41.0/ceres/connection/__init__.py +626 -0
  65. ceres_engine-0.41.0/ceres/connection/buffer.py +479 -0
  66. ceres_engine-0.41.0/ceres/connection/source.py +216 -0
  67. ceres_engine-0.41.0/ceres/connection/splitter.py +155 -0
  68. ceres_engine-0.41.0/ceres/connectivity.py +22 -0
  69. ceres_engine-0.41.0/ceres/constants.py +10 -0
  70. ceres_engine-0.41.0/ceres/data/__init__.py +242 -0
  71. ceres_engine-0.41.0/ceres/data/binary.py +1219 -0
  72. ceres_engine-0.41.0/ceres/data/converters.py +704 -0
  73. ceres_engine-0.41.0/ceres/data/object.py +1986 -0
  74. ceres_engine-0.41.0/ceres/data/types.py +518 -0
  75. ceres_engine-0.41.0/ceres/data/uuid.py +59 -0
  76. ceres_engine-0.41.0/ceres/database/__init__.py +18 -0
  77. ceres_engine-0.41.0/ceres/database/database.py +801 -0
  78. ceres_engine-0.41.0/ceres/database/enums.py +16 -0
  79. ceres_engine-0.41.0/ceres/database/migrations/0001-init.postgres.sql +180 -0
  80. ceres_engine-0.41.0/ceres/database/migrations/0001-init.sqlite.sql +168 -0
  81. ceres_engine-0.41.0/ceres/database/migrations/0002-remove-user-roles.postgres.sql +30 -0
  82. ceres_engine-0.41.0/ceres/database/migrations/0002-remove-user-roles.sqlite.sql +64 -0
  83. ceres_engine-0.41.0/ceres/database/migrations/0003-component-forest.postgres.sql +22 -0
  84. ceres_engine-0.41.0/ceres/database/migrations/0003-component-forest.sqlite.sql +54 -0
  85. ceres_engine-0.41.0/ceres/database/migrations/0004-workspace-scope.sql +1 -0
  86. ceres_engine-0.41.0/ceres/database/migrations/0005-workspace-owner.postgres.sql +4 -0
  87. ceres_engine-0.41.0/ceres/database/migrations/0005-workspace-owner.sqlite.sql +2 -0
  88. ceres_engine-0.41.0/ceres/database/migrations/0006-workspace-placement.postgres.sql +3 -0
  89. ceres_engine-0.41.0/ceres/database/migrations/0006-workspace-placement.sqlite.sql +39 -0
  90. ceres_engine-0.41.0/ceres/database/migrations/0007-remove-workspace-memberships.postgres.sql +5 -0
  91. ceres_engine-0.41.0/ceres/database/migrations/0007-remove-workspace-memberships.sqlite.sql +25 -0
  92. ceres_engine-0.41.0/ceres/database/migrations/0008-collate-text-by-code-point.postgres.sql +51 -0
  93. ceres_engine-0.41.0/ceres/database/migrations/__init__.py +117 -0
  94. ceres_engine-0.41.0/ceres/directory.py +365 -0
  95. ceres_engine-0.41.0/ceres/dispatcher.py +268 -0
  96. ceres_engine-0.41.0/ceres/engine.py +889 -0
  97. ceres_engine-0.41.0/ceres/entity.py +265 -0
  98. ceres_engine-0.41.0/ceres/error.py +639 -0
  99. ceres_engine-0.41.0/ceres/event.py +1186 -0
  100. ceres_engine-0.41.0/ceres/group.py +327 -0
  101. ceres_engine-0.41.0/ceres/item.py +56 -0
  102. ceres_engine-0.41.0/ceres/job.py +227 -0
  103. ceres_engine-0.41.0/ceres/level.py +78 -0
  104. ceres_engine-0.41.0/ceres/loaded.py +157 -0
  105. ceres_engine-0.41.0/ceres/logs.py +489 -0
  106. ceres_engine-0.41.0/ceres/message.py +302 -0
  107. ceres_engine-0.41.0/ceres/node.py +389 -0
  108. ceres_engine-0.41.0/ceres/notifier.py +112 -0
  109. ceres_engine-0.41.0/ceres/particle.py +1172 -0
  110. ceres_engine-0.41.0/ceres/paths.py +65 -0
  111. ceres_engine-0.41.0/ceres/permission.py +377 -0
  112. ceres_engine-0.41.0/ceres/pruner.py +184 -0
  113. ceres_engine-0.41.0/ceres/py.typed +0 -0
  114. ceres_engine-0.41.0/ceres/record.py +62 -0
  115. ceres_engine-0.41.0/ceres/reference.py +618 -0
  116. ceres_engine-0.41.0/ceres/rtsp.py +432 -0
  117. ceres_engine-0.41.0/ceres/schedule.py +593 -0
  118. ceres_engine-0.41.0/ceres/server.py +337 -0
  119. ceres_engine-0.41.0/ceres/setting.py +191 -0
  120. ceres_engine-0.41.0/ceres/sieves.py +266 -0
  121. ceres_engine-0.41.0/ceres/static/console/assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuYjalmUiAw-BepdiOnY.woff +0 -0
  122. ceres_engine-0.41.0/ceres/static/console/assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuZtalmUiAw-4ZhHFPot.woff +0 -0
  123. ceres_engine-0.41.0/ceres/static/console/assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuaabVmUiAw-CNa4tw4G.woff +0 -0
  124. ceres_engine-0.41.0/ceres/static/console/assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWub2bVmUiAw-CHKg1YId.woff +0 -0
  125. ceres_engine-0.41.0/ceres/static/console/assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbFmUiAw-yBxCyPWP.woff +0 -0
  126. ceres_engine-0.41.0/ceres/static/console/assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAw-3fZ6d7DD.woff +0 -0
  127. ceres_engine-0.41.0/ceres/static/console/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa-Dr0goTwe.woff +0 -0
  128. ceres_engine-0.41.0/ceres/static/console/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-D-x-0Q06.woff2 +0 -0
  129. ceres_engine-0.41.0/ceres/static/console/assets/index-Do1oUNgW.js +66 -0
  130. ceres_engine-0.41.0/ceres/static/console/assets/index-DykqzvO_.css +5 -0
  131. ceres_engine-0.41.0/ceres/static/console/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
  132. ceres_engine-0.41.0/ceres/static/console/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
  133. ceres_engine-0.41.0/ceres/static/console/assets/roboto-mono-CBzSzcxG.ttf +0 -0
  134. ceres_engine-0.41.0/ceres/static/console/favicon.ico +0 -0
  135. ceres_engine-0.41.0/ceres/static/console/favicon.png +0 -0
  136. ceres_engine-0.41.0/ceres/static/console/favicon.svg +1 -0
  137. ceres_engine-0.41.0/ceres/static/console/index.html +3 -0
  138. ceres_engine-0.41.0/ceres/statistics.py +179 -0
  139. ceres_engine-0.41.0/ceres/status.py +34 -0
  140. ceres_engine-0.41.0/ceres/tasklet.py +214 -0
  141. ceres_engine-0.41.0/ceres/timing.py +228 -0
  142. ceres_engine-0.41.0/ceres/user.py +254 -0
  143. ceres_engine-0.41.0/ceres/variable.py +354 -0
  144. ceres_engine-0.41.0/ceres/version.py +28 -0
  145. ceres_engine-0.41.0/ceres/workspace.py +372 -0
  146. ceres_engine-0.41.0/ceres.__internal__.core.data/scripts/.keep +0 -0
  147. ceres_engine-0.41.0/docs/README.md +89 -0
  148. ceres_engine-0.41.0/pyproject.toml +194 -0
  149. ceres_engine-0.41.0/rust/Cargo.lock +5885 -0
  150. ceres_engine-0.41.0/rust/Cargo.toml +30 -0
  151. ceres_engine-0.41.0/rust/ceres-cli/Cargo.toml +51 -0
  152. ceres_engine-0.41.0/rust/ceres-cli/build.rs +37 -0
  153. ceres_engine-0.41.0/rust/ceres-cli/src/cli.rs +174 -0
  154. ceres_engine-0.41.0/rust/ceres-cli/src/client.rs +186 -0
  155. ceres_engine-0.41.0/rust/ceres-cli/src/commands/console.rs +82 -0
  156. ceres_engine-0.41.0/rust/ceres-cli/src/commands/dump.rs +1463 -0
  157. ceres_engine-0.41.0/rust/ceres-cli/src/commands/engine.rs +159 -0
  158. ceres_engine-0.41.0/rust/ceres-cli/src/commands/entities.rs +298 -0
  159. ceres_engine-0.41.0/rust/ceres-cli/src/commands/follow.rs +121 -0
  160. ceres_engine-0.41.0/rust/ceres-cli/src/commands/mod.rs +11 -0
  161. ceres_engine-0.41.0/rust/ceres-cli/src/commands/offline.rs +184 -0
  162. ceres_engine-0.41.0/rust/ceres-cli/src/commands/records.rs +266 -0
  163. ceres_engine-0.41.0/rust/ceres-cli/src/commands/service.rs +73 -0
  164. ceres_engine-0.41.0/rust/ceres-cli/src/commands/surface.rs +751 -0
  165. ceres_engine-0.41.0/rust/ceres-cli/src/error.rs +66 -0
  166. ceres_engine-0.41.0/rust/ceres-cli/src/highlight.rs +238 -0
  167. ceres_engine-0.41.0/rust/ceres-cli/src/main.rs +203 -0
  168. ceres_engine-0.41.0/rust/ceres-cli/src/output.rs +272 -0
  169. ceres_engine-0.41.0/rust/ceres-cli/src/project.rs +138 -0
  170. ceres_engine-0.41.0/rust/ceres-cli/src/reference.rs +78 -0
  171. ceres_engine-0.41.0/rust/ceres-cli/src/runtime.rs +102 -0
  172. ceres_engine-0.41.0/rust/ceres-cli/src/selector.rs +106 -0
  173. ceres_engine-0.41.0/rust/ceres-cli/src/service.rs +534 -0
  174. ceres_engine-0.41.0/rust/ceres-cli/tests/commands.rs +923 -0
  175. ceres_engine-0.41.0/rust/ceres-config/Cargo.toml +19 -0
  176. ceres_engine-0.41.0/rust/ceres-config/src/database.rs +631 -0
  177. ceres_engine-0.41.0/rust/ceres-config/src/error.rs +108 -0
  178. ceres_engine-0.41.0/rust/ceres-config/src/lib.rs +37 -0
  179. ceres_engine-0.41.0/rust/ceres-config/src/logging.rs +241 -0
  180. ceres_engine-0.41.0/rust/ceres-config/src/meta.rs +167 -0
  181. ceres_engine-0.41.0/rust/ceres-config/src/server.rs +473 -0
  182. ceres_engine-0.41.0/rust/ceres-config/src/types.rs +178 -0
  183. ceres_engine-0.41.0/rust/ceres-config/src/values.rs +450 -0
  184. ceres_engine-0.41.0/rust/ceres-core/Cargo.toml +49 -0
  185. ceres_engine-0.41.0/rust/ceres-core/build.rs +44 -0
  186. ceres_engine-0.41.0/rust/ceres-core/src/binary.rs +491 -0
  187. ceres_engine-0.41.0/rust/ceres-core/src/connection.rs +245 -0
  188. ceres_engine-0.41.0/rust/ceres-core/src/database.rs +265 -0
  189. ceres_engine-0.41.0/rust/ceres-core/src/entities.rs +290 -0
  190. ceres_engine-0.41.0/rust/ceres-core/src/filters.rs +279 -0
  191. ceres_engine-0.41.0/rust/ceres-core/src/interop.rs +249 -0
  192. ceres_engine-0.41.0/rust/ceres-core/src/lib.rs +204 -0
  193. ceres_engine-0.41.0/rust/ceres-core/src/logging.rs +207 -0
  194. ceres_engine-0.41.0/rust/ceres-core/src/server.rs +531 -0
  195. ceres_engine-0.41.0/rust/ceres-core/src/store.rs +319 -0
  196. ceres_engine-0.41.0/rust/ceres-core/src/writer.rs +292 -0
  197. ceres_engine-0.41.0/rust/ceres-database/Cargo.toml +59 -0
  198. ceres_engine-0.41.0/rust/ceres-database/src/assign.rs +446 -0
  199. ceres_engine-0.41.0/rust/ceres-database/src/backend.rs +762 -0
  200. ceres_engine-0.41.0/rust/ceres-database/src/credentials.rs +485 -0
  201. ceres_engine-0.41.0/rust/ceres-database/src/dynamic.rs +295 -0
  202. ceres_engine-0.41.0/rust/ceres-database/src/entities.rs +368 -0
  203. ceres_engine-0.41.0/rust/ceres-database/src/filter.rs +3711 -0
  204. ceres_engine-0.41.0/rust/ceres-database/src/lib.rs +39 -0
  205. ceres_engine-0.41.0/rust/ceres-database/src/load.rs +698 -0
  206. ceres_engine-0.41.0/rust/ceres-database/src/records.rs +447 -0
  207. ceres_engine-0.41.0/rust/ceres-database/src/selector.rs +410 -0
  208. ceres_engine-0.41.0/rust/ceres-database/src/store.rs +1195 -0
  209. ceres_engine-0.41.0/rust/ceres-database/src/turso.rs +1165 -0
  210. ceres_engine-0.41.0/rust/ceres-database/src/writer.rs +537 -0
  211. ceres_engine-0.41.0/rust/ceres-entities/Cargo.toml +22 -0
  212. ceres_engine-0.41.0/rust/ceres-entities/src/address.rs +106 -0
  213. ceres_engine-0.41.0/rust/ceres-entities/src/entities.rs +380 -0
  214. ceres_engine-0.41.0/rust/ceres-entities/src/filterable.rs +160 -0
  215. ceres_engine-0.41.0/rust/ceres-entities/src/lib.rs +34 -0
  216. ceres_engine-0.41.0/rust/ceres-entities/src/records.rs +715 -0
  217. ceres_engine-0.41.0/rust/ceres-entities/src/timestamp.rs +49 -0
  218. ceres_engine-0.41.0/rust/ceres-macros/Cargo.toml +18 -0
  219. ceres_engine-0.41.0/rust/ceres-macros/src/filterable.rs +296 -0
  220. ceres_engine-0.41.0/rust/ceres-macros/src/kebab.rs +35 -0
  221. ceres_engine-0.41.0/rust/ceres-macros/src/lib.rs +92 -0
  222. ceres_engine-0.41.0/rust/ceres-macros/src/python_config.rs +486 -0
  223. ceres_engine-0.41.0/rust/ceres-server/Cargo.toml +66 -0
  224. ceres_engine-0.41.0/rust/ceres-server/src/api/auth.rs +214 -0
  225. ceres_engine-0.41.0/rust/ceres-server/src/api/config.rs +49 -0
  226. ceres_engine-0.41.0/rust/ceres-server/src/api/dispatch.rs +396 -0
  227. ceres_engine-0.41.0/rust/ceres-server/src/api/mod.rs +81 -0
  228. ceres_engine-0.41.0/rust/ceres-server/src/api/records.rs +155 -0
  229. ceres_engine-0.41.0/rust/ceres-server/src/api/schema.rs +148 -0
  230. ceres_engine-0.41.0/rust/ceres-server/src/api/served.rs +250 -0
  231. ceres_engine-0.41.0/rust/ceres-server/src/api/streams.rs +182 -0
  232. ceres_engine-0.41.0/rust/ceres-server/src/app.rs +365 -0
  233. ceres_engine-0.41.0/rust/ceres-server/src/auth.rs +344 -0
  234. ceres_engine-0.41.0/rust/ceres-server/src/body.rs +144 -0
  235. ceres_engine-0.41.0/rust/ceres-server/src/cookie.rs +87 -0
  236. ceres_engine-0.41.0/rust/ceres-server/src/error.rs +156 -0
  237. ceres_engine-0.41.0/rust/ceres-server/src/host.rs +252 -0
  238. ceres_engine-0.41.0/rust/ceres-server/src/layers.rs +283 -0
  239. ceres_engine-0.41.0/rust/ceres-server/src/lib.rs +904 -0
  240. ceres_engine-0.41.0/rust/ceres-server/src/scrub.rs +60 -0
  241. ceres_engine-0.41.0/rust/ceres-server/src/serve.rs +150 -0
  242. ceres_engine-0.41.0/rust/ceres-server/src/tls.rs +214 -0
  243. ceres_engine-0.41.0/rust-toolchain.toml +9 -0
@@ -0,0 +1,41 @@
1
+ # This file sits at the repository root rather than beside the workspace, because cargo looks
2
+ # for it by walking up from the directory it was invoked in. Builds start from both places,
3
+ # the root when maturin builds the extension module and `rust/` for everything else, and only
4
+ # a root copy is found from both.
5
+
6
+ # Build artifacts stay inside the workspace's target/, the only directory `cargo clean`,
7
+ # .gitignore, and CI's cache all cover. The path resolves against this file's directory, so
8
+ # it names `rust/` rather than landing beside it.
9
+ [build]
10
+ build-dir = "rust/target/build"
11
+
12
+ # The parallel rustc frontend, which the pinned nightly provides. This sits under a `cfg`
13
+ # rather than under `[build]`, because `build.rustflags` is dropped entirely wherever a
14
+ # `target` block sets its own, while `cfg` and triple blocks combine.
15
+ [target.'cfg(all())']
16
+ rustflags = ["-Zthreads=4"]
17
+
18
+ # Compile the extension module and regenerate its Python type stubs in one step. `make fix`
19
+ # and `make build` run this too, and CI fails when committed stubs drift.
20
+ [alias]
21
+ stubs = "build -p ceres-stubs"
22
+
23
+ # Artifact dependencies, which `ceres-core` uses to build the native CLI binary alongside
24
+ # the extension module and stage it into the wheel. Unstable, which the pinned nightly in
25
+ # rust-toolchain.toml accounts for.
26
+ [unstable]
27
+ bindeps = true
28
+
29
+ # The bundled SQLite compiles with math functions, which the subsampling SQL's `floor`
30
+ # needs. CPython's own SQLite ships them, so the native engine has to match.
31
+ [env]
32
+ LIBSQLITE3_FLAGS = "-DSQLITE_ENABLE_MATH_FUNCTIONS"
33
+
34
+ # Python extension modules leave interpreter symbols unresolved until import time, so the
35
+ # linker has to be told to allow that. Maturin does not pass these itself, and without them
36
+ # the extension fails to link on macOS with "symbol(s) not found for architecture arm64".
37
+ [target.aarch64-apple-darwin]
38
+ rustflags = ["-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup"]
39
+
40
+ [target.x86_64-apple-darwin]
41
+ rustflags = ["-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup"]
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Applied Physics Laboratory - University of Washington
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,122 @@
1
+ Metadata-Version: 2.4
2
+ Name: ceres-engine
3
+ Version: 0.41.0
4
+ Requires-Dist: aiosmtplib>=5.1,<6
5
+ Requires-Dist: anyio>=4.13,<5
6
+ Requires-Dist: apscheduler>=3.11.2,<4
7
+ Requires-Dist: asgiref>=3.11.1,<4
8
+ Requires-Dist: jinja2>=3.1,<4
9
+ Requires-Dist: mistune>=3.2,<4
10
+ Requires-Dist: objsize>=0.8.0
11
+ Requires-Dist: pydantic-extra-types>=2.11,<3
12
+ Requires-Dist: pydantic-settings>=2.13.1,<3
13
+ Requires-Dist: pydantic>=2.12.5,<3
14
+ Requires-Dist: pyjwt>=2.11,<3
15
+ Requires-Dist: pyyaml>=6,<7
16
+ Requires-Dist: rich>=14.3.2,<15
17
+ Requires-Dist: setproctitle>=1.3.7,<2
18
+ Requires-Dist: typing-extensions>=4.15.0
19
+ Requires-Dist: uuid-utils>=0.14.1
20
+ Requires-Dist: uvloop>=0.22.1 ; platform_system == 'Darwin' or platform_system == 'Linux'
21
+ Requires-Dist: watchfiles>=1.1.1,<2
22
+ Requires-Dist: starlette>=1,<2
23
+ License-File: LICENSE
24
+ Summary: A Python framework for data collection, monitoring and device control.
25
+ Author-email: Jake Ploskey <jploskey@uw.edu>
26
+ License-Expression: MIT
27
+ Requires-Python: >=3.14
28
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
29
+ Project-URL: Changelog, https://github.com/OOI-RCA-APL/ceres/blob/main/CHANGELOG.md
30
+ Project-URL: Documentation, https://ooi-rca-apl.github.io/ceres/
31
+ Project-URL: Source, https://github.com/OOI-RCA-APL/ceres
32
+
33
+ # Ceres
34
+
35
+ <!-- coverage:badge -->
36
+ ![Python Coverage: 87%](https://img.shields.io/badge/python%20coverage-87%25-yellowgreen)
37
+ ![Rust Coverage: 72%](https://img.shields.io/badge/rust%20coverage-72%25-yellow)
38
+ <!-- /coverage:badge -->
39
+
40
+ Ceres is a Python framework for building data collection, monitoring, and device control systems. It takes ideas from service management tools like Docker and SystemD, scales them down, and applies them to Python objects called _components_.
41
+
42
+ Components are async Python classes that run concurrently, communicate through events, and persist their state in a database. They can connect to remote instruments over TCP, parse incoming data into structured records, emit alerts, and be managed through a CLI or web console.
43
+
44
+ ![architecture](https://ooi-rca-apl.github.io/ceres/images/architecture.png)
45
+
46
+ ## Where Ceres Is Used
47
+
48
+ Ceres was built at the University of Washington Applied Physics Laboratory (APL) to power instrument drivers for the [Ocean Observatories Initiative (OOI)](https://oceanobservatories.org/) Regional Cabled Array (RCA). Ceres runs on Linux, macOS, and Windows. In its current production deployment, it runs on physical Linux servers connected to oceanographic instruments (acoustic current profilers, pressure gauges, pH sensors, etc.), collecting and processing real-time data streams over TCP.
49
+
50
+ That said, Ceres is a general-purpose framework. It can manage any collection of async Python components that need lifecycle control, event handling, scheduling, and persistence.
51
+
52
+ ## Quick Example
53
+
54
+ ```python
55
+ from ceres import Component, routine, sleep
56
+
57
+
58
+ class Counter(Component):
59
+ initial: int
60
+ delta: int = 1
61
+
62
+ @routine
63
+ async def count(self) -> None:
64
+ count = self.initial
65
+ while True:
66
+ self.system.log.info(count)
67
+ await sleep(1)
68
+ count += self.delta
69
+ ```
70
+
71
+ ```yaml
72
+ # ceres.yaml
73
+ database:
74
+ type: sqlite
75
+ path: ./database.sqlite
76
+
77
+ components:
78
+ - name: counter-a
79
+ class: counter.Counter
80
+ arguments:
81
+ initial: 5
82
+ - name: counter-b
83
+ class: counter.Counter
84
+ arguments:
85
+ initial: 100
86
+ delta: -5
87
+ ```
88
+
89
+ ```sh
90
+ ceres run all # Run both components in the foreground.
91
+ ceres service start # Or run as a background service.
92
+ ceres status # Check engine and component states.
93
+ ceres start all # Start all components.
94
+ ceres enable all # Auto-start components on engine startup.
95
+ ceres service stop # Stop the background service.
96
+ ```
97
+
98
+ ## Documentation
99
+
100
+ The documentation is published at
101
+ [ooi-rca-apl.github.io/ceres](https://ooi-rca-apl.github.io/ceres/).
102
+
103
+ Start here:
104
+
105
+ - [Installing](https://ooi-rca-apl.github.io/ceres/installing/): Install Ceres and set up a project.
106
+ - [Getting Started](https://ooi-rca-apl.github.io/ceres/getting-started/): Build your first Ceres project from scratch.
107
+ - [Components](https://ooi-rca-apl.github.io/ceres/components/): The core abstraction, routines, events, records.
108
+ - [Connections](https://ooi-rca-apl.github.io/ceres/connections/): Connect to remote instruments and parse data.
109
+ - [Writing a Driver](https://ooi-rca-apl.github.io/ceres/writing-a-driver/): Build an instrument driver end to end.
110
+ - [Deployment](https://ooi-rca-apl.github.io/ceres/deployment/): Run Ceres as a production service.
111
+
112
+ Reference, generated from the code and checked in CI:
113
+
114
+ - [Configuration](https://ooi-rca-apl.github.io/ceres/reference/configuration/): Every `ceres.yaml` key.
115
+ - [CLI](https://ooi-rca-apl.github.io/ceres/reference/cli/): Every command and option.
116
+ - [HTTP API](https://ooi-rca-apl.github.io/ceres/reference/http-api/): Every route the engine serves.
117
+ - [Python API](https://ooi-rca-apl.github.io/ceres/reference/python-api/): Every name `ceres` exports.
118
+
119
+ Contributing:
120
+
121
+ - [Development](https://ooi-rca-apl.github.io/ceres/development/): Set up a dev environment and contribute to Ceres.
122
+
@@ -0,0 +1,232 @@
1
+ __all__ = [
2
+ # .cli
3
+ "main",
4
+ # .address
5
+ "Address",
6
+ "AddressSelector",
7
+ "DynamicAddress",
8
+ # .alert
9
+ "Alert",
10
+ # .channel
11
+ "Channel",
12
+ "ChannelReader",
13
+ "OutputChannel",
14
+ # .concurrency
15
+ "cancel",
16
+ "concurrently",
17
+ "sleep",
18
+ "spawn",
19
+ # .component
20
+ "Bound",
21
+ "Component",
22
+ "ComponentAccessLevel",
23
+ "ComponentSystem",
24
+ "Output",
25
+ "FileOutput",
26
+ "ProcedureType",
27
+ "StreamingOutput",
28
+ "action",
29
+ "listener",
30
+ "query",
31
+ "routine",
32
+ "sieve",
33
+ # .config
34
+ "Config",
35
+ "ConfigCheckType",
36
+ # .connection
37
+ "Buffer",
38
+ "Chunk",
39
+ "Connection",
40
+ "ConnectionException",
41
+ "ConnectionField",
42
+ "ConnectionInactive",
43
+ "ConnectionLost",
44
+ "SplitByChunk",
45
+ "SplitByDelay",
46
+ "SplitByLine",
47
+ "SplitByRegex",
48
+ "Splitter",
49
+ "TCPSource",
50
+ "UNIXSocketSource",
51
+ "Unsplit",
52
+ # .connectivity
53
+ "Connectivity",
54
+ # .data
55
+ "DataObject",
56
+ # .database
57
+ "Database",
58
+ "DatabaseType",
59
+ # .directory
60
+ "Directory",
61
+ # .dispatcher
62
+ "Dispatch",
63
+ "DispatchWriter",
64
+ "Dispatcher",
65
+ "HTMLDispatchWriter",
66
+ # .engine
67
+ "Engine",
68
+ # .entity
69
+ "Entity",
70
+ "EntityType",
71
+ # .event
72
+ "Event",
73
+ "StandardEvent",
74
+ # .group
75
+ "Group",
76
+ "GroupMembership",
77
+ # .item
78
+ "Item",
79
+ "ItemType",
80
+ # .level
81
+ "Level",
82
+ # .loaded
83
+ "Loaded",
84
+ "Loader",
85
+ # .logs
86
+ "LogEntry",
87
+ # .message
88
+ "Message",
89
+ "MessageData",
90
+ "MessageDirection",
91
+ # .notifier
92
+ "Notification",
93
+ "Notifier",
94
+ "SMTPNotifier",
95
+ # .particle
96
+ "BinaryParticle",
97
+ "BinaryRegexParticle",
98
+ "DynamicParticleData",
99
+ "ParseableParticle",
100
+ "ParseFailed",
101
+ "Particle",
102
+ "ParticleData",
103
+ "RegexParticle",
104
+ "GroupedRegexParticle",
105
+ # .permission
106
+ "GroupPermission",
107
+ "PermissionTargetType",
108
+ "UserPermission",
109
+ # .record
110
+ "Record",
111
+ "RecordType",
112
+ # .reference
113
+ "Ref",
114
+ "Reference",
115
+ "unref",
116
+ # .schedule
117
+ "Schedule",
118
+ "ScheduleType",
119
+ # .server
120
+ "Client",
121
+ "Server",
122
+ "TCPClient",
123
+ "TCPServer",
124
+ "UNIXSocketClient",
125
+ "UNIXSocketServer",
126
+ # .setting
127
+ "Setting",
128
+ # .sieve
129
+ "Sieve",
130
+ # .statistics
131
+ "Statistics",
132
+ # .status
133
+ "Status",
134
+ # .timing
135
+ "utc",
136
+ # .user
137
+ "User",
138
+ # .variable
139
+ "Variable",
140
+ # .version
141
+ "__version__",
142
+ "Workspace",
143
+ ]
144
+
145
+ from ceres.__internal__.lazy import __lazy_imports__
146
+
147
+ with __lazy_imports__(__name__, export=True):
148
+ from ceres.__internal__.cli.main import main
149
+ from ceres.address import Address, AddressSelector, DynamicAddress
150
+ from ceres.alert import Alert
151
+ from ceres.channel import Channel, ChannelReader, OutputChannel
152
+ from ceres.component import (
153
+ Bound,
154
+ Component,
155
+ ComponentAccessLevel,
156
+ ComponentSystem,
157
+ FileOutput,
158
+ Output,
159
+ ProcedureType,
160
+ StreamingOutput,
161
+ action,
162
+ listener,
163
+ query,
164
+ routine,
165
+ sieve,
166
+ )
167
+ from ceres.concurrency import cancel, concurrently, sleep, spawn
168
+ from ceres.config import Config, ConfigCheckType
169
+ from ceres.connection import (
170
+ Buffer,
171
+ Chunk,
172
+ Connection,
173
+ ConnectionException,
174
+ ConnectionField,
175
+ ConnectionInactive,
176
+ ConnectionLost,
177
+ SplitByChunk,
178
+ SplitByDelay,
179
+ SplitByLine,
180
+ SplitByRegex,
181
+ Splitter,
182
+ TCPSource,
183
+ UNIXSocketSource,
184
+ Unsplit,
185
+ )
186
+ from ceres.connectivity import Connectivity
187
+ from ceres.data import DataObject
188
+ from ceres.database import Database, DatabaseType
189
+ from ceres.directory import Directory
190
+ from ceres.dispatcher import Dispatch, Dispatcher, DispatchWriter, HTMLDispatchWriter
191
+ from ceres.engine import Engine
192
+ from ceres.entity import Entity, EntityType
193
+ from ceres.event import Event, StandardEvent
194
+ from ceres.group import Group, GroupMembership
195
+ from ceres.item import Item, ItemType
196
+ from ceres.level import Level
197
+ from ceres.loaded import Loaded, Loader
198
+ from ceres.logs import LogEntry
199
+ from ceres.message import Message, MessageData, MessageDirection
200
+ from ceres.notifier import Notification, Notifier, SMTPNotifier
201
+ from ceres.particle import (
202
+ BinaryParticle,
203
+ BinaryRegexParticle,
204
+ DynamicParticleData,
205
+ GroupedRegexParticle,
206
+ ParseableParticle,
207
+ ParseFailed,
208
+ Particle,
209
+ ParticleData,
210
+ RegexParticle,
211
+ )
212
+ from ceres.permission import GroupPermission, PermissionTargetType, UserPermission
213
+ from ceres.record import Record, RecordType
214
+ from ceres.reference import Ref, Reference, unref
215
+ from ceres.schedule import Schedule, ScheduleType
216
+ from ceres.server import (
217
+ Client,
218
+ Server,
219
+ TCPClient,
220
+ TCPServer,
221
+ UNIXSocketClient,
222
+ UNIXSocketServer,
223
+ )
224
+ from ceres.setting import Setting
225
+ from ceres.sieves import Sieve
226
+ from ceres.statistics import Statistics
227
+ from ceres.status import Status
228
+ from ceres.timing import utc
229
+ from ceres.user import User
230
+ from ceres.variable import Variable
231
+ from ceres.version import __version__
232
+ from ceres.workspace import Workspace
File without changes
@@ -0,0 +1,5 @@
1
+ """The API's engine-side operations.
2
+
3
+ The native server owns HTTP and reaches the engine through `host.Host`, whose named
4
+ operations live in `operations` and whose logic lives in `handlers`.
5
+ """
@@ -0,0 +1,6 @@
1
+ """Engine operations behind the API's routes.
2
+
3
+ Each module holds the logic one route family needs, free of any transport concern. The
4
+ native server reaches them through the host's named operations, and the tests exercise
5
+ them directly.
6
+ """