metaobjects 1.0.9rc2__tar.gz → 1.0.9rc4__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.9rc2 → metaobjects-1.0.9rc4}/PKG-INFO +1 -1
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/pyproject.toml +1 -1
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/extractor_generator.py +14 -7
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/trace_helper_generator.py +11 -6
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/object_extract.py +25 -10
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/extract.py +16 -6
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/types.py +18 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/prompt/output_format_renderer.py +4 -1
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_extractor_generator.py +29 -1
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_trace_helper_generator.py +3 -1
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_extract_conformance.py +6 -1
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_output_prompt_conformance.py +1 -1
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/.gitignore +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/LICENSE +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/README.md +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/hatch_build.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/scripts/generate_embedded_library.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/agent_context/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/agent_context/scaffold.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/apidocs/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/apidocs/api_model.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/apidocs/builder.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/apidocs/naming.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/apidocs/paths.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/apidocs/renderer.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/attr_class_map.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/cli.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/collision_names.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/config.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/eject.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/format.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generator_registry.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/entity_model.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/find_inbound.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/fr019_shared_enum.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/names_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/output_parser_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/output_prompt_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/render_helper_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/router_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/template_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/instance_artifacts.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/metaobjects-config.schema.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/output_format_spec_emitter.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/overwrite_policy.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/project_config.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/runner.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/runtime/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/runtime/constraint_errors.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/template_codegen/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/template_codegen/output_pattern.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/template_codegen/template_data.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/template_codegen/template_spec.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/type_map.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/value_objects.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/config/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/config/dependencies.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/config/neutral_config.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/config/source_resolver.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/core_types.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/datatype.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/documentation/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/documentation/doc_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/documentation/doc_provider.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/documentation/doc_schema.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/errors.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/library/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/library/embedded_library.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/library/library_sources.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/merge.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/meta_data_loader.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/registered_validation.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/sources/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/sources/directory_source.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/sources/file_source.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/sources/uri_source.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_discriminator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_enum_normalize_ambiguity.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_field_mutability.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_source_escapes.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_source_parameter_ref.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validation_passes.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/attr/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/field/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/field/field_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/field/meta_field.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/identity/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/index/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/index/index_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/index/meta_index.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/meta_object.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/object_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/value_object.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/relationship/relationship_references.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/requirement/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/requirement/meta_requirement.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/requirement/requirement_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/validator/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/meta_data.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/meta_root.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/ui/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/view/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/provider_extends.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/template/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/template/meta_template.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/template/prompt_provider.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/template/template_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta_endpoint.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/naming.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/naming_refs.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/parser.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/parser_yaml.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/provider.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/py.typed +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/registry.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/registry_manifest.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/email_document.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/escapers.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/coerce.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/extract_map.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/locate.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/normalize.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/strip.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/filesystem_provider.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/payload_accessors.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/prompt/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/prompt/prompt_field.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/prompt/prompt_style.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/renderer.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/render/verify.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/runtime/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/runtime/llm_recorder.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/runtime/n2m_resolver.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/runtime/object_manager.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/runtime/tph.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/scope.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/serializer_json.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/shared/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/shared/base_types.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/shared/separators.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/shared/structural.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/source/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/source/error_source.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/source/json_path.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/source/semantic_diff.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/source/yaml_positions.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/source_resolution.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/attr.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/db.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/documentation.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/field.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/identity.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/index.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/layout.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/object.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/origin.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/prompt.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/relationship.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/requirement.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/source.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/template.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/ui-web.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/ui.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/validator.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/spec_metamodel/view.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/super_resolve.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/validation_types.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/yaml_desugar.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/gen_suite.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/extends/expected/Program.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/extends/meta.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/nested-array/meta.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/scalars/expected/Report.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/scalars/meta.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/golden/vanilla/meta.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_abstract_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_api_docs_builder.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_api_docs_paths.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_config_gen.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_config_verify.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_dependencies.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_providers.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_registry.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_render_helper_template_root.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_staleness_nudge.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_verify_strict.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_cli_verify_subverbs.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_codegen_compile_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_constants_config.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_eject.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_entity_model.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_enum_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_extends_abstract_field_inheritance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_extract_tier_collision.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_filter_allowlist_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_format.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_fr010_nested_object_prompt.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_fr010_output_codegen.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_fr019_shared_provided_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_gen_state_keying.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_generator_extension_seams.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_golden.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_inheritance_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_instance_artifacts.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_m2m_codegen.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_names_extends_chain.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_names_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_no_magic_physical_names.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_origin_nullability.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_output_parser_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_overwrite_policy.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_overwrite_policy_hash.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_project_config.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_projection_compile.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_render_helper_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_render_helper_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_reverse_finders.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_route_path_naming.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_router_autoset.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_router_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_router_generator_m2m_target_tph.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_router_generator_tph_m2m.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_router_generator_tph_m2m_shadowed.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_runner.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_source_resolution.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_sourceless_projection.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_template_data.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_template_generator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_template_output_pattern.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_template_scope_helpers.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_template_scope_walk.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_template_spec.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_tph_codegen.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_type_map.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_validation_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_value_objects.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/codegen/test_write_through.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/config/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/config/test_dependencies.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/config/test_library_package_guard.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/config/test_neutral_config.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/config/test_source_resolver.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/capabilities.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/conformance-expected-failures.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/conformance_adapter.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/corpus.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/expected_failures.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/fixture_discovery.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/navigator.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_api_docs_cross_port_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_dependency_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_extract_object_verdict.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_fr010_loader_attrs.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_fr011_attrs.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_generator_registry_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_object_model_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_provider_composition_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_registry_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_runner_hardfail.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_scope_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_source_resolution_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_spec_metamodel_embed.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_strict_attr_load.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_template_codegen_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_template_generator_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/test_yaml_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/api_contract_assertions.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/api_contract_jsonb_server.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/api_contract_m2m_server.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/api_contract_server.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/generated_jsonb_app.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/generated_m2m_app.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/generated_projection_app.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/generated_router_app.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/generated_tph_app.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/meta_ai_trace.yaml +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/normalization.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/postgres_container.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/query_runner.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/scenarios.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_api_contract.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_api_contract_generated.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_api_contract_jsonb.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_api_contract_m2m.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_api_contract_m2m_generated.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_api_contract_projection.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_api_contract_tph_generated.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_generated_router_uuid_pk.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_llm_call_trace.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_m2m_target_tph_generated.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_normalization.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_query_scenarios.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_runtime_return_types.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_tph_m2m_generated.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/integration/test_tph_m2m_shadowed_generated.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/loader/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/loader/test_abstract_subtype_authored.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/loader/test_child_wrapper_body_shape.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/loader/test_enum_extends_values_conflict.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/loader/test_field_mutability_order.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/loader/test_shipped_library_ai.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/loader/test_template_payload_target_210.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/open_closed_proof_test.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_coerce.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_extract.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_extract_map.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_json_forgiving_reader.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_locate.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_model.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_normalize.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_strip.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/prompt/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/prompt/test_output_format_renderer.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_email_document.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_filesystem_provider.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_output_format_renderer_nested.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_render_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_render_max_chars.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_render_model_payload.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_verify.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_verify_conformance.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/runtime/test_constraint_errors.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/runtime/test_object_manager_currency_read.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/runtime/test_object_manager_enum_intvaluemap.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/runtime/test_object_manager_table_name.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/source/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/source/test_fr5c_merge_attribution.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/source/test_fr5d_reference_resolution.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/source/test_fr5e_database_source_shape.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/source/test_json_path.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/source/test_semantic_diff.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/source/test_source_on_node.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/source/test_yaml_positions.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/test_api_docs_accuracy.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/test_meta_endpoint.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/__init__.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_agent_context_staleness.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_capabilities.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_column_naming_strategy.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_common_attrs.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_core_types.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_derive_m2m_declaring_entity.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_effective_children_sibling_shadowing.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_effective_package.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_errors.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_field_enum.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_field_enum_intvaluemap.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_field_map_validation.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_file_source_id.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_fr016_source_name_and_kind_aliases.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_index_lookup.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_llm_recorder.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_loader.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_loader_bom.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_loader_class.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_merge.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_meta_attr.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_meta_data.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_meta_source.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_module_shortcuts.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_n2m_resolver.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_n2m_resolver_inherited.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_no_dead_config_fields.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_object_manager_autoset_stamping.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_object_manager_write_through.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_one_primary_source.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_parser.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_parser_yaml.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_provider.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_provider_extension.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_registry.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_registry_completeness.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_registry_extend.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_registry_sealed.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_relationship_m2m_validation.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_relationship_references.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_relationship_referential_actions.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_resolution_key.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_serializer.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_serializer_shared_document.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_shared_constants.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_smoke.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_source_escapes.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_sources.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_strict_child_placement.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_super_resolve.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_template_toolcall.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_template_wrong_subtype_attrs.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_validation_attr_schema.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_validation_filter_values.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_validation_origin_195.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_validation_origin_paths.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_validation_sort_field.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_validation_warnings.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_write_coercion_arrays.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/unit/test_yaml_desugar.py +0 -0
- {metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: metaobjects
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.9rc4
|
|
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 = "1.0.
|
|
3
|
+
version = "1.0.9rc4"
|
|
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"
|
|
@@ -9,7 +9,7 @@ arrays-of-objects populated) in ONE call:
|
|
|
9
9
|
|
|
10
10
|
extract_<snake>(root, text, opts=None) -> <Vo>
|
|
11
11
|
r = extract_lenient_<snake>_with_loader(root, text, opts) # nested-capable extract
|
|
12
|
-
if r.report.has_lost_required(): raise ValueError(...)
|
|
12
|
+
if r.report.has_lost_required() or r.report.has_malformed_required(): raise ValueError(...)
|
|
13
13
|
return _to_strict_<vo>(r.data) # mirror -> strict mapper
|
|
14
14
|
|
|
15
15
|
Why the loaded ``root``: the SELF-CONTAINED ``extract_<snake>(text)`` leaves nested
|
|
@@ -173,16 +173,23 @@ def render_extractor(
|
|
|
173
173
|
lines.append(" value-object). Runs the tolerant nested-capable extract, then maps the")
|
|
174
174
|
lines.append(" extracted mirror graph onto the strict Pydantic payload graph.")
|
|
175
175
|
lines.append("")
|
|
176
|
-
lines.append(" :raises ValueError: iff a ``@required`` field was lost
|
|
176
|
+
lines.append(" :raises ValueError: iff a ``@required`` field was lost, or present but")
|
|
177
|
+
lines.append(" unusable (MALFORMED: an undeclared enum member, text for a number).")
|
|
177
178
|
lines.append(' """')
|
|
178
179
|
lines.append(f" r = {extract_lenient_with_fn}(root, text, opts)")
|
|
179
|
-
lines.append(" if r.report.has_lost_required():")
|
|
180
|
-
lines.append("
|
|
180
|
+
lines.append(" if r.report.has_lost_required() or r.report.has_malformed_required():")
|
|
181
|
+
lines.append(" unusable = []")
|
|
182
|
+
lines.append(" if r.report.has_lost_required():")
|
|
181
183
|
lines.append(
|
|
182
|
-
|
|
184
|
+
' unusable.append("lost required field(s): "'
|
|
185
|
+
' + ", ".join(r.report.lost_required()))'
|
|
183
186
|
)
|
|
184
|
-
lines.append(
|
|
185
|
-
lines.append(
|
|
187
|
+
lines.append(" if r.report.has_malformed_required():")
|
|
188
|
+
lines.append(
|
|
189
|
+
' unusable.append("malformed required field(s): "'
|
|
190
|
+
' + ", ".join(r.report.malformed_required()))'
|
|
191
|
+
)
|
|
192
|
+
lines.append(f' raise ValueError("{extract_fn}: " + "; ".join(unusable))')
|
|
186
193
|
lines.append(f" return {root_mapper}(r.data)")
|
|
187
194
|
lines.append("")
|
|
188
195
|
lines.append("")
|
|
@@ -282,13 +282,18 @@ def render_trace_helper(entity: MetaObject, root: MetaData) -> str | None:
|
|
|
282
282
|
" :param redact: optional row redaction applied before the single record.",
|
|
283
283
|
' """',
|
|
284
284
|
" outcome = extract(input.llm_response_text, _RESPONSE_SCHEMA)",
|
|
285
|
-
"
|
|
285
|
+
" # A required field lost OR malformed (present but unusable) has no value,",
|
|
286
|
+
" # so either fails the call.",
|
|
287
|
+
" unusable = []",
|
|
288
|
+
" if outcome.report.has_lost_required():",
|
|
289
|
+
' unusable.append("lost required: " + ", ".join(outcome.report.lost_required()))',
|
|
290
|
+
" if outcome.report.has_malformed_required():",
|
|
291
|
+
" unusable.append(",
|
|
292
|
+
' "malformed required: " + ", ".join(outcome.report.malformed_required())',
|
|
293
|
+
" )",
|
|
294
|
+
" failed = bool(unusable)",
|
|
286
295
|
" status = STATUS_ERROR if failed else STATUS_OK",
|
|
287
|
-
|
|
288
|
-
' "lost required: " + ", ".join(outcome.report.lost_required())',
|
|
289
|
-
" if failed",
|
|
290
|
-
" else None",
|
|
291
|
-
" )",
|
|
296
|
+
' error_detail = "; ".join(unusable) if failed else None',
|
|
292
297
|
" # Extraction owns the derived status/error_detail — fold them into the input",
|
|
293
298
|
" # before building the base row (dataclasses.replace, leaving the original",
|
|
294
299
|
" # input untouched).",
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/object_extract.py
RENAMED
|
@@ -65,22 +65,37 @@ MAX_NEST_DEPTH = 8
|
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
class ExtractError(Exception):
|
|
68
|
-
"""Raised by :func:`or_throw` when
|
|
69
|
-
fields. ``lost_required`` lists the
|
|
68
|
+
"""Raised by :func:`or_throw` when an extraction lost, or could not use, one or more
|
|
69
|
+
``@required`` fields. ``lost_required`` lists the absent paths, ``malformed_required``
|
|
70
|
+
the paths present in the reply but unusable (MALFORMED)."""
|
|
70
71
|
|
|
71
|
-
def __init__(
|
|
72
|
+
def __init__(
|
|
73
|
+
self, lost_required: list[str], malformed_required: list[str] | None = None
|
|
74
|
+
) -> None:
|
|
72
75
|
self.lost_required = list(lost_required)
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
self.malformed_required = list(malformed_required or [])
|
|
77
|
+
parts: list[str] = []
|
|
78
|
+
if self.lost_required:
|
|
79
|
+
parts.append("extract lost required field(s): " + ", ".join(self.lost_required))
|
|
80
|
+
if self.malformed_required:
|
|
81
|
+
prefix = (
|
|
82
|
+
"malformed required field(s): "
|
|
83
|
+
if parts
|
|
84
|
+
else "extract got malformed required field(s): "
|
|
85
|
+
)
|
|
86
|
+
parts.append(prefix + ", ".join(self.malformed_required))
|
|
87
|
+
super().__init__("; ".join(parts))
|
|
75
88
|
|
|
76
89
|
|
|
77
90
|
def or_throw(result: ExtractionResult[object]) -> object:
|
|
78
91
|
"""Opt into strictness: return ``result.data`` iff no ``@required`` field was
|
|
79
|
-
lost, else raise :class:`ExtractError`. Mirrors the cross-port
|
|
80
|
-
orThrow()`` / TS free ``orThrow``. Extract itself NEVER raises —
|
|
81
|
-
explicit gate a caller reaches for when
|
|
82
|
-
|
|
83
|
-
|
|
92
|
+
lost or malformed, else raise :class:`ExtractError`. Mirrors the cross-port
|
|
93
|
+
``ExtractionResult.orThrow()`` / TS free ``orThrow``. Extract itself NEVER raises —
|
|
94
|
+
this is the explicit gate a caller reaches for when an unusable required field should
|
|
95
|
+
fail."""
|
|
96
|
+
report = result.report
|
|
97
|
+
if report.has_lost_required() or report.has_malformed_required():
|
|
98
|
+
raise ExtractError(report.lost_required(), report.malformed_required())
|
|
84
99
|
return result.data
|
|
85
100
|
|
|
86
101
|
|
|
@@ -105,7 +105,7 @@ def _extract(
|
|
|
105
105
|
)
|
|
106
106
|
continue
|
|
107
107
|
if present is TRUNCATED: # present-but-garbled (empty/cut-off value)
|
|
108
|
-
report
|
|
108
|
+
_mark_malformed(report, path, f)
|
|
109
109
|
continue
|
|
110
110
|
if present is NULL_LITERAL:
|
|
111
111
|
# The JSON null literal is the caller's explicit "no value": leave the field null
|
|
@@ -144,16 +144,17 @@ def _extract(
|
|
|
144
144
|
# elements into data (partial extraction), UNLIKE a MALFORMED scalar which is
|
|
145
145
|
# absent from data.
|
|
146
146
|
data[f.name] = out
|
|
147
|
-
|
|
148
|
-
path,
|
|
149
|
-
|
|
147
|
+
if any_malformed:
|
|
148
|
+
_mark_malformed(report, path, f)
|
|
149
|
+
else:
|
|
150
|
+
report.set(path, FieldExtraction.EXTRACTED)
|
|
150
151
|
continue
|
|
151
152
|
if isinstance(present, list): # a list where a singular value was expected
|
|
152
|
-
report
|
|
153
|
+
_mark_malformed(report, path, f)
|
|
153
154
|
continue
|
|
154
155
|
v = _extract_value(f, present, path, report, o, ci)
|
|
155
156
|
if v is MALFORMED:
|
|
156
|
-
report
|
|
157
|
+
_mark_malformed(report, path, f)
|
|
157
158
|
else:
|
|
158
159
|
data[f.name] = v
|
|
159
160
|
# FR-011: a value reached via @coerceDefault (or @default) is DEFAULTED,
|
|
@@ -161,6 +162,15 @@ def _extract(
|
|
|
161
162
|
report.set(path, _classify_coerced(path, report))
|
|
162
163
|
|
|
163
164
|
|
|
165
|
+
def _mark_malformed(report: ExtractionReport, path: str, f: FieldSpec) -> None:
|
|
166
|
+
"""Classify a present-but-unusable field MALFORMED. A ``@required`` one is also recorded
|
|
167
|
+
in ``malformed_required()`` — its value is missing from data just as a lost field's is, so
|
|
168
|
+
the strict gate must fail on it (the extract-conformance corpus pins the set in every port)."""
|
|
169
|
+
report.set(path, FieldExtraction.MALFORMED)
|
|
170
|
+
if f.required:
|
|
171
|
+
report.mark_malformed_required(path)
|
|
172
|
+
|
|
173
|
+
|
|
164
174
|
def _classify_coerced(path: str, report: ExtractionReport) -> FieldExtraction:
|
|
165
175
|
"""FR-011: classify a successfully-coerced field. DEFAULTED when its terminal
|
|
166
176
|
(last-logged) coercion for this path is a default-class fallback
|
|
@@ -300,6 +300,7 @@ class ExtractionReport:
|
|
|
300
300
|
self._states: dict[str, FieldExtraction] = {}
|
|
301
301
|
self._coercions: list[Coercion] = []
|
|
302
302
|
self._defaulted_required: list[str] = []
|
|
303
|
+
self._malformed_required: list[str] = []
|
|
303
304
|
self._empty: bool = False
|
|
304
305
|
|
|
305
306
|
def set(self, field_path: str, state: FieldExtraction) -> None:
|
|
@@ -329,6 +330,23 @@ class ExtractionReport:
|
|
|
329
330
|
def has_lost_required(self) -> bool:
|
|
330
331
|
return len(self.lost_required()) > 0
|
|
331
332
|
|
|
333
|
+
def malformed_required(self) -> list[str]:
|
|
334
|
+
"""The ``@required`` fields the document DID answer, but with a value that could not be
|
|
335
|
+
used (an undeclared enum member, text where a number belongs, a truncated value, a
|
|
336
|
+
malformed array element) — classified MALFORMED, so they are NOT in
|
|
337
|
+
:meth:`lost_required`. Their value is absent from ``data`` exactly as a lost field's is,
|
|
338
|
+
so the strict gate (the generated extractor, :func:`or_throw`) fails on these too.
|
|
339
|
+
"""
|
|
340
|
+
return list(self._malformed_required)
|
|
341
|
+
|
|
342
|
+
def has_malformed_required(self) -> bool:
|
|
343
|
+
return len(self._malformed_required) > 0
|
|
344
|
+
|
|
345
|
+
def mark_malformed_required(self, field_path: str) -> None:
|
|
346
|
+
"""Called by extract when a **required** field is classified MALFORMED."""
|
|
347
|
+
if field_path not in self._malformed_required:
|
|
348
|
+
self._malformed_required.append(field_path)
|
|
349
|
+
|
|
332
350
|
def mark_defaulted_required(self, field_path: str) -> None:
|
|
333
351
|
"""Called by extract when an absent **required** field is filled from its ``@default``."""
|
|
334
352
|
if field_path not in self._defaulted_required:
|
|
@@ -324,13 +324,16 @@ def _example_value_if_declared(field: PromptField, overrides: PromptOverrides) -
|
|
|
324
324
|
|
|
325
325
|
|
|
326
326
|
def _example_value(field: PromptField, overrides: PromptOverrides) -> str:
|
|
327
|
+
# An enum with no declared example shows its allowed MEMBERS ("low | medium | high",
|
|
328
|
+
# the inline style's spelling), never one pre-filled member: a model shown a filled-in
|
|
329
|
+
# value copies it. Declaring @example is how an author asks for a concrete value.
|
|
327
330
|
from_override = overrides.examples.get(field.name)
|
|
328
331
|
if from_override is not None:
|
|
329
332
|
return from_override
|
|
330
333
|
if field.example is not None:
|
|
331
334
|
return field.example
|
|
332
335
|
if field.kind is FieldKind.ENUM and field.enum_values:
|
|
333
|
-
return field.enum_values
|
|
336
|
+
return " | ".join(field.enum_values)
|
|
334
337
|
return "{" + field.name + "}"
|
|
335
338
|
|
|
336
339
|
|
|
@@ -208,7 +208,7 @@ def test_render_emits_extract_and_extract_and_mappers() -> None:
|
|
|
208
208
|
# extract.
|
|
209
209
|
assert "def extract_order_prompt(root, text, opts=None) -> Order:" in out
|
|
210
210
|
assert "extract_lenient_order_prompt_with_loader(root, text, opts)" in out
|
|
211
|
-
assert "if r.report.has_lost_required():" in out
|
|
211
|
+
assert "if r.report.has_lost_required() or r.report.has_malformed_required():" in out
|
|
212
212
|
# re-exposed extract under the public name, delegating to the nested-capable path.
|
|
213
213
|
assert "def extract_lenient_order_prompt(root, text, opts=None):" in out
|
|
214
214
|
# imports the strict response graph + the with-loader extract.
|
|
@@ -419,6 +419,34 @@ def test_extract_raises_on_lost_required(tmp_path, monkeypatch) -> None:
|
|
|
419
419
|
ex.extract_order_prompt(root, '{ "lines": [] }')
|
|
420
420
|
|
|
421
421
|
|
|
422
|
+
def test_extract_raises_on_malformed_required(tmp_path, monkeypatch) -> None:
|
|
423
|
+
"""A required field PRESENT but unusable (an undeclared enum member) is MALFORMED, not
|
|
424
|
+
lost — the strict extractor must raise rather than build the payload with it missing."""
|
|
425
|
+
from importlib import import_module
|
|
426
|
+
|
|
427
|
+
root = _order_root()
|
|
428
|
+
pkg_dir = _materialize_package(_all_files(root), tmp_path)
|
|
429
|
+
_import_package(pkg_dir, monkeypatch)
|
|
430
|
+
ex = import_module("_gen_pkg.order_prompt_extractor")
|
|
431
|
+
|
|
432
|
+
reply = json.dumps(
|
|
433
|
+
{
|
|
434
|
+
"customer": {"name": "Ada"},
|
|
435
|
+
"lines": [{"sku": "A", "qty": 2}],
|
|
436
|
+
"tags": ["x"],
|
|
437
|
+
"scores": [3],
|
|
438
|
+
"priority": "MAYBE",
|
|
439
|
+
"labels": ["A"],
|
|
440
|
+
}
|
|
441
|
+
)
|
|
442
|
+
with pytest.raises(ValueError, match=r"malformed required field\(s\): priority"):
|
|
443
|
+
ex.extract_order_prompt(root, reply)
|
|
444
|
+
# the lenient tier never raises; its report names the unusable required field
|
|
445
|
+
r = ex.extract_lenient_order_prompt(root, reply)
|
|
446
|
+
assert r.data.priority is None
|
|
447
|
+
assert r.report.malformed_required() == ["priority"]
|
|
448
|
+
|
|
449
|
+
|
|
422
450
|
def test_extract_reexposed_never_raises_and_no_lost_required(tmp_path, monkeypatch) -> None:
|
|
423
451
|
from importlib import import_module
|
|
424
452
|
|
|
@@ -168,8 +168,10 @@ def test_render_emits_record_fn_and_schema_and_persist() -> None:
|
|
|
168
168
|
assert "persist_llm_call_row(recorder, row, redact)" in out
|
|
169
169
|
assert 'row["voResponse"] = outcome.data' in out
|
|
170
170
|
assert 'row["voRequest"] = input.llm_request' in out
|
|
171
|
-
#
|
|
171
|
+
# the unusable-required gate (lost OR malformed) drives status/error_detail.
|
|
172
172
|
assert "outcome.report.has_lost_required()" in out
|
|
173
|
+
assert "outcome.report.has_malformed_required()" in out
|
|
174
|
+
assert "failed = bool(unusable)" in out
|
|
173
175
|
|
|
174
176
|
|
|
175
177
|
# ---------------------------------------------------------------------------
|
|
@@ -60,7 +60,7 @@ def _cases() -> list[str]:
|
|
|
60
60
|
def test_discovers_all_extract_conformance_cases() -> None:
|
|
61
61
|
"""FR-011: lock the corpus size so a deleted fixture fails CI rather than
|
|
62
62
|
silently reducing coverage. Mirrors the TS / Java / C# count guards."""
|
|
63
|
-
assert len(_cases()) ==
|
|
63
|
+
assert len(_cases()) == 42
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
_NORMALIZE_MODES = {"none", "collapse", "strip"}
|
|
@@ -178,6 +178,11 @@ def test_classification_and_canonical_value_match(case_name: str) -> None:
|
|
|
178
178
|
expected_states = {str(k): str(v) for k, v in expected["states"].items()}
|
|
179
179
|
assert actual_states == expected_states, f"{case_name}: states mismatch"
|
|
180
180
|
|
|
181
|
+
# the required MALFORMED subset — the strict gate's second half (absent key = none)
|
|
182
|
+
assert sorted(outcome.report.malformed_required()) == sorted(
|
|
183
|
+
expected.get("malformedRequired", [])
|
|
184
|
+
), f"{case_name}: malformedRequired mismatch"
|
|
185
|
+
|
|
181
186
|
# Data is compared as a flat DOTTED-LEAF map (mirroring states): nested objects and arrays
|
|
182
187
|
# are flattened to leaf paths (meta.score, items[0].label, tags[0], …) and every leaf VALUE
|
|
183
188
|
# is asserted — including scalar-array elements and nested-object leaves.
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/tests/render/test_output_prompt_conformance.py
RENAMED
|
@@ -51,7 +51,7 @@ def _find_corpus() -> Path:
|
|
|
51
51
|
_CORPUS = _find_corpus()
|
|
52
52
|
|
|
53
53
|
# Count guard: a port silently skipping cases must fail. Bump when adding cases.
|
|
54
|
-
EXPECTED_CASE_COUNT =
|
|
54
|
+
EXPECTED_CASE_COUNT = 17
|
|
55
55
|
|
|
56
56
|
_FORMATS = {"json": Format.JSON, "xml": Format.XML}
|
|
57
57
|
_KINDS = {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/extract_delegate_emitter.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/extract_schema_emitter.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/fr010_field_mapping.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/__init__.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/entity_model.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/find_inbound.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/m2m_codegen.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/names_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/router_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/generators/tph_plan.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/metaobjects-config.schema.json
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/output_format_spec_emitter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/runtime/constraint_errors.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/runtime/filter_parser.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/codegen/template_codegen/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/documentation/doc_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/registered_validation.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/sources/directory_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/sources/meta_data_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_discriminator.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_field_mutability.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/loader/validate_source_escapes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/attr/attr_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/field/field_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/identity/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/identity/meta_identity.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/index/index_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/meta_object.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/meta_object_aware.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/object_constants.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/object/value_object.py
RENAMED
|
File without changes
|
{metaobjects-1.0.9rc2 → metaobjects-1.0.9rc4}/src/metaobjects/meta/core/relationship/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|