-
Notifications
You must be signed in to change notification settings - Fork 245
Update node serialization/deserialization and other Pydantic issues #6990
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Update node serialization/deserialization and other Pydantic issues #6990
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #6990 +/- ##
==========================================
- Coverage 79.67% 79.65% -0.01%
==========================================
Files 565 565
Lines 43710 44061 +351
==========================================
+ Hits 34820 35094 +274
- Misses 8890 8967 +77 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
9b7cfbd to
d83ced6
Compare
|
@khsrali regarding one of the failed tests... In this PR, I lift some validation to the top of the constructor (of stash data classes - see 91e4ad5), to avoid any operations if the object is bound to fail. However, this seems to introduce failures in testing them. It suggests that perhaps there is some order to the operations, though I don't see it. Can you please comment? |
It was checking for |
|
@GeigerJ2 okay, this is ready for others to inspect. I did my best to isolate the commits and provided comments on each. Happy to discuss further. Pinging also @agoscinski @superstar54 if interested. Pinging @sphuber for input/feedback, if he has time. |
|
It may be possible to rely on the post models of aiida-restapi as a reference for defining ORM constructor parameters, as the post models are intended to represent serialized objects passed to the REST API for object construction. Looking into this. |
c8ded01 to
476e144
Compare
476e144 to
7c191fa
Compare
|
@danielhollas what is this about? Nevermind. I see that importing |
516a6df to
2c3e5df
Compare
Nice, the system works. :-) Feel free to improve the error message here to make it more obvious that this is about the |
d6e44ff to
0b37ef6
Compare
|
|
@danielhollas what do you think about ignoring Ruff N806 - "~variable should be lowercase"? See case below. |
Do you mean ignoring locally (fine) or globally? |
Global. There are many cases when the variable is a class, not an instance. I've pushed this in my last commit just to verify that it works. Okay with removing it in favor of local handling, but would like to hear the reason against a global N806 rule. UpdateNice. Ignoring N806 globally raised a whole lot of RUF100 due to the codebase being littered with local N806 rules. I'd say that supports my case 🙂 |
|
@danielhollas done for tonight. Will revisit this in the morning 😴 |
Yeah, running Seems fine to remove it, or alternatively, use the e.g. something like this in pyproject.toml In any case please open a separate PR for that so we don't polute this one with bikeshedding discussion and unrelated changes. |
Thanks @danielhollas. Then for this one, since there are only a few cases in my PR, I will locally ignore them. Will open a PR for the pattern handling shortly after. |
5faafb0 to
a4a5b3e
Compare
7a730f3 to
e3769eb
Compare
Works for me 🤔 In [2]: from aiida import orm
In [3]: qb = orm.QueryBuilder()
...: qb.append(orm.CalcJobNode)
...: qb.first()[0].serialize()
Out[3]:
{'pk': 695,
'uuid': '9b2b343b-6840-449e-9c18-813b430b9948',
'node_type': 'process.calculation.calcjob.CalcJobNode.',
'process_type': 'aiida.calculations:quantumespresso.pw',
'repository_metadata': {'o': {'aiida.in': {'k': '01003b25af1aa3c0275f9aceaf472a7a922a1ec411d10b3626d912ab367420b4'},
'_aiidasubmit.sh': {'k': 'afd93b1fc0488e840188daba0a2535b41c434873a886f4d6091a2a762f9cb63a'},
'.aiida': {'o': {'job_tmpl.json': {'k': '72340e7a23e0718a803bfbb19c46212c15341382471f338cf77ffdf0ec695989'},
'calcinfo.json': {'k': 'e44d5ad45a70efdd49bc2eaf716b866d5abaeb5a53fc232970ffded0c2d7e854'}}}}},
'ctime': '2025-09-14T16:32:17.828434Z',
'mtime': '2025-09-14T16:33:17.520797Z',
'label': '',
'description': '',
'attributes': {'sealed': True,
'process_label': 'PwCalculation',
'process_state': 'finished',
'exit_status': 0,
'paused': False,
'scheduler_state': 'done',
'remote_workdir': '/home/edanb/.aiida/scratch/presto-1/9b/2b/343b-6840-449e-9c18-813b430b9948',
'job_id': '42913',
'scheduler_lastchecktime': '2025-09-14T18:33:17.233906+02:00',
'last_job_info': {'job_id': '42913',
'job_state': 'running',
'job_owner': 'edanb',
'wallclock_time_seconds': 0},
'retrieve_list': ['aiida.out',
'CRASH',
'./out/aiida.save/data-file-schema.xml',
'./out/aiida.save/data-file.xml',
'_scheduler-stdout.txt',
'_scheduler-stderr.txt'],
'retrieve_temporary_list': [['./out/aiida.save/K*[0-9]/eigenval*.xml',
'.',
2]],
'imported': False},
'extras': {'_aiida_hash': '5176d24c9d2656dd2ec1e55697e4cf745c350f1da447472686fd0c5ce61640c3'},
'computer': 1,
'user': 1} |
This PR addresses several issues with #6255 that came up during updates to the aiida-restapi in aiidateam/aiida-restapi#93.
Major changes
Entity.serialize()) are removed due to impracticality.Nodesubclass Models no longer extendNode.Model. Instead,Node.Model.attributesis typed asNode.AttributesModel, which is concretely implemented byNodesubclasses with explicit attributes definition (see this issue for details).Codemodels still extendNode.Modelhere and there for CLI metadata support.AttributesModelrefactor. Of note is that now node construction from model will pass arguments toNodeORM constructors under the attributes key. As such, constructors are adjusted to account for this. This change also supportsNodecreation via the RESTAPI.Note for PR reviewers
There are a few changes that are likely out of scope. These will move to dedicated PRs prior to merge of this PR.
Happy to discuss 🙂