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
commit42d4ec18b07c4186731cc65f16b89b83b1aec43c (patch)
tree119d9b7d8dad5dccc0e24251f623be7d6a4f72d8 /amqp_codegen.py
parent515b4168a0480e3cae0ee80fa36999c8bcdb2f88 (diff)
downloadrabbitmq-codegen-42d4ec18b07c4186731cc65f16b89b83b1aec43c.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 b24a7e1..683270c 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"],