strider-framework 0.17.62__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 (266) hide show
  1. strider_framework-0.17.62/.gitignore +146 -0
  2. strider_framework-0.17.62/PKG-INFO +416 -0
  3. strider_framework-0.17.62/README.md +345 -0
  4. strider_framework-0.17.62/docs/01-quickstart.md +227 -0
  5. strider_framework-0.17.62/docs/02-settings.md +799 -0
  6. strider_framework-0.17.62/docs/03-models.md +157 -0
  7. strider_framework-0.17.62/docs/04-viewsets.md +257 -0
  8. strider_framework-0.17.62/docs/05-auth.md +361 -0
  9. strider_framework-0.17.62/docs/06-auth-backends.md +204 -0
  10. strider_framework-0.17.62/docs/07-cli.md +195 -0
  11. strider_framework-0.17.62/docs/08-permissions.md +289 -0
  12. strider_framework-0.17.62/docs/10-fields.md +349 -0
  13. strider_framework-0.17.62/docs/11-relations.md +324 -0
  14. strider_framework-0.17.62/docs/12-querysets.md +363 -0
  15. strider_framework-0.17.62/docs/13-serializers.md +286 -0
  16. strider_framework-0.17.62/docs/14-validators.md +406 -0
  17. strider_framework-0.17.62/docs/20-middleware.md +362 -0
  18. strider_framework-0.17.62/docs/21-replicas.md +277 -0
  19. strider_framework-0.17.62/docs/22-soft-delete.md +248 -0
  20. strider_framework-0.17.62/docs/23-routing.md +240 -0
  21. strider_framework-0.17.62/docs/24-dependencies.md +307 -0
  22. strider_framework-0.17.62/docs/25-realtime.md +521 -0
  23. strider_framework-0.17.62/docs/30-messaging.md +496 -0
  24. strider_framework-0.17.62/docs/31-workers.md +370 -0
  25. strider_framework-0.17.62/docs/32-tenancy.md +357 -0
  26. strider_framework-0.17.62/docs/33-choices.md +299 -0
  27. strider_framework-0.17.62/docs/34-exceptions.md +311 -0
  28. strider_framework-0.17.62/docs/35-datetime.md +332 -0
  29. strider_framework-0.17.62/docs/36-security.md +379 -0
  30. strider_framework-0.17.62/docs/37-storage.md +346 -0
  31. strider_framework-0.17.62/docs/40-admin.md +442 -0
  32. strider_framework-0.17.62/docs/41-migrations.md +164 -0
  33. strider_framework-0.17.62/docs/99-faq-troubleshooting.md +1067 -0
  34. strider_framework-0.17.62/docs/CHANGELOG.md +55 -0
  35. strider_framework-0.17.62/docs/README.md +341 -0
  36. strider_framework-0.17.62/libs/__init__.py +0 -0
  37. strider_framework-0.17.62/main.py +24 -0
  38. strider_framework-0.17.62/publish.sh +163 -0
  39. strider_framework-0.17.62/pyproject.toml +142 -0
  40. strider_framework-0.17.62/strider/__init__.py +629 -0
  41. strider_framework-0.17.62/strider/__main__.py +16 -0
  42. strider_framework-0.17.62/strider/admin/__init__.py +132 -0
  43. strider_framework-0.17.62/strider/admin/_typing.py +92 -0
  44. strider_framework-0.17.62/strider/admin/collectstatic.py +202 -0
  45. strider_framework-0.17.62/strider/admin/defaults.py +238 -0
  46. strider_framework-0.17.62/strider/admin/discovery.py +167 -0
  47. strider_framework-0.17.62/strider/admin/event_tracking.py +197 -0
  48. strider_framework-0.17.62/strider/admin/exceptions.py +231 -0
  49. strider_framework-0.17.62/strider/admin/infrastructure.py +429 -0
  50. strider_framework-0.17.62/strider/admin/log_handler.py +241 -0
  51. strider_framework-0.17.62/strider/admin/middleware.py +148 -0
  52. strider_framework-0.17.62/strider/admin/models.py +531 -0
  53. strider_framework-0.17.62/strider/admin/ops_views.py +1818 -0
  54. strider_framework-0.17.62/strider/admin/options.py +1023 -0
  55. strider_framework-0.17.62/strider/admin/permissions.py +174 -0
  56. strider_framework-0.17.62/strider/admin/resource_inventory.py +183 -0
  57. strider_framework-0.17.62/strider/admin/router.py +511 -0
  58. strider_framework-0.17.62/strider/admin/serializers.py +265 -0
  59. strider_framework-0.17.62/strider/admin/site.py +314 -0
  60. strider_framework-0.17.62/strider/admin/static/stride-admin/css/admin.css +45 -0
  61. strider_framework-0.17.62/strider/admin/static/stride-admin/js/admin.js +26 -0
  62. strider_framework-0.17.62/strider/admin/templates/admin/base.html +666 -0
  63. strider_framework-0.17.62/strider/admin/templates/admin/dashboard.html +265 -0
  64. strider_framework-0.17.62/strider/admin/templates/admin/detail.html +2794 -0
  65. strider_framework-0.17.62/strider/admin/templates/admin/list.html +450 -0
  66. strider_framework-0.17.62/strider/admin/templates/admin/login.html +216 -0
  67. strider_framework-0.17.62/strider/admin/templates/admin/ops/dashboard.html +285 -0
  68. strider_framework-0.17.62/strider/admin/templates/admin/ops/events.html +569 -0
  69. strider_framework-0.17.62/strider/admin/templates/admin/ops/infrastructure.html +245 -0
  70. strider_framework-0.17.62/strider/admin/templates/admin/ops/kafka.html +1066 -0
  71. strider_framework-0.17.62/strider/admin/templates/admin/ops/logs.html +186 -0
  72. strider_framework-0.17.62/strider/admin/templates/admin/ops/tasks.html +515 -0
  73. strider_framework-0.17.62/strider/admin/templates/admin/ops/workers.html +309 -0
  74. strider_framework-0.17.62/strider/admin/types.py +299 -0
  75. strider_framework-0.17.62/strider/admin/views.py +1699 -0
  76. strider_framework-0.17.62/strider/admin/ws_events.py +174 -0
  77. strider_framework-0.17.62/strider/app.py +934 -0
  78. strider_framework-0.17.62/strider/auth/__init__.py +217 -0
  79. strider_framework-0.17.62/strider/auth/backends.py +354 -0
  80. strider_framework-0.17.62/strider/auth/base.py +851 -0
  81. strider_framework-0.17.62/strider/auth/decorators.py +464 -0
  82. strider_framework-0.17.62/strider/auth/hashers.py +420 -0
  83. strider_framework-0.17.62/strider/auth/helpers.py +104 -0
  84. strider_framework-0.17.62/strider/auth/middleware.py +473 -0
  85. strider_framework-0.17.62/strider/auth/models.py +1082 -0
  86. strider_framework-0.17.62/strider/auth/permissions.py +402 -0
  87. strider_framework-0.17.62/strider/auth/schemas.py +139 -0
  88. strider_framework-0.17.62/strider/auth/tokens.py +327 -0
  89. strider_framework-0.17.62/strider/auth/views.py +607 -0
  90. strider_framework-0.17.62/strider/choices.py +383 -0
  91. strider_framework-0.17.62/strider/cli/__init__.py +19 -0
  92. strider_framework-0.17.62/strider/cli/interactive.py +517 -0
  93. strider_framework-0.17.62/strider/cli/main.py +3753 -0
  94. strider_framework-0.17.62/strider/cli/project_init.py +103 -0
  95. strider_framework-0.17.62/strider/cli/templates/__init__.py +174 -0
  96. strider_framework-0.17.62/strider/cli/templates/default/.env.template +12 -0
  97. strider_framework-0.17.62/strider/cli/templates/default/.gitignore.template +19 -0
  98. strider_framework-0.17.62/strider/cli/templates/default/pyproject.toml.template +22 -0
  99. strider_framework-0.17.62/strider/cli/templates/default/src/__init__.py.template +1 -0
  100. strider_framework-0.17.62/strider/cli/templates/default/src/apps/__init__.py.template +1 -0
  101. strider_framework-0.17.62/strider/cli/templates/default/src/apps/models.py.template +2 -0
  102. strider_framework-0.17.62/strider/cli/templates/default/src/apps/users/__init__.py.template +1 -0
  103. strider_framework-0.17.62/strider/cli/templates/default/src/apps/users/models.py.template +21 -0
  104. strider_framework-0.17.62/strider/cli/templates/default/src/apps/users/urls.py.template +9 -0
  105. strider_framework-0.17.62/strider/cli/templates/default/src/apps/users/views.py.template +13 -0
  106. strider_framework-0.17.62/strider/cli/templates/default/src/main.py.template +4 -0
  107. strider_framework-0.17.62/strider/cli/templates/default/src/models.py.template +2 -0
  108. strider_framework-0.17.62/strider/cli/templates/default/src/settings.py.template +30 -0
  109. strider_framework-0.17.62/strider/cli/templates/kafka/.env.template +16 -0
  110. strider_framework-0.17.62/strider/cli/templates/kafka/.gitignore.template +19 -0
  111. strider_framework-0.17.62/strider/cli/templates/kafka/docker-compose.yml.template +42 -0
  112. strider_framework-0.17.62/strider/cli/templates/kafka/pyproject.toml.template +24 -0
  113. strider_framework-0.17.62/strider/cli/templates/kafka/src/__init__.py.template +1 -0
  114. strider_framework-0.17.62/strider/cli/templates/kafka/src/apps/__init__.py.template +1 -0
  115. strider_framework-0.17.62/strider/cli/templates/kafka/src/apps/events/__init__.py.template +1 -0
  116. strider_framework-0.17.62/strider/cli/templates/kafka/src/apps/events/consumers.py.template +19 -0
  117. strider_framework-0.17.62/strider/cli/templates/kafka/src/apps/events/models.py.template +18 -0
  118. strider_framework-0.17.62/strider/cli/templates/kafka/src/apps/events/producers.py.template +20 -0
  119. strider_framework-0.17.62/strider/cli/templates/kafka/src/apps/events/urls.py.template +7 -0
  120. strider_framework-0.17.62/strider/cli/templates/kafka/src/apps/events/views.py.template +22 -0
  121. strider_framework-0.17.62/strider/cli/templates/kafka/src/apps/models.py.template +2 -0
  122. strider_framework-0.17.62/strider/cli/templates/kafka/src/main.py.template +4 -0
  123. strider_framework-0.17.62/strider/cli/templates/kafka/src/models.py.template +2 -0
  124. strider_framework-0.17.62/strider/cli/templates/kafka/src/settings.py.template +37 -0
  125. strider_framework-0.17.62/strider/cli/templates/minimal/.env.template +11 -0
  126. strider_framework-0.17.62/strider/cli/templates/minimal/.gitignore.template +19 -0
  127. strider_framework-0.17.62/strider/cli/templates/minimal/pyproject.toml.template +22 -0
  128. strider_framework-0.17.62/strider/cli/templates/minimal/src/__init__.py.template +1 -0
  129. strider_framework-0.17.62/strider/cli/templates/minimal/src/apps/__init__.py.template +1 -0
  130. strider_framework-0.17.62/strider/cli/templates/minimal/src/apps/items/__init__.py.template +1 -0
  131. strider_framework-0.17.62/strider/cli/templates/minimal/src/apps/items/models.py.template +17 -0
  132. strider_framework-0.17.62/strider/cli/templates/minimal/src/apps/items/urls.py.template +7 -0
  133. strider_framework-0.17.62/strider/cli/templates/minimal/src/apps/items/views.py.template +12 -0
  134. strider_framework-0.17.62/strider/cli/templates/minimal/src/apps/models.py.template +2 -0
  135. strider_framework-0.17.62/strider/cli/templates/minimal/src/apps/users/__init__.py.template +1 -0
  136. strider_framework-0.17.62/strider/cli/templates/minimal/src/apps/users/models.py.template +10 -0
  137. strider_framework-0.17.62/strider/cli/templates/minimal/src/main.py.template +4 -0
  138. strider_framework-0.17.62/strider/cli/templates/minimal/src/models.py.template +2 -0
  139. strider_framework-0.17.62/strider/cli/templates/minimal/src/settings.py.template +26 -0
  140. strider_framework-0.17.62/strider/cli/templates/tenant/.env.template +14 -0
  141. strider_framework-0.17.62/strider/cli/templates/tenant/.gitignore.template +19 -0
  142. strider_framework-0.17.62/strider/cli/templates/tenant/docker-compose.yml.template +19 -0
  143. strider_framework-0.17.62/strider/cli/templates/tenant/pyproject.toml.template +22 -0
  144. strider_framework-0.17.62/strider/cli/templates/tenant/src/__init__.py.template +1 -0
  145. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/__init__.py.template +1 -0
  146. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/items/__init__.py.template +1 -0
  147. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/items/models.py.template +19 -0
  148. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/items/urls.py.template +7 -0
  149. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/items/views.py.template +18 -0
  150. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/models.py.template +3 -0
  151. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/tenants/__init__.py.template +1 -0
  152. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/tenants/models.py.template +17 -0
  153. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/tenants/urls.py.template +7 -0
  154. strider_framework-0.17.62/strider/cli/templates/tenant/src/apps/tenants/views.py.template +13 -0
  155. strider_framework-0.17.62/strider/cli/templates/tenant/src/main.py.template +4 -0
  156. strider_framework-0.17.62/strider/cli/templates/tenant/src/models.py.template +2 -0
  157. strider_framework-0.17.62/strider/cli/templates/tenant/src/settings.py.template +35 -0
  158. strider_framework-0.17.62/strider/cli/templates/workers/.env.template +18 -0
  159. strider_framework-0.17.62/strider/cli/templates/workers/.gitignore.template +19 -0
  160. strider_framework-0.17.62/strider/cli/templates/workers/docker-compose.yml.template +24 -0
  161. strider_framework-0.17.62/strider/cli/templates/workers/pyproject.toml.template +23 -0
  162. strider_framework-0.17.62/strider/cli/templates/workers/src/__init__.py.template +1 -0
  163. strider_framework-0.17.62/strider/cli/templates/workers/src/apps/__init__.py.template +1 -0
  164. strider_framework-0.17.62/strider/cli/templates/workers/src/apps/models.py.template +2 -0
  165. strider_framework-0.17.62/strider/cli/templates/workers/src/apps/tasks/__init__.py.template +1 -0
  166. strider_framework-0.17.62/strider/cli/templates/workers/src/apps/tasks/models.py.template +32 -0
  167. strider_framework-0.17.62/strider/cli/templates/workers/src/apps/tasks/urls.py.template +7 -0
  168. strider_framework-0.17.62/strider/cli/templates/workers/src/apps/tasks/views.py.template +54 -0
  169. strider_framework-0.17.62/strider/cli/templates/workers/src/apps/tasks/workers.py.template +23 -0
  170. strider_framework-0.17.62/strider/cli/templates/workers/src/main.py.template +4 -0
  171. strider_framework-0.17.62/strider/cli/templates/workers/src/models.py.template +2 -0
  172. strider_framework-0.17.62/strider/cli/templates/workers/src/settings.py.template +40 -0
  173. strider_framework-0.17.62/strider/config.py +1884 -0
  174. strider_framework-0.17.62/strider/database.py +443 -0
  175. strider_framework-0.17.62/strider/datetime.py +1271 -0
  176. strider_framework-0.17.62/strider/dependencies.py +452 -0
  177. strider_framework-0.17.62/strider/deployment/__init__.py +29 -0
  178. strider_framework-0.17.62/strider/deployment/docker.py +361 -0
  179. strider_framework-0.17.62/strider/deployment/kubernetes.py +361 -0
  180. strider_framework-0.17.62/strider/deployment/pm2.py +143 -0
  181. strider_framework-0.17.62/strider/exceptions.py +791 -0
  182. strider_framework-0.17.62/strider/fields.py +679 -0
  183. strider_framework-0.17.62/strider/messaging/__init__.py +157 -0
  184. strider_framework-0.17.62/strider/messaging/avro.py +435 -0
  185. strider_framework-0.17.62/strider/messaging/base.py +439 -0
  186. strider_framework-0.17.62/strider/messaging/config.py +69 -0
  187. strider_framework-0.17.62/strider/messaging/confluent/__init__.py +75 -0
  188. strider_framework-0.17.62/strider/messaging/confluent/admin.py +762 -0
  189. strider_framework-0.17.62/strider/messaging/confluent/broker.py +251 -0
  190. strider_framework-0.17.62/strider/messaging/confluent/consumer.py +199 -0
  191. strider_framework-0.17.62/strider/messaging/confluent/producer.py +243 -0
  192. strider_framework-0.17.62/strider/messaging/decorators.py +280 -0
  193. strider_framework-0.17.62/strider/messaging/kafka/__init__.py +56 -0
  194. strider_framework-0.17.62/strider/messaging/kafka/admin.py +647 -0
  195. strider_framework-0.17.62/strider/messaging/kafka/broker.py +230 -0
  196. strider_framework-0.17.62/strider/messaging/kafka/consumer.py +215 -0
  197. strider_framework-0.17.62/strider/messaging/kafka/producer.py +193 -0
  198. strider_framework-0.17.62/strider/messaging/rabbitmq/__init__.py +26 -0
  199. strider_framework-0.17.62/strider/messaging/rabbitmq/broker.py +181 -0
  200. strider_framework-0.17.62/strider/messaging/rabbitmq/consumer.py +121 -0
  201. strider_framework-0.17.62/strider/messaging/rabbitmq/producer.py +79 -0
  202. strider_framework-0.17.62/strider/messaging/redis/__init__.py +60 -0
  203. strider_framework-0.17.62/strider/messaging/redis/broker.py +178 -0
  204. strider_framework-0.17.62/strider/messaging/redis/connection.py +232 -0
  205. strider_framework-0.17.62/strider/messaging/redis/consumer.py +157 -0
  206. strider_framework-0.17.62/strider/messaging/redis/producer.py +76 -0
  207. strider_framework-0.17.62/strider/messaging/registry.py +431 -0
  208. strider_framework-0.17.62/strider/messaging/topics.py +232 -0
  209. strider_framework-0.17.62/strider/messaging/tracking.py +124 -0
  210. strider_framework-0.17.62/strider/messaging/workers.py +950 -0
  211. strider_framework-0.17.62/strider/middleware.py +815 -0
  212. strider_framework-0.17.62/strider/migrations/__init__.py +97 -0
  213. strider_framework-0.17.62/strider/migrations/__main__.py +19 -0
  214. strider_framework-0.17.62/strider/migrations/analyzer.py +713 -0
  215. strider_framework-0.17.62/strider/migrations/cli.py +447 -0
  216. strider_framework-0.17.62/strider/migrations/dialects/__init__.py +95 -0
  217. strider_framework-0.17.62/strider/migrations/dialects/base.py +196 -0
  218. strider_framework-0.17.62/strider/migrations/dialects/mysql.py +79 -0
  219. strider_framework-0.17.62/strider/migrations/dialects/postgresql.py +91 -0
  220. strider_framework-0.17.62/strider/migrations/dialects/sqlite.py +71 -0
  221. strider_framework-0.17.62/strider/migrations/engine.py +923 -0
  222. strider_framework-0.17.62/strider/migrations/migration.py +82 -0
  223. strider_framework-0.17.62/strider/migrations/operations.py +930 -0
  224. strider_framework-0.17.62/strider/migrations/state.py +576 -0
  225. strider_framework-0.17.62/strider/models.py +1217 -0
  226. strider_framework-0.17.62/strider/permissions.py +400 -0
  227. strider_framework-0.17.62/strider/querysets.py +871 -0
  228. strider_framework-0.17.62/strider/realtime.py +585 -0
  229. strider_framework-0.17.62/strider/relations.py +833 -0
  230. strider_framework-0.17.62/strider/routing.py +1177 -0
  231. strider_framework-0.17.62/strider/schema.py +961 -0
  232. strider_framework-0.17.62/strider/serializers.py +376 -0
  233. strider_framework-0.17.62/strider/storage.py +452 -0
  234. strider_framework-0.17.62/strider/tasks/__init__.py +72 -0
  235. strider_framework-0.17.62/strider/tasks/base.py +394 -0
  236. strider_framework-0.17.62/strider/tasks/config.py +67 -0
  237. strider_framework-0.17.62/strider/tasks/decorators.py +197 -0
  238. strider_framework-0.17.62/strider/tasks/registry.py +178 -0
  239. strider_framework-0.17.62/strider/tasks/scheduler.py +259 -0
  240. strider_framework-0.17.62/strider/tasks/worker.py +647 -0
  241. strider_framework-0.17.62/strider/tenancy.py +338 -0
  242. strider_framework-0.17.62/strider/testing/__init__.py +99 -0
  243. strider_framework-0.17.62/strider/testing/assertions.py +347 -0
  244. strider_framework-0.17.62/strider/testing/client.py +247 -0
  245. strider_framework-0.17.62/strider/testing/database.py +307 -0
  246. strider_framework-0.17.62/strider/testing/factories.py +393 -0
  247. strider_framework-0.17.62/strider/testing/mocks.py +658 -0
  248. strider_framework-0.17.62/strider/testing/plugin.py +635 -0
  249. strider_framework-0.17.62/strider/urls.py +339 -0
  250. strider_framework-0.17.62/strider/validation.py +768 -0
  251. strider_framework-0.17.62/strider/validators.py +982 -0
  252. strider_framework-0.17.62/strider/views.py +1434 -0
  253. strider_framework-0.17.62/tests/__init__.py +1 -0
  254. strider_framework-0.17.62/tests/conftest.py +40 -0
  255. strider_framework-0.17.62/tests/test_admin.py +995 -0
  256. strider_framework-0.17.62/tests/test_auth_helpers.py +312 -0
  257. strider_framework-0.17.62/tests/test_imports.py +263 -0
  258. strider_framework-0.17.62/tests/test_issues_fixes.py +441 -0
  259. strider_framework-0.17.62/tests/test_models.py +193 -0
  260. strider_framework-0.17.62/tests/test_permissions.py +373 -0
  261. strider_framework-0.17.62/tests/test_querysets.py +414 -0
  262. strider_framework-0.17.62/tests/test_relations.py +374 -0
  263. strider_framework-0.17.62/tests/test_routing_custom_actions.py +64 -0
  264. strider_framework-0.17.62/tests/test_serializers.py +171 -0
  265. strider_framework-0.17.62/tests/test_validation.py +307 -0
  266. strider_framework-0.17.62/uv.lock +2990 -0
