diff --git a/CHANGELOG.md b/CHANGELOG.md index 902943772f..152e6b1c5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,6 @@ ### Improvements - Hashing, caching and fast-forwarding [[#652]](https://github.com/aiidateam/aiida_core/pull/652) -- PyCifRW upgraded to 4.2.1 [[#1073]](https://github.com/aiidateam/aiida_core/pull/1073) - Calculation no longer stores full source file [[#1082]](https://github.com/aiidateam/aiida_core/pull/1082) - Delete nodes via `verdi node delete` [[#1083]](https://github.com/aiidateam/aiida_core/pull/1083) - Import structures using ASE [[#1085]](https://github.com/aiidateam/aiida_core/pull/1085) @@ -10,7 +9,6 @@ ### Critical bug fixes - Add `parser_name` `JobProcess` options [[#1118]](https://github.com/aiidateam/aiida_core/pull/1118) -- Serialize `WorkChain` context before persisting [[#1354]](https://github.com/aiidateam/aiida_core/pull/1354) ### Minor bug fixes - Cell vectors not printed correctly [[#1087]](https://github.com/aiidateam/aiida_core/pull/1087) @@ -27,6 +25,17 @@ - Document querying of list attributes [[#1326]](https://github.com/aiidateam/aiida_core/pull/1326) - Cookbook: how to check the number of queued/running jobs in the scheduler [[#1349]](https://github.com/aiidateam/aiida_core/pull/1349) + +## v0.11.4 + +### Improvements +- PyCifRW upgraded to 4.2.1 [[#1073]](https://github.com/aiidateam/aiida_core/pull/1073) + +### Critical bug fixes +- Persist and load parsed workchain inputs and do not recreate to avoid creating duplicates for default inputs [[#1362]](https://github.com/aiidateam/aiida_core/pull/1362) +- Serialize `WorkChain` context before persisting [[#1354]](https://github.com/aiidateam/aiida_core/pull/1354) + + ## v0.11.3 ### Improvements diff --git a/aiida/__init__.py b/aiida/__init__.py index 73a599b3a4..732da5b3bc 100644 --- a/aiida/__init__.py +++ b/aiida/__init__.py @@ -13,7 +13,7 @@ __copyright__ = u"Copyright (c), This file is part of the AiiDA platform. For further information please visit http://www.aiida.net/. All rights reserved." __license__ = "MIT license, see LICENSE.txt file." -__version__ = "0.11.3" +__version__ = "0.11.4" __authors__ = "The AiiDA team." __paper__ = """G. Pizzi, A. Cepellotti, R. Sabatini, N. Marzari, and B. Kozinsky, "AiiDA: automated interactive infrastructure and database for computational science", Comp. Mat. Sci 111, 218-230 (2016); http://dx.doi.org/10.1016/j.commatsci.2015.09.013 - http://www.aiida.net.""" __paper_short__ = """G. Pizzi et al., Comp. Mat. Sci 111, 218 (2016).""" diff --git a/aiida/orm/data/cif.py b/aiida/orm/data/cif.py index 57d78b4a61..7693875dfb 100644 --- a/aiida/orm/data/cif.py +++ b/aiida/orm/data/cif.py @@ -516,7 +516,6 @@ def values(self): for k, v in c.items(): c.dictionary[k] = CifBlock(v) self._values = c - return self._values def set_values(self, values): diff --git a/aiida/utils/serialize.py b/aiida/utils/serialize.py index 59894637e7..d02983a394 100644 --- a/aiida/utils/serialize.py +++ b/aiida/utils/serialize.py @@ -1,6 +1,15 @@ # -*- coding: utf-8 -*- +########################################################################### +# Copyright (c), The AiiDA team. All rights reserved. # +# This file is part of the AiiDA code. # +# # +# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core # +# For further information on the license, see the LICENSE.txt file # +# For further information please visit http://www.aiida.net # +########################################################################### import collections from ast import literal_eval +from plum.util import AttributesFrozendict from aiida.common.extendeddicts import AttributeDict from aiida.orm import Group, Node, load_group, load_node @@ -56,6 +65,8 @@ def serialize_data(data): return '{}{}'.format(_PREFIX_VALUE_GROUP, data.uuid) elif isinstance(data, AttributeDict): return AttributeDict({encode_key(key): serialize_data(value) for key, value in data.iteritems()}) + elif isinstance(data, AttributesFrozendict): + return AttributesFrozendict({encode_key(key): serialize_data(value) for key, value in data.iteritems()}) elif isinstance(data, collections.Mapping): return {encode_key(key): serialize_data(value) for key, value in data.iteritems()} elif isinstance(data, collections.Sequence) and not isinstance(data, (str, unicode)): @@ -75,6 +86,8 @@ def deserialize_data(data): """ if isinstance(data, AttributeDict): return AttributeDict({decode_key(key): deserialize_data(value) for key, value in data.iteritems()}) + elif isinstance(data, AttributesFrozendict): + return AttributesFrozendict({decode_key(key): deserialize_data(value) for key, value in data.iteritems()}) elif isinstance(data, collections.Mapping): return {decode_key(key): deserialize_data(value) for key, value in data.iteritems()} elif isinstance(data, collections.Sequence) and not isinstance(data, (str, unicode)): diff --git a/setup_requirements.py b/setup_requirements.py index 9a392afb2e..71c099bc83 100644 --- a/setup_requirements.py +++ b/setup_requirements.py @@ -115,7 +115,7 @@ 'pymatgen==4.5.3', # support for NWChem I/O 'ase==3.12.0', # support for crystal structure manipulation 'PyMySQL==0.7.9', # required by ICSD tools - 'PyCifRW==4.2.1', # support for the AiiDA CifData class + 'PyCifRW==4.2.1', 'seekpath==1.8.0', 'qe-tools==1.1.0', ],