summaryrefslogtreecommitdiff
path: root/amqp_codegen.py
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2010-07-05 16:30:28 +0100
committerSimon MacMullen <simon@rabbitmq.com>2010-07-05 16:30:28 +0100
commiteb3c9be1f551ad7d675b5545fa3dc175ec10a99a (patch)
tree119d9b7d8dad5dccc0e24251f623be7d6a4f72d8 /amqp_codegen.py
parent7768045079c3ffebdd232f983898831c2645ff22 (diff)
downloadrabbitmq-codegen-git-eb3c9be1f551ad7d675b5545fa3dc175ec10a99a.tar.gz
Always break when there's
- a method argument defined with two different types or default values
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r--amqp_codegen.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py
index b24a7e1f..683270c5 100644
--- a/amqp_codegen.py
+++ b/amqp_codegen.py
@@ -88,7 +88,7 @@ def domains_merger(key, old, new, allow_overwrite):
return [[k, v] for (k, v) in o.iteritems()]
-def merge_dict_lists_by(dict_key, old, new, allow_overwrite, check_fields):
+def merge_dict_lists_by(dict_key, old, new, allow_overwrite, check_fields, **kwargs):
old_index = dict((v[dict_key], v) for v in old)
result = list(old) # shallow copy
for v in new:
@@ -101,6 +101,8 @@ def merge_dict_lists_by(dict_key, old, new, allow_overwrite, check_fields):
new_val = v.get(f, None)
if old_val != new_val:
raise AmqpSpecFileMergeConflict(key, f, old_val, new_val)
+ if kwargs.has_key("sub_merge"):
+ kwargs["sub_merge"](old_index[key], v)
else:
result.append(v)
return result
@@ -109,11 +111,15 @@ def constants_merger(key, old, new, allow_overwrite):
return merge_dict_lists_by("name", old, new, allow_overwrite, ["value"])
def methods_merger(classname, old, new, allow_overwrite):
- return merge_dict_lists_by("name", old, new, allow_overwrite, ["synchronous"])
+ return merge_dict_lists_by("name", old, new, allow_overwrite, ["synchronous"],
+ sub_merge=lambda old, new: arguments_merger("name", old["arguments"], new["arguments"], allow_overwrite))
def properties_merger(classname, old, new, allow_overwrite):
return merge_dict_lists_by("name", old, new, allow_overwrite, ["type"])
+def arguments_merger(classname, old, new, allow_overwrite):
+ return merge_dict_lists_by("name", old, new, allow_overwrite, ["type", "default-value"])
+
def class_merger(old, new, allow_overwrite):
old["methods"] = methods_merger(old["name"],
old["methods"],