tina4-python 3.13.133__tar.gz → 3.13.134__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.133 → tina4_python-3.13.134}/PKG-INFO +6 -3
- {tina4_python-3.13.133 → tina4_python-3.13.134}/README.md +2 -2
- {tina4_python-3.13.133 → tina4_python-3.13.134}/pyproject.toml +8 -1
- tina4_python-3.13.134/tina4_python/.tina4-metrics.json +21664 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/CLAUDE.md +1 -1
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/__init__.py +7 -2
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/ai/__init__.py +7 -7
- tina4_python-3.13.134/tina4_python/push/__init__.py +236 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/.gitignore +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/HtmlElement.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/Testing.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/_import_helper.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/ai/client.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/api/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/auth/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/cache/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/cli/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/container/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/context/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/context/chunker.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/cache.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/constants.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/events.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/middleware.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/port_takeover.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/rate_limiter.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/request.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/response.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/router.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/core/server.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/crud/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/adapter.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/connection.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/database_url.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/firebird.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/mongodb.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/mssql.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/mysql.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/odbc.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/postgres.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/sql_translator.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/database/sqlite.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/debug/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/debug/error_overlay.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/dev_admin/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/dev_admin/metrics.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/dev_admin/plan.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/dev_admin/project_index.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/docs.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/docstore/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/dotenv/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/env.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/frond/FROND.md +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/frond/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/frond/compiler.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/frond/engine.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/frond/parser.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/auth/meta.json +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/auth/src/routes/api/gallery_auth.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/database/meta.json +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/database/src/routes/api/gallery_db.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/error-overlay/meta.json +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/error-overlay/src/routes/api/gallery_crash.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/orm/meta.json +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/orm/src/orm/Product.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/orm/src/routes/api/gallery_products.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/queue/meta.json +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/queue/src/routes/api/gallery_queue.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/rest-api/meta.json +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/rest-api/src/routes/api/gallery_hello.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/templates/meta.json +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/templates/src/routes/gallery_page.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/gallery/templates/src/templates/gallery_page.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/graph/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/graph/adapter.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/graph/adapters/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/graph/adapters/arango.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/graph/adapters/bolt.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/graph/adapters/ultipa.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/graph/graph_url.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/graphql/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/i18n/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/mcp/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/mcp/protocol.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/mcp/tools.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/messenger/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/migration/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/migration/runner.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/mqtt/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/mqtt/message.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/orm/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/orm/collection.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/orm/fields.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/orm/model.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/orm/point.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/__feedback/widget.js +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/css/tina4.css +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/css/tina4.min.css +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/favicon.ico +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/images/logo.svg +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/images/tina4-logo-icon.webp +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/js/frond.js +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/js/frond.min.js +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/js/tina4-dev-admin.min.js +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/js/tina4.min.js +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/js/tina4js.min.js +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/swagger/index.html +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/public/swagger/oauth2-redirect.html +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/query_builder/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue/amqp_url.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue/job.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue/kafka_backend.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue/lite_backend.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue/mongo_backend.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue/rabbitmq_backend.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue_backends/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue_backends/kafka_backend.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue_backends/mongo_backend.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/queue_backends/rabbitmq_backend.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/realtime/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/realtime/models/Attachment.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/realtime/models/Channel.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/realtime/models/ChannelMember.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/realtime/models/Message.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/realtime/models/Workspace.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/realtime/models/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/realtime/storage.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/seeder/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/service/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/session/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/session_handlers/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/session_handlers/memcached_handler.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/session_handlers/mongodb_handler.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/session_handlers/redis_handler.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/session_handlers/valkey_handler.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/sso.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/swagger/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/components/crud.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/docker/distroless/Dockerfile +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/docker/poetry/Dockerfile +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/docker/python/Dockerfile +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/docker/uv/Dockerfile +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/errors/302.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/errors/401.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/errors/403.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/errors/404.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/errors/500.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/errors/502.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/errors/503.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/errors/base.twig +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/frontend/README.md +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/templates/readme.md +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/test/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/test_client/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/af/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/af/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/en/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/es/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/es/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/fr/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/ja/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/ja/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/zh/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/translations/zh/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/validator/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/websocket/__init__.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/websocket/backplane.py +0 -0
- {tina4_python-3.13.133 → tina4_python-3.13.134}/tina4_python/wsdl/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: tina4-python
|
|
3
|
-
Version: 3.13.
|
|
3
|
+
Version: 3.13.134
|
|
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
|
|
@@ -37,6 +37,8 @@ Provides-Extra: odbc
|
|
|
37
37
|
Requires-Dist: pyodbc>=5.0; extra == 'odbc'
|
|
38
38
|
Provides-Extra: postgres
|
|
39
39
|
Requires-Dist: psycopg2-binary>=2.9; extra == 'postgres'
|
|
40
|
+
Provides-Extra: push
|
|
41
|
+
Requires-Dist: cryptography>=42.0; extra == 'push'
|
|
40
42
|
Provides-Extra: rabbitmq
|
|
41
43
|
Requires-Dist: pika>=1.3; extra == 'rabbitmq'
|
|
42
44
|
Provides-Extra: redis
|
|
@@ -46,6 +48,7 @@ Requires-Dist: boto3>=1.34; extra == 's3'
|
|
|
46
48
|
Provides-Extra: test
|
|
47
49
|
Requires-Dist: boto3>=1.34; extra == 'test'
|
|
48
50
|
Requires-Dist: confluent-kafka>=2.0; extra == 'test'
|
|
51
|
+
Requires-Dist: cryptography>=42.0; extra == 'test'
|
|
49
52
|
Requires-Dist: firebird-driver>=1.10; extra == 'test'
|
|
50
53
|
Requires-Dist: mysql-connector-python>=9.0; extra == 'test'
|
|
51
54
|
Requires-Dist: openapi-spec-validator>=0.7; extra == 'test'
|
|
@@ -771,7 +774,7 @@ Benchmarked with `wrk`: 5,000 requests, 50 concurrent, median of 3 runs:
|
|
|
771
774
|
| Bottle | 4,355 | 0 | ~5 |
|
|
772
775
|
| Django | 4,050 | 20+ | ~22 |
|
|
773
776
|
|
|
774
|
-
Tina4 Python delivers competitive throughput with **zero dependencies and
|
|
777
|
+
Tina4 Python delivers competitive throughput with **zero dependencies and 140 cataloged features**. Frameworks with higher req/s have a fraction of the functionality and require dozens of third-party packages.
|
|
775
778
|
|
|
776
779
|
**Across all 4 Tina4 implementations:**
|
|
777
780
|
|
|
@@ -787,7 +790,7 @@ Run benchmarks locally: `python benchmarks/benchmark.py --python`
|
|
|
787
790
|
|
|
788
791
|
## Cross-Framework Parity
|
|
789
792
|
|
|
790
|
-
Tina4 ships identical features across four languages: same architecture, same conventions, same
|
|
793
|
+
Tina4 ships identical features across four languages: same architecture, same conventions, the same 140 cataloged features:
|
|
791
794
|
|
|
792
795
|
| | Python | PHP | Ruby | Node.js |
|
|
793
796
|
|---|--------|-----|------|---------|
|
|
@@ -708,7 +708,7 @@ Benchmarked with `wrk`: 5,000 requests, 50 concurrent, median of 3 runs:
|
|
|
708
708
|
| Bottle | 4,355 | 0 | ~5 |
|
|
709
709
|
| Django | 4,050 | 20+ | ~22 |
|
|
710
710
|
|
|
711
|
-
Tina4 Python delivers competitive throughput with **zero dependencies and
|
|
711
|
+
Tina4 Python delivers competitive throughput with **zero dependencies and 140 cataloged features**. Frameworks with higher req/s have a fraction of the functionality and require dozens of third-party packages.
|
|
712
712
|
|
|
713
713
|
**Across all 4 Tina4 implementations:**
|
|
714
714
|
|
|
@@ -724,7 +724,7 @@ Run benchmarks locally: `python benchmarks/benchmark.py --python`
|
|
|
724
724
|
|
|
725
725
|
## Cross-Framework Parity
|
|
726
726
|
|
|
727
|
-
Tina4 ships identical features across four languages: same architecture, same conventions, same
|
|
727
|
+
Tina4 ships identical features across four languages: same architecture, same conventions, the same 140 cataloged features:
|
|
728
728
|
|
|
729
729
|
| | Python | PHP | Ruby | Node.js |
|
|
730
730
|
|---|--------|-----|------|---------|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tina4-python"
|
|
3
|
-
version = "3.13.
|
|
3
|
+
version = "3.13.134"
|
|
4
4
|
description = "Tina4 Python v3 — Zero-dependency, lightweight web framework"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Andre van Zuydam", email = "andrevanzuydam@gmail.com"}
|
|
@@ -41,6 +41,11 @@ s3 = ["boto3>=1.34"]
|
|
|
41
41
|
kafka = ["confluent-kafka>=2.0"]
|
|
42
42
|
rabbitmq = ["pika>=1.3"]
|
|
43
43
|
|
|
44
|
+
# Web Push is zero-dependency until selected. The standard library has no
|
|
45
|
+
# P-256 ECDH or ES256 primitives, so the native cryptography capability is
|
|
46
|
+
# installed explicitly when a project enables Web Push.
|
|
47
|
+
push = ["cryptography>=42.0"]
|
|
48
|
+
|
|
44
49
|
# All database drivers
|
|
45
50
|
all-db = [
|
|
46
51
|
"psycopg2-binary>=2.9",
|
|
@@ -92,6 +97,8 @@ test = [
|
|
|
92
97
|
# OpenAPI 3.0/3.1 schema (tests/test_swagger_contract.py). NEVER a framework
|
|
93
98
|
# runtime dependency — the swagger generator itself stays zero-dependency.
|
|
94
99
|
"openapi-spec-validator>=0.7",
|
|
100
|
+
# TEST-ONLY: exercises Feature 140's optional native crypto capability.
|
|
101
|
+
"cryptography>=42.0",
|
|
95
102
|
]
|
|
96
103
|
|
|
97
104
|
[dependency-groups]
|