metaobjects 1.1.2__tar.gz → 1.1.4__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.
Files changed (574) hide show
  1. {metaobjects-1.1.2 → metaobjects-1.1.4}/PKG-INFO +1 -1
  2. {metaobjects-1.1.2 → metaobjects-1.1.4}/pyproject.toml +1 -1
  3. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/router_generator.py +90 -4
  4. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/validate_reporting.py +13 -3
  5. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/reporting/reporting_constants.py +7 -0
  6. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/registry_manifest.py +1 -1
  7. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/runtime/dialect.py +11 -0
  8. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/runtime/object_manager.py +1 -2
  9. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/generated_report_app.py +8 -1
  10. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract_report.py +1 -1
  11. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_object_manager_dialects.py +13 -2
  12. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_object_manager_report.py +1 -1
  13. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_reporting_accessors.py +1 -1
  14. {metaobjects-1.1.2 → metaobjects-1.1.4}/uv.lock +1 -1
  15. {metaobjects-1.1.2 → metaobjects-1.1.4}/.gitignore +0 -0
  16. {metaobjects-1.1.2 → metaobjects-1.1.4}/LICENSE +0 -0
  17. {metaobjects-1.1.2 → metaobjects-1.1.4}/README.md +0 -0
  18. {metaobjects-1.1.2 → metaobjects-1.1.4}/hatch_build.py +0 -0
  19. {metaobjects-1.1.2 → metaobjects-1.1.4}/scripts/generate_embedded_library.py +0 -0
  20. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/__init__.py +0 -0
  21. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/agent_context/__init__.py +0 -0
  22. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/agent_context/scaffold.py +0 -0
  23. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/apidocs/__init__.py +0 -0
  24. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/apidocs/api_model.py +0 -0
  25. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/apidocs/builder.py +0 -0
  26. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/apidocs/naming.py +0 -0
  27. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/apidocs/paths.py +0 -0
  28. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/apidocs/renderer.py +0 -0
  29. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/attr_class_map.py +0 -0
  30. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/cli.py +0 -0
  31. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/KNOWN_GAPS.md +0 -0
  32. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/__init__.py +0 -0
  33. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/_moved.py +0 -0
  34. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/collection_name_collision.py +0 -0
  35. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/collision_names.py +0 -0
  36. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/config.py +0 -0
  37. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/constants.py +0 -0
  38. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/eject.py +0 -0
  39. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/extract_delegate_emitter.py +0 -0
  40. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/extract_schema_emitter.py +0 -0
  41. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/format.py +0 -0
  42. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/fr010_field_mapping.py +0 -0
  43. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generator.py +0 -0
  44. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generator_registry.py +0 -0
  45. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/__init__.py +0 -0
  46. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/api_docs_generator.py +0 -0
  47. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/entity_model.py +0 -0
  48. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/extractor_generator.py +0 -0
  49. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/filter_allowlist_generator.py +0 -0
  50. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/find_inbound.py +0 -0
  51. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/fr019_shared_enum.py +0 -0
  52. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/m2m_codegen.py +0 -0
  53. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/names_generator.py +0 -0
  54. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/output_parser_generator.py +0 -0
  55. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/output_prompt_generator.py +0 -0
  56. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/render_helper_generator.py +0 -0
  57. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/requirement_tests_generator.py +0 -0
  58. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/template_generator.py +0 -0
  59. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/tph_plan.py +0 -0
  60. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/generators/trace_helper_generator.py +0 -0
  61. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/instance_artifacts.py +0 -0
  62. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/metaobjects-config.schema.json +0 -0
  63. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/model_walk.py +0 -0
  64. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/orphan_sweep.py +0 -0
  65. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/output_format_spec_emitter.py +0 -0
  66. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/overwrite_policy.py +0 -0
  67. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/project_config.py +0 -0
  68. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/project_import.py +0 -0
  69. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/requirement_hooks.py +0 -0
  70. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/requirement_walk.py +0 -0
  71. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runner.py +0 -0
  72. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/__init__.py +0 -0
  73. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/api_docs_builder.py +0 -0
  74. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/api_docs_model.py +0 -0
  75. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/api_docs_paths.py +0 -0
  76. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/api_docs_renderer.py +0 -0
  77. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/constraint_errors.py +0 -0
  78. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/decimal_wire.py +0 -0
  79. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/extract_delegate_emitter.py +0 -0
  80. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/extract_schema_emitter.py +0 -0
  81. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/filter_parser.py +0 -0
  82. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/fr010_field_mapping.py +0 -0
  83. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/fr019_shared_enum.py +0 -0
  84. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/m2m_codegen.py +0 -0
  85. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/output_format_spec_emitter.py +0 -0
  86. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/runtime/shared_predicates.py +0 -0
  87. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/template_codegen/__init__.py +0 -0
  88. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/template_codegen/output_pattern.py +0 -0
  89. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/template_codegen/template_data.py +0 -0
  90. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/template_codegen/template_spec.py +0 -0
  91. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/type_map.py +0 -0
  92. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/codegen/value_objects.py +0 -0
  93. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/config/__init__.py +0 -0
  94. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/config/dependencies.py +0 -0
  95. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/config/neutral_config.py +0 -0
  96. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/config/source_resolver.py +0 -0
  97. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/core_types.py +0 -0
  98. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/datatype.py +0 -0
  99. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/documentation/__init__.py +0 -0
  100. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/documentation/doc_constants.py +0 -0
  101. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/documentation/doc_provider.py +0 -0
  102. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/documentation/doc_schema.py +0 -0
  103. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/errors.py +0 -0
  104. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/field_lint.py +0 -0
  105. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/fmt.py +0 -0
  106. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/library/__init__.py +0 -0
  107. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/library/embedded_library.py +0 -0
  108. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/library/library_sources.py +0 -0
  109. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/__init__.py +0 -0
  110. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/merge.py +0 -0
  111. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/meta_data_loader.py +0 -0
  112. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/registered_validation.py +0 -0
  113. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/resolve_references.py +0 -0
  114. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/sources/__init__.py +0 -0
  115. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/sources/directory_source.py +0 -0
  116. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/sources/file_source.py +0 -0
  117. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/sources/meta_data_source.py +0 -0
  118. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/sources/uri_source.py +0 -0
  119. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/validate_discriminator.py +0 -0
  120. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/validate_enum_normalize_ambiguity.py +0 -0
  121. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/validate_field_mutability.py +0 -0
  122. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/validate_source_escapes.py +0 -0
  123. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/validate_source_parameter_ref.py +0 -0
  124. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/validate_source_physical_names.py +0 -0
  125. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/loader/validation_passes.py +0 -0
  126. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/__init__.py +0 -0
  127. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/__init__.py +0 -0
  128. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/attr/__init__.py +0 -0
  129. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/attr/attr_constants.py +0 -0
  130. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/attr/meta_attr.py +0 -0
  131. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/field/__init__.py +0 -0
  132. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/field/field_constants.py +0 -0
  133. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/field/meta_field.py +0 -0
  134. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/identity/__init__.py +0 -0
  135. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/identity/identity_constants.py +0 -0
  136. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/identity/meta_identity.py +0 -0
  137. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/index/__init__.py +0 -0
  138. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/index/index_constants.py +0 -0
  139. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/index/meta_index.py +0 -0
  140. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/object/__init__.py +0 -0
  141. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/object/meta_object.py +0 -0
  142. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/object/meta_object_aware.py +0 -0
  143. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/object/object_class_registry.py +0 -0
  144. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/object/object_constants.py +0 -0
  145. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/object/object_extract.py +0 -0
  146. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/object/value_object.py +0 -0
  147. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/relationship/__init__.py +0 -0
  148. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/relationship/derive_m2m_fields.py +0 -0
  149. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/relationship/meta_relationship.py +0 -0
  150. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/relationship/relationship_constants.py +0 -0
  151. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/relationship/relationship_references.py +0 -0
  152. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/reporting/__init__.py +0 -0
  153. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/reporting/meta_dimension.py +0 -0
  154. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/reporting/meta_measure.py +0 -0
  155. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/reporting/meta_segment.py +0 -0
  156. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/reporting/report_accessors.py +0 -0
  157. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/reporting/report_read_model.py +0 -0
  158. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/reporting/report_shape.py +0 -0
  159. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/requirement/__init__.py +0 -0
  160. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/requirement/meta_requirement.py +0 -0
  161. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/requirement/requirement_constants.py +0 -0
  162. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/requirement/resolve_claim.py +0 -0
  163. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/validator/__init__.py +0 -0
  164. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/core/validator/validator_constants.py +0 -0
  165. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/meta_data.py +0 -0
  166. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/meta_root.py +0 -0
  167. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/__init__.py +0 -0
  168. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/db/__init__.py +0 -0
  169. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/db/db_constants.py +0 -0
  170. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/db/db_provider.py +0 -0
  171. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/origin/__init__.py +0 -0
  172. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/origin/meta_origin.py +0 -0
  173. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/origin/origin_constants.py +0 -0
  174. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/source/__init__.py +0 -0
  175. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/source/meta_source.py +0 -0
  176. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/persistence/source/source_constants.py +0 -0
  177. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/__init__.py +0 -0
  178. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/layout/__init__.py +0 -0
  179. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/layout/layout_constants.py +0 -0
  180. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/layout/meta_layout.py +0 -0
  181. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/ui/__init__.py +0 -0
  182. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/ui/ui_provider.py +0 -0
  183. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/view/__init__.py +0 -0
  184. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/view/meta_view.py +0 -0
  185. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/presentation/view/view_constants.py +0 -0
  186. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/provider_extends.py +0 -0
  187. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/template/__init__.py +0 -0
  188. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/template/meta_template.py +0 -0
  189. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/template/prompt_provider.py +0 -0
  190. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta/template/template_constants.py +0 -0
  191. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/meta_endpoint.py +0 -0
  192. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/naming.py +0 -0
  193. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/naming_refs.py +0 -0
  194. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/parser.py +0 -0
  195. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/parser_yaml.py +0 -0
  196. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/provider.py +0 -0
  197. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/py.typed +0 -0
  198. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/registry.py +0 -0
  199. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/__init__.py +0 -0
  200. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/email_document.py +0 -0
  201. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/escapers.py +0 -0
  202. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/KNOWN_GAPS.md +0 -0
  203. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/__init__.py +0 -0
  204. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/coerce.py +0 -0
  205. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/extract.py +0 -0
  206. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/extract_map.py +0 -0
  207. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/json_forgiving_reader.py +0 -0
  208. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/locate.py +0 -0
  209. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/normalize.py +0 -0
  210. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/strip.py +0 -0
  211. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/types.py +0 -0
  212. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/extract/xml_forgiving_reader.py +0 -0
  213. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/filesystem_provider.py +0 -0
  214. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/payload_accessors.py +0 -0
  215. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/prompt/__init__.py +0 -0
  216. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/prompt/output_format_renderer.py +0 -0
  217. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/prompt/output_format_spec.py +0 -0
  218. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/prompt/prompt_field.py +0 -0
  219. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/prompt/prompt_overrides.py +0 -0
  220. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/prompt/prompt_style.py +0 -0
  221. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/renderer.py +0 -0
  222. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/render/verify.py +0 -0
  223. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/requirement_check.py +0 -0
  224. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/runtime/__init__.py +0 -0
  225. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/runtime/drivers.py +0 -0
  226. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/runtime/llm_recorder.py +0 -0
  227. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/runtime/n2m_resolver.py +0 -0
  228. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/runtime/tph.py +0 -0
  229. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/runtime/validator_runner.py +0 -0
  230. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/scope.py +0 -0
  231. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/serializer_json.py +0 -0
  232. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/shared/__init__.py +0 -0
  233. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/shared/base_types.py +0 -0
  234. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/shared/separators.py +0 -0
  235. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/shared/structural.py +0 -0
  236. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/source/__init__.py +0 -0
  237. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/source/error_source.py +0 -0
  238. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/source/json_path.py +0 -0
  239. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/source/semantic_diff.py +0 -0
  240. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/source/yaml_positions.py +0 -0
  241. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/source_resolution.py +0 -0
  242. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/__init__.py +0 -0
  243. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/attr.json +0 -0
  244. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/db.json +0 -0
  245. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/documentation.json +0 -0
  246. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/field.json +0 -0
  247. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/identity.json +0 -0
  248. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/index.json +0 -0
  249. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/layout.json +0 -0
  250. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/object.json +0 -0
  251. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/origin.json +0 -0
  252. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/prompt.json +0 -0
  253. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/relationship.json +0 -0
  254. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/reporting.json +0 -0
  255. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/requirement.json +0 -0
  256. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/source.json +0 -0
  257. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/template.json +0 -0
  258. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/ui-web.json +0 -0
  259. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/ui.json +0 -0
  260. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/validator.json +0 -0
  261. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/spec_metamodel/view.json +0 -0
  262. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/super_resolve.py +0 -0
  263. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/validation_types.py +0 -0
  264. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/wire.py +0 -0
  265. {metaobjects-1.1.2 → metaobjects-1.1.4}/src/metaobjects/yaml_desugar.py +0 -0
  266. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/__init__.py +0 -0
  267. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/__init__.py +0 -0
  268. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/config_helpers.py +0 -0
  269. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/gen_suite.py +0 -0
  270. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/extends/expected/BaseEntity.py +0 -0
  271. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/extends/expected/Program.py +0 -0
  272. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/extends/meta.json +0 -0
  273. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/nested-array/expected/AuthorBrief.py +0 -0
  274. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/nested-array/expected/PostBrief.py +0 -0
  275. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/nested-array/meta.json +0 -0
  276. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/scalars/expected/Metric.py +0 -0
  277. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/scalars/expected/Report.py +0 -0
  278. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/scalars/meta.json +0 -0
  279. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/vanilla/expected/Subscriber.py +0 -0
  280. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/golden/vanilla/meta.json +0 -0
  281. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_abstract_conformance.py +0 -0
  282. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_api_docs_builder.py +0 -0
  283. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_api_docs_paths.py +0 -0
  284. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli.py +0 -0
  285. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_config_gen.py +0 -0
  286. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_config_verify.py +0 -0
  287. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_dependencies.py +0 -0
  288. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_fmt.py +0 -0
  289. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_gen_unknown_attr.py +0 -0
  290. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_help_removed_flags.py +0 -0
  291. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_providers.py +0 -0
  292. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_registry.py +0 -0
  293. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_render_helper_template_root.py +0 -0
  294. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_staleness_nudge.py +0 -0
  295. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_surface.py +0 -0
  296. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_verify_field_lint.py +0 -0
  297. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_verify_requirements.py +0 -0
  298. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_verify_strict.py +0 -0
  299. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cli_verify_subverbs.py +0 -0
  300. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_codegen_compile_conformance.py +0 -0
  301. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_collection_name_collision.py +0 -0
  302. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_config_run_settings.py +0 -0
  303. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_constants_config.py +0 -0
  304. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_cross_package_binding_conformance.py +0 -0
  305. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_docs_generators.py +0 -0
  306. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_eject.py +0 -0
  307. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_eject_alone.py +0 -0
  308. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_eject_independence.py +0 -0
  309. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_eject_runtime.py +0 -0
  310. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_entity_model.py +0 -0
  311. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_enum_conformance.py +0 -0
  312. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_extends_abstract_field_inheritance.py +0 -0
  313. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_extract_tier_collision.py +0 -0
  314. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_extractor_generator.py +0 -0
  315. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_filter_allowlist_generator.py +0 -0
  316. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_fmt_format_file.py +0 -0
  317. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_format.py +0 -0
  318. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_fr010_nested_object_prompt.py +0 -0
  319. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_fr010_output_codegen.py +0 -0
  320. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_fr019_shared_provided_conformance.py +0 -0
  321. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_gen_state_keying.py +0 -0
  322. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_generator.py +0 -0
  323. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_generator_extension_seams.py +0 -0
  324. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_golden.py +0 -0
  325. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_hand_edits.py +0 -0
  326. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_inherit_without_restate_gate.py +0 -0
  327. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_inheritance_conformance.py +0 -0
  328. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_instance_artifacts.py +0 -0
  329. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_m2m_codegen.py +0 -0
  330. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_moved_modules.py +0 -0
  331. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_names_extends_chain.py +0 -0
  332. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_names_generator.py +0 -0
  333. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_no_magic_physical_names.py +0 -0
  334. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_one_generator_list.py +0 -0
  335. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_origin_nullability.py +0 -0
  336. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_orphan_sweep.py +0 -0
  337. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_output_parser_generator.py +0 -0
  338. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_overwrite_policy.py +0 -0
  339. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_overwrite_policy_hash.py +0 -0
  340. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_project_config.py +0 -0
  341. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_project_import.py +0 -0
  342. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_projection_compile.py +0 -0
  343. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_projection_docs_routes.py +0 -0
  344. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_recipe_generators.py +0 -0
  345. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_render_helper_conformance.py +0 -0
  346. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_render_helper_generator.py +0 -0
  347. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_report_router.py +0 -0
  348. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_requirement_tests_generator.py +0 -0
  349. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_reverse_finders.py +0 -0
  350. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_route_path_naming.py +0 -0
  351. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_router_autoset.py +0 -0
  352. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_router_generator.py +0 -0
  353. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_router_generator_m2m_target_tph.py +0 -0
  354. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_router_generator_tph_m2m.py +0 -0
  355. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_router_generator_tph_m2m_shadowed.py +0 -0
  356. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_runner.py +0 -0
  357. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_source_resolution.py +0 -0
  358. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_sourceless_entity_surface.py +0 -0
  359. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_sourceless_projection.py +0 -0
  360. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_template_data.py +0 -0
  361. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_template_generator.py +0 -0
  362. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_template_output_pattern.py +0 -0
  363. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_template_scope_helpers.py +0 -0
  364. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_template_scope_walk.py +0 -0
  365. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_template_spec.py +0 -0
  366. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_tph_codegen.py +0 -0
  367. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_trace_helper_generator.py +0 -0
  368. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_type_map.py +0 -0
  369. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_validation_conformance.py +0 -0
  370. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_value_objects.py +0 -0
  371. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/codegen/test_write_through.py +0 -0
  372. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/config/__init__.py +0 -0
  373. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/config/test_dependencies.py +0 -0
  374. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/config/test_library_package_guard.py +0 -0
  375. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/config/test_neutral_config.py +0 -0
  376. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/config/test_neutral_config_unknown_key.py +0 -0
  377. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/config/test_source_resolver.py +0 -0
  378. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/__init__.py +0 -0
  379. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/capabilities.py +0 -0
  380. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/conformance-expected-failures.json +0 -0
  381. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/conformance_adapter.py +0 -0
  382. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/corpus.py +0 -0
  383. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/eject_contract.py +0 -0
  384. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/expected_failures.py +0 -0
  385. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/fixture_discovery.py +0 -0
  386. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/navigator.py +0 -0
  387. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_api_docs_cross_port_conformance.py +0 -0
  388. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_conformance.py +0 -0
  389. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_conformance_twin_roundtrip.py +0 -0
  390. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_dependency_conformance.py +0 -0
  391. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_eject_contract.py +0 -0
  392. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_extract_conformance.py +0 -0
  393. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_extract_object_array_bounds.py +0 -0
  394. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_extract_object_verdict.py +0 -0
  395. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_field_lint_conformance.py +0 -0
  396. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_fmt_conformance.py +0 -0
  397. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_fr010_loader_attrs.py +0 -0
  398. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_fr011_attrs.py +0 -0
  399. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_generator_registry_conformance.py +0 -0
  400. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_naming_conformance.py +0 -0
  401. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_object_model_conformance.py +0 -0
  402. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_provider_composition_conformance.py +0 -0
  403. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_registry_conformance.py +0 -0
  404. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_requirement_check_conformance.py +0 -0
  405. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_requirement_test_identity_conformance.py +0 -0
  406. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_runner_hardfail.py +0 -0
  407. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_scope_conformance.py +0 -0
  408. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_source_resolution_conformance.py +0 -0
  409. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_spec_metamodel_embed.py +0 -0
  410. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_strict_attr_load.py +0 -0
  411. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_template_codegen_conformance.py +0 -0
  412. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_template_generator_conformance.py +0 -0
  413. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_wire_conformance.py +0 -0
  414. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/test_yaml_conformance.py +0 -0
  415. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/conformance/yaml-conformance-expected-failures.json +0 -0
  416. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/__init__.py +0 -0
  417. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/api_contract_assertions.py +0 -0
  418. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/api_contract_jsonb_server.py +0 -0
  419. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/api_contract_m2m_server.py +0 -0
  420. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/api_contract_server.py +0 -0
  421. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/conftest.py +0 -0
  422. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/corpus_config.py +0 -0
  423. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/engines.py +0 -0
  424. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/generated_jsonb_app.py +0 -0
  425. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/generated_m2m_app.py +0 -0
  426. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/generated_projection_app.py +0 -0
  427. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/generated_router_app.py +0 -0
  428. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/generated_tph_app.py +0 -0
  429. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/meta_ai_trace.yaml +0 -0
  430. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/mysql_container.py +0 -0
  431. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/normalization.py +0 -0
  432. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/postgres_container.py +0 -0
  433. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/query_runner.py +0 -0
  434. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/report_lane.py +0 -0
  435. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/scenarios.py +0 -0
  436. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract.py +0 -0
  437. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract_decimal.py +0 -0
  438. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract_generated.py +0 -0
  439. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract_jsonb.py +0 -0
  440. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract_m2m.py +0 -0
  441. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract_m2m_generated.py +0 -0
  442. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract_projection.py +0 -0
  443. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_api_contract_tph_generated.py +0 -0
  444. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_generated_decimal_wire.py +0 -0
  445. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_generated_router_uuid_pk.py +0 -0
  446. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_llm_call_trace.py +0 -0
  447. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_m2m_target_tph_generated.py +0 -0
  448. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_normalization.py +0 -0
  449. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_query_scenarios.py +0 -0
  450. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_runtime_return_types.py +0 -0
  451. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_tph_m2m_generated.py +0 -0
  452. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/integration/test_tph_m2m_shadowed_generated.py +0 -0
  453. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/__init__.py +0 -0
  454. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_abstract_subtype_authored.py +0 -0
  455. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_child_wrapper_body_shape.py +0 -0
  456. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_enum_extends_values_conflict.py +0 -0
  457. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_field_mutability_order.py +0 -0
  458. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_library_packages.py +0 -0
  459. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_naming_discovery.py +0 -0
  460. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_relative_package_multi_root.py +0 -0
  461. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_shipped_library_ai.py +0 -0
  462. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/loader/test_template_payload_target_210.py +0 -0
  463. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/open_closed_proof_test.py +0 -0
  464. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/__init__.py +0 -0
  465. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/__init__.py +0 -0
  466. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_coerce.py +0 -0
  467. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_extract.py +0 -0
  468. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_extract_map.py +0 -0
  469. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_json_forgiving_reader.py +0 -0
  470. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_locate.py +0 -0
  471. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_model.py +0 -0
  472. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_normalize.py +0 -0
  473. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_strip.py +0 -0
  474. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/extract/test_xml_forgiving_reader.py +0 -0
  475. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/prompt/__init__.py +0 -0
  476. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/prompt/test_output_format_renderer.py +0 -0
  477. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_email_document.py +0 -0
  478. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_filesystem_provider.py +0 -0
  479. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_output_format_renderer_nested.py +0 -0
  480. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_output_prompt_conformance.py +0 -0
  481. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_render_conformance.py +0 -0
  482. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_render_max_chars.py +0 -0
  483. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_render_model_payload.py +0 -0
  484. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_verify.py +0 -0
  485. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/render/test_verify_conformance.py +0 -0
  486. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_constraint_errors.py +0 -0
  487. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_decimal_wire.py +0 -0
  488. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_literal_naming_sqlite.py +0 -0
  489. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_object_manager_currency_read.py +0 -0
  490. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_object_manager_enum_intvaluemap.py +0 -0
  491. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_object_manager_table_name.py +0 -0
  492. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_validation_conformance_runtime.py +0 -0
  493. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/runtime/test_validator_runner.py +0 -0
  494. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/source/__init__.py +0 -0
  495. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/source/test_fr5c_merge_attribution.py +0 -0
  496. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/source/test_fr5d_reference_resolution.py +0 -0
  497. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/source/test_fr5e_database_source_shape.py +0 -0
  498. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/source/test_json_path.py +0 -0
  499. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/source/test_semantic_diff.py +0 -0
  500. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/source/test_source_on_node.py +0 -0
  501. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/source/test_yaml_positions.py +0 -0
  502. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/test_api_docs_accuracy.py +0 -0
  503. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/test_api_docs_packages.py +0 -0
  504. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/test_meta_endpoint.py +0 -0
  505. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/test_report_read_model.py +0 -0
  506. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/test_report_shape.py +0 -0
  507. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/test_reporting_inert.py +0 -0
  508. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/__init__.py +0 -0
  509. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_agent_context_staleness.py +0 -0
  510. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_capabilities.py +0 -0
  511. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_column_naming_strategy.py +0 -0
  512. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_common_attrs.py +0 -0
  513. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_core_types.py +0 -0
  514. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_derive_m2m_declaring_entity.py +0 -0
  515. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_effective_children_sibling_shadowing.py +0 -0
  516. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_effective_package.py +0 -0
  517. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_errors.py +0 -0
  518. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_field_enum.py +0 -0
  519. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_field_enum_intvaluemap.py +0 -0
  520. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_field_map_validation.py +0 -0
  521. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_field_uuid_dbcolumntype.py +0 -0
  522. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_file_source_id.py +0 -0
  523. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_fr016_source_name_and_kind_aliases.py +0 -0
  524. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_index_lookup.py +0 -0
  525. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_inherited_reference_binding.py +0 -0
  526. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_llm_recorder.py +0 -0
  527. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_loader.py +0 -0
  528. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_loader_bom.py +0 -0
  529. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_loader_class.py +0 -0
  530. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_merge.py +0 -0
  531. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_meta_attr.py +0 -0
  532. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_meta_data.py +0 -0
  533. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_meta_source.py +0 -0
  534. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_module_shortcuts.py +0 -0
  535. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_n2m_resolver.py +0 -0
  536. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_n2m_resolver_inherited.py +0 -0
  537. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_no_dead_config_fields.py +0 -0
  538. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_object_manager_autoset_stamping.py +0 -0
  539. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_object_manager_uuid_coercion.py +0 -0
  540. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_object_manager_write_through.py +0 -0
  541. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_one_primary_source.py +0 -0
  542. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_parser.py +0 -0
  543. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_parser_yaml.py +0 -0
  544. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_provider.py +0 -0
  545. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_provider_extension.py +0 -0
  546. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_registry.py +0 -0
  547. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_registry_completeness.py +0 -0
  548. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_registry_extend.py +0 -0
  549. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_registry_sealed.py +0 -0
  550. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_relationship_m2m_validation.py +0 -0
  551. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_relationship_references.py +0 -0
  552. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_relationship_referential_actions.py +0 -0
  553. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_reporting_validation_spine_default.py +0 -0
  554. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_resolution_key.py +0 -0
  555. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_resolve_claim.py +0 -0
  556. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_runtime_resolution_key_binding.py +0 -0
  557. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_serializer.py +0 -0
  558. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_serializer_shared_document.py +0 -0
  559. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_shared_constants.py +0 -0
  560. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_smoke.py +0 -0
  561. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_source_escapes.py +0 -0
  562. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_sources.py +0 -0
  563. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_strict_child_placement.py +0 -0
  564. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_super_resolve.py +0 -0
  565. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_template_toolcall.py +0 -0
  566. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_template_wrong_subtype_attrs.py +0 -0
  567. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_validation_attr_schema.py +0 -0
  568. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_validation_filter_values.py +0 -0
  569. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_validation_origin_195.py +0 -0
  570. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_validation_origin_paths.py +0 -0
  571. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_validation_sort_field.py +0 -0
  572. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_validation_warnings.py +0 -0
  573. {metaobjects-1.1.2 → metaobjects-1.1.4}/tests/unit/test_write_coercion_arrays.py +0 -0
  574. {metaobjects-1.1.2 → metaobjects-1.1.4}/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.1.2
