diff --git a/src/rez/resolved_context.py b/src/rez/resolved_context.py index 980822425..8ad89fe22 100644 --- a/src/rez/resolved_context.py +++ b/src/rez/resolved_context.py @@ -1697,7 +1697,7 @@ def _print_version(value): data = d.get("package_orderers") if data: - r.package_orderers = [package_order.from_pod(x) for x in data] + r.package_orderers = PackageOrderList([package_order.from_pod(x) for x in data]) else: r.package_orderers = None diff --git a/src/rez/tests/test_context.py b/src/rez/tests/test_context.py index 9c2467c64..82786f049 100644 --- a/src/rez/tests/test_context.py +++ b/src/rez/tests/test_context.py @@ -278,6 +278,35 @@ def test_orderer_package_argument(self): resolved = [x.qualified_package_name for x in r.resolved_packages] self.assertEqual(resolved, ['python-2.7.0']) + def test_serialize_roundtrip_with_extra_settings(self): + from rez.package_order import VersionSplitPackageOrder + from rez.version import Version + + packages_path = self.data_path("solver", "packages") + + file = os.path.join(self.root, "roundtrip.rxt") + orderers = [VersionSplitPackageOrder(Version("2.6.8"))] + r1 = ResolvedContext( + ["python"], + package_orderers=orderers, + package_paths=[packages_path], + ) + r1.save(file) + r2 = ResolvedContext.load(file) + + self.assertEqual(r1, r2) + + ignored_properties = [ + 'load_path', + 'graph_string', + 'graph_' + ] + for k, v in r1.__dict__.items(): + if k in ignored_properties: + continue + # check types here, as not all type instances are comparable + self.assertIs(type(v), type(r2.__dict__.get(k))) + if __name__ == '__main__': unittest.main()