1313from aiida import orm
1414from aiida .common .datastructures import StashMode
1515from aiida .common .exceptions import UnsupportedSchemaError
16+ from aiida .orm .pydantic import OrmModel
1617
1718orm_to_test = (
1819 orm .AuthInfo ,
@@ -517,6 +518,31 @@ def test_minimal_model_idempotency():
517518 assert RepeatedDynamicModel is DynamicModel
518519
519520
521+ def test_generated_orm_model_setup_defers_pydantic_rebuild (monkeypatch ):
522+ """Test generated ORM models are not rebuilt eagerly during class setup."""
523+ rebuilt : list [type [OrmModel ]] = []
524+
525+ def model_rebuild (cls , * args , ** kwargs ):
526+ rebuilt .append (cls )
527+ return True
528+
529+ with monkeypatch .context () as context :
530+ context .setattr (OrmModel , 'model_rebuild' , classmethod (model_rebuild ))
531+
532+ class TestData (orm .Data ):
533+ class AttributesModel (orm .Data .AttributesModel ):
534+ value : int
535+
536+ class ConstructorArgsModel (OrmModel ):
537+ value : int
538+
539+ assert rebuilt == []
540+
541+ model = TestData .WriteModel (node_type = TestData .class_node_type , attributes = {'value' : '1' })
542+ assert model .attributes .value == 1
543+ assert TestData .ReadModel .model_json_schema ()['title' ] == 'TestDataReadModel'
544+
545+
520546@pytest .mark .parametrize (
521547 'required_arguments' ,
522548 orm_to_test ,
@@ -527,10 +553,10 @@ def test_model_overrides(required_arguments: RequiredEntityArguments):
527553 name = cls .__name__
528554
529555 assert cls .ReadModel .__qualname__ == f'{ name } .ReadModel'
530- assert cls .ReadModel .model_config . get ( 'title' ) == f'{ name } ReadModel'
556+ assert cls .ReadModel .model_json_schema ()[ 'title' ] == f'{ name } ReadModel'
531557
532558 assert cls .WriteModel .__qualname__ == f'{ name } .WriteModel'
533- assert cls .WriteModel .model_config . get ( 'title' ) == f'{ name } WriteModel'
559+ assert cls .WriteModel .model_json_schema ()[ 'title' ] == f'{ name } WriteModel'
534560
535561
536562def _clean_and_sort (dictionary : dict ) -> dict :
@@ -616,11 +642,11 @@ def test_node_attributes_model_overrides(required_arguments: RequiredNodeArgumen
616642 AttributesModel = cls .ReadModel .model_fields ['attributes' ].annotation # noqa: N806
617643 assert AttributesModel is cls .AttributesModel
618644 assert AttributesModel .__qualname__ == f'{ name } .AttributesModel'
619- assert AttributesModel .model_config . get ( 'title' ) == f'{ name } AttributesModel'
645+ assert AttributesModel .model_json_schema ()[ 'title' ] == f'{ name } AttributesModel'
620646
621647 AttributesWriteModel = cls .WriteModel .model_fields ['attributes' ].annotation # noqa: N806
622648 assert AttributesWriteModel .__qualname__ == f'{ name } .AttributesWriteModel'
623- assert AttributesWriteModel .model_config . get ( 'title' ) == f'{ name } AttributesWriteModel'
649+ assert AttributesWriteModel .model_json_schema ()[ 'title' ] == f'{ name } AttributesWriteModel'
624650
625651
626652def _validate_value (value ):
0 commit comments