3
+ Version: 1.1.4
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.1.2"
3
+ version = "1.1.4"
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"
@@ -658,6 +658,12 @@ def _auth_docstring_paragraph(*, read_only: bool) -> str:
658
658
  )
659
659
 
660
660
 
661
+ #: The most rows a report list answers when no cap is configured, the same default in every
662
+ #: port. With no ``limit`` a report answers every row up to the cap and is refused above it,
663
+ #: never truncated.
664
+ DEFAULT_REPORT_MAX_ROWS = 10_000
665
+
666
+
661
667
  class RouterGenerator:
662
668
  """One ``<entity_snake>_router.py`` per routed object (FastAPI ``APIRouter``):
663
669
  full CRUD for a writable source, read-only for a view-backed one.
@@ -689,6 +695,13 @@ class RouterGenerator:
689
695
 
690
696
  name = "router-generator"
691
697
 
698
+ def __init__(self, report_max_rows: int = DEFAULT_REPORT_MAX_ROWS) -> None:
699
+ """*report_max_rows* is the row cap of a served report's list route: with no ``limit``
700
+ the route answers every row up to it, and one more row (or a ``limit`` above it) is
701
+ ``400 {"error": "report_too_large", "maxRows": N}``. Reports only; an entity's list
702
+ keeps its paging."""
703
+ self.report_max_rows = report_max_rows
704
+
692
705
  def _emit_repository_protocol(
693
706
  self, repo_class: str, m2m: list[M2mDescriptor], pk_type: str
694
707
  ) -> list[str]:
@@ -758,12 +771,81 @@ class RouterGenerator:
758
771
  create_autoset: list[str] = (),
759
772
  update_autoset: list[str] = (),
760
773
  frozen_strip: list[str] = (),
774
+ report_max_rows: int | None = None,
761
775
  ) -> list[str]:
762
776
  """One CRUD route handler block, dispatched by *name*
