queryapigate 0.22.0__tar.gz → 0.22.1__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.
- {queryapigate-0.22.0/queryapigate.egg-info → queryapigate-0.22.1}/PKG-INFO +1 -1
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/__init__.py +1 -1
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/app.py +10 -2
- {queryapigate-0.22.0 → queryapigate-0.22.1/queryapigate.egg-info}/PKG-INFO +1 -1
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_response_cache.py +5 -1
- {queryapigate-0.22.0 → queryapigate-0.22.1}/LICENSE +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/README.md +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/pyproject.toml +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/__main__.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/adminroles.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/admins.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/agentwrites.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/alerts.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/apikeys.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/broadcast.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/bundle.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/cache.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/cli.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/collection_admin.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/config.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/AccessMapPage-CJHNlXPv.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/AdministratorsPage-BbYhO2eo.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/AgentsPage-DDCauW-7.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/AlertsPage-CazNtrHo.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/ApiKeysPage-DhK31mF7.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/ApprovalsPage-feItqvUh.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/AuditLogPage-Sv21w03B.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/CachingPage-DUyqx9Dg.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/CodeBox-DPiCVuYm.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/ConnectionsPage-B1FW0Sv-.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/DesignerPage-Da52fUjh.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/DestinationsPage-BvcXYIwC.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/Experimental-Cev0t6Ci.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/ExportsPage-Csyn3Ghf.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/HelpPage-C1cQioeI.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/HomePage-BRhhEL2z.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/MetricsPage-CgSxzDOE.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/RepositoryPage-xiZEg7f4.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/Results-CKzkIgXw.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/RolesPage-C9G0dlSf.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/SchemaBrowser-7JFHE2g9.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/SettingsPage-BFoHW1XP.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/StatTile-Dx6Azb_P.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/Time-GG1SZb8S.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/forms-BCfnOm9v.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/forms-C8ZdFl7Q.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/icons-plWox3cc.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/index-CBaM_ckR.css +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/index-k1HFugKb.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/maskRules-B0nXSvKz.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/reach-BKjZYR1f.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/shared-UtKm-F9c.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/state-O13cl7cO.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/useMutation-CzHKbjEU.js +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/favicon.svg +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/index.html +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/cors.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/databases.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/db.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/definitions.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/deprecations.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/descriptions.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/destinations.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/duckfiles.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/engine.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/errors.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/events.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/examples.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/experimental.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/exporting.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/exports.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/formats.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/governance.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/history.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/instances.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/jwtauth.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/lib/h2-2.2.224.jar +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/logging_setup.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/masking.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/mcp_server.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/metrics.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/mongotools.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/oidc.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/openapi.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/params.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/parquet.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/pool.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/postman.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/ratelimit.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/rediscache.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/rekey.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/runners.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/schema.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/__init__.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/access.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/administrators.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/audit.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/collections.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/connections.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/descriptions.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/destinations.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/exports.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/mcp.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/services/queries.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/sqlflow.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/sqltools.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/sso.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/store.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/tableguard.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/usage.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/v1.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/v1_spec.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate.egg-info/SOURCES.txt +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate.egg-info/dependency_links.txt +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate.egg-info/entry_points.txt +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate.egg-info/requires.txt +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate.egg-info/top_level.txt +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/setup.cfg +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_adhoc_history.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_adminroles.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_admins.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_agent_writes.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_alerts.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_api_administrators.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_api_keys.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_api_v1.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_audit_log.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_backup_restore.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_broadcast.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_cli.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_collection_bundle.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_collection_postman.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_collections.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_connection_encryption.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_console.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_cors_and_rate_limit.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_databases.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_db.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_dependency_floors.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_deprecations.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_descriptions.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_destinations.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_duckdb.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_duckdb_files.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_errors.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_events.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_events_server.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_examples.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_experimental.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_export_security.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_exporting.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_exports.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_history.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_howto.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_instances.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_integration.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_jdbc.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_jwt.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_key_rotation.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_masking.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_masking_requests.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_mcp.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_mcp_keycloak.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_mcp_oauth.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_mongotools.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_multinode.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_observability.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_oidc.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_params.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_parquet.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_pool.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_publishing.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_query_window.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_queryapigate.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_rekey.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_release_check.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_roles.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_rolling_upgrade.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_settings.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_shared_rate_limit.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_sql_guard_fuzz.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_sql_guard_writes.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_sqlflow.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_sso.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_sso_keycloak.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_tableguard.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_upgrades.py +0 -0
- {queryapigate-0.22.0 → queryapigate-0.22.1}/tests/test_usage.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: queryapigate
|
|
3
|
-
Version: 0.22.
|
|
3
|
+
Version: 0.22.1
|
|
4
4
|
Summary: Turn SQL into governed REST APIs over MySQL, PostgreSQL, ClickHouse, SQLite, DuckDB, H2, MongoDB, and Parquet/CSV/JSON files - JSON, CSV, Parquet or Excel out, with scoped keys, an admin Console and MCP for AI agents.
|
|
5
5
|
Author-email: Anantha Raju C <arcswdev@gmail.com>
|
|
6
6
|
License-Expression: FSL-1.1-MIT
|
|
@@ -607,6 +607,14 @@ def execute_mongo_endpoint():
|
|
|
607
607
|
return render(result, output_format, page, limit)
|
|
608
608
|
|
|
609
609
|
|
|
610
|
+
def _client_cache_control(ttl):
|
|
611
|
+
"""How long the *caller* may keep a cached response - `private`, so only the caller's own client may: a request
|
|
612
|
+
authenticates with X-API-Key, not Authorization, so HTTP's rule keeping authenticated responses out of shared
|
|
613
|
+
caches (RFC 9111 3.5) doesn't apply, and a CDN or caching proxy in front would otherwise keep one caller's rows -
|
|
614
|
+
masked for its key - and serve them to the next caller of that URL, with any key or none."""
|
|
615
|
+
return f'private, max-age={ttl}'
|
|
616
|
+
|
|
617
|
+
|
|
610
618
|
def cache_lookup(cache_key, ttl):
|
|
611
619
|
"""A live entry rendered as a response (304 if the client already has it), or None on a cache miss."""
|
|
612
620
|
hit = current_app.extensions['queryapigate_cache'].get(cache_key)
|
|
@@ -621,7 +629,7 @@ def cache_lookup(cache_key, ttl):
|
|
|
621
629
|
for name, value in headers:
|
|
622
630
|
response.headers[name] = value
|
|
623
631
|
response.headers['ETag'] = quoted
|
|
624
|
-
response.headers['Cache-Control'] =
|
|
632
|
+
response.headers['Cache-Control'] = _client_cache_control(ttl)
|
|
625
633
|
response.headers['X-Cache'] = 'HIT'
|
|
626
634
|
return response
|
|
627
635
|
|
|
@@ -635,7 +643,7 @@ def cache_store(cache_key, response, ttl, meta=None):
|
|
|
635
643
|
etag = current_app.extensions['queryapigate_cache'].set(cache_key, response.get_data(), response.content_type,
|
|
636
644
|
replay_headers, ttl, meta)
|
|
637
645
|
response.headers['ETag'] = f'"{etag}"'
|
|
638
|
-
response.headers['Cache-Control'] =
|
|
646
|
+
response.headers['Cache-Control'] = _client_cache_control(ttl)
|
|
639
647
|
response.headers['X-Cache'] = 'MISS'
|
|
640
648
|
return response
|
|
641
649
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: queryapigate
|
|
3
|
-
Version: 0.22.
|
|
3
|
+
Version: 0.22.1
|
|
4
4
|
Summary: Turn SQL into governed REST APIs over MySQL, PostgreSQL, ClickHouse, SQLite, DuckDB, H2, MongoDB, and Parquet/CSV/JSON files - JSON, CSV, Parquet or Excel out, with scoped keys, an admin Console and MCP for AI agents.
|
|
5
5
|
Author-email: Anantha Raju C <arcswdev@gmail.com>
|
|
6
6
|
License-Expression: FSL-1.1-MIT
|
|
@@ -371,9 +371,13 @@ class CacheHeaderTests(AppTestCase):
|
|
|
371
371
|
first = self.client.get('/q/q?id=1')
|
|
372
372
|
self.assertEqual(first.headers['X-Cache'], 'MISS')
|
|
373
373
|
self.assertIn('ETag', first.headers)
|
|
374
|
-
self.assertEqual(first.headers['Cache-Control'], 'max-age=60')
|
|
374
|
+
self.assertEqual(first.headers['Cache-Control'], 'private, max-age=60')
|
|
375
375
|
second = self.client.get('/q/q?id=1')
|
|
376
376
|
self.assertEqual(second.headers['X-Cache'], 'HIT')
|
|
377
|
+
# private on a hit and a 304 too: no shared cache in front may keep one caller's rows for the next caller
|
|
378
|
+
self.assertEqual(second.headers['Cache-Control'], 'private, max-age=60')
|
|
379
|
+
unchanged = self.client.get('/q/q?id=1', headers={'If-None-Match': first.headers['ETag']})
|
|
380
|
+
self.assertEqual((unchanged.status_code, unchanged.headers['Cache-Control']), (304, 'private, max-age=60'))
|
|
377
381
|
self.assertEqual(second.get_data(), first.get_data())
|
|
378
382
|
self.assertEqual(second.headers['ETag'], first.headers['ETag'])
|
|
379
383
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/AgentsPage-DDCauW-7.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/AlertsPage-CazNtrHo.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/ApiKeysPage-DhK31mF7.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/CachingPage-DUyqx9Dg.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/CodeBox-DPiCVuYm.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/ExportsPage-Csyn3Ghf.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/HelpPage-C1cQioeI.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/HomePage-BRhhEL2z.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/MetricsPage-CgSxzDOE.js
RENAMED
|
File without changes
|
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/Results-CKzkIgXw.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/RolesPage-C9G0dlSf.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/StatTile-Dx6Azb_P.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/Time-GG1SZb8S.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/forms-BCfnOm9v.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/forms-C8ZdFl7Q.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/icons-plWox3cc.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/index-CBaM_ckR.css
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/index-k1HFugKb.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/maskRules-B0nXSvKz.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/reach-BKjZYR1f.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/shared-UtKm-F9c.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/state-O13cl7cO.js
RENAMED
|
File without changes
|
{queryapigate-0.22.0 → queryapigate-0.22.1}/queryapigate/console_dist/assets/useMutation-CzHKbjEU.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|