metaobjects 0.23.2__tar.gz → 0.24.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-0.23.2 → metaobjects-0.24.0}/PKG-INFO +1 -1
- {metaobjects-0.23.2 → metaobjects-0.24.0}/pyproject.toml +1 -1
- metaobjects-0.24.0/scripts/generate_embedded_library.py +63 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/apidocs/builder.py +76 -55
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/apidocs/naming.py +4 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/cli.py +373 -48
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/config.py +8 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/entity_model.py +22 -5
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/extractor_generator.py +39 -52
- metaobjects-0.24.0/src/metaobjects/codegen/generators/find_inbound.py +113 -0
- metaobjects-0.24.0/src/metaobjects/codegen/generators/output_parser_generator.py +373 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/output_prompt_generator.py +44 -58
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/payload_vo_generator.py +138 -19
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/router_generator.py +80 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/trace_helper_generator.py +11 -6
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/output_format_spec_emitter.py +8 -8
- metaobjects-0.24.0/src/metaobjects/codegen/overwrite_policy.py +179 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/project_config.py +22 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/runner.py +54 -3
- metaobjects-0.24.0/src/metaobjects/config/__init__.py +17 -0
- metaobjects-0.24.0/src/metaobjects/config/neutral_config.py +87 -0
- metaobjects-0.24.0/src/metaobjects/config/source_resolver.py +125 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/core_types.py +32 -40
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/errors.py +11 -4
- metaobjects-0.24.0/src/metaobjects/library/__init__.py +9 -0
- metaobjects-0.24.0/src/metaobjects/library/embedded_library.py +11 -0
- metaobjects-0.24.0/src/metaobjects/library/library_sources.py +99 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/meta_data_loader.py +32 -2
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/sources/__init__.py +2 -1
- metaobjects-0.24.0/src/metaobjects/loader/sources/directory_source.py +113 -0
- metaobjects-0.24.0/src/metaobjects/loader/validate_field_mutability.py +276 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/validation_passes.py +37 -8
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/field/field_constants.py +17 -3
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/identity/identity_constants.py +9 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/requirement/meta_requirement.py +3 -10
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/requirement/requirement_constants.py +1 -7
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/origin/origin_constants.py +7 -3
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/template/template_constants.py +24 -2
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/registry_manifest.py +1 -1
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/field.json +1 -1
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/object.json +2 -2
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/origin.json +0 -9
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/prompt.json +1 -1
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/requirement.json +8 -46
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/template.json +34 -21
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/super_resolve.py +40 -6
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/extends/expected/BaseEntity.py +2 -2
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/extends/expected/Program.py +2 -2
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +1 -1
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/nested-array/expected/PostBrief.py +1 -1
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/scalars/expected/Metric.py +1 -1
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/scalars/expected/Report.py +1 -1
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/vanilla/expected/Subscriber.py +2 -2
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_api_docs_builder.py +37 -8
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_cli_config_gen.py +66 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_cli_config_verify.py +35 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_extract_tier_collision.py +36 -28
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_extractor_generator.py +100 -42
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_fr010_output_codegen.py +93 -47
- metaobjects-0.24.0/tests/codegen/test_output_parser_generator.py +382 -0
- metaobjects-0.24.0/tests/codegen/test_overwrite_policy_hash.py +133 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_payload_vo_generator.py +83 -42
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_trace_helper_generator.py +56 -6
- metaobjects-0.24.0/tests/config/test_neutral_config.py +103 -0
- metaobjects-0.24.0/tests/config/test_source_resolver.py +129 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_fr010_loader_attrs.py +81 -47
- metaobjects-0.24.0/tests/conformance/test_source_resolution_conformance.py +185 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/api_contract_server.py +26 -9
- metaobjects-0.24.0/tests/loader/test_field_mutability_order.py +46 -0
- metaobjects-0.24.0/tests/loader/test_shipped_library_ai.py +343 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/loader/test_template_payload_target_210.py +1 -5
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/test_api_docs_accuracy.py +40 -10
- metaobjects-0.24.0/tests/unit/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_sources.py +72 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_template_wrong_subtype_attrs.py +50 -8
- {metaobjects-0.23.2 → metaobjects-0.24.0}/uv.lock +1 -1
- metaobjects-0.23.2/src/metaobjects/codegen/generators/output_parser_generator.py +0 -364
- metaobjects-0.23.2/src/metaobjects/codegen/overwrite_policy.py +0 -27
- metaobjects-0.23.2/src/metaobjects/loader/sources/directory_source.py +0 -50
- metaobjects-0.23.2/src/metaobjects/loader/validate_field_readonly.py +0 -161
- metaobjects-0.23.2/tests/codegen/test_output_parser_generator.py +0 -303
- {metaobjects-0.23.2 → metaobjects-0.24.0}/.gitignore +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/LICENSE +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/README.md +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/hatch_build.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/agent_context/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/agent_context/scaffold.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/apidocs/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/apidocs/api_model.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/apidocs/paths.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/apidocs/renderer.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/attr_class_map.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/collision_names.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/format.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generator_registry.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/fr019_shared_enum.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/render_helper_generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/template_generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/instance_artifacts.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/metaobjects-config.schema.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/runtime/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/template_codegen/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/template_codegen/output_pattern.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/template_codegen/template_data.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/template_codegen/template_spec.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/codegen/type_map.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/datatype.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/documentation/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/documentation/doc_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/documentation/doc_provider.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/documentation/doc_schema.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/merge.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/registered_validation.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/sources/file_source.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/sources/uri_source.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/validate_discriminator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/validate_enum_normalize_ambiguity.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/validate_source_escapes.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/validate_source_parameter_ref.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/attr/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/field/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/field/meta_field.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/identity/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/index/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/index/index_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/index/meta_index.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/object/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/object/meta_object.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/object/object_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/object/object_extract.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/object/value_object.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/requirement/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/validator/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/meta_data.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/meta_root.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/ui/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/view/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/provider_extends.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/template/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/template/meta_template.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/meta/template/prompt_provider.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/naming_refs.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/parser.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/parser_yaml.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/provider.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/py.typed +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/registry.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/email_document.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/escapers.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/coerce.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/extract.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/extract_map.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/locate.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/normalize.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/strip.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/types.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/filesystem_provider.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/payload_accessors.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/prompt/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/prompt/prompt_field.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/prompt/prompt_style.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/renderer.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/render/verify.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/runtime/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/runtime/llm_recorder.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/runtime/n2m_resolver.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/runtime/object_manager.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/runtime/tph.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/serializer_json.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/shared/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/shared/base_types.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/shared/separators.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/shared/structural.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/source/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/source/error_source.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/source/json_path.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/source/semantic_diff.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/source/yaml_positions.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/attr.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/db.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/documentation.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/identity.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/index.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/layout.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/relationship.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/source.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/ui-web.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/ui.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/validator.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/spec_metamodel/view.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/validation_types.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/src/metaobjects/yaml_desugar.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/extends/meta.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/nested-array/meta.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/scalars/meta.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/golden/vanilla/meta.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_abstract_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_api_docs_paths.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_cli.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_cli_providers.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_cli_registry.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_cli_staleness_nudge.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_cli_verify_strict.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_cli_verify_subverbs.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_constants_config.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_entity_model.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_enum_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_extends_abstract_field_inheritance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_filter_allowlist_generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_format.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_fr010_nested_object_prompt.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_fr019_shared_provided_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_generator_extension_seams.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_golden.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_inheritance_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_instance_artifacts.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_m2m_codegen.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_origin_nullability.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_overwrite_policy.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_project_config.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_projection_compile.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_render_helper_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_render_helper_generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_reverse_finders.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_router_autoset.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_router_generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_runner.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_sourceless_projection.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_template_data.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_template_generator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_template_output_pattern.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_template_scope_helpers.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_template_scope_walk.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_template_spec.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_tph_codegen.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_type_map.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_validation_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/codegen/test_write_through.py +0 -0
- {metaobjects-0.23.2/tests/conformance → metaobjects-0.24.0/tests/config}/__init__.py +0 -0
- {metaobjects-0.23.2/tests/integration → metaobjects-0.24.0/tests/conformance}/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/capabilities.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/conformance-expected-failures.json +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/conformance_adapter.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/corpus.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/expected_failures.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/fixture_discovery.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/navigator.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_api_docs_cross_port_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_extract_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_extract_object_verdict.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_fr011_attrs.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_generator_registry_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_object_model_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_provider_composition_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_registry_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_runner_hardfail.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_spec_metamodel_embed.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_strict_attr_load.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_template_codegen_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_template_generator_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/test_yaml_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
- {metaobjects-0.23.2/tests/loader → metaobjects-0.24.0/tests/integration}/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/api_contract_assertions.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/api_contract_jsonb_server.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/api_contract_m2m_server.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/generated_jsonb_app.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/generated_m2m_app.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/generated_router_app.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/generated_tph_app.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/meta_ai_trace.yaml +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/normalization.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/postgres_container.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/query_runner.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/scenarios.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_api_contract.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_api_contract_generated.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_api_contract_jsonb.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_api_contract_m2m.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_api_contract_m2m_generated.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_api_contract_tph_generated.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_generated_router_uuid_pk.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_llm_call_trace.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_normalization.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_query_scenarios.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/integration/test_runtime_return_types.py +0 -0
- {metaobjects-0.23.2/tests/render → metaobjects-0.24.0/tests/loader}/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/loader/test_enum_extends_values_conflict.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/open_closed_proof_test.py +0 -0
- {metaobjects-0.23.2/tests/render/extract → metaobjects-0.24.0/tests/render}/__init__.py +0 -0
- {metaobjects-0.23.2/tests/render/prompt → metaobjects-0.24.0/tests/render/extract}/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_coerce.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_extract.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_extract_map.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_json_forgiving_reader.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_locate.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_model.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_normalize.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_strip.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
- {metaobjects-0.23.2/tests/source → metaobjects-0.24.0/tests/render/prompt}/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/prompt/test_output_format_renderer.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/test_email_document.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/test_filesystem_provider.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/test_output_format_renderer_nested.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/test_output_prompt_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/test_render_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/test_render_max_chars.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/test_verify.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/render/test_verify_conformance.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/runtime/test_object_manager_enum_intvaluemap.py +0 -0
- {metaobjects-0.23.2/tests/unit → metaobjects-0.24.0/tests/source}/__init__.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/source/test_fr5c_merge_attribution.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/source/test_fr5d_reference_resolution.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/source/test_fr5e_database_source_shape.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/source/test_json_path.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/source/test_semantic_diff.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/source/test_source_on_node.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/source/test_yaml_positions.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_agent_context_staleness.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_capabilities.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_common_attrs.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_core_types.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_effective_package.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_errors.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_field_enum.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_field_enum_intvaluemap.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_field_map_validation.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_fr016_source_name_and_kind_aliases.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_index_lookup.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_llm_recorder.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_loader.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_loader_bom.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_loader_class.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_merge.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_meta_attr.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_meta_data.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_meta_source.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_module_shortcuts.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_n2m_resolver.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_n2m_resolver_inherited.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_object_manager_autoset_stamping.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_object_manager_write_through.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_one_primary_source.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_parser.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_parser_yaml.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_provider.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_provider_extension.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_registry.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_registry_completeness.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_registry_extend.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_registry_sealed.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_relationship_referential_actions.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_resolution_key.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_serializer.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_shared_constants.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_smoke.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_source_escapes.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_strict_child_placement.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_super_resolve.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_template_toolcall.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_validation_attr_schema.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_validation_filter_values.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_validation_origin_195.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_validation_origin_paths.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_validation_sort_field.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_validation_warnings.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_write_coercion_arrays.py +0 -0
- {metaobjects-0.23.2 → metaobjects-0.24.0}/tests/unit/test_yaml_desugar.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: metaobjects
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.24.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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "metaobjects"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.24.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"
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Regenerate ``metaobjects/library/embedded_library.py`` from the repo-root ``library/``.
|
|
3
|
+
|
|
4
|
+
Cross-port parity: mirrors ``scripts/generate-embedded-library.ts`` in the TypeScript
|
|
5
|
+
port, including the ref convention (path under ``library/`` minus the ``.yaml``
|
|
6
|
+
extension) so both ports key the same content identically.
|
|
7
|
+
|
|
8
|
+
Why embed at all: a wheel installed into site-packages has no repo-root ``library/``
|
|
9
|
+
tree, and shipping the YAML as package data is one packaging-config mistake away from a
|
|
10
|
+
silently absent library. A generated ``.py`` module is ordinary source — it cannot be
|
|
11
|
+
dropped by a build backend.
|
|
12
|
+
|
|
13
|
+
Run from anywhere: python server/python/scripts/generate_embedded_library.py
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import sys
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
HEADER = '''\
|
|
22
|
+
# AUTO-GENERATED by scripts/generate_embedded_library.py — DO NOT EDIT.
|
|
23
|
+
# Canonical source: repo-root library/**/*.yaml
|
|
24
|
+
# Regenerate: python server/python/scripts/generate_embedded_library.py
|
|
25
|
+
#
|
|
26
|
+
# Embeds the canonical library files as string literals so they resolve wherever the
|
|
27
|
+
# on-disk library/ directory is unavailable (a wheel installed into site-packages).
|
|
28
|
+
# Keys are refs: path under library/ minus the .yaml extension.
|
|
29
|
+
|
|
30
|
+
EMBEDDED_LIBRARY: dict[str, str] = {
|
|
31
|
+
'''
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def repo_root(start: Path) -> Path:
|
|
35
|
+
"""Walk up until a directory holds BOTH ``library/`` and ``server/``."""
|
|
36
|
+
for candidate in [start, *start.parents]:
|
|
37
|
+
if (candidate / "library").is_dir() and (candidate / "server").is_dir():
|
|
38
|
+
return candidate
|
|
39
|
+
raise SystemExit("could not locate the repo root (a dir containing library/ and server/)")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def main() -> int:
|
|
43
|
+
root = repo_root(Path(__file__).resolve().parent)
|
|
44
|
+
library_dir = root / "library"
|
|
45
|
+
out_path = root / "server/python/src/metaobjects/library/embedded_library.py"
|
|
46
|
+
|
|
47
|
+
entries = []
|
|
48
|
+
for path in sorted(library_dir.rglob("*.yaml")):
|
|
49
|
+
ref = path.relative_to(library_dir).with_suffix("").as_posix()
|
|
50
|
+
entries.append((ref, path.read_text(encoding="utf-8")))
|
|
51
|
+
|
|
52
|
+
if not entries:
|
|
53
|
+
raise SystemExit(f"no *.yaml found under {library_dir} — refusing to emit an empty library")
|
|
54
|
+
|
|
55
|
+
body = "".join(f" {ref!r}: {text!r},\n" for ref, text in entries)
|
|
56
|
+
out_path.write_text(HEADER + body + "}\n", encoding="utf-8")
|
|
57
|
+
|
|
58
|
+
print(f"wrote {out_path.relative_to(root)} ({len(entries)} ref(s): {', '.join(r for r, _ in entries)})")
|
|
59
|
+
return 0
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
if __name__ == "__main__":
|
|
63
|
+
sys.exit(main())
|
|
@@ -17,10 +17,12 @@ Per-category enumeration (mirrors the Java ``JavaApiModelBuilder`` / C#
|
|
|
17
17
|
``Protocol``) / REST (one per FastAPI route) / VALIDATION (Pydantic field
|
|
18
18
|
constraints on the create/update shape) / FILTER (the allowlist). A value object
|
|
19
19
|
→ MODEL only. An abstract object / a TPH subtype yields no instance artifacts.
|
|
20
|
-
* Templates (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
* Templates (EVERY subtype — ADR-0052): a resolvable ``@payloadRef`` gives the
|
|
21
|
+
PAYLOAD record it renders outbound, plus RENDER for a ``template.output`` (the
|
|
22
|
+
only subtype the render-helper generator emits for). A ``template.prompt``
|
|
23
|
+
declaring ``@responseRef`` adds the INBOUND tier — the response PAYLOAD record,
|
|
24
|
+
PROMPT (the response-format fragment) and EXTRACTOR, plus OUTPUT_PARSER unless
|
|
25
|
+
the reply is XML, which gets no strict tier (ADR-0053).
|
|
24
26
|
|
|
25
27
|
An object that yields no symbols (e.g. an abstract object) produces NO unit at all
|
|
26
28
|
(never an empty unit).
|
|
@@ -40,6 +42,7 @@ from metaobjects.codegen.generators.m2m_codegen import (
|
|
|
40
42
|
build_object_index,
|
|
41
43
|
resolve_m2m_descriptors,
|
|
42
44
|
)
|
|
45
|
+
from metaobjects.codegen.generators.find_inbound import is_xml, response_shape
|
|
43
46
|
from metaobjects.codegen.generators.payload_vo_generator import (
|
|
44
47
|
is_field_required,
|
|
45
48
|
resolve_payload_vo,
|
|
@@ -57,9 +60,6 @@ from metaobjects.meta.template import template_constants as tc
|
|
|
57
60
|
from metaobjects.shared.base_types import TYPE_OBJECT, TYPE_TEMPLATE
|
|
58
61
|
from metaobjects.shared.separators import PACKAGE_SEP
|
|
59
62
|
|
|
60
|
-
# Structured formats that get an output-format prompt + a tolerant extractor.
|
|
61
|
-
_STRUCTURED_FORMATS = frozenset({tc.TEMPLATE_FORMAT_JSON, tc.TEMPLATE_FORMAT_XML})
|
|
62
|
-
|
|
63
63
|
|
|
64
64
|
def _pkg_of(node: MetaData) -> str:
|
|
65
65
|
"""The effective package of a node — its ``resolution_key()`` minus the
|
|
@@ -97,11 +97,6 @@ def _is_writable_table_entity(obj: MetaObject, object_index: dict[str, MetaObjec
|
|
|
97
97
|
return src.effective_kind() == SOURCE_KIND_TABLE
|
|
98
98
|
|
|
99
99
|
|
|
100
|
-
def _template_format(tmpl: MetaData) -> str:
|
|
101
|
-
fmt = tmpl.get_meta_attr(tc.TEMPLATE_ATTR_FORMAT) # ADR-0039: template attr resolves via extends (not origin; templates CAN extend)
|
|
102
|
-
return fmt if isinstance(fmt, str) and fmt else tc.TEMPLATE_FORMAT_DEFAULT
|
|
103
|
-
|
|
104
|
-
|
|
105
100
|
def _payload_resolves(tmpl: MetaData, root: MetaData) -> MetaObject | None:
|
|
106
101
|
"""The payload VO a template resolves to (``@payloadRef`` → ``object.value``),
|
|
107
102
|
or ``None`` — the shared gate for payload / render / prompt / parser / extractor."""
|
|
@@ -141,11 +136,13 @@ class PythonApiModelBuilder:
|
|
|
141
136
|
if unit is not None:
|
|
142
137
|
units.append(unit)
|
|
143
138
|
|
|
144
|
-
# Templates:
|
|
145
|
-
#
|
|
139
|
+
# Templates: ADR-0052 — EVERY template subtype gets a unit, not just
|
|
140
|
+
# template.output. A template.prompt carries a @payloadRef record and, when it
|
|
141
|
+
# declares @responseRef, the whole inbound tier — all of it generated, so all
|
|
142
|
+
# of it documentable.
|
|
146
143
|
# ADR-0039 sanctioned own: top-level scan on the loader ROOT (never extended, own == effective)
|
|
147
144
|
for tmpl in root.own_children():
|
|
148
|
-
if tmpl.type == TYPE_TEMPLATE
|
|
145
|
+
if tmpl.type == TYPE_TEMPLATE:
|
|
149
146
|
units.append(self._build_template_unit(tmpl, root))
|
|
150
147
|
|
|
151
148
|
return ApiModel(project, units)
|
|
@@ -280,10 +277,9 @@ class PythonApiModelBuilder:
|
|
|
280
277
|
module = naming.snake_case(name)
|
|
281
278
|
symbols: list[ApiSymbol] = []
|
|
282
279
|
payload_vo = _payload_resolves(tmpl, root)
|
|
283
|
-
fmt = _template_format(tmpl).lower()
|
|
284
280
|
|
|
285
281
|
if payload_vo is not None:
|
|
286
|
-
# PAYLOAD — the typed Pydantic
|
|
282
|
+
# PAYLOAD — the typed Pydantic record for the shape this template RENDERS.
|
|
287
283
|
payload_class = naming.payload_class_name(name)
|
|
288
284
|
symbols.append(
|
|
289
285
|
ApiSymbol(
|
|
@@ -298,56 +294,81 @@ class PythonApiModelBuilder:
|
|
|
298
294
|
)
|
|
299
295
|
)
|
|
300
296
|
|
|
301
|
-
# RENDER — the typed render helper wrapping the render engine.
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
297
|
+
# RENDER — the typed render helper wrapping the render engine. OUTBOUND
|
|
298
|
+
# ONLY: render_helper_generator emits for a template.output alone, so
|
|
299
|
+
# documenting it for a prompt would name a function never generated.
|
|
300
|
+
if tmpl.sub_type == tc.TEMPLATE_SUBTYPE_OUTPUT:
|
|
301
|
+
render_fn = naming.render_helper_fn(name)
|
|
302
|
+
symbols.append(
|
|
303
|
+
ApiSymbol(
|
|
304
|
+
name=render_fn,
|
|
305
|
+
kind=ApiSymbolKind.RENDER,
|
|
306
|
+
module=f"from .{module}_render_helper import {render_fn}",
|
|
307
|
+
signature=f"def {render_fn}(payload, provider)",
|
|
308
|
+
usage="renders the output template against a typed payload",
|
|
309
|
+
returns="EmailDocument" if _is_email_kind(tmpl) else "str",
|
|
310
|
+
)
|
|
311
311
|
)
|
|
312
|
-
)
|
|
313
312
|
|
|
314
|
-
|
|
315
|
-
|
|
313
|
+
# ADR-0052 — the INBOUND symbols belong to a RESPONDING template.prompt, never
|
|
314
|
+
# to an output, and the gate is @responseRef PRESENCE rather than a format
|
|
315
|
+
# value. Shares `response_shape` with the generators, so the docs can never
|
|
316
|
+
# claim a symbol codegen suppressed.
|
|
317
|
+
inbound = response_shape(root, tmpl, _pkg_of(tmpl))
|
|
318
|
+
if inbound is not None:
|
|
319
|
+
# The RESPONSE record the parser actually returns — not the @payloadRef
|
|
320
|
+
# request record documented above, which types what this prompt renders out.
|
|
321
|
+
response_class = naming.response_class_name(name)
|
|
316
322
|
symbols.append(
|
|
317
323
|
ApiSymbol(
|
|
318
|
-
name=
|
|
319
|
-
kind=ApiSymbolKind.
|
|
320
|
-
module=
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
+
name=response_class,
|
|
325
|
+
kind=ApiSymbolKind.PAYLOAD,
|
|
326
|
+
module=(
|
|
327
|
+
f"from .{naming.response_module_name(name)} import {response_class}"
|
|
328
|
+
),
|
|
329
|
+
signature=f"class {response_class}(BaseModel)",
|
|
330
|
+
usage="the typed response shape a model reply is parsed into",
|
|
331
|
+
fields=self._payload_fields(inbound.vo),
|
|
324
332
|
)
|
|
325
333
|
)
|
|
326
334
|
|
|
327
|
-
#
|
|
328
|
-
|
|
329
|
-
|
|
335
|
+
# OUTPUT_PARSER — the strict ``parse_*``. ADR-0053: JSON-only, so an XML
|
|
336
|
+
# reply gets no strict tier and documenting one would name a missing fn.
|
|
337
|
+
if not is_xml(inbound.format):
|
|
338
|
+
parse_fn = naming.output_parser_fn(name)
|
|
330
339
|
symbols.append(
|
|
331
340
|
ApiSymbol(
|
|
332
|
-
name=
|
|
333
|
-
kind=ApiSymbolKind.
|
|
334
|
-
module=f"from .{module}
|
|
335
|
-
signature=f"def {
|
|
336
|
-
usage="
|
|
337
|
-
returns=
|
|
341
|
+
name=parse_fn,
|
|
342
|
+
kind=ApiSymbolKind.OUTPUT_PARSER,
|
|
343
|
+
module=f"from .{module}_response_parser import {parse_fn}",
|
|
344
|
+
signature=f"def {parse_fn}(text)",
|
|
345
|
+
usage="parses a model reply back into the typed response shape",
|
|
346
|
+
returns=response_class,
|
|
338
347
|
)
|
|
339
348
|
)
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
349
|
+
|
|
350
|
+
prompt_fn = naming.output_prompt_fn(name)
|
|
351
|
+
symbols.append(
|
|
352
|
+
ApiSymbol(
|
|
353
|
+
name=prompt_fn,
|
|
354
|
+
kind=ApiSymbolKind.PROMPT,
|
|
355
|
+
module=f"from .{module}_response_format import {prompt_fn}",
|
|
356
|
+
signature=f"def {prompt_fn}(overrides=None)",
|
|
357
|
+
usage="builds the response-format prompt fragment",
|
|
358
|
+
returns="str",
|
|
350
359
|
)
|
|
360
|
+
)
|
|
361
|
+
extract_fn = naming.extractor_fn(name)
|
|
362
|
+
symbols.append(
|
|
363
|
+
ApiSymbol(
|
|
364
|
+
name=extract_fn,
|
|
365
|
+
kind=ApiSymbolKind.EXTRACTOR,
|
|
366
|
+
module=f"from .{module}_extractor import {extract_fn}",
|
|
367
|
+
signature=f"def {extract_fn}(root, text, opts=None)",
|
|
368
|
+
usage="extracts the strict typed response from dirty model output",
|
|
369
|
+
returns=response_class,
|
|
370
|
+
)
|
|
371
|
+
)
|
|
351
372
|
|
|
352
373
|
return ApiUnit(name, _package_of(tmpl), "template", symbols)
|
|
353
374
|
|
|
@@ -20,6 +20,8 @@ from __future__ import annotations
|
|
|
20
20
|
from metaobjects.codegen.generators.payload_vo_generator import (
|
|
21
21
|
payload_class_name,
|
|
22
22
|
payload_module_name,
|
|
23
|
+
response_class_name,
|
|
24
|
+
response_module_name,
|
|
23
25
|
)
|
|
24
26
|
|
|
25
27
|
__all__ = [
|
|
@@ -35,6 +37,8 @@ __all__ = [
|
|
|
35
37
|
"pk_param",
|
|
36
38
|
"payload_class_name",
|
|
37
39
|
"payload_module_name",
|
|
40
|
+
"response_class_name",
|
|
41
|
+
"response_module_name",
|
|
38
42
|
"render_helper_fn",
|
|
39
43
|
"output_prompt_fn",
|
|
40
44
|
"output_parser_fn",
|