763
777
  (``list`` / ``get`` / ``create`` / ``update`` / ``delete``). Override to
764
778
  change a handler's body / decorators / response shape. *model_name* /
765
779
  *patch_model* are the generated create + all-optional PATCH Pydantic models
766
- used to run field constraints on POST / PATCH (FR-036)."""
780
+ used to run field constraints on POST / PATCH (FR-036). *report_max_rows* is
781
+ passed only for a served report's ``list``: every row up to that cap, refused above it."""
782
+ if name == "list" and report_max_rows is not None:
783
+ return [
784
+ '@router.get("")',
785
+ f"def list_{plural}(",
786
+ " request: Request,",
787
+ f" repo: Annotated[{repo_class}, Depends(get_repository)],",
788
+ " limit: str | None = Query(None),",
789
+ " offset: str | None = Query(None),",
790
+ " sort: str | None = Query(None),",
791
+ ' with_count: int | None = Query(None, alias="withCount"),',
792
+ ") -> Any:",
793
+ f" max_rows = {report_max_rows}",
794
+ " too_large = JSONResponse(",
795
+ ' status_code=400, content={"error": "report_too_large", "maxRows": max_rows}',
796
+ " )",
797
+ " requested_limit: int | None = None",
798
+ " if limit is not None:",
799
+ " if not (limit.isascii() and limit.isdigit()) or int(limit) < 1:",
800
+ " return JSONResponse(",
801
+ " status_code=400,",
802
+ " content={",
803
+ ' "error": "pagination.invalid_value",',
804
+ ' "param": "limit",',
805
+ ' "value": limit,',
806
+ ' "expected": f"an integer from 1 to {max_rows}",',
807
+ " },",
808
+ " )",
809
+ " requested_limit = int(limit)",
810
+ " if requested_limit > max_rows:",
811
+ " return too_large",
812
+ " actual_offset = 0",
813
+ " if offset is not None:",
814
+ " if not (offset.isascii() and offset.isdigit()):",
815
+ " return JSONResponse(",
816
+ " status_code=400,",
817
+ " content={",
818
+ ' "error": "pagination.invalid_value",',
819
+ ' "param": "offset",',
820
+ ' "value": offset,',
821
+ ' "expected": "a non-negative integer (0 or more)",',
822
+ " },",
823
+ " )",
824
+ " actual_offset = int(offset)",
825
+ " sort_clause: _SortClause | None = None",
826
+ " if sort is not None:",
827
+ " sort_clause = _parse_sort(sort)",
828
+ " if sort_clause is None:",
829
+ ' return JSONResponse(status_code=400, content={"error": "invalid_sort", "field": sort.split(":", 1)[0]})',
830
+ f" filter_result = parse_filter(request.query_params, {fields_const}, {ops_const})",
831
+ " if filter_result.error_envelope is not None:",
832
+ " return JSONResponse(status_code=400, content=filter_result.error_envelope)",
833
+ " predicates, decimal_error = coerce_decimal_predicates(",
834
+ " filter_result.predicates, _DECIMAL_FIELDS",
835
+ " )",
836
+ " if decimal_error is not None:",
837
+ " return JSONResponse(status_code=400, content=decimal_error)",
838
+ " # With no limit the repository is asked for one row past the cap, so the",
839
+ " # refusal comes before any body is written.",
840
+ " fetch_limit = requested_limit if requested_limit is not None else max_rows + 1",
841
+ " rows = repo.list(fetch_limit, actual_offset, sort_clause, predicates)",
842
+ " if requested_limit is None and len(rows) > max_rows:",
843
+ " return too_large",
844
+ " if with_count == 1:",
845
+ " total = repo.count(predicates)",
846
+ ' return {"rows": render_wire(rows, _WIRE), "total": total}',
847
+ " return render_wire(rows, _WIRE)",
848
+ ]
767
849
  if name == "list":
