metaobjects 1.0.12__tar.gz → 1.1.0__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.
- {metaobjects-1.0.12 → metaobjects-1.1.0}/PKG-INFO +18 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/README.md +13 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/pyproject.toml +12 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/apidocs/__init__.py +17 -17
- metaobjects-1.1.0/src/metaobjects/apidocs/api_model.py +4 -0
- metaobjects-1.1.0/src/metaobjects/apidocs/builder.py +4 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/apidocs/naming.py +57 -8
- metaobjects-1.1.0/src/metaobjects/apidocs/paths.py +4 -0
- metaobjects-1.1.0/src/metaobjects/apidocs/renderer.py +4 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/cli.py +1291 -914
- metaobjects-1.1.0/src/metaobjects/codegen/_moved.py +27 -0
- metaobjects-1.1.0/src/metaobjects/codegen/collection_name_collision.py +58 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/config.py +8 -4
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/eject.py +81 -33
- metaobjects-1.1.0/src/metaobjects/codegen/extract_delegate_emitter.py +4 -0
- metaobjects-1.1.0/src/metaobjects/codegen/extract_schema_emitter.py +4 -0
- metaobjects-1.1.0/src/metaobjects/codegen/fr010_field_mapping.py +4 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generator.py +4 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generator_registry.py +84 -8
- metaobjects-1.1.0/src/metaobjects/codegen/generators/api_docs_generator.py +85 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/entity_model.py +15 -41
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/extractor_generator.py +6 -5
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +12 -4
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/find_inbound.py +4 -4
- metaobjects-1.1.0/src/metaobjects/codegen/generators/fr019_shared_enum.py +4 -0
- metaobjects-1.1.0/src/metaobjects/codegen/generators/m2m_codegen.py +4 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/output_parser_generator.py +4 -3
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/output_prompt_generator.py +3 -3
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/render_helper_generator.py +20 -37
- metaobjects-1.1.0/src/metaobjects/codegen/generators/requirement_tests_generator.py +378 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/router_generator.py +273 -100
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/trace_helper_generator.py +6 -5
- metaobjects-1.1.0/src/metaobjects/codegen/instance_artifacts.py +84 -0
- metaobjects-1.1.0/src/metaobjects/codegen/metaobjects-config.schema.json +122 -0
- metaobjects-1.1.0/src/metaobjects/codegen/orphan_sweep.py +179 -0
- metaobjects-1.1.0/src/metaobjects/codegen/output_format_spec_emitter.py +4 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/overwrite_policy.py +43 -3
- metaobjects-1.1.0/src/metaobjects/codegen/project_config.py +474 -0
- metaobjects-1.1.0/src/metaobjects/codegen/project_import.py +90 -0
- metaobjects-1.1.0/src/metaobjects/codegen/requirement_hooks.py +44 -0
- metaobjects-1.1.0/src/metaobjects/codegen/requirement_walk.py +291 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/runner.py +44 -6
- metaobjects-1.1.0/src/metaobjects/codegen/runtime/__init__.py +28 -0
- metaobjects-1.0.12/src/metaobjects/apidocs/builder.py → metaobjects-1.1.0/src/metaobjects/codegen/runtime/api_docs_builder.py +104 -46
- metaobjects-1.0.12/src/metaobjects/apidocs/api_model.py → metaobjects-1.1.0/src/metaobjects/codegen/runtime/api_docs_model.py +1 -1
- metaobjects-1.0.12/src/metaobjects/apidocs/renderer.py → metaobjects-1.1.0/src/metaobjects/codegen/runtime/api_docs_renderer.py +4 -4
- metaobjects-1.1.0/src/metaobjects/codegen/runtime/decimal_wire.py +261 -0
- {metaobjects-1.0.12/src/metaobjects/codegen → metaobjects-1.1.0/src/metaobjects/codegen/runtime}/extract_delegate_emitter.py +6 -18
- {metaobjects-1.0.12/src/metaobjects/codegen → metaobjects-1.1.0/src/metaobjects/codegen/runtime}/extract_schema_emitter.py +1 -1
- {metaobjects-1.0.12/src/metaobjects/codegen/generators → metaobjects-1.1.0/src/metaobjects/codegen/runtime}/fr019_shared_enum.py +24 -20
- {metaobjects-1.0.12/src/metaobjects/codegen/generators → metaobjects-1.1.0/src/metaobjects/codegen/runtime}/m2m_codegen.py +17 -16
- {metaobjects-1.0.12/src/metaobjects/codegen → metaobjects-1.1.0/src/metaobjects/codegen/runtime}/output_format_spec_emitter.py +1 -1
- metaobjects-1.1.0/src/metaobjects/codegen/runtime/shared_predicates.py +123 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/value_objects.py +24 -21
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/config/dependencies.py +10 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/config/neutral_config.py +67 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/config/source_resolver.py +3 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/core_types.py +162 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/errors.py +18 -5
- metaobjects-1.1.0/src/metaobjects/field_lint.py +214 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/fmt.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/library/__init__.py +2 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/library/library_sources.py +15 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/meta_data_loader.py +71 -3
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/registered_validation.py +38 -28
- metaobjects-1.1.0/src/metaobjects/loader/resolve_references.py +154 -0
- metaobjects-1.1.0/src/metaobjects/loader/validate_reporting.py +1192 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/validate_source_parameter_ref.py +2 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/validation_passes.py +93 -83
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/attr/meta_attr.py +56 -17
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/field/meta_field.py +67 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/object/object_constants.py +19 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/object/object_extract.py +7 -19
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +18 -135
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/relationship/relationship_references.py +12 -13
- metaobjects-1.1.0/src/metaobjects/meta/core/reporting/meta_dimension.py +42 -0
- metaobjects-1.1.0/src/metaobjects/meta/core/reporting/meta_measure.py +76 -0
- metaobjects-1.1.0/src/metaobjects/meta/core/reporting/meta_segment.py +18 -0
- metaobjects-1.1.0/src/metaobjects/meta/core/reporting/report_accessors.py +92 -0
- metaobjects-1.1.0/src/metaobjects/meta/core/reporting/report_read_model.py +178 -0
- metaobjects-1.1.0/src/metaobjects/meta/core/reporting/report_shape.py +508 -0
- metaobjects-1.1.0/src/metaobjects/meta/core/reporting/reporting_constants.py +117 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/requirement/meta_requirement.py +15 -0
- metaobjects-1.1.0/src/metaobjects/meta/core/requirement/resolve_claim.py +92 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/meta_data.py +55 -8
- metaobjects-1.1.0/src/metaobjects/meta/meta_root.py +18 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/persistence/source/meta_source.py +34 -10
- metaobjects-1.1.0/src/metaobjects/meta/presentation/view/view_constants.py +51 -0
- metaobjects-1.1.0/src/metaobjects/naming.py +245 -0
- metaobjects-1.1.0/src/metaobjects/naming_refs.py +387 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/parser.py +35 -50
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/registry_manifest.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/payload_accessors.py +27 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/verify.py +40 -12
- metaobjects-1.1.0/src/metaobjects/requirement_check.py +555 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/runtime/__init__.py +14 -1
- metaobjects-1.1.0/src/metaobjects/runtime/dialect.py +298 -0
- metaobjects-1.1.0/src/metaobjects/runtime/drivers.py +44 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/runtime/n2m_resolver.py +18 -10
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/runtime/object_manager.py +324 -115
- metaobjects-1.1.0/src/metaobjects/runtime/validator_runner.py +452 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/serializer_json.py +88 -14
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/shared/base_types.py +7 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/__init__.py +1 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/db.json +2 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/object.json +18 -0
- metaobjects-1.1.0/src/metaobjects/spec_metamodel/reporting.json +45 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/super_resolve.py +73 -111
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/yaml_desugar.py +7 -74
- metaobjects-1.1.0/tests/codegen/config_helpers.py +116 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_api_docs_paths.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli.py +72 -68
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_config_gen.py +17 -13
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_config_verify.py +64 -55
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_dependencies.py +10 -11
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_gen_unknown_attr.py +3 -2
- metaobjects-1.1.0/tests/codegen/test_cli_help_removed_flags.py +15 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_providers.py +9 -8
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_registry.py +14 -12
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_render_helper_template_root.py +21 -20
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_staleness_nudge.py +6 -5
- metaobjects-1.1.0/tests/codegen/test_cli_surface.py +76 -0
- metaobjects-1.1.0/tests/codegen/test_cli_verify_field_lint.py +101 -0
- metaobjects-1.1.0/tests/codegen/test_cli_verify_requirements.py +481 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_verify_strict.py +7 -6
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_verify_subverbs.py +15 -16
- metaobjects-1.1.0/tests/codegen/test_collection_name_collision.py +109 -0
- metaobjects-1.1.0/tests/codegen/test_config_run_settings.py +325 -0
- metaobjects-1.1.0/tests/codegen/test_cross_package_binding_conformance.py +109 -0
- metaobjects-1.1.0/tests/codegen/test_docs_generators.py +225 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_eject.py +116 -2
- metaobjects-1.1.0/tests/codegen/test_eject_alone.py +225 -0
- metaobjects-1.1.0/tests/codegen/test_eject_independence.py +227 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_eject_runtime.py +23 -9
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_fr010_nested_object_prompt.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_fr010_output_codegen.py +1 -1
- metaobjects-1.1.0/tests/codegen/test_fr019_shared_provided_conformance.py +294 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_gen_state_keying.py +4 -3
- metaobjects-1.1.0/tests/codegen/test_hand_edits.py +167 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_m2m_codegen.py +28 -7
- metaobjects-1.1.0/tests/codegen/test_moved_modules.py +57 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_names_generator.py +49 -30
- metaobjects-1.1.0/tests/codegen/test_one_generator_list.py +449 -0
- metaobjects-1.1.0/tests/codegen/test_orphan_sweep.py +257 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_overwrite_policy_hash.py +27 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_project_config.py +147 -3
- metaobjects-1.1.0/tests/codegen/test_project_import.py +323 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_projection_compile.py +31 -3
- metaobjects-1.1.0/tests/codegen/test_projection_docs_routes.py +56 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_render_helper_generator.py +39 -13
- metaobjects-1.1.0/tests/codegen/test_report_router.py +296 -0
- metaobjects-1.1.0/tests/codegen/test_requirement_tests_generator.py +797 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_reverse_finders.py +1 -1
- metaobjects-1.1.0/tests/codegen/test_route_path_naming.py +149 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_router_autoset.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_router_generator.py +24 -9
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_router_generator_m2m_target_tph.py +2 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_router_generator_tph_m2m.py +4 -4
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_router_generator_tph_m2m_shadowed.py +4 -4
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_runner.py +21 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_template_data.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_tph_codegen.py +2 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/config/test_dependencies.py +2 -0
- metaobjects-1.1.0/tests/config/test_neutral_config_unknown_key.py +22 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/conformance_adapter.py +8 -1
- metaobjects-1.1.0/tests/conformance/eject_contract.py +78 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_api_docs_cross_port_conformance.py +14 -25
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_conformance.py +6 -0
- metaobjects-1.1.0/tests/conformance/test_conformance_twin_roundtrip.py +122 -0
- metaobjects-1.1.0/tests/conformance/test_eject_contract.py +342 -0
- metaobjects-1.1.0/tests/conformance/test_field_lint_conformance.py +49 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_generator_registry_conformance.py +5 -1
- metaobjects-1.1.0/tests/conformance/test_naming_conformance.py +94 -0
- metaobjects-1.1.0/tests/conformance/test_requirement_check_conformance.py +132 -0
- metaobjects-1.1.0/tests/conformance/test_requirement_test_identity_conformance.py +172 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_source_resolution_conformance.py +25 -19
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_yaml_conformance.py +2 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/api_contract_assertions.py +21 -5
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/api_contract_jsonb_server.py +132 -10
- metaobjects-1.1.0/tests/integration/conftest.py +22 -0
- metaobjects-1.1.0/tests/integration/engines.py +87 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/generated_m2m_app.py +16 -4
- metaobjects-1.1.0/tests/integration/generated_projection_app.py +264 -0
- metaobjects-1.1.0/tests/integration/generated_report_app.py +233 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/generated_router_app.py +3 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/generated_tph_app.py +21 -4
- metaobjects-1.1.0/tests/integration/mysql_container.py +176 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/normalization.py +15 -10
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/query_runner.py +100 -21
- metaobjects-1.1.0/tests/integration/report_lane.py +146 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/scenarios.py +27 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_api_contract.py +1 -1
- metaobjects-1.1.0/tests/integration/test_api_contract_decimal.py +139 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_api_contract_generated.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_api_contract_jsonb.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_api_contract_m2m.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_api_contract_m2m_generated.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_api_contract_projection.py +6 -5
- metaobjects-1.1.0/tests/integration/test_api_contract_report.py +171 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_api_contract_tph_generated.py +1 -1
- metaobjects-1.1.0/tests/integration/test_generated_decimal_wire.py +344 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_llm_call_trace.py +5 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_m2m_target_tph_generated.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_normalization.py +12 -0
- metaobjects-1.1.0/tests/integration/test_query_scenarios.py +83 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_runtime_return_types.py +6 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_tph_m2m_generated.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_tph_m2m_shadowed_generated.py +1 -1
- metaobjects-1.1.0/tests/loader/test_library_packages.py +24 -0
- metaobjects-1.1.0/tests/loader/test_naming_discovery.py +104 -0
- metaobjects-1.1.0/tests/loader/test_relative_package_multi_root.py +45 -0
- metaobjects-1.1.0/tests/render/test_render_model_payload.py +129 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/test_verify_conformance.py +10 -2
- metaobjects-1.1.0/tests/runtime/test_decimal_wire.py +187 -0
- metaobjects-1.1.0/tests/runtime/test_literal_naming_sqlite.py +57 -0
- metaobjects-1.1.0/tests/runtime/test_object_manager_dialects.py +417 -0
- metaobjects-1.1.0/tests/runtime/test_object_manager_report.py +314 -0
- metaobjects-1.1.0/tests/runtime/test_validation_conformance_runtime.py +45 -0
- metaobjects-1.1.0/tests/runtime/test_validator_runner.py +509 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/test_api_docs_accuracy.py +114 -0
- metaobjects-1.1.0/tests/test_api_docs_packages.py +64 -0
- metaobjects-1.1.0/tests/test_report_read_model.py +217 -0
- metaobjects-1.1.0/tests/test_report_shape.py +879 -0
- metaobjects-1.1.0/tests/test_reporting_inert.py +228 -0
- metaobjects-1.1.0/tests/unit/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_column_naming_strategy.py +32 -13
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_effective_package.py +3 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_fr016_source_name_and_kind_aliases.py +33 -0
- metaobjects-1.1.0/tests/unit/test_inherited_reference_binding.py +37 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_n2m_resolver.py +8 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_object_manager_autoset_stamping.py +5 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_object_manager_write_through.py +5 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_registry_completeness.py +12 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_relationship_references.py +19 -11
- metaobjects-1.1.0/tests/unit/test_reporting_accessors.py +454 -0
- metaobjects-1.1.0/tests/unit/test_reporting_validation_spine_default.py +875 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_resolution_key.py +13 -0
- metaobjects-1.1.0/tests/unit/test_resolve_claim.py +47 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_super_resolve.py +2 -2
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_template_toolcall.py +1 -1
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_validation_filter_values.py +51 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_yaml_desugar.py +26 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/uv.lock +17 -2
- metaobjects-1.0.12/src/metaobjects/codegen/instance_artifacts.py +0 -43
- metaobjects-1.0.12/src/metaobjects/codegen/metaobjects-config.schema.json +0 -52
- metaobjects-1.0.12/src/metaobjects/codegen/project_config.py +0 -214
- metaobjects-1.0.12/src/metaobjects/codegen/runtime/__init__.py +0 -9
- metaobjects-1.0.12/src/metaobjects/meta/meta_root.py +0 -8
- metaobjects-1.0.12/src/metaobjects/meta/presentation/view/view_constants.py +0 -22
- metaobjects-1.0.12/src/metaobjects/naming.py +0 -144
- metaobjects-1.0.12/src/metaobjects/naming_refs.py +0 -246
- metaobjects-1.0.12/tests/codegen/test_fr019_shared_provided_conformance.py +0 -99
- metaobjects-1.0.12/tests/codegen/test_route_path_naming.py +0 -67
- metaobjects-1.0.12/tests/integration/generated_projection_app.py +0 -194
- metaobjects-1.0.12/tests/integration/test_query_scenarios.py +0 -38
- metaobjects-1.0.12/tests/render/test_render_model_payload.py +0 -53
- {metaobjects-1.0.12 → metaobjects-1.1.0}/.gitignore +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/LICENSE +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/hatch_build.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/scripts/generate_embedded_library.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/agent_context/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/agent_context/scaffold.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/attr_class_map.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/collision_names.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/format.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/names_generator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/template_generator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/model_walk.py +0 -0
- /metaobjects-1.0.12/src/metaobjects/apidocs/paths.py → /metaobjects-1.1.0/src/metaobjects/codegen/runtime/api_docs_paths.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/runtime/constraint_errors.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/codegen → metaobjects-1.1.0/src/metaobjects/codegen/runtime}/fr010_field_mapping.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/template_codegen/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/template_codegen/output_pattern.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/template_codegen/template_data.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/template_codegen/template_spec.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/codegen/type_map.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/config/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/datatype.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/documentation/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/documentation/doc_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/documentation/doc_provider.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/documentation/doc_schema.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/library/embedded_library.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/merge.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/sources/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/sources/directory_source.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/sources/file_source.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/sources/uri_source.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/validate_discriminator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/validate_enum_normalize_ambiguity.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/validate_field_mutability.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/validate_source_escapes.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/attr/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/field/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/field/field_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/identity/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/index/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/index/index_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/index/meta_index.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/object/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/object/meta_object.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/object/value_object.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/core/requirement → metaobjects-1.1.0/src/metaobjects/meta/core/reporting}/__init__.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/core/validator → metaobjects-1.1.0/src/metaobjects/meta/core/requirement}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/requirement/requirement_constants.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/persistence → metaobjects-1.1.0/src/metaobjects/meta/core/validator}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/persistence/origin → metaobjects-1.1.0/src/metaobjects/meta/persistence}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/persistence/source → metaobjects-1.1.0/src/metaobjects/meta/persistence/origin}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/presentation → metaobjects-1.1.0/src/metaobjects/meta/persistence/source}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/presentation/layout → metaobjects-1.1.0/src/metaobjects/meta/presentation}/__init__.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/presentation/ui → metaobjects-1.1.0/src/metaobjects/meta/presentation/layout}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/presentation/view → metaobjects-1.1.0/src/metaobjects/meta/presentation/ui}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/meta/template → metaobjects-1.1.0/src/metaobjects/meta/presentation/view}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/provider_extends.py +0 -0
- {metaobjects-1.0.12/src/metaobjects/shared → metaobjects-1.1.0/src/metaobjects/meta/template}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/template/meta_template.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/template/prompt_provider.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta/template/template_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/meta_endpoint.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/parser_yaml.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/provider.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/py.typed +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/registry.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/email_document.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/escapers.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/coerce.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/extract.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/extract_map.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/locate.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/normalize.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/strip.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/types.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/filesystem_provider.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/prompt/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/prompt/prompt_field.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/prompt/prompt_style.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/render/renderer.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/runtime/llm_recorder.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/runtime/tph.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/scope.py +0 -0
- {metaobjects-1.0.12/tests → metaobjects-1.1.0/src/metaobjects/shared}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/shared/separators.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/shared/structural.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/source/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/source/error_source.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/source/json_path.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/source/semantic_diff.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/source/yaml_positions.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/source_resolution.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/attr.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/documentation.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/field.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/identity.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/index.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/layout.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/origin.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/prompt.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/relationship.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/requirement.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/source.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/template.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/ui-web.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/ui.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/validator.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/spec_metamodel/view.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/src/metaobjects/validation_types.py +0 -0
- {metaobjects-1.0.12/tests/codegen → metaobjects-1.1.0/tests}/__init__.py +0 -0
- {metaobjects-1.0.12/tests/config → metaobjects-1.1.0/tests/codegen}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/gen_suite.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/extends/expected/Program.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/extends/meta.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/nested-array/meta.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/scalars/expected/Report.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/scalars/meta.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/golden/vanilla/meta.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_abstract_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_api_docs_builder.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_cli_fmt.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_codegen_compile_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_constants_config.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_entity_model.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_enum_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_extends_abstract_field_inheritance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_extract_tier_collision.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_extractor_generator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_filter_allowlist_generator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_fmt_format_file.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_format.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_generator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_generator_extension_seams.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_golden.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_inheritance_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_instance_artifacts.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_names_extends_chain.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_no_magic_physical_names.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_origin_nullability.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_output_parser_generator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_overwrite_policy.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_recipe_generators.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_render_helper_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_source_resolution.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_sourceless_entity_surface.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_sourceless_projection.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_template_generator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_template_output_pattern.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_template_scope_helpers.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_template_scope_walk.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_template_spec.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_trace_helper_generator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_type_map.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_validation_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_value_objects.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/codegen/test_write_through.py +0 -0
- {metaobjects-1.0.12/tests/conformance → metaobjects-1.1.0/tests/config}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/config/test_library_package_guard.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/config/test_neutral_config.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/config/test_source_resolver.py +0 -0
- {metaobjects-1.0.12/tests/integration → metaobjects-1.1.0/tests/conformance}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/capabilities.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/conformance-expected-failures.json +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/corpus.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/expected_failures.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/fixture_discovery.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/navigator.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_dependency_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_extract_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_extract_object_array_bounds.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_extract_object_verdict.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_fmt_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_fr010_loader_attrs.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_fr011_attrs.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_object_model_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_provider_composition_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_registry_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_runner_hardfail.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_scope_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_spec_metamodel_embed.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_strict_attr_load.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_template_codegen_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/test_template_generator_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
- {metaobjects-1.0.12/tests/loader → metaobjects-1.1.0/tests/integration}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/api_contract_m2m_server.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/api_contract_server.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/generated_jsonb_app.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/meta_ai_trace.yaml +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/postgres_container.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/integration/test_generated_router_uuid_pk.py +0 -0
- {metaobjects-1.0.12/tests/render → metaobjects-1.1.0/tests/loader}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/loader/test_abstract_subtype_authored.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/loader/test_child_wrapper_body_shape.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/loader/test_enum_extends_values_conflict.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/loader/test_field_mutability_order.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/loader/test_shipped_library_ai.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/loader/test_template_payload_target_210.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/open_closed_proof_test.py +0 -0
- {metaobjects-1.0.12/tests/render/extract → metaobjects-1.1.0/tests/render}/__init__.py +0 -0
- {metaobjects-1.0.12/tests/render/prompt → metaobjects-1.1.0/tests/render/extract}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_coerce.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_extract.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_extract_map.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_json_forgiving_reader.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_locate.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_model.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_normalize.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_strip.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
- {metaobjects-1.0.12/tests/source → metaobjects-1.1.0/tests/render/prompt}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/prompt/test_output_format_renderer.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/test_email_document.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/test_filesystem_provider.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/test_output_format_renderer_nested.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/test_output_prompt_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/test_render_conformance.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/test_render_max_chars.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/render/test_verify.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/runtime/test_constraint_errors.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/runtime/test_object_manager_currency_read.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/runtime/test_object_manager_enum_intvaluemap.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/runtime/test_object_manager_table_name.py +0 -0
- {metaobjects-1.0.12/tests/unit → metaobjects-1.1.0/tests/source}/__init__.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/source/test_fr5c_merge_attribution.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/source/test_fr5d_reference_resolution.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/source/test_fr5e_database_source_shape.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/source/test_json_path.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/source/test_semantic_diff.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/source/test_source_on_node.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/source/test_yaml_positions.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/test_meta_endpoint.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_agent_context_staleness.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_capabilities.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_common_attrs.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_core_types.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_derive_m2m_declaring_entity.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_effective_children_sibling_shadowing.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_errors.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_field_enum.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_field_enum_intvaluemap.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_field_map_validation.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_file_source_id.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_index_lookup.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_llm_recorder.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_loader.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_loader_bom.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_loader_class.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_merge.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_meta_attr.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_meta_data.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_meta_source.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_module_shortcuts.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_n2m_resolver_inherited.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_no_dead_config_fields.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_one_primary_source.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_parser.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_parser_yaml.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_provider.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_provider_extension.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_registry.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_registry_extend.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_registry_sealed.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_relationship_m2m_validation.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_relationship_referential_actions.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_serializer.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_serializer_shared_document.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_shared_constants.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_smoke.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_source_escapes.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_sources.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_strict_child_placement.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_template_wrong_subtype_attrs.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_validation_attr_schema.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_validation_origin_195.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_validation_origin_paths.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_validation_sort_field.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_validation_warnings.py +0 -0
- {metaobjects-1.0.12 → metaobjects-1.1.0}/tests/unit/test_write_coercion_arrays.py +0 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: metaobjects
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Cross-language metadata standard: declare typed entities once, generate idiomatic drift-checked code across languages — Python port.
|
|
5
5
|
Project-URL: Homepage, https://metaobjects.dev
|
|
6
6
|
Project-URL: Repository, https://github.com/metaobjectsdev/metaobjects
|
|
7
7
|
Project-URL: Documentation, https://github.com/metaobjectsdev/metaobjects/tree/main/docs
|
|
8
8
|
Project-URL: Issues, https://github.com/metaobjectsdev/metaobjects/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/metaobjectsdev/metaobjects/blob/main/CHANGELOG.md
|
|
9
10
|
Author-email: Doug Mealing <doug@metaobjects.com>
|
|
10
11
|
License-Expression: Apache-2.0
|
|
11
12
|
License-File: LICENSE
|
|
@@ -31,6 +32,9 @@ Provides-Extra: integration
|
|
|
31
32
|
Requires-Dist: fastapi>=0.110; extra == 'integration'
|
|
32
33
|
Requires-Dist: httpx>=0.27; extra == 'integration'
|
|
33
34
|
Requires-Dist: pg8000>=1.31; extra == 'integration'
|
|
35
|
+
Requires-Dist: pymysql>=1.1; extra == 'integration'
|
|
36
|
+
Provides-Extra: mysql
|
|
37
|
+
Requires-Dist: pymysql>=1.1; extra == 'mysql'
|
|
34
38
|
Description-Content-Type: text/markdown
|
|
35
39
|
|
|
36
40
|
# MetaObjects (Python)
|
|
@@ -80,10 +84,22 @@ The primary public API is the **loader** (`load_directory` / `load_uris` /
|
|
|
80
84
|
distribution also ships the Python implementations of the other pillars used by the CLI
|
|
81
85
|
and tooling: `codegen` (Pydantic + FastAPI emit — reference generators you own:
|
|
82
86
|
`metaobjects eject <name>` copies one into your repo), `render` (Mustache + payload-VO +
|
|
83
|
-
verify), and `runtime` (a DB-API 2 `ObjectManager` — pg8000 / psycopg — no SQLAlchemy).
|
|
87
|
+
verify), and `runtime` (a DB-API 2 `ObjectManager` — pg8000 / psycopg on Postgres, the standard library's `sqlite3` on SQLite, PyMySQL on MySQL 8 (`pip install metaobjects[mysql]`) — no SQLAlchemy).
|
|
84
88
|
Schema migrations are owned by the TypeScript `meta` CLI (ADR-0015); there is
|
|
85
89
|
**no `migrate` module** in this distribution.
|
|
86
90
|
|
|
91
|
+
### Physical names
|
|
92
|
+
|
|
93
|
+
Table and column names are one project setting, `naming` in `.metaobjects/config.json`
|
|
94
|
+
(`columns` and `tables`, each `snake_case` by default or `literal`). `metaobjects gen` and
|
|
95
|
+
`verify` read it, and so do `load_directory`, `load_uris` and `load_string(..., project_dir=...)`:
|
|
96
|
+
they search upward from the metadata directory for that file, so the `ObjectManager` queries the
|
|
97
|
+
names the code was generated for. If you keep a database whose columns are named exactly like the
|
|
98
|
+
fields, add `"naming": { "columns": "literal" }`. With no config file found the loader warns once
|
|
99
|
+
and uses `snake_case`; `metaobjects.naming.attach_naming(root, project_dir)` sets it explicitly and
|
|
100
|
+
wins. See [the upgrade guide](../../docs/features/migrations/upgrading-1.0-to-1.1.md) and
|
|
101
|
+
[physical naming](../../docs/features/migrations/physical-naming.md).
|
|
102
|
+
|
|
87
103
|
## Authoring formats
|
|
88
104
|
|
|
89
105
|
- **Canonical JSON** (`*.json`) — the cross-language interchange shape.
|
|
@@ -45,10 +45,22 @@ The primary public API is the **loader** (`load_directory` / `load_uris` /
|
|
|
45
45
|
distribution also ships the Python implementations of the other pillars used by the CLI
|
|
46
46
|
and tooling: `codegen` (Pydantic + FastAPI emit — reference generators you own:
|
|
47
47
|
`metaobjects eject <name>` copies one into your repo), `render` (Mustache + payload-VO +
|
|
48
|
-
verify), and `runtime` (a DB-API 2 `ObjectManager` — pg8000 / psycopg — no SQLAlchemy).
|
|
48
|
+
verify), and `runtime` (a DB-API 2 `ObjectManager` — pg8000 / psycopg on Postgres, the standard library's `sqlite3` on SQLite, PyMySQL on MySQL 8 (`pip install metaobjects[mysql]`) — no SQLAlchemy).
|
|
49
49
|
Schema migrations are owned by the TypeScript `meta` CLI (ADR-0015); there is
|
|
50
50
|
**no `migrate` module** in this distribution.
|
|
51
51
|
|
|
52
|
+
### Physical names
|
|
53
|
+
|
|
54
|
+
Table and column names are one project setting, `naming` in `.metaobjects/config.json`
|
|
55
|
+
(`columns` and `tables`, each `snake_case` by default or `literal`). `metaobjects gen` and
|
|
56
|
+
`verify` read it, and so do `load_directory`, `load_uris` and `load_string(..., project_dir=...)`:
|
|
57
|
+
they search upward from the metadata directory for that file, so the `ObjectManager` queries the
|
|
58
|
+
names the code was generated for. If you keep a database whose columns are named exactly like the
|
|
59
|
+
fields, add `"naming": { "columns": "literal" }`. With no config file found the loader warns once
|
|
60
|
+
and uses `snake_case`; `metaobjects.naming.attach_naming(root, project_dir)` sets it explicitly and
|
|
61
|
+
wins. See [the upgrade guide](../../docs/features/migrations/upgrading-1.0-to-1.1.md) and
|
|
62
|
+
[physical naming](../../docs/features/migrations/physical-naming.md).
|
|
63
|
+
|
|
52
64
|
## Authoring formats
|
|
53
65
|
|
|
54
66
|
- **Canonical JSON** (`*.json`) — the cross-language interchange shape.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "metaobjects"
|
|
3
|
-
version = "1.0
|
|
3
|
+
version = "1.1.0"
|
|
4
4
|
description = "Cross-language metadata standard: declare typed entities once, generate idiomatic drift-checked code across languages — Python port."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -47,6 +47,7 @@ Homepage = "https://metaobjects.dev"
|
|
|
47
47
|
Repository = "https://github.com/metaobjectsdev/metaobjects"
|
|
48
48
|
Documentation = "https://github.com/metaobjectsdev/metaobjects/tree/main/docs"
|
|
49
49
|
Issues = "https://github.com/metaobjectsdev/metaobjects/issues"
|
|
50
|
+
Changelog = "https://github.com/metaobjectsdev/metaobjects/blob/main/CHANGELOG.md"
|
|
50
51
|
|
|
51
52
|
[project.optional-dependencies]
|
|
52
53
|
dev = ["pytest>=8", "mypy>=1.10", "ruff>=0.6", "pydantic>=2"]
|
|
@@ -56,7 +57,16 @@ dev = ["pytest>=8", "mypy>=1.10", "ruff>=0.6", "pydantic>=2"]
|
|
|
56
57
|
# TS/Java pattern of bypassing testcontainers wrappers entirely); the
|
|
57
58
|
# api-contract harness drives a FastAPI Author API in-process via the
|
|
58
59
|
# starlette TestClient (httpx).
|
|
59
|
-
integration = ["pg8000>=1.31", "fastapi>=0.110", "httpx>=0.27"]
|
|
60
|
+
integration = ["pg8000>=1.31", "PyMySQL>=1.1", "fastapi>=0.110", "httpx>=0.27"]
|
|
61
|
+
# MySQL for the ObjectManager (`metaobjects.runtime.MySqlDriver`). PyMySQL is pure Python,
|
|
62
|
+
# so like pg8000 it installs without native build dependencies. SQLite needs nothing: the
|
|
63
|
+
# driver wraps the standard library's `sqlite3`.
|
|
64
|
+
mysql = ["PyMySQL>=1.1"]
|
|
65
|
+
|
|
66
|
+
[[tool.mypy.overrides]]
|
|
67
|
+
# PyMySQL ships no type information.
|
|
68
|
+
module = ["pymysql", "pymysql.*"]
|
|
69
|
+
ignore_missing_imports = true
|
|
60
70
|
|
|
61
71
|
[build-system]
|
|
62
72
|
requires = ["hatchling"]
|
|
@@ -19,7 +19,7 @@ from __future__ import annotations
|
|
|
19
19
|
from typing import TYPE_CHECKING, Any
|
|
20
20
|
|
|
21
21
|
# Path math is leaf-level (no generator imports) — safe to expose eagerly.
|
|
22
|
-
from metaobjects.
|
|
22
|
+
from metaobjects.codegen.runtime.api_docs_paths import (
|
|
23
23
|
Layout,
|
|
24
24
|
doc_page_output_path,
|
|
25
25
|
model_cross_href,
|
|
@@ -28,7 +28,7 @@ from metaobjects.apidocs.paths import (
|
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
if TYPE_CHECKING: # pragma: no cover - import-time only for type checkers
|
|
31
|
-
from metaobjects.
|
|
31
|
+
from metaobjects.codegen.runtime.api_docs_model import (
|
|
32
32
|
ApiModel,
|
|
33
33
|
ApiSymbol,
|
|
34
34
|
ApiSymbolKind,
|
|
@@ -36,8 +36,8 @@ if TYPE_CHECKING: # pragma: no cover - import-time only for type checkers
|
|
|
36
36
|
FieldShape,
|
|
37
37
|
UnitExample,
|
|
38
38
|
)
|
|
39
|
-
from metaobjects.
|
|
40
|
-
from metaobjects.
|
|
39
|
+
from metaobjects.codegen.runtime.api_docs_builder import PythonApiModelBuilder, build_api_model
|
|
40
|
+
from metaobjects.codegen.runtime.api_docs_renderer import (
|
|
41
41
|
PythonApiDocsRenderer,
|
|
42
42
|
render_agent_api,
|
|
43
43
|
render_index,
|
|
@@ -46,18 +46,18 @@ if TYPE_CHECKING: # pragma: no cover - import-time only for type checkers
|
|
|
46
46
|
|
|
47
47
|
# Lazily-resolved exports → their defining submodule.
|
|
48
48
|
_LAZY: dict[str, str] = {
|
|
49
|
-
"ApiModel": "
|
|
50
|
-
"ApiSymbol": "
|
|
51
|
-
"ApiSymbolKind": "
|
|
52
|
-
"ApiUnit": "
|
|
53
|
-
"FieldShape": "
|
|
54
|
-
"UnitExample": "
|
|
55
|
-
"PythonApiModelBuilder": "
|
|
56
|
-
"build_api_model": "
|
|
57
|
-
"PythonApiDocsRenderer": "
|
|
58
|
-
"render_unit_page": "
|
|
59
|
-
"render_index": "
|
|
60
|
-
"render_agent_api": "
|
|
49
|
+
"ApiModel": "api_docs_model",
|
|
50
|
+
"ApiSymbol": "api_docs_model",
|
|
51
|
+
"ApiSymbolKind": "api_docs_model",
|
|
52
|
+
"ApiUnit": "api_docs_model",
|
|
53
|
+
"FieldShape": "api_docs_model",
|
|
54
|
+
"UnitExample": "api_docs_model",
|
|
55
|
+
"PythonApiModelBuilder": "api_docs_builder",
|
|
56
|
+
"build_api_model": "api_docs_builder",
|
|
57
|
+
"PythonApiDocsRenderer": "api_docs_renderer",
|
|
58
|
+
"render_unit_page": "api_docs_renderer",
|
|
59
|
+
"render_index": "api_docs_renderer",
|
|
60
|
+
"render_agent_api": "api_docs_renderer",
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
__all__ = [
|
|
@@ -87,5 +87,5 @@ def __getattr__(name: str) -> Any:
|
|
|
87
87
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
88
88
|
import importlib
|
|
89
89
|
|
|
90
|
-
mod = importlib.import_module(f"
|
|
90
|
+
mod = importlib.import_module(f"metaobjects.codegen.runtime.{submodule}")
|
|
91
91
|
return getattr(mod, name)
|
|
@@ -3,7 +3,7 @@ generated identifier the api-docs builder documents.
|
|
|
3
3
|
|
|
4
4
|
This mirrors the Java ``SpringNaming`` / C# ``CSharpNaming`` pattern: the real
|
|
5
5
|
generators delegate their name computation here, and the
|
|
6
|
-
:class:`~metaobjects.
|
|
6
|
+
:class:`~metaobjects.codegen.runtime.api_docs_builder.PythonApiModelBuilder` enumerates symbols by
|
|
7
7
|
calling the SAME functions. So the documented name can never drift from the
|
|
8
8
|
emitted name — they are computed once, in one place.
|
|
9
9
|
|
|
@@ -74,6 +74,52 @@ def _route_snake_case(name: str) -> str:
|
|
|
74
74
|
return to_snake_case(name)
|
|
75
75
|
|
|
76
76
|
|
|
77
|
+
_ALREADY_PLURAL_EXCLUDED_PRECEDING_CHARS = "suia"
|
|
78
|
+
"""The four letters that precede a genuinely SINGULAR "...s" ending in the common
|
|
79
|
+
patterns this codebase's entity names hit — status, address, bonus, alias, gas,
|
|
80
|
+
analysis. Anything else before a final "s" reads as already-plural."""
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _is_already_plural(word: str) -> bool:
|
|
84
|
+
"""True when ``word`` already reads as a plural noun, so running it through
|
|
85
|
+
the ordinary suffix rule would double it — the real defect this exists to
|
|
86
|
+
fix: ``program_purchase_stats`` -> ``program_purchase_statses`` shipped as a
|
|
87
|
+
REST collection path in an adopter's app.
|
|
88
|
+
|
|
89
|
+
Heuristic, not a dictionary: a word ending in ``s`` is already-plural UNLESS
|
|
90
|
+
the character immediately before that final ``s`` is one of s/u/i/a
|
|
91
|
+
(case-insensitive). Covers stats, settings, details, news, analytics,
|
|
92
|
+
series, photos; leaves status, address, bonus, alias, gas, analysis on the
|
|
93
|
+
ordinary suffix path (unchanged).
|
|
94
|
+
|
|
95
|
+
Known miss, deliberately not fixed here: a genuinely singular word ending in
|
|
96
|
+
"...s" with none of those four letters before it reads as already-plural too
|
|
97
|
+
— ``lens`` -> ``lens`` (correct plural ``lenses``). Fixing that needs a real
|
|
98
|
+
dictionary, which this is not; the heuristic optimizes for the shape the
|
|
99
|
+
doubling defect actually hits (entity names that are already a plural
|
|
100
|
+
concept)."""
|
|
101
|
+
if len(word) < 2:
|
|
102
|
+
return False
|
|
103
|
+
lowered = word.lower()
|
|
104
|
+
if lowered[-1] != "s":
|
|
105
|
+
return False
|
|
106
|
+
return lowered[-2] not in _ALREADY_PLURAL_EXCLUDED_PRECEDING_CHARS
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def _pluralize_legacy_suffix_only(name: str) -> str:
|
|
110
|
+
"""FROZEN — byte-for-byte the pre-fix suffix-only pluralization rule, with no
|
|
111
|
+
already-plural detection. Exposed only so :func:`pluralize` can fall back to
|
|
112
|
+
it. The DEFAULT PHYSICAL name fallback lives in a completely separate,
|
|
113
|
+
independently-frozen implementation (``meta_source._pluralize``) — this is
|
|
114
|
+
NOT that one, and the two must never be merged into a single call site."""
|
|
115
|
+
lowered = name.lower()
|
|
116
|
+
if lowered.endswith(("s", "x", "z", "ch", "sh")):
|
|
117
|
+
return name + "es"
|
|
118
|
+
if len(name) >= 2 and lowered[-1] == "y" and lowered[-2] not in "aeiou":
|
|
119
|
+
return name[:-1] + "ies"
|
|
120
|
+
return name + "s"
|
|
121
|
+
|
|
122
|
+
|
|
77
123
|
def pluralize(name: str) -> str:
|
|
78
124
|
"""``post_category`` → ``post_categories``; ``address`` → ``addresses``.
|
|
79
125
|
|
|
@@ -82,13 +128,16 @@ def pluralize(name: str) -> str:
|
|
|
82
128
|
``y`` becomes ``ies``; anything else takes ``s``. The cross-port
|
|
83
129
|
byte-identity covers the already-lowercased word :func:`route_path` feeds
|
|
84
130
|
in — suffix tests here run on a lowercased copy, unlike the JVM port's
|
|
85
|
-
case-sensitive ones, so mixed-case input may diverge.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
131
|
+
case-sensitive ones, so mixed-case input may diverge.
|
|
132
|
+
|
|
133
|
+
Adds already-plural detection (:func:`_is_already_plural`) on top of that
|
|
134
|
+
historical suffix rule (:func:`_pluralize_legacy_suffix_only`) — API/code-
|
|
135
|
+
surface pluralization only; the DEFAULT PHYSICAL table name fallback is
|
|
136
|
+
frozen separately (``meta_source._pluralize``), so an existing adopter
|
|
137
|
+
database never sees a proposed rename."""
|
|
138
|
+
if _is_already_plural(name):
|
|
139
|
+
return name
|
|
140
|
+
return _pluralize_legacy_suffix_only(name)
|
|
92
141
|
|
|
93
142
|
|
|
94
143
|
def model_class_name(obj: MetaData) -> str:
|