tigrbl_tests 0.3.11.dev3__tar.gz → 0.3.11.dev5__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.
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/PKG-INFO +1 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/pyproject.toml +1 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/conftest.py +54 -37
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_acronym_route_name.py +3 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_allow_anon.py +24 -23
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_apikey_generation.py +6 -7
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_authn_provider_integration.py +10 -6
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_bindings_integration.py +28 -28
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_bindings_modules.py +14 -16
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_core_access.py +28 -25
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_engine_install_uvicorn.py +1 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_engine_resolver_uvicorn.py +56 -53
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_error_mappings.py +8 -7
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_field_spec_effects.py +10 -10
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_header_io_uvicorn.py +5 -5
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_healthz_methodz_hookz.py +27 -27
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_hook_ctx_v3_i9n.py +21 -23
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_hook_lifecycle.py +9 -13
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_iospec_attributes.py +11 -11
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_iospec_integration.py +12 -14
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_jsonrpc_batch_behavior.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_key_digest_uvicorn.py +7 -7
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_list_filters_optional.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_mixins.py +38 -38
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_mountable_favicon_uvicorn.py +7 -7
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_mountable_lens_uvicorn.py +9 -9
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_mountable_openapi_uvicorn.py +5 -5
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_mountable_openrpc_uvicorn.py +17 -15
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_mountable_swagger_uvicorn.py +5 -5
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_nested_path_schema_and_rpc.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_nested_routing_depth.py +9 -9
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_op_ctx_alias_examples.py +3 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_op_ctx_behavior.py +24 -25
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_op_ctx_core_crud_order.py +8 -8
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_openapi_clear_response_schema.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_openapi_schema_examples_presence.py +11 -11
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_owner_tenant_policy.py +19 -14
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_request_extras.py +15 -15
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_rest_fallback_serialization.py +6 -6
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_rest_row_serialization.py +6 -6
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_row_result_serialization.py +6 -6
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_schema.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_schema_ctx_attributes_integration.py +17 -17
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_schema_ctx_op_ctx_integration.py +7 -7
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_schema_ctx_spec_integration.py +17 -19
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_sqlite_attachments.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_storage_spec_integration.py +28 -28
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_symmetry_parity.py +3 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_tigrbl_api_app_usage_uvicorn.py +19 -16
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_tigrbl_api_usage_uvicorn.py +15 -14
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_tigrbl_api_uvicorn.py +10 -10
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_tigrbl_app_include_api_uvicorn.py +34 -29
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_tigrbl_app_multi_api_uvicorn.py +15 -13
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_tigrbl_app_usage_uvicorn.py +3 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_tigrbl_app_uvicorn.py +1 -1
- tigrbl_tests-0.3.11.dev5/tests/i9n/test_transport_dispatch_parity.py +141 -0
- tigrbl_tests-0.3.11.dev5/tests/i9n/test_types_deprecation_exports.py +44 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_v3_bulk_rest_endpoints.py +5 -5
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_v3_default_rest_ops.py +6 -6
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_v3_default_rpc_ops.py +29 -29
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_verb_alias_policy.py +18 -18
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/mount/test_mount_favico.py +40 -44
- tigrbl_tests-0.3.11.dev5/tests/options/test_rest_options.py +57 -0
- tigrbl_tests-0.3.11.dev5/tests/options/test_rpc_options.py +54 -0
- tigrbl_tests-0.3.11.dev5/tests/parity/test_hook_runtime_phase_parity.py +6 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/parity/test_stdapi_openapi_docs.py +9 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/parity/test_stdapi_primitives.py +3 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/parity/test_stdapi_routing.py +18 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/perf/test_hookz_performance.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/security/test_dot_notation_schemes.py +1 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/security/test_schemes.py +2 -2
- tigrbl_tests-0.3.11.dev5/tests/test_secdeps_execute_in_pre_tx.py +144 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/decorators/test_engine_ctx_bindings.py +6 -6
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/decorators/test_op_ctx_bindings.py +14 -11
- tigrbl_tests-0.3.11.dev5/tests/unit/runtime/test_compilation_runtime_behavior.py +26 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/runtime/test_events_phases.py +27 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/runtime/test_events_runtime_behavior.py +30 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/runtime/test_kernel_plan_event_ordering.py +76 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/runtime/test_kernel_plan_full_ordering.py +182 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/runtime/test_kernel_runtime_behavior.py +30 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/runtime/test_ordering_runtime_behavior.py +35 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/test_api_level_set_auth.py +36 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/test_app_model_defaults.py +27 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_base_facade_initialize.py +24 -20
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_column_rest_rpc_results.py +43 -31
- tigrbl_tests-0.3.11.dev5/tests/unit/test_default_schema_selection.py +117 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/test_engine_install_api.py +28 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_engine_install_app.py +3 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_engine_install_op.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_engine_usage_levels.py +10 -8
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_file_response.py +17 -20
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_hookz_empty_phase.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_include_model_columns_namespace.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_include_models_base_prefix.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_initialize_async_task.py +1 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_initialize_cross_ddl.py +4 -4
- tigrbl_tests-0.3.11.dev5/tests/unit/test_initialize_mixed_engines.py +40 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_initialize_task_schedule.py +4 -4
- tigrbl_tests-0.3.11.dev5/tests/unit/test_instance_naming_conventions.py +74 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_jsonrpc_openrpc.py +19 -12
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_jsonrpc_router_default_tag.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_kernel_opview_on_demand.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_kernelz_endpoint.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_op_class_engine_binding.py +7 -7
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_op_ctx_dynamic_attach.py +3 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_op_ctx_persist_options.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_openapi_openrpc_schema_separation.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_resolver_interning_warmup.py +4 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_resolver_precedence.py +9 -9
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_alias_table_rpc.py +6 -6
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_ctx_precedence.py +5 -5
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_diagnostics_kernelz.py +8 -8
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_html_jinja_behavior.py +9 -9
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_parity.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_rpc.py +8 -8
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rest_all_default_op_verbs.py +1 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rest_no_schema_jsonable.py +5 -5
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rest_operation_id_uniqueness.py +14 -5
- tigrbl_tests-0.3.11.dev5/tests/unit/test_rest_output_serialization_extras.py +52 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rest_rpc_parity_default_ops.py +8 -8
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rest_rpc_prefixes.py +10 -10
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rest_rpc_symmetry.py +2 -2
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_router_compatibility_shims.py +12 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rpc_all_default_op_verbs.py +48 -48
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rpc_default_ops.py +34 -34
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_schema_spec_presence.py +3 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_security_per_route.py +23 -12
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_api.py +10 -10
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_app.py +3 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_sqlite_attachments.py +8 -8
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_stdapi_request_injection.py +10 -4
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_stdapi_transport_asgi_wsgi.py +55 -23
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_system_docs_builders.py +3 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_api_app_configuration.py +26 -23
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_api_app_instantiation.py +13 -12
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_api_app_subclass_definition.py +11 -11
- tigrbl_tests-0.3.11.dev5/tests/unit/test_tigrbl_api_configuration.py +61 -0
- tigrbl_tests-0.3.11.dev5/tests/unit/test_tigrbl_api_instantiation.py +37 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_api_subclass_definition.py +9 -9
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_app_configuration.py +7 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_app_instantiation.py +1 -1
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_app_subclass_definition.py +3 -3
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_v3_healthz_endpoint.py +2 -2
- tigrbl_tests-0.3.11.dev3/tests/unit/runtime/test_events_phases.py +0 -14
- tigrbl_tests-0.3.11.dev3/tests/unit/test_api_level_set_auth.py +0 -25
- tigrbl_tests-0.3.11.dev3/tests/unit/test_app_model_defaults.py +0 -28
- tigrbl_tests-0.3.11.dev3/tests/unit/test_engine_install_api.py +0 -28
- tigrbl_tests-0.3.11.dev3/tests/unit/test_initialize_mixed_engines.py +0 -41
- tigrbl_tests-0.3.11.dev3/tests/unit/test_tigrbl_api_configuration.py +0 -59
- tigrbl_tests-0.3.11.dev3/tests/unit/test_tigrbl_api_instantiation.py +0 -37
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/LICENSE +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/README.md +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/__init__.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/hooks/test_hook_ctx_phase_validation.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/__init__.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_bulk_docs_client.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_opspec_effects_i9n_test.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_request_extras_provider.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_response_extras_provider.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_rest_rpc_parity_v3.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_v3_opspec_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/uvicorn_utils.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/mount/__init__.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/parity/__init__.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/perf/__init__.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/perf/test_collect_caching.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/perf/test_methodz_performance.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/request/test_request_asgi_scope_compat.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/request/test_request_authn_strip.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/request/test_request_dot_notation.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/request/test_request_response_conveniences.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/request/test_request_transport_convenience_dot_notation.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/requests/test_request_json_modes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/response/test_response_dot_notation.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/response/test_response_transport_convenience_dot_notation.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/__init__.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/decorators/test_alias_ctx_bindings.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/decorators/test_hook_ctx_bindings.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/decorators/test_op_alias_bindings.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/decorators/test_response_ctx_bindings.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/decorators/test_schema_ctx_bindings.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/response_utils.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_emit_paired_post.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_emit_paired_pre.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_emit_readtime_alias.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_out_masking.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_refresh_demand.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_resolve_assemble.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_resolve_paired_gen.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_schema_collect_in.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_schema_collect_out.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_storage_to_stored.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_wire_build_in.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_wire_build_out.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_wire_dump.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/runtime/atoms/test_wire_validate_in.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_acol_vcol_knobs.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_alias_ctx_op_alias_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_alias_ctx_op_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_app_reexport.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_base_columnspec_inheritance.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_build_list_params_spec_model.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_bulk_body_annotation.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_bulk_response_schema.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_colspec_map_isolation.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_column_collect_mixins.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_column_table_orm_binding.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_config_dataclass_none.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_core_crud_bulk_ops.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_core_crud_default_ops.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_core_crud_methods.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_core_wrap_memoization.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_db_dependency.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_decorator_and_collect.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_default_tags.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_engine_install_table.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_engine_spec_and_shortcuts.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_field_spec_attrs.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_get_schema.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_handler_step_qualname.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_hook_ctx_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_hook_ctx_binding.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_hybrid_session_run_sync.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_in_tx.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_io_spec_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_iospec_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_iospec_effects.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_jsonrpc_id_example.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_kernel_invoke_ctx.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_kernel_plan_labels.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_make_column_shortcuts.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_middleware_http_and_cors.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_mixins_sqlalchemy.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_op_alias.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_op_ctx_arity_paths.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_op_ctx_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_op_ctx_core_crud_integration.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_opspec_effects.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_postgres_engine_errors.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_postgres_env_vars.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_relationship_alias_cols.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_request_body_schema.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_request_response_examples.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_rest.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_template.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_response_uuid.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rest_bulk_delete_suppresses_clear.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_rest_request_mapping_access.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_schema_ctx_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_schema_ctx_plain_class.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_schemas_binding.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_should_wire_canonical.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_column.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_engine.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_field.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_hook.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_io.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_op.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_storage.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_spec_table.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_sqlite_uuid_type.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_storage_spec_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_sys_handler_crud.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_sys_run_rollback.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_sys_tx_async_begin.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_sys_tx_begin.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_sys_tx_commit.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_table_base_exports.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_table_collect_spec.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_table_columns_namespace.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_table_namespace_init.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_table_namespace_isolation.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_app_event_handlers.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_tigrbl_app_state.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_v3_favicon_endpoint.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_v3_op_alias.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_v3_op_ctx_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_v3_schemas_and_decorators.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_v3_storage_spec_attributes.py +0 -0
- {tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/unit/test_verbosity.py +0 -0
|
@@ -45,7 +45,7 @@ def _run_coro_sync(coro):
|
|
|
45
45
|
return result.get("value")
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
def
|
|
48
|
+
def _patch_httpx_asgi_transport_sync_router() -> None:
|
|
49
49
|
"""Bridge HTTPX ASGITransport async-only API for sync httpx.Client tests."""
|
|
50
50
|
|
|
51
51
|
if not hasattr(ASGITransport, "close"):
|
|
@@ -75,7 +75,7 @@ def _patch_httpx_asgi_transport_sync_api() -> None:
|
|
|
75
75
|
ASGITransport.handle_request = handle_request
|
|
76
76
|
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
_patch_httpx_asgi_transport_sync_router()
|
|
79
79
|
|
|
80
80
|
|
|
81
81
|
def _reset_tigrbl_state() -> None:
|
|
@@ -174,31 +174,45 @@ async def async_db_session():
|
|
|
174
174
|
|
|
175
175
|
|
|
176
176
|
@pytest.fixture
|
|
177
|
-
def
|
|
177
|
+
def create_test_app():
|
|
178
|
+
"""Factory fixture to create initialized app instances for single-model tests."""
|
|
179
|
+
|
|
180
|
+
def _create_app(model_class):
|
|
181
|
+
Base.metadata.clear()
|
|
182
|
+
app = TigrblApp(engine=mem(async_=False))
|
|
183
|
+
app.include_table(model_class)
|
|
184
|
+
app.initialize()
|
|
185
|
+
return app
|
|
186
|
+
|
|
187
|
+
return _create_app
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
@pytest.fixture
|
|
191
|
+
def create_test_router():
|
|
178
192
|
"""Factory fixture to create Tigrbl instances for testing individual models."""
|
|
179
193
|
|
|
180
|
-
def
|
|
194
|
+
def _create_router(model_class):
|
|
181
195
|
"""Create Tigrbl instance with a single model for testing."""
|
|
182
196
|
Base.metadata.clear()
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
return
|
|
197
|
+
app = TigrblApp(engine=mem(async_=False))
|
|
198
|
+
app.include_table(model_class)
|
|
199
|
+
app.initialize()
|
|
200
|
+
return app.router
|
|
187
201
|
|
|
188
|
-
return
|
|
202
|
+
return _create_router
|
|
189
203
|
|
|
190
204
|
|
|
191
205
|
@pytest_asyncio.fixture
|
|
192
|
-
async def
|
|
206
|
+
async def create_test_router_async():
|
|
193
207
|
"""Factory fixture to create async Tigrbl instances for testing individual models."""
|
|
194
208
|
|
|
195
|
-
def
|
|
209
|
+
def _create_app_async(model_class):
|
|
196
210
|
Base.metadata.clear()
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
return
|
|
211
|
+
app = TigrblApp(engine=mem())
|
|
212
|
+
app.include_table(model_class)
|
|
213
|
+
return app
|
|
200
214
|
|
|
201
|
-
return
|
|
215
|
+
return _create_app_async
|
|
202
216
|
|
|
203
217
|
|
|
204
218
|
@pytest.fixture
|
|
@@ -226,7 +240,7 @@ def test_models():
|
|
|
226
240
|
|
|
227
241
|
|
|
228
242
|
@pytest_asyncio.fixture()
|
|
229
|
-
async def
|
|
243
|
+
async def router_client(db_mode):
|
|
230
244
|
"""Main fixture for integration tests with Tenant and Item models."""
|
|
231
245
|
Base.metadata.clear()
|
|
232
246
|
|
|
@@ -252,24 +266,29 @@ async def api_client(db_mode):
|
|
|
252
266
|
def __tigrbl_nested_paths__(cls):
|
|
253
267
|
return "/tenant/{tenant_id}/item"
|
|
254
268
|
|
|
255
|
-
|
|
269
|
+
app = TigrblApp()
|
|
256
270
|
|
|
257
271
|
if db_mode == "async":
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
await
|
|
272
|
+
app = TigrblApp(engine=mem())
|
|
273
|
+
app.include_tables([Tenant, Item])
|
|
274
|
+
await app.initialize()
|
|
261
275
|
|
|
262
276
|
else:
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
277
|
+
app = TigrblApp(engine=mem(async_=False))
|
|
278
|
+
app.include_tables([Tenant, Item])
|
|
279
|
+
app.initialize()
|
|
266
280
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
transport = ASGITransport(app=fastapi_app)
|
|
281
|
+
app.mount_jsonrpc()
|
|
282
|
+
transport = ASGITransport(app=app)
|
|
270
283
|
|
|
271
284
|
client = AsyncClient(transport=transport, base_url="http://test")
|
|
272
|
-
return client,
|
|
285
|
+
return client, app, Item
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
@pytest_asyncio.fixture()
|
|
289
|
+
async def app_client(router_client):
|
|
290
|
+
"""Backwards-compatible alias for integration tests expecting app_client."""
|
|
291
|
+
return router_client
|
|
273
292
|
|
|
274
293
|
|
|
275
294
|
@pytest.fixture
|
|
@@ -289,7 +308,7 @@ def sample_item_data():
|
|
|
289
308
|
|
|
290
309
|
|
|
291
310
|
@pytest_asyncio.fixture()
|
|
292
|
-
async def
|
|
311
|
+
async def router_client_v3():
|
|
293
312
|
Base.metadata.clear()
|
|
294
313
|
|
|
295
314
|
class Widget(Base):
|
|
@@ -332,15 +351,13 @@ async def api_client_v3():
|
|
|
332
351
|
}
|
|
333
352
|
|
|
334
353
|
cfg = mem()
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
await api.initialize()
|
|
354
|
+
app = TigrblApp(engine=cfg)
|
|
355
|
+
app.include_table(Widget, prefix="")
|
|
356
|
+
app.mount_jsonrpc()
|
|
357
|
+
app.attach_diagnostics()
|
|
358
|
+
await app.initialize()
|
|
341
359
|
prov = _resolver.resolve_provider()
|
|
342
360
|
_, session_maker = prov.ensure()
|
|
343
|
-
|
|
344
|
-
transport = ASGITransport(app=fastapi_app)
|
|
361
|
+
transport = ASGITransport(app=app)
|
|
345
362
|
client = AsyncClient(transport=transport, base_url="http://test")
|
|
346
|
-
return client,
|
|
363
|
+
return client, app, Widget, session_maker
|
|
@@ -5,12 +5,12 @@ from tigrbl.types import Column, String
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
@pytest.mark.i9n
|
|
8
|
-
def test_acronym_model_route(
|
|
8
|
+
def test_acronym_model_route(create_test_router):
|
|
9
9
|
class GPGKey(Base, GUIDPk):
|
|
10
10
|
__tablename__ = "gpg_keys"
|
|
11
11
|
key = Column(String, nullable=False)
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
paths = {route.path for route in
|
|
13
|
+
router = create_test_router(GPGKey)
|
|
14
|
+
paths = {route.path for route in router.routes}
|
|
15
15
|
assert "/gpgkey" in paths
|
|
16
16
|
assert all("g_p_g_key" not in p for p in paths)
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
from httpx import ASGITransport, Client
|
|
2
|
-
from tigrbl.security import HTTPAuthorizationCredentials, HTTPBearer
|
|
2
|
+
from tigrbl.security import HTTPAuthorizationCredentials, HTTPBearer, Security
|
|
3
|
+
from tigrbl.requests import Request
|
|
4
|
+
from tigrbl.runtime.status import HTTPException
|
|
3
5
|
from tigrbl.engine import resolver as _resolver
|
|
4
6
|
from tigrbl.engine.shortcuts import mem
|
|
5
7
|
from sqlalchemy.orm import sessionmaker
|
|
6
8
|
|
|
7
|
-
from tigrbl import TigrblApp
|
|
9
|
+
from tigrbl import TigrblApp, TigrblRouter
|
|
8
10
|
from tigrbl.orm.mixins import GUIDPk
|
|
9
11
|
from tigrbl.orm.tables import Base
|
|
10
12
|
from tigrbl.config.constants import TIGRBL_AUTH_CONTEXT_ATTR
|
|
@@ -13,10 +15,7 @@ from tigrbl.types import (
|
|
|
13
15
|
AuthNProvider,
|
|
14
16
|
Column,
|
|
15
17
|
ForeignKey,
|
|
16
|
-
HTTPException,
|
|
17
18
|
PgUUID,
|
|
18
|
-
Request,
|
|
19
|
-
Security,
|
|
20
19
|
String,
|
|
21
20
|
uuid4,
|
|
22
21
|
)
|
|
@@ -61,12 +60,12 @@ def _build_client():
|
|
|
61
60
|
|
|
62
61
|
cfg = mem(async_=False)
|
|
63
62
|
auth = DummyAuth()
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
router = TigrblRouter(engine=cfg)
|
|
64
|
+
router.set_auth(authn=auth.get_principal)
|
|
65
|
+
router.include_tables([Tenant, Item])
|
|
66
|
+
router.initialize()
|
|
68
67
|
app = TigrblApp()
|
|
69
|
-
app.include_router(
|
|
68
|
+
app.include_router(router)
|
|
70
69
|
prov = _resolver.resolve_provider()
|
|
71
70
|
engine, maker = prov.ensure()
|
|
72
71
|
SessionLocal = sessionmaker(bind=engine, expire_on_commit=False)
|
|
@@ -93,12 +92,12 @@ def _build_client_attr():
|
|
|
93
92
|
|
|
94
93
|
cfg = mem(async_=False)
|
|
95
94
|
auth = DummyAuth()
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
router = TigrblRouter(engine=cfg)
|
|
96
|
+
router.set_auth(authn=auth.get_principal)
|
|
97
|
+
router.include_tables([Tenant, Item])
|
|
98
|
+
router.initialize()
|
|
100
99
|
app = TigrblApp()
|
|
101
|
-
app.include_router(
|
|
100
|
+
app.include_router(router)
|
|
102
101
|
prov = _resolver.resolve_provider()
|
|
103
102
|
engine, maker = prov.ensure()
|
|
104
103
|
SessionLocal = sessionmaker(bind=engine, expire_on_commit=False)
|
|
@@ -162,11 +161,12 @@ def _build_client_create_noauth():
|
|
|
162
161
|
return {"create", "bulk_create"}
|
|
163
162
|
|
|
164
163
|
cfg = mem(async_=False)
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
164
|
+
router = TigrblRouter(engine=cfg)
|
|
165
|
+
router.include_tables([Tenant, Item])
|
|
166
|
+
router.initialize()
|
|
167
|
+
|
|
168
168
|
app = TigrblApp()
|
|
169
|
-
app.include_router(
|
|
169
|
+
app.include_router(router)
|
|
170
170
|
prov = _resolver.resolve_provider()
|
|
171
171
|
engine, maker = prov.ensure()
|
|
172
172
|
SessionLocal = sessionmaker(bind=engine, expire_on_commit=False)
|
|
@@ -192,11 +192,12 @@ def _build_client_create_attr_noauth():
|
|
|
192
192
|
__tigrbl_allow_anon__ = {"create", "bulk_create"}
|
|
193
193
|
|
|
194
194
|
cfg = mem(async_=False)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
195
|
+
router = TigrblRouter(engine=cfg)
|
|
196
|
+
router.include_tables([Tenant, Item])
|
|
197
|
+
router.initialize()
|
|
198
|
+
|
|
198
199
|
app = TigrblApp()
|
|
199
|
-
app.include_router(
|
|
200
|
+
app.include_router(router)
|
|
200
201
|
prov = _resolver.resolve_provider()
|
|
201
202
|
engine, maker = prov.ensure()
|
|
202
203
|
SessionLocal = sessionmaker(bind=engine, expire_on_commit=False)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
from tigrbl import TigrblApp
|
|
3
|
+
from tigrbl.engine.shortcuts import mem
|
|
3
4
|
from tigrbl.types import Mapped, String
|
|
4
5
|
from httpx import ASGITransport, AsyncClient
|
|
5
6
|
|
|
@@ -30,15 +31,13 @@ class ConcreteApiKey(Base, GUIDPk, Created, LastUsed, ValidityWindow, KeyDigest)
|
|
|
30
31
|
|
|
31
32
|
@pytest.mark.i9n
|
|
32
33
|
@pytest.mark.asyncio
|
|
33
|
-
async def
|
|
34
|
+
async def test_router_key_creation_requires_valid_payload(sync_db_session):
|
|
34
35
|
"""Posting without required fields yields an unprocessable entity response."""
|
|
35
|
-
|
|
36
|
+
cfg, _ = sync_db_session
|
|
36
37
|
|
|
37
|
-
app = TigrblApp()
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
api.initialize()
|
|
41
|
-
app.include_router(api.router)
|
|
38
|
+
app = TigrblApp(engine=mem(async_=False))
|
|
39
|
+
app.include_tables([ConcreteApiKey])
|
|
40
|
+
app.initialize()
|
|
42
41
|
transport = ASGITransport(app=app)
|
|
43
42
|
|
|
44
43
|
async with AsyncClient(transport=transport, base_url="http://test") as client:
|
{tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_authn_provider_integration.py
RENAMED
|
@@ -2,7 +2,6 @@ from httpx import ASGITransport, Client
|
|
|
2
2
|
|
|
3
3
|
from tigrbl.security import HTTPAuthorizationCredentials, HTTPBearer
|
|
4
4
|
from tigrbl.engine.shortcuts import mem
|
|
5
|
-
from tigrbl.types import HTTPException, Request, Security
|
|
6
5
|
|
|
7
6
|
from tigrbl import TigrblApp, Base, hook_ctx
|
|
8
7
|
from tigrbl.config.constants import TIGRBL_AUTH_CONTEXT_ATTR
|
|
@@ -10,6 +9,11 @@ from tigrbl.orm.mixins import GUIDPk
|
|
|
10
9
|
from tigrbl.types.authn_abc import AuthNProvider
|
|
11
10
|
|
|
12
11
|
|
|
12
|
+
from tigrbl.runtime.status import HTTPException
|
|
13
|
+
from tigrbl.requests import Request
|
|
14
|
+
from tigrbl.security import Security
|
|
15
|
+
|
|
16
|
+
|
|
13
17
|
class HookedAuth(AuthNProvider):
|
|
14
18
|
"""Simple AuthN provider that records context via hooks."""
|
|
15
19
|
|
|
@@ -40,11 +44,11 @@ def _build_client_with_auth():
|
|
|
40
44
|
async def capture(cls, ctx):
|
|
41
45
|
auth.ctx_principal = ctx.get("auth_context")
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
transport = ASGITransport(app=
|
|
47
|
+
app = TigrblApp(engine=mem(async_=False))
|
|
48
|
+
app.set_auth(authn=auth.get_principal)
|
|
49
|
+
app.include_table(Tenant)
|
|
50
|
+
app.initialize()
|
|
51
|
+
transport = ASGITransport(app=app)
|
|
48
52
|
return Client(transport=transport, base_url="http://test"), auth
|
|
49
53
|
|
|
50
54
|
|
{tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_bindings_integration.py
RENAMED
|
@@ -12,8 +12,8 @@ from tigrbl.orm.mixins import GUIDPk
|
|
|
12
12
|
from tigrbl.specs import IO, S, acol
|
|
13
13
|
from tigrbl.bindings import (
|
|
14
14
|
bind,
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
include_table,
|
|
16
|
+
include_tables,
|
|
17
17
|
rpc_call,
|
|
18
18
|
rebind,
|
|
19
19
|
)
|
|
@@ -55,24 +55,24 @@ def _make_db():
|
|
|
55
55
|
return engine, db
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
def
|
|
58
|
+
def test_include_table_and_rpc_call():
|
|
59
59
|
engine, db = _make_db()
|
|
60
|
-
|
|
61
|
-
_resolver.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
#
|
|
66
|
-
assert
|
|
67
|
-
assert hasattr(
|
|
68
|
-
assert hasattr(
|
|
69
|
-
assert hasattr(
|
|
70
|
-
assert hasattr(
|
|
71
|
-
assert hasattr(
|
|
72
|
-
assert "Widget" in
|
|
73
|
-
assert "Widget" in
|
|
74
|
-
assert "Widget" in
|
|
75
|
-
assert hasattr(
|
|
60
|
+
router = SimpleNamespace(engine=engine)
|
|
61
|
+
_resolver.register_router(router, engine)
|
|
62
|
+
|
|
63
|
+
include_table(router, Widget, mount_router=False)
|
|
64
|
+
|
|
65
|
+
# router facade populated
|
|
66
|
+
assert router.models["Widget"] is Widget
|
|
67
|
+
assert hasattr(router.schemas, "Widget")
|
|
68
|
+
assert hasattr(router.handlers, "Widget")
|
|
69
|
+
assert hasattr(router.hooks, "Widget")
|
|
70
|
+
assert hasattr(router.rpc, "Widget")
|
|
71
|
+
assert hasattr(router.rest, "Widget")
|
|
72
|
+
assert "Widget" in router.routers
|
|
73
|
+
assert "Widget" in router.columns
|
|
74
|
+
assert "Widget" in router.table_config
|
|
75
|
+
assert hasattr(router.core, "Widget")
|
|
76
76
|
|
|
77
77
|
# model namespaces
|
|
78
78
|
assert hasattr(Widget, TIGRBL_GET_DB_ATTR)
|
|
@@ -82,21 +82,21 @@ def test_include_model_and_rpc_call():
|
|
|
82
82
|
phases = build_phase_chains(Widget, "create")
|
|
83
83
|
assert phases["HANDLER"], "phase lifecycle must contain handler step"
|
|
84
84
|
|
|
85
|
-
asyncio.run(rpc_call(
|
|
86
|
-
rows = asyncio.run(rpc_call(
|
|
85
|
+
asyncio.run(rpc_call(router, Widget, "create", {"id": uuid4(), "name": "w"}, db=db))
|
|
86
|
+
rows = asyncio.run(rpc_call(router, Widget, "list", {}, db=db))
|
|
87
87
|
assert rows and rows[0]["name"] == "w"
|
|
88
88
|
|
|
89
89
|
|
|
90
|
-
def
|
|
90
|
+
def test_include_tables():
|
|
91
91
|
engine, db = _make_db()
|
|
92
|
-
|
|
93
|
-
_resolver.
|
|
92
|
+
router = SimpleNamespace(engine=engine)
|
|
93
|
+
_resolver.register_router(router, engine)
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
include_tables(router, [Widget, Gizmo], mount_router=False)
|
|
96
96
|
|
|
97
|
-
assert set(
|
|
98
|
-
assert hasattr(
|
|
99
|
-
assert hasattr(
|
|
97
|
+
assert set(router.models) == {"Widget", "Gizmo"}
|
|
98
|
+
assert hasattr(router.schemas, "Widget")
|
|
99
|
+
assert hasattr(router.schemas, "Gizmo")
|
|
100
100
|
|
|
101
101
|
|
|
102
102
|
def test_bind_and_rebind():
|
|
@@ -9,15 +9,13 @@ from tigrbl.types import (
|
|
|
9
9
|
String,
|
|
10
10
|
)
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
rpc as rpc_binding,
|
|
20
|
-
)
|
|
12
|
+
import tigrbl.bindings.columns as columns_binding
|
|
13
|
+
import tigrbl.bindings.handlers as handlers_binding
|
|
14
|
+
import tigrbl.bindings.hooks as hooks_binding
|
|
15
|
+
import tigrbl.bindings.model as model_binding
|
|
16
|
+
import tigrbl.bindings.rest as rest_binding
|
|
17
|
+
import tigrbl.bindings.router as router_binding
|
|
18
|
+
import tigrbl.bindings.rpc as rpc_binding
|
|
21
19
|
from tigrbl.bindings.schemas import build_and_attach as schemas_build_and_attach
|
|
22
20
|
from tigrbl.specs import ColumnSpec, F, IO, S
|
|
23
21
|
from tigrbl.op import resolve
|
|
@@ -117,12 +115,12 @@ def test_model_bind_and_rebind(model_cls):
|
|
|
117
115
|
|
|
118
116
|
@pytest.mark.i9n
|
|
119
117
|
@pytest.mark.asyncio
|
|
120
|
-
async def
|
|
118
|
+
async def test_router_include_and_rpc_call(monkeypatch, model_cls):
|
|
121
119
|
model_binding.bind(model_cls)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
assert model_cls.__name__ in
|
|
125
|
-
routers =
|
|
120
|
+
router = SimpleNamespace()
|
|
121
|
+
router_binding.include_table(router, model_cls, mount_router=False)
|
|
122
|
+
assert model_cls.__name__ in router.models
|
|
123
|
+
routers = router_binding.include_tables(
|
|
126
124
|
SimpleNamespace(), [model_cls], mount_router=False
|
|
127
125
|
)
|
|
128
126
|
assert model_cls.__name__ in routers
|
|
@@ -132,8 +130,8 @@ async def test_api_include_and_rpc_call(monkeypatch, model_cls):
|
|
|
132
130
|
|
|
133
131
|
monkeypatch.setattr(_executor, "_invoke", fake_invoke)
|
|
134
132
|
payload = {"name": "x"}
|
|
135
|
-
result = await
|
|
136
|
-
|
|
133
|
+
result = await router_binding.rpc_call(
|
|
134
|
+
router, model_cls, "create", payload=payload, db=object()
|
|
137
135
|
)
|
|
138
136
|
assert result == payload
|
|
139
137
|
|
|
@@ -2,13 +2,16 @@ import pytest
|
|
|
2
2
|
import pytest_asyncio
|
|
3
3
|
from typing import Any, Mapping
|
|
4
4
|
|
|
5
|
-
from tigrbl.types import
|
|
5
|
+
from tigrbl.types import UUID, Column, Integer, String, uuid4
|
|
6
6
|
|
|
7
7
|
from tigrbl import TigrblApp, Base
|
|
8
8
|
from tigrbl.engine.shortcuts import engine as build_engine, mem
|
|
9
9
|
from tigrbl.orm.mixins import GUIDPk, BulkCapable, Replaceable
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
from tigrbl.runtime.status import HTTPException
|
|
13
|
+
|
|
14
|
+
|
|
12
15
|
class CoreTestUser(Base, GUIDPk, BulkCapable, Replaceable):
|
|
13
16
|
__tablename__ = "test_users"
|
|
14
17
|
name = Column(String(100), nullable=True)
|
|
@@ -22,32 +25,32 @@ def _get(obj: Any, attr: str) -> Any:
|
|
|
22
25
|
|
|
23
26
|
|
|
24
27
|
@pytest.fixture
|
|
25
|
-
def
|
|
28
|
+
def sync_app():
|
|
26
29
|
"""Create a sync Tigrbl instance with CoreTestUser."""
|
|
27
30
|
Base.metadata.clear()
|
|
28
31
|
eng = build_engine(mem(async_=False))
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return
|
|
32
|
+
app = TigrblApp(engine=eng)
|
|
33
|
+
app.include_table(CoreTestUser)
|
|
34
|
+
app.initialize()
|
|
35
|
+
return app, eng
|
|
33
36
|
|
|
34
37
|
|
|
35
38
|
@pytest_asyncio.fixture
|
|
36
|
-
async def
|
|
39
|
+
async def async_app():
|
|
37
40
|
"""Create an async Tigrbl instance with CoreTestUser."""
|
|
38
41
|
Base.metadata.clear()
|
|
39
42
|
eng = build_engine(mem(async_=True))
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
await
|
|
43
|
-
return
|
|
43
|
+
app = TigrblApp(engine=eng)
|
|
44
|
+
app.include_table(CoreTestUser)
|
|
45
|
+
await app.initialize()
|
|
46
|
+
return app, eng
|
|
44
47
|
|
|
45
48
|
|
|
46
|
-
def
|
|
47
|
-
|
|
48
|
-
assert hasattr(
|
|
49
|
-
assert hasattr(
|
|
50
|
-
schema_ns =
|
|
49
|
+
def test_app_exposes_core_proxies(sync_app):
|
|
50
|
+
app, _ = sync_app
|
|
51
|
+
assert hasattr(app.core, "CoreTestUser")
|
|
52
|
+
assert hasattr(app.core_raw, "CoreTestUser")
|
|
53
|
+
schema_ns = app.schemas.CoreTestUser
|
|
51
54
|
for name in [
|
|
52
55
|
"create",
|
|
53
56
|
"read",
|
|
@@ -64,10 +67,10 @@ def test_api_exposes_core_proxies(sync_api):
|
|
|
64
67
|
|
|
65
68
|
|
|
66
69
|
@pytest.mark.asyncio
|
|
67
|
-
async def test_core_and_core_raw_sync_operations(
|
|
68
|
-
|
|
70
|
+
async def test_core_and_core_raw_sync_operations(sync_app):
|
|
71
|
+
app, eng = sync_app
|
|
69
72
|
with eng.session() as db:
|
|
70
|
-
for proxy in (
|
|
73
|
+
for proxy in (app.core, app.core_raw):
|
|
71
74
|
model = proxy.CoreTestUser
|
|
72
75
|
await model.clear({}, db=db)
|
|
73
76
|
|
|
@@ -148,17 +151,17 @@ async def test_core_and_core_raw_sync_operations(sync_api):
|
|
|
148
151
|
|
|
149
152
|
|
|
150
153
|
@pytest.mark.asyncio
|
|
151
|
-
async def test_core_read_not_found(
|
|
152
|
-
|
|
154
|
+
async def test_core_read_not_found(sync_app):
|
|
155
|
+
app, eng = sync_app
|
|
153
156
|
fake_id = "00000000-0000-0000-0000-000000000000"
|
|
154
157
|
with eng.session() as db:
|
|
155
158
|
with pytest.raises(HTTPException):
|
|
156
|
-
await
|
|
159
|
+
await app.core.CoreTestUser.read({"id": fake_id}, db=db)
|
|
157
160
|
|
|
158
161
|
|
|
159
162
|
@pytest.mark.asyncio
|
|
160
|
-
async def
|
|
161
|
-
|
|
162
|
-
assert hasattr(
|
|
163
|
+
async def test_async_app_initializes(async_app):
|
|
164
|
+
app, eng = async_app
|
|
165
|
+
assert hasattr(app.core, "CoreTestUser")
|
|
163
166
|
async with eng.asession():
|
|
164
167
|
pass
|
{tigrbl_tests-0.3.11.dev3 → tigrbl_tests-0.3.11.dev5}/tests/i9n/test_engine_install_uvicorn.py
RENAMED
|
@@ -24,7 +24,7 @@ class EngineWidget(Base, GUIDPk):
|
|
|
24
24
|
@pytest_asyncio.fixture()
|
|
25
25
|
async def running_engine_app():
|
|
26
26
|
app = TigrblApp(engine=mem(async_=False))
|
|
27
|
-
app.
|
|
27
|
+
app.include_table(EngineWidget)
|
|
28
28
|
app.mount_jsonrpc(prefix="/rpc")
|
|
29
29
|
app.initialize()
|
|
30
30
|
|