768
850
  return [
769
851
  '@router.get("")',
@@ -1803,6 +1885,9 @@ class RouterGenerator:
1803
1885
  # handlers do not read these; they are required by the shared signature.
1804
1886
  model_name="",
1805
1887
  patch_model="",
1888
+ # Only a report is capped; passed for it alone so an adopter's `_emit_route_handler`
1889
+ # override that does not take the keyword keeps working for a projection.
1890
+ **({"report_max_rows": self.report_max_rows} if is_report else {}),
1806
1891
  )
1807
1892
  for i, hname in enumerate(("list", "get") if item_route else ("list",)):
1808
1893
  if i > 0:
@@ -1856,11 +1941,12 @@ def render_router(
1856
1941
  return RouterGenerator().render_router(entity, object_index, column_naming)
1857
1942
 
1858
1943
 
1859
- def router_generator() -> Generator:
1944
+ def router_generator(report_max_rows: int = DEFAULT_REPORT_MAX_ROWS) -> Generator:
1860
1945
  """Generator factory: one ``<entity_snake>_router.py`` per routed object —
1861
- full CRUD for a writable source, read-only for a view-backed one.
1946
+ full CRUD for a writable source, read-only for a view-backed one. *report_max_rows*
1947
+ is the row cap of a served report's list route (default 10000).
1862
1948
 
1863
1949
  Returns a :class:`RouterGenerator` (subclassable extension seam). Skips objects
1864
1950
  without a ``source.rdb`` child and the non-collection read-only kinds
1865
1951
  (storedProc / tableFunction)."""
1866
- return RouterGenerator()
1952
+ return RouterGenerator(report_max_rows)
@@ -96,6 +96,8 @@ from ..meta.core.reporting.reporting_constants import (
96
96
  AGG_MIN,
97
97
  AGG_SUM,
98
98
  FILTER_RELATIVE_NOW,
99
+ FILTER_RELATIVE_START_OF,
100
+ RELATIVE_START_OF_UNITS,
99
101
  GRAIN_HOUR,
100
102
  ISO_DURATION_RE,
101
103
  MEASURE_SUBTYPE_AGGREGATE,
@@ -310,7 +312,7 @@ def _is_document_field(field: MetaData) -> bool:
310
312
 
311
313
  def _is_relative_value(v: object) -> TypeGuard[dict[str, object]]:
312
314
  """An object operand carrying a ``now`` key — a relative-date value, well-formed
313
- (exactly ``{ now }``) or not. A malformed one is refused, never read as data."""
315
+ (``{ now }`` plus an optional ``startOf``) or not. A malformed one is refused, never read as data."""
314
316
  return isinstance(v, dict) and FILTER_RELATIVE_NOW in v
315
317
 
316
318
 
@@ -861,10 +863,10 @@ def _check_filter(
861
863
  relative = _relative_operand(operand)
862
864
  if relative is None:
863
865
  continue
864
- if len(relative) != 1:
866
+ if not set(relative) <= {FILTER_RELATIVE_NOW, FILTER_RELATIVE_START_OF}:
865
867
  err(
866
868
  f"@filter on '{key}' has a malformed relative date {_js_json(relative)}; a relative date is "
867
- f'exactly {{ now: "<ISO-8601 duration>" }} with no other keys.'
869
+ f'{{ now: "<ISO-8601 duration>" }} with an optional startOf, and no other keys.'
868
870
  )
869
871
  continue
870
872
  if field.sub_type not in _TEMPORAL_FIELD_SUBTYPES:
@@ -885,6 +887,14 @@ def _check_filter(
885
887
  f"@filter on '{key}' has relative date '{_quote_value(duration)}', which is not an ISO-8601 "
886
888
  f"duration (e.g. '-P7D', '-PT12H')."
887
889
  )
890
+ continue
891
+ if FILTER_RELATIVE_START_OF in relative:
892
+ start_of = relative[FILTER_RELATIVE_START_OF]
893
+ if not isinstance(start_of, str) or start_of not in RELATIVE_START_OF_UNITS:
894
+ err(
895
+ f"@filter on '{key}' has startOf '{_quote_value(start_of)}'; startOf is one of "
896
+ f"{', '.join(RELATIVE_START_OF_UNITS)}."
897
+ )
888
898
 
889
899
 
890
900
  # ---------------------------------------------------------------------------
@@ -107,6 +107,13 @@ REPORT_DIMENSION_GRAIN_SEPARATOR = ":"
107
107
  #: Legal only in the ``@filter`` of a ``segment``, ``measure.aggregate`` or ``object.report``.
108
108
  FILTER_RELATIVE_NOW = "now"
109
109
 
110
+ #: The optional second key of a relative-date value: ``{ "now": "-P90D", "startOf": "day" }``
111
+ #: truncates the instant (after the duration is applied) to the start of that UTC calendar unit.
112
+ FILTER_RELATIVE_START_OF = "startOf"
113
+
114
+ #: The calendar units ``startOf`` accepts. A week is the ISO week, Monday start.
115
+ RELATIVE_START_OF_UNITS: tuple[str, ...] = ("day", "week", "month")
116
+
110
117
  #: A signed ISO-8601 duration (``-P7D``, ``P1Y2M``, ``-PT12H``). The lookaheads refuse
111
118
  #: the degenerate ``P`` and ``PT`` forms (a designator with no component). The pattern
112
119
  #: is the rule table's verbatim; ``\Z`` stands in for JS ``$`` (Python ``$`` would also
@@ -255,7 +255,7 @@ def _sorted_children(definition: TypeDefinition) -> list[dict[str, object]]:
255
255
  return children
256
256
 
257
257
 
258
- METAMODEL_VERSION = "1.1"
258
+ METAMODEL_VERSION = "1.2"
259
259
  """Rolled-up spec-version for the cross-port registry manifest.
260
260
 
261
261
  ``"0"`` = pre-1.0 / unstable (semver major-0). Flips to ``"1.0"`` at the
@@ -68,6 +68,12 @@ class Dialect:
68
68
  """``col LIKE pattern`` with the pattern verbatim and the match case-SENSITIVE."""
69
69
  return f"{quoted_column} LIKE {self.placeholder}", [pattern]
70
70
 
71
+ def order_term(self, quoted_column: str, descending: bool) -> str:
72
+ """One ``ORDER BY`` term with nulls LARGER than any value: ASC puts them last, DESC
73
+ first, on every engine. That is Postgres's own default, so this is its native form;
74
+ SQLite and MySQL would put nulls first on ASC."""
75
+ return f"{quoted_column} {'DESC NULLS FIRST' if descending else 'ASC NULLS LAST'}"
76
+
71
77
  def false_predicate(self) -> str:
72
78
  return "FALSE"
73
79
 
@@ -270,6 +276,11 @@ class MySqlDialect(Dialect):
270
276
  default_values = "() VALUES ()"
271
277
  unbounded_limit = "18446744073709551615"
272
278
 
279
+ def order_term(self, quoted_column: str, descending: bool) -> str:
280
+ # No NULLS FIRST/LAST on MySQL: a leading `col IS NULL` key (0 for a value, 1 for null).
281
+ d = "DESC" if descending else "ASC"
282
+ return f"({quoted_column} IS NULL) {d}, {quoted_column} {d}"
283
+
273
284
  def quote(self, ident: str) -> str:
274
285
  if "`" in ident:
275
286
  raise ValueError(f"unsafe identifier: {ident}")
@@ -634,8 +634,7 @@ class ObjectManager:
634
634
  for field_name, direction in sort:
635
635
  f = entity.find_field(field_name)
636
636
  col = _column_of(f, self._column_naming) if f is not None else field_name
637
- d = "DESC" if direction.lower() == "desc" else "ASC"
638
- order_parts.append(f"{self._d.quote(col)} {d}")
637
+ order_parts.append(self._d.order_term(self._d.quote(col), direction.lower() == "desc"))
639
638
  if order_parts:
640
639
  sql += " ORDER BY " + ", ".join(order_parts)
641
640
  if limit is not None:
@@ -42,6 +42,7 @@ from metaobjects import MetaDataLoader
42
42
  from .corpus_config import attach_corpus_wire
43
43
  from metaobjects.codegen.config import GenConfig
44
44
  from metaobjects.codegen.generator_registry import GeneratorBuildContext, list_generators
45
+ from metaobjects.codegen.generators.router_generator import router_generator
45
46
  from metaobjects.codegen.runner import run_gen
46
47
  from metaobjects.codegen.runtime.filter_parser import FilterPredicate
47
48
  from metaobjects.naming import attach_naming
@@ -60,7 +61,11 @@ SERVED_REPORTS: dict[str, str] = {
60
61
  "SalesBySku": "sales_by_sku",
61
62
  "ProductRefunds": "product_refunds",
62
63
  "TicketsByTags": "tickets_by_tags",
64
+ "ReadingLog": "reading_log",
63
65
  }
66
+ #: The row cap every lane builds its report routers with: ``ReadingLog`` has one row more, so the
67
+ #: cap scenarios tell "exactly the cap" from "past it" (``report/README.md``).
68
+ REPORT_CORPUS_MAX_ROWS = 60
64
69
  #: The sourceless report: generated nowhere, mounted nowhere.
65
70
  UNSERVED_REPORT = "InvoiceDays"
66
71
 
@@ -121,7 +126,9 @@ def generate_reports(corpus_root: Path, model: LaneModel = REPORT_MODEL) -> Gene
121
126
  templates = tmp / "templates"
122
127
  templates.mkdir()
123
128
  generators = [
124
- entry.factory(GeneratorBuildContext(template_root=str(templates)))
129
+ router_generator(REPORT_CORPUS_MAX_ROWS)
130
+ if entry.name == "routes"
131
+ else entry.factory(GeneratorBuildContext(template_root=str(templates)))
125
132
  for entry in list_generators()
126
133
  if entry.name in _GENERATORS
127
134
  ]
@@ -102,7 +102,7 @@ def test_exactly_the_served_reports_are_generated() -> None:
102
102
  allowlist and router (and the names module is not a route concern, so it is not asked
103
103
  for here: only the three generators the lane runs)."""
104
104
  emitted = generate_reports(_CORPUS).emitted
105
- assert len(SERVED_REPORTS) == 10
105
+ assert len(SERVED_REPORTS) == 11
106
106
  for report, stem in SERVED_REPORTS.items():
107
107
  assert f"{report}.py" in emitted
108
108
  assert f"{stem}_filter_allowlist.py" in emitted
@@ -113,7 +113,7 @@ def test_sqlite_read_uses_qmark_placeholders_and_double_quotes() -> None:
113
113
  sql, params = rec.sql[-1]
114
114
  assert sql == (
115
115
  'SELECT "id", "label", "qty", "active", "price", "ref", "madeOn", "seenAt" FROM "items" '
116
- 'WHERE "qty" >= ? AND "label" = ? ORDER BY "qty" DESC LIMIT 5 OFFSET 10'
116
+ 'WHERE "qty" >= ? AND "label" = ? ORDER BY "qty" DESC NULLS FIRST LIMIT 5 OFFSET 10'
117
117
  )
118
118
  assert params == (2, "a")
119
119
 
@@ -264,7 +264,7 @@ def test_mysql_read_uses_backticks_and_percent_placeholders() -> None:
264
264
  sql, params = conn.sql[-1]
265
265
  assert sql == (
266
266
  "SELECT `id`, `label`, `qty`, `active`, `price`, `ref`, `madeOn`, `seenAt` FROM `items` "
267
- "WHERE `qty` >= %s AND `label` LIKE BINARY %s ORDER BY `qty` ASC "
267
+ "WHERE `qty` >= %s AND `label` LIKE BINARY %s ORDER BY (`qty` IS NULL) ASC, `qty` ASC "
268
268
  "LIMIT 18446744073709551615 OFFSET 4"
269
269
  )
270
270
  assert params == (2, "A%")
@@ -415,3 +415,14 @@ def test_a_mysql_decimal_operand_is_cast_to_a_decimal() -> None:
415
415
  sql, _ = _op_clause("amount", "in", [Decimal("1"), Decimal("2")], f, MYSQL)
416
416
  assert sql.count("CAST(%s AS DECIMAL(65,30))") == 2
417
417
  assert _op_clause("amount", "eq", Decimal("1.5"), f, POSTGRES)[0] == '"amount" = %s'
418
+
419
+
420
+ def test_order_term_puts_nulls_largest_on_every_dialect() -> None:
421
+ from metaobjects.runtime.dialect import MySqlDialect, PostgresDialect, SqliteDialect
422
+
423
+ for d in (PostgresDialect(), SqliteDialect()):
424
+ assert d.order_term('"c"', False) == '"c" ASC NULLS LAST'
425
+ assert d.order_term('"c"', True) == '"c" DESC NULLS FIRST'
426
+ my = MySqlDialect()
427
+ assert my.order_term("`c`", False) == "(`c` IS NULL) ASC, `c` ASC"
428
+ assert my.order_term("`c`", True) == "(`c` IS NULL) DESC, `c` DESC"
@@ -152,7 +152,7 @@ def test_filter_sort_limit_on_derived_fields() -> None:
152
152
  "ProgramMinutes", {"weeks": {"gte": 2}}, sort=[("totalMinutes", "desc")], limit=1
153
153
  )
154
154
  sql = drv.sql[0]
155
- assert sql.endswith('FROM "v_program_minutes" WHERE "weeks" >= %s ORDER BY "totalMinutes" DESC LIMIT 1')
155
+ assert sql.endswith('FROM "v_program_minutes" WHERE "weeks" >= %s ORDER BY "totalMinutes" DESC NULLS FIRST LIMIT 1')
156
156
  assert drv.params[0] == (2,)
157
157
 
158
158
 
@@ -333,7 +333,7 @@ def test_malformed_relative_value_is_refused() -> None:
333
333
  (
334
334
  ErrorCode.ERR_BAD_ATTR_FILTER,
335
335
  "report 'acme::shop::DailyRevenue': @filter on 'purchasedAt' has a malformed relative date "
336
- '{"now":"-P7D","x":1}; a relative date is exactly { now: "<ISO-8601 duration>" } with no other keys.',
336
+ '{"now":"-P7D","x":1}; a relative date is { now: "<ISO-8601 duration>" } with an optional startOf, and no other keys.',
337
337
  )
338
338
  ]
339
339
 
@@ -259,7 +259,7 @@ wheels = [
259
259
 
260
260
  [[package]]
261
261
  name = "metaobjects"
262
- version = "1.1.2"
262
+ version = "1.1.4"
263
263
  source = { editable = "." }
264
264
  dependencies = [
265
265
  { name = "pyyaml" },
File without changes
File without changes
File without changes
File without changes