Fix issues with sort_key.
diff --git a/pytoml/writer.py b/pytoml/writer.py
index d4a4aa3..20cb80c 100644
--- a/pytoml/writer.py
+++ b/pytoml/writer.py
@@ -92,8 +92,6 @@
tables = [((), obj, False)]
while tables:
- if sort_keys:
- tables.sort(key=lambda tup: tup[0], reverse=True)
name, table, is_array = tables.pop()
if name:
section_name = '.'.join(_escape_id(c) for c in name)
@@ -103,12 +101,13 @@
fout.write('[{0}]\n'.format(section_name))
table_keys = sorted(table.keys()) if sort_keys else table.keys()
+ new_tables = []
for k in table_keys:
v = table[k]
if isinstance(v, dict):
- tables.append((name + (k,), v, False))
+ new_tables.append((name + (k,), v, False))
elif isinstance(v, list) and v and all(isinstance(o, dict) for o in v):
- tables.extend((name + (k,), d, True) for d in reversed(v))
+ new_tables.extend((name + (k,), d, True) for d in v)
elif v is None:
# based on mojombo's comment: https://github.com/toml-lang/toml/issues/146#issuecomment-25019344
fout.write(
@@ -116,5 +115,7 @@
else:
fout.write('{0} = {1}\n'.format(_escape_id(k), _format_value(v)))
+ tables.extend(reversed(new_tables))
+
if tables:
fout.write('\n')
diff --git a/test/test.py b/test/test.py
index cc652a9..c1d2a37 100644
--- a/test/test.py
+++ b/test/test.py
@@ -69,10 +69,12 @@
parsed = None
parse_error = sys.exc_info()
else:
- dumped = toml.dumps(parsed)
+ dumped = toml.dumps(parsed, sort_keys=False)
+ dumped_sorted = toml.dumps(parsed, sort_keys=True)
parsed2 = toml.loads(dumped)
- if parsed != parsed2:
- failed.append((fname, parsed, parsed2, None))
+ parsed2_sorted = toml.loads(dumped_sorted)
+ if parsed != parsed2 or parsed != parsed2_sorted:
+ failed.append((fname, parsed, [parsed2, parsed2_sorted], None))
continue
with open(os.path.join(top, fname), 'rb') as fin: