tina4-python 3.13.121__tar.gz → 3.13.123__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.
- {tina4_python-3.13.121 → tina4_python-3.13.123}/PKG-INFO +1 -1
- {tina4_python-3.13.121 → tina4_python-3.13.123}/pyproject.toml +1 -1
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/__init__.py +1 -1
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/cli/__init__.py +26 -1
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/middleware.py +825 -789
- {tina4_python-3.13.121 → tina4_python-3.13.123}/.gitignore +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/README.md +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/CLAUDE.md +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/HtmlElement.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/Testing.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/_import_helper.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/ai/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/ai/client.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/api/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/auth/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/cache/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/container/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/context/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/context/chunker.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/cache.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/constants.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/events.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/port_takeover.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/rate_limiter.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/request.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/response.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/router.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/core/server.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/crud/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/adapter.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/connection.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/database_url.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/firebird.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/mongodb.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/mssql.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/mysql.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/odbc.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/postgres.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/sql_translator.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/database/sqlite.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/debug/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/debug/error_overlay.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/dev_admin/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/dev_admin/metrics.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/dev_admin/plan.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/dev_admin/project_index.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/docs.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/docstore/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/dotenv/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/env.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/frond/FROND.md +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/frond/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/frond/compiler.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/frond/engine.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/frond/parser.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/auth/meta.json +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/auth/src/routes/api/gallery_auth.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/database/meta.json +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/database/src/routes/api/gallery_db.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/error-overlay/meta.json +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/error-overlay/src/routes/api/gallery_crash.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/orm/meta.json +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/orm/src/orm/Product.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/orm/src/routes/api/gallery_products.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/queue/meta.json +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/queue/src/routes/api/gallery_queue.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/rest-api/meta.json +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/rest-api/src/routes/api/gallery_hello.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/templates/meta.json +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/templates/src/routes/gallery_page.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/gallery/templates/src/templates/gallery_page.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/graph/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/graph/adapter.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/graph/adapters/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/graph/adapters/arango.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/graph/adapters/bolt.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/graph/adapters/ultipa.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/graph/graph_url.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/graphql/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/i18n/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/mcp/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/mcp/protocol.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/mcp/tools.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/messenger/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/migration/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/migration/runner.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/mqtt/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/mqtt/message.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/orm/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/orm/fields.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/orm/model.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/orm/point.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/__feedback/widget.js +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/css/tina4.css +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/css/tina4.min.css +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/favicon.ico +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/images/logo.svg +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/images/tina4-logo-icon.webp +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/js/frond.js +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/js/frond.min.js +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/js/tina4-dev-admin.min.js +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/js/tina4.min.js +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/js/tina4js.min.js +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/swagger/index.html +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/public/swagger/oauth2-redirect.html +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/query_builder/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue/amqp_url.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue/job.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue/kafka_backend.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue/lite_backend.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue/mongo_backend.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue/rabbitmq_backend.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue_backends/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue_backends/kafka_backend.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue_backends/mongo_backend.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/queue_backends/rabbitmq_backend.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/realtime/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/realtime/models/Attachment.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/realtime/models/Channel.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/realtime/models/ChannelMember.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/realtime/models/Message.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/realtime/models/Workspace.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/realtime/models/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/realtime/storage.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/seeder/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/service/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/session/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/session_handlers/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/session_handlers/memcached_handler.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/session_handlers/mongodb_handler.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/session_handlers/redis_handler.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/session_handlers/valkey_handler.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/sso.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/swagger/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/components/crud.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/docker/distroless/Dockerfile +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/docker/poetry/Dockerfile +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/docker/python/Dockerfile +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/docker/uv/Dockerfile +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/errors/302.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/errors/401.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/errors/403.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/errors/404.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/errors/500.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/errors/502.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/errors/503.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/errors/base.twig +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/frontend/README.md +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/templates/readme.md +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/test/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/test_client/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/af/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/af/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/en/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/es/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/es/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/fr/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/ja/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/ja/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/zh/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/translations/zh/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/validator/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/websocket/__init__.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/websocket/backplane.py +0 -0
- {tina4_python-3.13.121 → tina4_python-3.13.123}/tina4_python/wsdl/__init__.py +0 -0
|
@@ -1003,7 +1003,7 @@ def _ai(args):
|
|
|
1003
1003
|
# The four generators wired for the envelope. Others (crud, service, queue,
|
|
1004
1004
|
# validator, seeder, websocket, listener, auth, test, form, view) keep their
|
|
1005
1005
|
# existing behaviour — this is the minimum surface the plan calls out.
|
|
1006
|
-
_RESOLUTION_TARGETS = {"model", "route", "migration", "middleware"}
|
|
1006
|
+
_RESOLUTION_TARGETS = {"model", "route", "migration", "middleware", "queue"}
|
|
1007
1007
|
|
|
1008
1008
|
# Envelope schema version. Bump when the SHAPE changes; adding an optional
|
|
1009
1009
|
# key on the resolution object is not a break.
|
|
@@ -1149,6 +1149,16 @@ def _next_steps_for(target: str, name: str, resolution: dict, flags: dict) -> li
|
|
|
1149
1149
|
f"Run the co-emitted test: .venv/bin/python -m pytest tests/test_{snake}.py",
|
|
1150
1150
|
]
|
|
1151
1151
|
|
|
1152
|
+
if target == "queue":
|
|
1153
|
+
topic = name.lstrip("/")
|
|
1154
|
+
slug = _to_snake(re.sub(r"[^0-9a-zA-Z]+", "_", topic)).strip("_") or "topic"
|
|
1155
|
+
return [
|
|
1156
|
+
f"Edit src/services/{slug}_consumer.py: implement handle_{slug}(data) to process ONE job",
|
|
1157
|
+
f"Produce a job: from src.services.{slug}_consumer import publish_{slug}; publish_{slug}({{...}})",
|
|
1158
|
+
f"The consumer is discovered by ServiceRunner (src/services); tina4 serve runs it",
|
|
1159
|
+
f"Run the co-emitted test: .venv/bin/python -m pytest tests/test_{slug}.py",
|
|
1160
|
+
]
|
|
1161
|
+
|
|
1152
1162
|
return []
|
|
1153
1163
|
|
|
1154
1164
|
|
|
@@ -1236,6 +1246,21 @@ def _resolve_generation(target: str, name: str, flags: dict,
|
|
|
1236
1246
|
"test_paths": [f"tests/test_{snake}.py"],
|
|
1237
1247
|
}
|
|
1238
1248
|
|
|
1249
|
+
if target == "queue":
|
|
1250
|
+
# Slug computed EXACTLY as _gen_queue does, so the envelope's paths
|
|
1251
|
+
# equal the on-disk filenames byte-for-byte.
|
|
1252
|
+
topic = name.lstrip("/")
|
|
1253
|
+
slug = _to_snake(re.sub(r"[^0-9a-zA-Z]+", "_", topic)).strip("_") or "topic"
|
|
1254
|
+
return {
|
|
1255
|
+
"class_name": None,
|
|
1256
|
+
"table_name": None,
|
|
1257
|
+
"file_path": f"src/services/{slug}_consumer.py",
|
|
1258
|
+
"migration_path": None,
|
|
1259
|
+
"transformations": [],
|
|
1260
|
+
"routes": [],
|
|
1261
|
+
"test_paths": [f"tests/test_{slug}.py"],
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1239
1264
|
return {} # never reached; guarded by _RESOLUTION_TARGETS
|
|
1240
1265
|
|
|
1241
1266
|
|