metaobjects 1.0.5rc11__tar.gz → 1.0.7__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.5rc11 → metaobjects-1.0.7}/PKG-INFO +3 -2
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/README.md +2 -1
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/pyproject.toml +1 -1
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/router_generator.py +35 -3
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/extract.py +29 -2
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/locate.py +24 -1
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/strip.py +8 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/xml_forgiving_reader.py +62 -6
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_extract_conformance.py +2 -2
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/uv.lock +1 -1
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/.gitignore +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/LICENSE +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/hatch_build.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/scripts/generate_embedded_library.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/agent_context/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/agent_context/scaffold.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/apidocs/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/apidocs/api_model.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/apidocs/builder.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/apidocs/naming.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/apidocs/paths.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/apidocs/renderer.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/attr_class_map.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/cli.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/collision_names.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/config.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/eject.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/format.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generator_registry.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/entity_model.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/extractor_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/find_inbound.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/fr019_shared_enum.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/names_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/output_parser_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/output_prompt_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/render_helper_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/template_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/trace_helper_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/instance_artifacts.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/metaobjects-config.schema.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/output_format_spec_emitter.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/overwrite_policy.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/project_config.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/runner.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/runtime/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/runtime/constraint_errors.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/template_codegen/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/template_codegen/output_pattern.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/template_codegen/template_data.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/template_codegen/template_spec.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/type_map.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/value_objects.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/config/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/config/dependencies.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/config/neutral_config.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/config/source_resolver.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/core_types.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/datatype.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/documentation/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/documentation/doc_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/documentation/doc_provider.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/documentation/doc_schema.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/errors.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/library/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/library/embedded_library.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/library/library_sources.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/merge.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/meta_data_loader.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/registered_validation.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/sources/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/sources/directory_source.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/sources/file_source.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/sources/uri_source.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_discriminator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_enum_normalize_ambiguity.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_field_mutability.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_source_escapes.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_source_parameter_ref.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validation_passes.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/attr/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/field/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/field/field_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/field/meta_field.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/identity/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/index/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/index/index_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/index/meta_index.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/object/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/object/meta_object.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/object/object_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/object/object_extract.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/object/value_object.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/relationship/relationship_references.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/requirement/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/requirement/meta_requirement.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/requirement/requirement_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/validator/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/meta_data.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/meta_root.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/ui/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/view/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/provider_extends.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/template/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/template/meta_template.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/template/prompt_provider.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/template/template_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta_endpoint.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/naming.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/naming_refs.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/parser.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/parser_yaml.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/provider.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/py.typed +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/registry.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/registry_manifest.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/email_document.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/escapers.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/coerce.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/extract_map.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/normalize.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/types.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/filesystem_provider.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/payload_accessors.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/prompt/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/prompt/prompt_field.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/prompt/prompt_style.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/renderer.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/verify.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/runtime/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/runtime/llm_recorder.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/runtime/n2m_resolver.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/runtime/object_manager.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/runtime/tph.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/scope.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/serializer_json.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/shared/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/shared/base_types.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/shared/separators.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/shared/structural.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/source/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/source/error_source.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/source/json_path.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/source/semantic_diff.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/source/yaml_positions.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/source_resolution.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/attr.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/db.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/documentation.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/field.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/identity.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/index.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/layout.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/object.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/origin.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/prompt.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/relationship.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/requirement.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/source.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/template.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/ui-web.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/ui.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/validator.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/spec_metamodel/view.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/super_resolve.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/validation_types.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/yaml_desugar.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/gen_suite.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/extends/expected/Program.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/extends/meta.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/nested-array/meta.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/scalars/expected/Report.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/scalars/meta.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/golden/vanilla/meta.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_abstract_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_api_docs_builder.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_api_docs_paths.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_config_gen.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_config_verify.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_dependencies.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_providers.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_registry.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_render_helper_template_root.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_staleness_nudge.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_verify_strict.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_cli_verify_subverbs.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_codegen_compile_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_constants_config.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_eject.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_entity_model.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_enum_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_extends_abstract_field_inheritance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_extract_tier_collision.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_extractor_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_filter_allowlist_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_format.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_fr010_nested_object_prompt.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_fr010_output_codegen.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_fr019_shared_provided_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_gen_state_keying.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_generator_extension_seams.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_golden.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_inheritance_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_instance_artifacts.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_m2m_codegen.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_names_extends_chain.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_names_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_no_magic_physical_names.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_origin_nullability.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_output_parser_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_overwrite_policy.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_overwrite_policy_hash.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_project_config.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_projection_compile.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_render_helper_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_render_helper_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_reverse_finders.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_route_path_naming.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_router_autoset.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_router_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_router_generator_m2m_target_tph.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_router_generator_tph_m2m.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_router_generator_tph_m2m_shadowed.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_runner.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_source_resolution.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_sourceless_projection.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_template_data.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_template_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_template_output_pattern.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_template_scope_helpers.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_template_scope_walk.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_template_spec.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_tph_codegen.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_trace_helper_generator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_type_map.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_validation_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_value_objects.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/codegen/test_write_through.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/config/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/config/test_dependencies.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/config/test_library_package_guard.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/config/test_neutral_config.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/config/test_source_resolver.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/capabilities.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/conformance-expected-failures.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/conformance_adapter.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/corpus.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/expected_failures.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/fixture_discovery.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/navigator.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_api_docs_cross_port_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_dependency_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_extract_object_verdict.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_fr010_loader_attrs.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_fr011_attrs.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_generator_registry_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_object_model_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_provider_composition_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_registry_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_runner_hardfail.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_scope_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_source_resolution_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_spec_metamodel_embed.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_strict_attr_load.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_template_codegen_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_template_generator_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/test_yaml_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/api_contract_assertions.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/api_contract_jsonb_server.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/api_contract_m2m_server.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/api_contract_server.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/generated_jsonb_app.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/generated_m2m_app.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/generated_projection_app.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/generated_router_app.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/generated_tph_app.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/meta_ai_trace.yaml +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/normalization.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/postgres_container.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/query_runner.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/scenarios.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_api_contract.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_api_contract_generated.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_api_contract_jsonb.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_api_contract_m2m.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_api_contract_m2m_generated.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_api_contract_projection.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_api_contract_tph_generated.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_generated_router_uuid_pk.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_llm_call_trace.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_m2m_target_tph_generated.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_normalization.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_query_scenarios.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_runtime_return_types.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_tph_m2m_generated.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/integration/test_tph_m2m_shadowed_generated.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/loader/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/loader/test_abstract_subtype_authored.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/loader/test_child_wrapper_body_shape.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/loader/test_enum_extends_values_conflict.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/loader/test_field_mutability_order.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/loader/test_shipped_library_ai.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/loader/test_template_payload_target_210.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/open_closed_proof_test.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_coerce.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_extract.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_extract_map.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_json_forgiving_reader.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_locate.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_model.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_normalize.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_strip.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/prompt/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/prompt/test_output_format_renderer.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_email_document.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_filesystem_provider.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_output_format_renderer_nested.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_output_prompt_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_render_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_render_max_chars.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_render_model_payload.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_verify.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/render/test_verify_conformance.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/runtime/test_constraint_errors.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/runtime/test_object_manager_currency_read.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/runtime/test_object_manager_enum_intvaluemap.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/runtime/test_object_manager_table_name.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/source/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/source/test_fr5c_merge_attribution.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/source/test_fr5d_reference_resolution.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/source/test_fr5e_database_source_shape.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/source/test_json_path.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/source/test_semantic_diff.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/source/test_source_on_node.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/source/test_yaml_positions.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/test_api_docs_accuracy.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/test_meta_endpoint.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/__init__.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_agent_context_staleness.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_capabilities.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_column_naming_strategy.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_common_attrs.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_core_types.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_derive_m2m_declaring_entity.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_effective_children_sibling_shadowing.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_effective_package.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_errors.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_field_enum.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_field_enum_intvaluemap.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_field_map_validation.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_file_source_id.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_fr016_source_name_and_kind_aliases.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_index_lookup.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_llm_recorder.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_loader.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_loader_bom.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_loader_class.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_merge.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_meta_attr.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_meta_data.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_meta_source.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_module_shortcuts.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_n2m_resolver.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_n2m_resolver_inherited.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_no_dead_config_fields.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_object_manager_autoset_stamping.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_object_manager_write_through.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_one_primary_source.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_parser.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_parser_yaml.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_provider.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_provider_extension.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_registry.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_registry_completeness.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_registry_extend.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_registry_sealed.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_relationship_m2m_validation.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_relationship_references.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_relationship_referential_actions.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_resolution_key.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_serializer.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_serializer_shared_document.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_shared_constants.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_smoke.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_source_escapes.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_sources.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_strict_child_placement.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_super_resolve.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_template_toolcall.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_template_wrong_subtype_attrs.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_validation_attr_schema.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_validation_filter_values.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_validation_origin_195.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_validation_origin_paths.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_validation_sort_field.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_validation_warnings.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_write_coercion_arrays.py +0 -0
- {metaobjects-1.0.5rc11 → metaobjects-1.0.7}/tests/unit/test_yaml_desugar.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: metaobjects
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.7
|
|
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
|
|
@@ -78,7 +78,8 @@ else:
|
|
|
78
78
|
The primary public API is the **loader** (`load_directory` / `load_uris` /
|
|
79
79
|
`load_string`, `MetaDataLoader`, `LoadResult`, `ErrorCode`, `MetaError`). The
|
|
80
80
|
distribution also ships the Python implementations of the other pillars used by the CLI
|
|
81
|
-
and tooling: `codegen` (Pydantic + FastAPI emit
|
|
81
|
+
and tooling: `codegen` (Pydantic + FastAPI emit — reference generators you own:
|
|
82
|
+
`metaobjects eject <name>` copies one into your repo), `render` (Mustache + payload-VO +
|
|
82
83
|
verify), and `runtime` (a DB-API 2 `ObjectManager` — pg8000 / psycopg — no SQLAlchemy).
|
|
83
84
|
Schema migrations are owned by the TypeScript `meta` CLI (ADR-0015); there is
|
|
84
85
|
**no `migrate` module** in this distribution.
|
|
@@ -43,7 +43,8 @@ else:
|
|
|
43
43
|
The primary public API is the **loader** (`load_directory` / `load_uris` /
|
|
44
44
|
`load_string`, `MetaDataLoader`, `LoadResult`, `ErrorCode`, `MetaError`). The
|
|
45
45
|
distribution also ships the Python implementations of the other pillars used by the CLI
|
|
46
|
-
and tooling: `codegen` (Pydantic + FastAPI emit
|
|
46
|
+
and tooling: `codegen` (Pydantic + FastAPI emit — reference generators you own:
|
|
47
|
+
`metaobjects eject <name>` copies one into your repo), `render` (Mustache + payload-VO +
|
|
47
48
|
verify), and `runtime` (a DB-API 2 `ObjectManager` — pg8000 / psycopg — no SQLAlchemy).
|
|
48
49
|
Schema migrations are owned by the TypeScript `meta` CLI (ADR-0015); there is
|
|
49
50
|
**no `migrate` module** in this distribution.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "metaobjects"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.7"
|
|
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"
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/router_generator.py
RENAMED
|
@@ -431,6 +431,32 @@ def _sort_parse_fn_lines() -> list[str]:
|
|
|
431
431
|
]
|
|
432
432
|
|
|
433
433
|
|
|
434
|
+
def _auth_docstring_paragraph(*, read_only: bool) -> str:
|
|
435
|
+
"""The auth-seam paragraph appended to every generated router's module docstring
|
|
436
|
+
(#367). A generated router is unauthenticated by construction — the consumer wires
|
|
437
|
+
a dependency onto `app.include_router` — and until this, nothing in the emitted
|
|
438
|
+
module said so, mirroring the gap the TS route generators closed for #367 with a
|
|
439
|
+
doc-comment above the register function. Python has no `expose` option to narrow a
|
|
440
|
+
generated router down to a safe subset (non-TS REST templates are frozen for
|
|
441
|
+
features), so the escape hatch for anything a dependency cannot express — a
|
|
442
|
+
row-ownership rule — is `metaobjects eject`, not a narrowing flag.
|
|
443
|
+
|
|
444
|
+
*read_only* only swaps "these endpoints" for "these read endpoints" on a
|
|
445
|
+
projection's GET-only surface; the guidance is otherwise identical. Returned text
|
|
446
|
+
starts and ends with a newline so a caller can splice it directly between the
|
|
447
|
+
docstring's summary line and the closing `\"\"\"`."""
|
|
448
|
+
verbs = "read endpoints" if read_only else "endpoints"
|
|
449
|
+
return (
|
|
450
|
+
"\n"
|
|
451
|
+
f"Auth: these {verbs} are unauthenticated. To guard them, include the router with a\n"
|
|
452
|
+
"dependency, e.g. `app.include_router(router, dependencies=[Depends(require_auth)])`.\n"
|
|
453
|
+
"\n"
|
|
454
|
+
'A row-ownership rule ("only the owner may read this row") cannot be expressed as a\n'
|
|
455
|
+
"router dependency: eject this generator with `metaobjects eject` and hand-write\n"
|
|
456
|
+
"those endpoints.\n"
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
|
|
434
460
|
class RouterGenerator:
|
|
435
461
|
"""One ``<entity_snake>_router.py`` per routed object (FastAPI ``APIRouter``):
|
|
436
462
|
full CRUD for a writable source, read-only for a view-backed one.
|
|
@@ -882,7 +908,9 @@ class RouterGenerator:
|
|
|
882
908
|
parts.append(
|
|
883
909
|
h + "\n"
|
|
884
910
|
+ f'"""GENERATED — TPH polymorphic REST router for the {short_name} hierarchy '
|
|
885
|
-
+ '(single-table inheritance: polymorphic base + per-subtype CRUD)
|
|
911
|
+
+ '(single-table inheritance: polymorphic base + per-subtype CRUD).\n'
|
|
912
|
+
+ _auth_docstring_paragraph(read_only=False)
|
|
913
|
+
+ '"""\n'
|
|
886
914
|
)
|
|
887
915
|
parts.append("from __future__ import annotations")
|
|
888
916
|
parts.append("")
|
|
@@ -1232,7 +1260,9 @@ class RouterGenerator:
|
|
|
1232
1260
|
parts: list[str] = []
|
|
1233
1261
|
parts.append(
|
|
1234
1262
|
generated_header(short_name, _effective_fqn(entity)).rstrip() + "\n"
|
|
1235
|
-
+ f'"""GENERATED — REST router for {short_name} entity. Implements the cross-port API contract
|
|
1263
|
+
+ f'"""GENERATED — REST router for {short_name} entity. Implements the cross-port API contract.\n'
|
|
1264
|
+
+ _auth_docstring_paragraph(read_only=False)
|
|
1265
|
+
+ '"""\n'
|
|
1236
1266
|
)
|
|
1237
1267
|
parts.append("from __future__ import annotations")
|
|
1238
1268
|
parts.append("")
|
|
@@ -1401,7 +1431,9 @@ class RouterGenerator:
|
|
|
1401
1431
|
generated_header(short_name, _effective_fqn(entity)).rstrip() + "\n"
|
|
1402
1432
|
+ f'"""GENERATED — read-only REST router for the {short_name} projection.\n\n'
|
|
1403
1433
|
+ "Implements the cross-port API contract: GET list + GET by id; every write\n"
|
|
1404
|
-
+ 'verb answers 405 {"error": "method_not_allowed"}
|
|
1434
|
+
+ 'verb answers 405 {"error": "method_not_allowed"}.\n'
|
|
1435
|
+
+ _auth_docstring_paragraph(read_only=True)
|
|
1436
|
+
+ '"""\n'
|
|
1405
1437
|
)
|
|
1406
1438
|
parts.append("from __future__ import annotations")
|
|
1407
1439
|
parts.append("")
|
|
@@ -45,7 +45,7 @@ def extract(
|
|
|
45
45
|
span: str | None
|
|
46
46
|
raw: dict[str, object]
|
|
47
47
|
if schema.format == Format.JSON:
|
|
48
|
-
span =
|
|
48
|
+
span = _select_json(text, stripped, schema.fields, ci)
|
|
49
49
|
raw = {} if span is None else JsonForgivingReader().read(span)
|
|
50
50
|
elif o.rootless:
|
|
51
51
|
span = None if stripped == "" else stripped
|
|
@@ -199,12 +199,39 @@ def _extract_value(
|
|
|
199
199
|
# A text element that also carried XML attributes is represented by XmlForgivingReader
|
|
200
200
|
# as a dict with the body under TEXT_KEY. A scalar field reads that text (attributes
|
|
201
201
|
# ignored for scalars — preserving pre-attribute-support behaviour).
|
|
202
|
-
if isinstance(present, dict)
|
|
202
|
+
if isinstance(present, dict):
|
|
203
|
+
# An element with no text of its own (only child elements) is not a scalar value.
|
|
204
|
+
# Never stringify the dict: that delivered "{'child': ...}" as the field's text.
|
|
205
|
+
if TEXT_KEY not in present:
|
|
206
|
+
return MALFORMED
|
|
203
207
|
present = present[TEXT_KEY]
|
|
204
208
|
raw_str = present if isinstance(present, str) else str(present)
|
|
205
209
|
return _coerce.value(raw_str, f, o, path, report)
|
|
206
210
|
|
|
207
211
|
|
|
212
|
+
def _select_json(
|
|
213
|
+
text: str | None, stripped: str, fields: list[FieldSpec], ci: bool
|
|
214
|
+
) -> str | None:
|
|
215
|
+
"""Pick the JSON object that answers the schema. Fenced blocks are searched first, then
|
|
216
|
+
the whole reply, and the first object carrying at least one declared field wins, so a
|
|
217
|
+
draft object, an echoed format example or a brace in prose no longer shadows the real
|
|
218
|
+
answer (#363). A fenced object with none of the declared fields falls through the same
|
|
219
|
+
way. When nothing carries a declared field, the first-object rule (``locate.json``)
|
|
220
|
+
decides."""
|
|
221
|
+
for region in [*_strip.fenced_bodies(text), stripped]:
|
|
222
|
+
for candidate in _locate.json_candidates(region):
|
|
223
|
+
parsed = JsonForgivingReader().read(candidate)
|
|
224
|
+
if any(_carries(parsed, f.name, ci) for f in fields):
|
|
225
|
+
return candidate
|
|
226
|
+
return _locate.json(stripped)
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def _carries(raw: dict[str, object], name: str, ci: bool) -> bool:
|
|
230
|
+
if name in raw:
|
|
231
|
+
return True
|
|
232
|
+
return ci and any(k.lower() == name.lower() for k in raw)
|
|
233
|
+
|
|
234
|
+
|
|
208
235
|
def _lookup(raw: dict[str, object], name: str, ci: bool) -> object | None:
|
|
209
236
|
"""Case-folding lookup honoring tolerance."""
|
|
210
237
|
if name in raw:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Stages 2-3: isolate and select the payload root span.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
JSON: extract picks among json_candidates by the schema (fenced first, first object carrying a
|
|
4
|
+
declared field); json() (first-closed-else-first-open) is its fallback.
|
|
4
5
|
"""
|
|
5
6
|
from __future__ import annotations
|
|
6
7
|
|
|
@@ -22,6 +23,28 @@ def json(text: str | None) -> str | None:
|
|
|
22
23
|
return None if first_open < 0 else text[first_open:]
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
def json_candidates(text: str | None) -> list[str]:
|
|
27
|
+
"""Every top-level object span in ``text``, in order: each balanced {...} (nested objects
|
|
28
|
+
are part of their parent, not separate spans), and, for a '{' that never closes, the text
|
|
29
|
+
from it to the end."""
|
|
30
|
+
out: list[str] = []
|
|
31
|
+
if text is None:
|
|
32
|
+
return out
|
|
33
|
+
tail_added = False
|
|
34
|
+
i = 0
|
|
35
|
+
while i < len(text):
|
|
36
|
+
if text[i] == "{":
|
|
37
|
+
end = _scan_balanced(text, i)
|
|
38
|
+
if end >= 0:
|
|
39
|
+
out.append(text[i : end + 1])
|
|
40
|
+
i = end
|
|
41
|
+
elif not tail_added:
|
|
42
|
+
out.append(text[i:])
|
|
43
|
+
tail_added = True
|
|
44
|
+
i += 1
|
|
45
|
+
return out
|
|
46
|
+
|
|
47
|
+
|
|
25
48
|
def _scan_balanced(s: str, open_idx: int) -> int:
|
|
26
49
|
"""Return index of the matching ``}``, or -1 if unterminated. String-aware."""
|
|
27
50
|
depth = 0
|
|
@@ -18,3 +18,11 @@ def strip(raw: str | None) -> str:
|
|
|
18
18
|
if m:
|
|
19
19
|
return (raw[: m.start()] + m.group(1) + raw[m.end():]).strip()
|
|
20
20
|
return raw.strip()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def fenced_bodies(raw: str | None) -> list[str]:
|
|
24
|
+
"""The body of every fenced block, in order. Locate searches these before the whole
|
|
25
|
+
text, because a model told to fence its answer puts the answer there."""
|
|
26
|
+
if raw is None:
|
|
27
|
+
return []
|
|
28
|
+
return [m.group(1) for m in _FENCE.finditer(raw)]
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/render/extract/xml_forgiving_reader.py
RENAMED
|
@@ -31,6 +31,10 @@ TEXT_KEY = "#text"
|
|
|
31
31
|
# self-closing tag). Non-greedy so the first '>' closes the open tag.
|
|
32
32
|
_OPEN_TAG = re.compile(r"<([A-Za-z_][A-Za-z0-9_]*)([^>]*?)>")
|
|
33
33
|
_OPEN_TAG_CI = re.compile(r"<([A-Za-z_][A-Za-z0-9_]*)([^>]*?)>", re.IGNORECASE)
|
|
34
|
+
# a closing tag. Used to spot a STRAY close (of an element whose open never appeared in
|
|
35
|
+
# the body) — LLMs commonly end a block with the wrong tag.
|
|
36
|
+
_CLOSE_TAG = re.compile(r"</([A-Za-z_][A-Za-z0-9_]*)\s*>")
|
|
37
|
+
_CLOSE_TAG_CI = re.compile(r"</([A-Za-z_][A-Za-z0-9_]*)\s*>", re.IGNORECASE)
|
|
34
38
|
# one attribute: name = "double" | 'single' | bareword.
|
|
35
39
|
_ATTR = re.compile(r"""([A-Za-z_:][A-Za-z0-9_:.\-]*)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s/>]+))""")
|
|
36
40
|
|
|
@@ -46,7 +50,7 @@ class XmlForgivingReader:
|
|
|
46
50
|
root_end = span.rfind("</")
|
|
47
51
|
inner_end = len(span) if (root_end < 0 or root_end <= gt) else root_end
|
|
48
52
|
inner = span[gt + 1 : inner_end]
|
|
49
|
-
self._parse_children(inner, case_insensitive, out)
|
|
53
|
+
self._parse_children(inner, case_insensitive, out, None)
|
|
50
54
|
return out
|
|
51
55
|
|
|
52
56
|
def read_rootless(self, text: str | None, case_insensitive: bool) -> dict[str, object]:
|
|
@@ -57,16 +61,23 @@ class XmlForgivingReader:
|
|
|
57
61
|
out: dict[str, object] = {}
|
|
58
62
|
if text is None or text.strip() == "":
|
|
59
63
|
return out
|
|
60
|
-
self._parse_children(text, case_insensitive, out)
|
|
64
|
+
self._parse_children(text, case_insensitive, out, None)
|
|
61
65
|
return out
|
|
62
66
|
|
|
63
|
-
def _parse_children(
|
|
67
|
+
def _parse_children(
|
|
68
|
+
self, inner: str, ci: bool, out: dict[str, object], loose: list[str] | None
|
|
69
|
+
) -> None:
|
|
70
|
+
"""Parse ``inner``'s elements into ``out``. When ``loose`` is not ``None``, the text
|
|
71
|
+
BETWEEN those elements (an element's own text in mixed content) is appended to it,
|
|
72
|
+
one segment per gap."""
|
|
64
73
|
open_tag = _OPEN_TAG_CI if ci else _OPEN_TAG
|
|
65
74
|
pos = 0
|
|
66
75
|
while True:
|
|
67
76
|
m = open_tag.search(inner, pos)
|
|
68
77
|
if m is None:
|
|
69
|
-
|
|
78
|
+
break
|
|
79
|
+
if loose is not None:
|
|
80
|
+
loose.append(inner[pos : m.start()])
|
|
70
81
|
tag = m.group(1)
|
|
71
82
|
key = tag.lower() if ci else tag
|
|
72
83
|
|
|
@@ -112,22 +123,67 @@ class XmlForgivingReader:
|
|
|
112
123
|
else:
|
|
113
124
|
content_end = len(inner)
|
|
114
125
|
nxt = len(inner)
|
|
126
|
+
# A STRAY close tag of another element inside the unclosed element's body
|
|
127
|
+
# ends the body there (the model closed the block with the wrong tag), and
|
|
128
|
+
# the stray tag itself is dropped rather than kept as literal text.
|
|
129
|
+
stray = self._find_stray_close(inner, content_start, content_end, ci)
|
|
130
|
+
if stray is not None:
|
|
131
|
+
content_end, nxt = stray
|
|
115
132
|
content = inner[content_start:content_end]
|
|
116
133
|
self._accumulate(out, key, self._combine(attrs, content, ci))
|
|
117
134
|
pos = nxt
|
|
135
|
+
if loose is not None:
|
|
136
|
+
loose.append(inner[pos:])
|
|
137
|
+
|
|
138
|
+
def _find_stray_close(
|
|
139
|
+
self, inner: str, from_: int, to: int, ci: bool
|
|
140
|
+
) -> tuple[int, int] | None:
|
|
141
|
+
"""The first close tag in ``inner[from_, to)`` whose element was never opened
|
|
142
|
+
after ``from_`` — a stray close — as ``(start, end)``, or ``None``. A close whose
|
|
143
|
+
open DID appear is a nested child's own close, not stray."""
|
|
144
|
+
close_re = _CLOSE_TAG_CI if ci else _CLOSE_TAG
|
|
145
|
+
at = from_
|
|
146
|
+
while True:
|
|
147
|
+
m = close_re.search(inner, at, to)
|
|
148
|
+
if m is None:
|
|
149
|
+
return None
|
|
150
|
+
open_re = re.compile(
|
|
151
|
+
"<" + re.escape(m.group(1)) + r"(?=[\s/>])", re.IGNORECASE if ci else 0
|
|
152
|
+
)
|
|
153
|
+
if open_re.search(inner, from_, m.start()) is None:
|
|
154
|
+
return (m.start(), m.end())
|
|
155
|
+
at = m.end()
|
|
118
156
|
|
|
119
157
|
def _combine(self, attrs: dict[str, object], content: str, ci: bool) -> object:
|
|
120
|
-
"""Combine an element's attributes with its body (nested children or plain text).
|
|
158
|
+
"""Combine an element's attributes with its body (nested children or plain text).
|
|
159
|
+
Mixed content keeps BOTH: the children, and the element's own text under
|
|
160
|
+
:data:`TEXT_KEY`, so a scalar or ``@xmlText`` consumer still reads the prose
|
|
161
|
+
around a child element."""
|
|
121
162
|
if "<" in content:
|
|
122
163
|
nested: dict[str, object] = {}
|
|
123
|
-
|
|
164
|
+
loose: list[str] = []
|
|
165
|
+
self._parse_children(content, ci, nested, loose)
|
|
124
166
|
if nested:
|
|
125
167
|
# attributes first; a child element wins a name collision
|
|
126
168
|
merged: dict[str, object] = dict(attrs)
|
|
127
169
|
merged.update(nested)
|
|
170
|
+
text = self._mixed_text(loose, ci)
|
|
171
|
+
if text:
|
|
172
|
+
merged[TEXT_KEY] = text
|
|
128
173
|
return merged
|
|
129
174
|
return self._text_value(attrs, content)
|
|
130
175
|
|
|
176
|
+
def _mixed_text(self, segments: list[str], ci: bool) -> str:
|
|
177
|
+
"""The text segments between child elements: stray close tags dropped, each
|
|
178
|
+
trimmed, the non-empty ones joined with a single space."""
|
|
179
|
+
close_re = _CLOSE_TAG_CI if ci else _CLOSE_TAG
|
|
180
|
+
parts: list[str] = []
|
|
181
|
+
for seg in segments:
|
|
182
|
+
t = close_re.sub("", seg).strip()
|
|
183
|
+
if t:
|
|
184
|
+
parts.append(t)
|
|
185
|
+
return " ".join(parts)
|
|
186
|
+
|
|
131
187
|
def _text_value(self, attrs: dict[str, object], content: str) -> object:
|
|
132
188
|
text = content.strip()
|
|
133
189
|
if not attrs:
|
|
@@ -6,7 +6,7 @@ Each fixture dir under ``fixtures/extract-conformance/`` holds:
|
|
|
6
6
|
- ``input.txt`` the raw (possibly dirty) LLM output
|
|
7
7
|
- ``expected.json`` ``{ "empty": bool, "states": {field: FieldExtraction}, "data": {field: value} }``
|
|
8
8
|
|
|
9
|
-
All
|
|
9
|
+
All cases must pass. The corpus is the oracle — do not weaken assertions.
|
|
10
10
|
1:1 port of ``ExtractConformanceTest.java`` / ``ExtractConformanceTests.cs``.
|
|
11
11
|
"""
|
|
12
12
|
from __future__ import annotations
|
|
@@ -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()) == 41
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
_NORMALIZE_MODES = {"none", "collapse", "strip"}
|
|
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.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/extract_delegate_emitter.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/extract_schema_emitter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/entity_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/find_inbound.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/fr019_shared_enum.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/m2m_codegen.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/names_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/generators/template_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/metaobjects-config.schema.json
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/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.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/runtime/constraint_errors.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/codegen/runtime/filter_parser.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/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
|
|
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.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/sources/directory_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/sources/meta_data_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_discriminator.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_field_mutability.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_source_escapes.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_source_parameter_ref.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/loader/validate_source_physical_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/attr/attr_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/field/field_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/identity/identity_constants.py
RENAMED
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/identity/meta_identity.py
RENAMED
|
File without changes
|
|
File without changes
|
{metaobjects-1.0.5rc11 → metaobjects-1.0.7}/src/metaobjects/meta/core/index/index_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|