tina4-python 3.13.62__tar.gz → 3.13.63__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 (168) hide show
  1. {tina4_python-3.13.62 → tina4_python-3.13.63}/PKG-INFO +1 -1
  2. {tina4_python-3.13.62 → tina4_python-3.13.63}/pyproject.toml +1 -1
  3. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/__init__.py +1 -1
  4. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/crud/__init__.py +16 -8
  5. {tina4_python-3.13.62 → tina4_python-3.13.63}/.gitignore +0 -0
  6. {tina4_python-3.13.62 → tina4_python-3.13.63}/README.md +0 -0
  7. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/CLAUDE.md +0 -0
  8. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/HtmlElement.py +0 -0
  9. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/Testing.py +0 -0
  10. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/ai/__init__.py +0 -0
  11. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/api/__init__.py +0 -0
  12. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/auth/__init__.py +0 -0
  13. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/cache/__init__.py +0 -0
  14. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/cli/__init__.py +0 -0
  15. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/container/__init__.py +0 -0
  16. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/context/__init__.py +0 -0
  17. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/context/chunker.py +0 -0
  18. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/__init__.py +0 -0
  19. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/cache.py +0 -0
  20. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/constants.py +0 -0
  21. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/events.py +0 -0
  22. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/middleware.py +0 -0
  23. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/rate_limiter.py +0 -0
  24. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/request.py +0 -0
  25. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/response.py +0 -0
  26. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/router.py +0 -0
  27. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/core/server.py +0 -0
  28. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/__init__.py +0 -0
  29. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/adapter.py +0 -0
  30. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/connection.py +0 -0
  31. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/firebird.py +0 -0
  32. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/mongodb.py +0 -0
  33. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/mssql.py +0 -0
  34. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/mysql.py +0 -0
  35. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/odbc.py +0 -0
  36. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/postgres.py +0 -0
  37. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/database/sqlite.py +0 -0
  38. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/debug/__init__.py +0 -0
  39. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/debug/error_overlay.py +0 -0
  40. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/dev_admin/__init__.py +0 -0
  41. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/dev_admin/metrics.py +0 -0
  42. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/dev_admin/plan.py +0 -0
  43. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/dev_admin/project_index.py +0 -0
  44. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/docs.py +0 -0
  45. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/docstore/__init__.py +0 -0
  46. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/dotenv/__init__.py +0 -0
  47. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/env.py +0 -0
  48. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/frond/FROND.md +0 -0
  49. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/frond/__init__.py +0 -0
  50. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/frond/engine.py +0 -0
  51. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/auth/meta.json +0 -0
  52. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/auth/src/routes/api/gallery_auth.py +0 -0
  53. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/database/meta.json +0 -0
  54. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/database/src/routes/api/gallery_db.py +0 -0
  55. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/error-overlay/meta.json +0 -0
  56. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/error-overlay/src/routes/api/gallery_crash.py +0 -0
  57. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/orm/meta.json +0 -0
  58. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/orm/src/orm/Product.py +0 -0
  59. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/orm/src/routes/api/gallery_products.py +0 -0
  60. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/queue/meta.json +0 -0
  61. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/queue/src/routes/api/gallery_queue.py +0 -0
  62. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/rest-api/meta.json +0 -0
  63. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/rest-api/src/routes/api/gallery_hello.py +0 -0
  64. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/templates/meta.json +0 -0
  65. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/templates/src/routes/gallery_page.py +0 -0
  66. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/gallery/templates/src/templates/gallery_page.twig +0 -0
  67. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/graphql/__init__.py +0 -0
  68. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/i18n/__init__.py +0 -0
  69. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/mcp/__init__.py +0 -0
  70. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/mcp/protocol.py +0 -0
  71. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/mcp/tools.py +0 -0
  72. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/messenger/__init__.py +0 -0
  73. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/migration/__init__.py +0 -0
  74. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/migration/runner.py +0 -0
  75. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/orm/__init__.py +0 -0
  76. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/orm/fields.py +0 -0
  77. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/orm/model.py +0 -0
  78. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/__feedback/widget.js +0 -0
  79. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/css/tina4.css +0 -0
  80. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/css/tina4.min.css +0 -0
  81. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/favicon.ico +0 -0
  82. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/images/logo.svg +0 -0
  83. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/images/tina4-logo-icon.webp +0 -0
  84. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/js/frond.js +0 -0
  85. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/js/frond.min.js +0 -0
  86. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/js/tina4-dev-admin.js +0 -0
  87. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/js/tina4-dev-admin.min.js +0 -0
  88. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/js/tina4.min.js +0 -0
  89. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/js/tina4js.min.js +0 -0
  90. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/swagger/index.html +0 -0
  91. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/public/swagger/oauth2-redirect.html +0 -0
  92. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/query_builder/__init__.py +0 -0
  93. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue/__init__.py +0 -0
  94. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue/job.py +0 -0
  95. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue/kafka_backend.py +0 -0
  96. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue/lite_backend.py +0 -0
  97. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue/mongo_backend.py +0 -0
  98. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue/rabbitmq_backend.py +0 -0
  99. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue_backends/__init__.py +0 -0
  100. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue_backends/kafka_backend.py +0 -0
  101. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue_backends/mongo_backend.py +0 -0
  102. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/queue_backends/rabbitmq_backend.py +0 -0
  103. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/realtime/__init__.py +0 -0
  104. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/realtime/models/Attachment.py +0 -0
  105. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/realtime/models/Channel.py +0 -0
  106. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/realtime/models/ChannelMember.py +0 -0
  107. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/realtime/models/Message.py +0 -0
  108. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/realtime/models/Workspace.py +0 -0
  109. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/realtime/models/__init__.py +0 -0
  110. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/realtime/storage.py +0 -0
  111. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/__init__.py +0 -0
  112. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_alerts.scss +0 -0
  113. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_badges.scss +0 -0
  114. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_buttons.scss +0 -0
  115. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_cards.scss +0 -0
  116. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_forms.scss +0 -0
  117. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_grid.scss +0 -0
  118. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_modals.scss +0 -0
  119. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_nav.scss +0 -0
  120. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_reset.scss +0 -0
  121. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_tables.scss +0 -0
  122. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_typography.scss +0 -0
  123. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_utilities.scss +0 -0
  124. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/_variables.scss +0 -0
  125. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/base.scss +0 -0
  126. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/colors.scss +0 -0
  127. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/scss/tina4css/tina4.scss +0 -0
  128. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/seeder/__init__.py +0 -0
  129. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/service/__init__.py +0 -0
  130. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/session/__init__.py +0 -0
  131. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/session_handlers/__init__.py +0 -0
  132. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/session_handlers/mongodb_handler.py +0 -0
  133. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/session_handlers/redis_handler.py +0 -0
  134. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/session_handlers/valkey_handler.py +0 -0
  135. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/swagger/__init__.py +0 -0
  136. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/components/crud.twig +0 -0
  137. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/docker/distroless/Dockerfile +0 -0
  138. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/docker/poetry/Dockerfile +0 -0
  139. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/docker/python/Dockerfile +0 -0
  140. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/docker/uv/Dockerfile +0 -0
  141. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/errors/302.twig +0 -0
  142. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/errors/401.twig +0 -0
  143. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/errors/403.twig +0 -0
  144. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/errors/404.twig +0 -0
  145. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/errors/500.twig +0 -0
  146. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/errors/502.twig +0 -0
  147. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/errors/503.twig +0 -0
  148. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/errors/base.twig +0 -0
  149. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/frontend/README.md +0 -0
  150. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/templates/readme.md +0 -0
  151. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/test/__init__.py +0 -0
  152. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/test_client/__init__.py +0 -0
  153. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/af/LC_MESSAGES/messages.mo +0 -0
  154. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/af/LC_MESSAGES/messages.po +0 -0
  155. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
  156. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/en/LC_MESSAGES/messages.po +0 -0
  157. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/es/LC_MESSAGES/messages.mo +0 -0
  158. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/es/LC_MESSAGES/messages.po +0 -0
  159. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
  160. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/fr/LC_MESSAGES/messages.po +0 -0
  161. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/ja/LC_MESSAGES/messages.mo +0 -0
  162. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/ja/LC_MESSAGES/messages.po +0 -0
  163. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/zh/LC_MESSAGES/messages.mo +0 -0
  164. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/translations/zh/LC_MESSAGES/messages.po +0 -0
  165. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/validator/__init__.py +0 -0
  166. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/websocket/__init__.py +0 -0
  167. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/websocket/backplane.py +0 -0
  168. {tina4_python-3.13.62 → tina4_python-3.13.63}/tina4_python/wsdl/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tina4-python