@@ -0,0 +1,146 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ test_project/
7
+
8
+ # C extensions
9
+ *.so
10
+
11
+ # Distribution / packaging
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ lib/
20
+ lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ share/python-wheels/
26
+ *.egg-info/
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # PyInstaller
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+
53
+ # Translations
54
+ *.mo
55
+ *.pot
56
+
57
+ # Django stuff:
58
+ *.log
59
+ local_settings.py
60
+ db.sqlite3
61
+ db.sqlite3-journal
62
+
63
+ # Flask stuff:
64
+ instance/
65
+ .webassets-cache
66
+
67
+ # Scrapy stuff:
68
+ .scrapy
69
+
70
+ # Sphinx documentation
71
+ docs/_build/
72
+
73
+ # PyBuilder
74
+ .pybuilder/
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ .python-version
86
+
87
+ # pipenv
88
+ Pipfile.lock
89
+
90
+ # PEP 582
91
+ __pypackages__/
92
+
93
+ # Celery stuff
94
+ celerybeat-schedule
95
+ celerybeat.pid
96
+
97
+ # SageMath parsed files
98
+ *.sage.py
99
+
100
+ # Environments
101
+ .env
102
+ .venv
103
+ env/
104
+ venv/
105
+ ENV/
106
+ env.bak/
107
+ venv.bak/
108
+
109
+ # Spyder project settings
110
+ .spyderproject
111
+ .spyproject
112
+
113
+ # Rope project settings
114
+ .ropeproject
115
+
116
+ # mkdocs documentation
117
+ /site
118
+
119
+ # mypy
120
+ .mypy_cache/
121
+ .dmypy.json
122
+ dmypy.json
123
+
124
+ # Pyre type checker
125
+ .pyre/
126
+
127
+ # pytype static type analyzer
128
+ .pytype/
129
+
130
+ # Cython debug symbols
131
+ cython_debug/
132
+
133
+ # IDE
134
+ .idea/
135
+ .vscode/
136
+ *.swp
137
+ *.swo
138
+ *~
139
+
140
+ # Database
141
+ *.db
142
+ *.sqlite
143
+
144
+ # OS
145
+ .DS_Store
146
+ Thumbs.db
@@ -0,0 +1,416 @@
1
+ Metadata-Version: 2.4
2
+ Name: strider-framework
3
+ Version: 0.17.62
4
+ Summary: Strider - Django-inspired, FastAPI-powered. Alta performance, baixo acoplamento, produtividade extrema.
5
+ Project-URL: Homepage, https://github.com/SorPuti/stride
6
+ Project-URL: Documentation, https://github.com/SorPuti/stride#readme
7
+ Project-URL: Repository, https://github.com/SorPuti/stride
8
+ Author: Stride Team
9
+ License: MIT
10
+ Keywords: api,async,cli,django,fastapi,framework,rest
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Framework :: FastAPI
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
21
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
22
+ Requires-Python: <4.0,>=3.10
23
+ Requires-Dist: aiosqlite>=0.19.0
24
+ Requires-Dist: fastapi>=0.109.0
25
+ Requires-Dist: jinja2>=3.1.0
26
+ Requires-Dist: pydantic-settings>=2.1.0
27
+ Requires-Dist: pydantic[email]>=2.5.0
28
+ Requires-Dist: pyjwt>=2.8.0
29
+ Requires-Dist: python-multipart>=0.0.6
30
+ Requires-Dist: sqlalchemy>=2.0.25
31
+ Requires-Dist: uvicorn[standard]>=0.27.0
32
+ Provides-Extra: dev
33
+ Requires-Dist: httpx>=0.26.0; extra == 'dev'
34
+ Requires-Dist: ipython>=8.0.0; extra == 'dev'
35
+ Requires-Dist: mypy>=1.8.0; extra == 'dev'
36
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
37
+ Requires-Dist: pytest>=7.4.0; extra == 'dev'
38
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
39
+ Provides-Extra: enterprise
40
+ Requires-Dist: aio-pika>=9.0.0; extra == 'enterprise'
41
+ Requires-Dist: aiokafka>=0.10.0; extra == 'enterprise'
42
+ Requires-Dist: asyncpg>=0.29.0; extra == 'enterprise'
43
+ Requires-Dist: croniter>=2.0.0; extra == 'enterprise'
44
+ Requires-Dist: redis>=5.0.0; extra == 'enterprise'
45
+ Provides-Extra: gcs
46
+ Requires-Dist: google-cloud-storage>=2.0.0; extra == 'gcs'
47
+ Provides-Extra: kafka
48
+ Requires-Dist: aiokafka>=0.10.0; extra == 'kafka'
49
+ Provides-Extra: messaging
50
+ Requires-Dist: aio-pika>=9.0.0; extra == 'messaging'
51
+ Requires-Dist: aiokafka>=0.10.0; extra == 'messaging'
52
+ Requires-Dist: croniter>=2.0.0; extra == 'messaging'
53
+ Requires-Dist: redis>=5.0.0; extra == 'messaging'
54
+ Provides-Extra: mysql
55
+ Requires-Dist: aiomysql>=0.2.0; extra == 'mysql'
56
+ Provides-Extra: postgres
57
+ Requires-Dist: asyncpg>=0.29.0; extra == 'postgres'
58
+ Requires-Dist: psycopg[binary]>=3.1.0; extra == 'postgres'
59
+ Provides-Extra: rabbitmq
60
+ Requires-Dist: aio-pika>=9.0.0; extra == 'rabbitmq'
61
+ Provides-Extra: redis
62
+ Requires-Dist: redis>=5.0.0; extra == 'redis'
63
+ Provides-Extra: storage
64
+ Requires-Dist: google-cloud-storage>=2.0.0; extra == 'storage'
65
+ Provides-Extra: testing
66
+ Requires-Dist: faker>=20.0.0; extra == 'testing'
67
+ Requires-Dist: httpx>=0.26.0; extra == 'testing'
68
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'testing'
69
+ Requires-Dist: pytest>=7.4.0; extra == 'testing'
70
+ Description-Content-Type: text/markdown
71
+
72
+ # Stride
73
+
74
+ Framework Python para APIs REST de alta performance. Combina a produtividade do Django REST Framework com a velocidade do FastAPI.
75
+
76
+ ## Por que mais um framework?
77
+
78
+ FastAPI e excelente para performance, mas exige muito codigo repetitivo para CRUD. Django REST Framework e produtivo, mas lento e sem async nativo. Stride resolve esse trade-off.
79
+
80
+ ```python
81
+ # 30 linhas para uma API completa com CRUD, validacao, permissoes e documentacao
82
+ class UserViewSet(ModelViewSet):
83
+ model = User
84
+ input_schema = UserInput
85
+ output_schema = UserOutput
86
+ permission_classes = [IsAuthenticated]
87
+ permission_classes_by_action = {"list": [AllowAny], "destroy": [IsAdmin]}
88
+
89
+ router = AutoRouter(prefix="/api/v1")
90
+ router.register("/users", UserViewSet)
91
+ app = StrideApp(routers=[router])
92
+
93
+ # Resultado: 6 endpoints REST, OpenAPI docs, validacao Pydantic, permissoes por acao
94
+ ```
95
+
96
+ ## Benchmark
97
+
98
+ Testes realizados com wrk, 10 threads, 100 conexoes, 30 segundos. Endpoint GET /users/ retornando 100 registros.
99
+
100
+ ```
101
+ Framework Requests/sec Latency (avg) Latency (p99)
102
+ ---------------------------------------------------------------------------
103
+ FastAPI puro 15,200 6.5ms 18ms
104
+ Stride 14,100 7.1ms 21ms
105
+ Django + DRF 2,100 47ms 180ms
106
+ Flask + SQLAlchemy 3,400 29ms 95ms
107
+ ```
108
+
109
+ Stride mantem 93% da performance do FastAPI puro. A diferenca de 7% vem da camada de ViewSet e permissoes - overhead aceitavel considerando a reducao de boilerplate.
110
+
111
+ **Por que Django e tao mais lento?**
112
+ - WSGI sincrono bloqueia threads
113
+ - Django ORM nao e async (sync_to_async adiciona overhead)
114
+ - Serializers DRF usam reflexao pesada
115
+
116
+ ## Comparativo Tecnico
117
+
118
+ | Aspecto | Django + DRF | FastAPI Puro | Stride |
119
+ |---------|--------------|--------------|----------------|
120
+ | Async nativo | Parcial (sync_to_async) | Total | Total |
121
+ | Tipagem | Runtime | Compilacao | Compilacao |
122
+ | ORM | Django ORM (sync) | Manual | SQLAlchemy 2.0 (async) |
123
+ | Validacao | DRF Serializers | Pydantic | Pydantic |
124
+ | ViewSets | Sim | Manual | Sim |
125
+ | Permissoes | Sim | Manual | Sim |
126
+ | OpenAPI | drf-spectacular | Nativo | Nativo |
127
+ | Boilerplate CRUD | Baixo | Alto | Baixo |
128
+ | Performance | ~2k req/s | ~15k req/s | ~14k req/s |
129
+
130
+ ## Decisoes Arquiteturais
131
+
132
+ ### SQLAlchemy 2.0 ao inves de Django ORM
133
+
134
+ Django ORM nao foi projetado para async. O `sync_to_async` e um wrapper que executa queries em thread pool, adicionando overhead e complexidade. SQLAlchemy 2.0 tem async nativo com `asyncpg`.
135
+
136
+ ```python
137
+ # Django: sync_to_async adiciona ~2ms por query
138
+ users = await sync_to_async(list)(User.objects.filter(is_active=True))
139
+
140
+ # Stride: async nativo, sem overhead
141
+ users = await User.objects.using(db).filter(is_active=True).all()
142
+ ```
143
+
144
+ Alem disso, SQLAlchemy 2.0 tem tipagem forte com `Mapped[T]`, permitindo que IDEs e mypy detectem erros em tempo de desenvolvimento.
145
+
146
+ ### Pydantic ao inves de DRF Serializers
147
+
148
+ DRF Serializers usam reflexao pesada (`__getattr__`, metaclasses) para funcionar. Pydantic compila validadores em Rust, resultando em validacao 10-100x mais rapida.
149
+
150
+ ```python
151
+ # DRF: ~500us por validacao
152
+ class UserSerializer(serializers.Serializer):
153
+ email = serializers.EmailField()
154
+ name = serializers.CharField(max_length=100)
155
+
156
+ # Stride: ~5us por validacao
157
+ class UserInput(InputSchema):
158
+ email: str
159
+ name: str
160
+ ```
161
+
162
+ ### ViewSets simplificados
163
+
164
+ DRF ViewSets tem dispatch complexo com multiplas camadas de mixins. Stride usa heranca simples e metodos async diretos.
165
+
166
+ ```python
167
+ # Hierarquia DRF: GenericAPIView -> mixins -> GenericViewSet -> ModelViewSet
168
+ # Hierarquia Core: ViewSet -> ModelViewSet
169
+
170
+ # Menos indiracao = menos overhead = codigo mais facil de debugar
171
+ ```
172
+
173
+ ### Permissoes composiveis
174
+
175
+ Sistema de permissoes inspirado no DRF, mas com operadores Python para composicao.
176
+
177
+ ```python
178
+ # Permissao composta: autenticado E (dono OU admin)
179
+ permission = IsAuthenticated() & (IsOwner() | IsAdmin())
180
+ ```
181
+
182
+ ## Dependencias
183
+
184
+ O framework usa apenas bibliotecas estaveis e bem mantidas:
185
+
186
+ | Dependencia | Versao | Proposito |
187
+ |-------------|--------|-----------|
188
+ | `fastapi` | >=0.100 | Motor HTTP async, OpenAPI automatico |
189
+ | `pydantic` | >=2.0 | Validacao e serializacao (core em Rust) |
190
+ | `pydantic-settings` | >=2.0 | Configuracao via .env |
191
+ | `sqlalchemy` | >=2.0 | ORM async com tipagem forte |
192
+ | `asyncpg` | >=0.28 | Driver PostgreSQL async (opcional) |
193
+ | `aiosqlite` | >=0.19 | Driver SQLite async (desenvolvimento) |
194
+ | `uvicorn` | >=0.23 | Servidor ASGI |
195
+ | `python-jose` | >=3.3 | JWT para autenticacao |
196
+ | `passlib` | >=1.7 | Hash de senhas (bcrypt, argon2) |
197
+ | `aiokafka` | >=0.8 | Cliente Kafka async (opcional) |
198
+
199
+ **Dependencias opcionais por feature:**
200
+ - Messaging: `aiokafka`, `aio-pika` (RabbitMQ), `redis`
201
+ - PostgreSQL: `asyncpg`
202
+ - Argon2: `argon2-cffi`
203
+
204
+ ## Instalacao
205
+
206
+ ### Global (CLI disponivel em qualquer diretorio)
207
+
208
+ ```bash
209
+ # Recomendado: pipx instala em ambiente isolado
210
+ pipx install stride
211
+
212
+ # Alternativa: pip global (requer --break-system-packages no Debian/Ubuntu)
213
+ pip install stride --break-system-packages
214
+
215
+ # Alternativa: pip no diretorio do usuario
216
+ pip install stride --user
217
+ ```
218
+
219
+ Apos instalacao global, o comando `core` fica disponivel:
220
+
221
+ ```bash
222
+ core --help
223
+ core startproject meu_projeto
224
+ ```
225
+
226
+ ### Local (por projeto)
227
+
228
+ ```bash
229
+ # Criar e ativar virtualenv
230
+ python -m venv .venv
231
+ source .venv/bin/activate # Linux/Mac
232
+ # .venv\Scripts\activate # Windows
233
+
234
+ # Instalar no projeto
235
+ pip install stride
236
+
237
+ # Com extras opcionais
238
+ pip install "stride[postgres,kafka]"
239
+ pip install "stride[enterprise]" # Todas as features
240
+ ```
241
+
242
+ ### Extras disponiveis
243
+
244
+ | Extra | Dependencias |
245
+ |-------|--------------|
246
+ | `postgres` | asyncpg, psycopg |
247
+ | `mysql` | aiomysql |
248
+ | `kafka` | aiokafka |
249
+ | `redis` | redis |
250
+ | `rabbitmq` | aio-pika |
251
+ | `messaging` | kafka + redis + rabbitmq + croniter |
252
+ | `enterprise` | messaging + postgres |
253
+
254
+ ## Quick Start
255
+
256
+ ```bash
257
+ # Criar projeto
258
+ stride init my-api
259
+ cd my-api
260
+
261
+ # Configurar banco e rodar
262
+ stride makemigrations --name initial
263
+ stride migrate
264
+ stride run
265
+ ```
266
+
267
+ Acesse http://localhost:8000/docs para documentacao interativa.
268
+
269
+ ## Estrutura do Projeto
270
+
271
+ ```
272
+ /my-api
273
+ /.env # Configuracoes (DATABASE_URL, SECRET_KEY)
274
+ /migrations # Migracoes de banco (geradas automaticamente)
275
+ /src
276
+ /apps
277
+ /users
278
+ models.py # Models SQLAlchemy
279
+ schemas.py # Input/Output Pydantic
280
+ views.py # ViewSets
281
+ routes.py # Rotas
282
+ permissions.py # Permissoes customizadas
283
+ main.py # Entry point
284
+ ```
285
+
286
+ ## Documentacao
287
+
288
+ | Guia | Descricao |
289
+ |------|-----------|
290
+ | [Quickstart](docs/01-quickstart.md) | Primeira API em 5 minutos |
291
+ | [ViewSets](docs/02-viewsets.md) | CRUD, actions, hooks |
292
+ | [Authentication](docs/03-authentication.md) | JWT, permissoes |
293
+ | [Messaging](docs/04-messaging.md) | Kafka, RabbitMQ, Redis |
294
+ | [Deployment](docs/07-deployment.md) | Docker, Kubernetes |
295
+
296
+ [Documentacao completa](docs/README.md)
297
+
298
+ ## Roadmap
299
+
300
+ ### Suporte a WebSockets
301
+
302
+ Integracao nativa com WebSockets do FastAPI para aplicacoes real-time. Planejado: decorators para handlers, broadcast para grupos, integracao com sistema de permissoes.
303
+
304
+ ```python
305
+ # Planejado
306
+ @websocket("/ws/chat/{room_id}")
307
+ class ChatConsumer(WebSocketConsumer):
308
+ permission_classes = [IsAuthenticated]
309
+
310
+ async def on_connect(self, websocket, room_id):
311
+ await self.channel_layer.group_add(f"room_{room_id}", websocket)
312
+
313
+ async def on_message(self, websocket, data):
314
+ await self.channel_layer.group_send(f"room_{data['room_id']}", data)
315
+ ```
316
+
317
+ ### Cache integrado (Redis)
318
+
319
+ Camada de cache transparente para QuerySets e respostas de ViewSet. Invalidacao automatica em create/update/delete.
320
+
321
+ ```python
322
+ # Planejado
323
+ class PostViewSet(ModelViewSet):
324
+ model = Post
325
+ cache_timeout = 300 # 5 minutos
326
+ cache_key_prefix = "posts"
327
+
328
+ # Cache automatico em list() e retrieve()
329
+ # Invalidacao automatica em create(), update(), destroy()
330
+ ```
331
+
332
+ ### Rate limiting
333
+
334
+ Limitacao de requisicoes por IP, usuario ou API key. Configuravel por ViewSet ou action.
335
+
336
+ ```python
337
+ # Planejado
338
+ class APIViewSet(ModelViewSet):
339
+ throttle_classes = [AnonRateThrottle, UserRateThrottle]
340
+ throttle_rates = {
341
+ "anon": "100/hour",
342
+ "user": "1000/hour",
343
+ }
344
+ ```
345
+
346
+ ### Background tasks
347
+
348
+ Sistema de tarefas em background ja implementado. Suporta filas, retry, scheduling.
349
+
350
+ ```python
351
+ # Ja disponivel
352
+ @task(queue="default", max_retries=3)
353
+ async def send_email(user_id: int, template: str):
354
+ user = await User.objects.get(id=user_id)
355
+ await email_service.send(user.email, template)
356
+
357
+ # Chamar
358
+ await send_email.delay(user_id=1, template="welcome")
359
+ ```
360
+
361
+ ### Admin interface
362
+
363
+ Interface administrativa auto-gerada a partir dos models. Inspirada no Django Admin, mas com frontend moderno (React/Vue).
364
+
365
+ ```python
366
+ # Planejado
367
+ from strider.admin import AdminSite, ModelAdmin
368
+
369
+ class UserAdmin(ModelAdmin):
370
+ list_display = ["id", "email", "is_active", "created_at"]
371
+ list_filter = ["is_active", "role"]
372
+ search_fields = ["email", "name"]
373
+
374
+ admin = AdminSite()
375
+ admin.register(User, UserAdmin)
376
+ ```
377
+
378
+ ### CLI para scaffolding
379
+
380
+ CLI ja disponivel para operacoes comuns:
381
+
382
+ ```bash
383
+ # Ja disponivel
384
+ stride init my-api # Criar projeto
385
+ stride makemigrations --name x # Gerar migracao
386
+ stride migrate # Aplicar migracoes
387
+ stride run # Rodar servidor
388
+ core worker # Rodar worker de tasks
389
+ core consumer # Rodar consumer de mensagens
390
+ core docker generate # Gerar docker-compose.yml
391
+
392
+ # Planejado
393
+ core generate app users # Gerar app com estrutura padrao
394
+ core generate model Post # Gerar model com CRUD
395
+ core generate viewset Post # Gerar ViewSet a partir de model
396
+ ```
397
+
398
+ ## Contribuindo
399
+
400
+ ```bash
401
+ # Clonar e instalar
402
+ git clone https://github.com/user/stride.git
403
+ cd stride
404
+ pip install -e ".[dev]"
405
+
406
+ # Rodar testes
407
+ pytest
408
+
409
+ # Rodar linter
410
+ ruff check .
411
+ mypy core/
412
+ ```
413
+
414
+ ## Licenca
415
+
416
+ MIT