3
- Version: 3.13.62
3
+ Version: 3.13.63
4
4
  Summary: Tina4 Python v3 — Zero-dependency, lightweight web framework
5
5
  Author-email: Andre van Zuydam <andrevanzuydam@gmail.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tina4-python"
3
- version = "3.13.62"
3
+ version = "3.13.63"
4
4
  description = "Tina4 Python v3 — Zero-dependency, lightweight web framework"
5
5
  authors = [
6
6
  {name = "Andre van Zuydam", email = "andrevanzuydam@gmail.com"}
@@ -8,7 +8,7 @@ Tina4 Python v3.0 — Zero-dependency, lightweight web framework.
8
8
 
9
9
  One import, everything works.
10
10
  """
11
- __version__ = "3.13.62"
11
+ __version__ = "3.13.63"
12
12
 
13
13
  # ── Route decorators ──
14
14
  from tina4_python.core.router import ( # noqa: E402, F401
@@ -21,8 +21,10 @@ Generated endpoints per model:
21
21
  PUT /api/{table_name}/{id} — update record by primary key
22
22
  DELETE /api/{table_name}/{id} — delete record by primary key
23
23
 
24
- All write routes (POST/PUT/DELETE) are registered with noauth so they
25
- don't conflict with existing auth defaults. Add auth via middleware.
24
+ Write routes (POST/PUT/DELETE) are SECURE BY DEFAULT they require a valid
25
+ token, matching Tina4's framework-wide default (the router gates writes unless a
26
+ route is @noauth). Pass ``public=True`` to open them explicitly, e.g.
27
+ ``AutoCrud.register(Note, public=True)``.
26
28
  """
27
29
  import importlib
28
30
  import inspect
@@ -66,12 +68,15 @@ class AutoCrud:
66
68
  return example
67
69
 
68
70
  @staticmethod
69
- def register(model_class, prefix: str = "/api"):
71
+ def register(model_class, prefix: str = "/api", public: bool = False):
70
72
  """Register REST endpoints for a single ORM model class.
71
73
 
72
74
  Args:
73
75
  model_class: An ORM subclass with table_name and fields defined.
74
76
  prefix: URL prefix for the generated routes (default "/api").
77
+ public: If True, the write routes (POST/PUT/DELETE) are OPEN (no auth).
78
+ Default False keeps them **secure-by-default** — a valid token is
79
+ required, matching the framework's write-gating.
75
80
 
76
81
  Returns:
77
82
  List of dicts describing the generated routes.
@@ -168,7 +173,8 @@ class AutoCrud:
168
173
 
169
174
  create_handler.__name__ = f"autocrud_create_{table}"
170
175
  create_handler.__qualname__ = f"autocrud_create_{table}"
171
- create_handler._noauth = True
176
+ if public: # secure-by-default; opt-in to public writes
177
+ create_handler._noauth = True
172
178
  create_handler._swagger_summary = f"Create {pretty_name}"
173
179
  create_handler._swagger_tags = [table]
174
180
  create_handler._swagger_example = example_body
@@ -201,7 +207,8 @@ class AutoCrud:
201
207
 
202
208
  update_handler.__name__ = f"autocrud_update_{table}"
203
209
  update_handler.__qualname__ = f"autocrud_update_{table}"
204
- update_handler._noauth = True
210
+ if public:
211
+ update_handler._noauth = True
205
212
  update_handler._swagger_summary = f"Update {pretty_name}"
206
213
  update_handler._swagger_tags = [table]
207
214
  update_handler._swagger_example = example_body
@@ -224,7 +231,8 @@ class AutoCrud:
224
231
 
225
232
  delete_handler.__name__ = f"autocrud_delete_{table}"
226
233
  delete_handler.__qualname__ = f"autocrud_delete_{table}"
227
- delete_handler._noauth = True
234
+ if public:
235
+ delete_handler._noauth = True
228
236
  delete_handler._swagger_summary = f"Delete {pretty_name}"
229
237
  delete_handler._swagger_tags = [table]
230
238
  Router.add("DELETE", f"{base_path}/{{id}}", delete_handler)
@@ -237,7 +245,7 @@ class AutoCrud:
237
245
  return generated
238
246
 
239
247
  @staticmethod
240
- def discover(models_dir: str = "src/orm", prefix: str = "/api"):
248
+ def discover(models_dir: str = "src/orm", prefix: str = "/api", public: bool = False):
241
249
  """Auto-discover all ORM models in a directory and register CRUD routes.
242
250
 
243
251
  Scans .py files in the given directory, imports them, and registers
@@ -308,7 +316,7 @@ class AutoCrud:
308
316
  and attr._get_table() # Has a table name
309
317
  and attr._get_table() not in AutoCrud._registered
310
318
  ):
311
- AutoCrud.register(attr, prefix=prefix)
319
+ AutoCrud.register(attr, prefix=prefix, public=public)
312
320
  discovered.append(attr.__name__)
313
321
 
314
322
  if discovered:
File without changes