summaryrefslogtreecommitdiff
path: root/amqp_codegen.py
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonyg@lshift.net>2010-05-23 22:55:52 +1200
committerTony Garnock-Jones <tonyg@lshift.net>2010-05-23 22:55:52 +1200
commitbecc3b0b7580c0c08105ec208ea590dc27972bce (patch)
tree8e231c529765a20ab6f72c1df67c8a008244a9cb /amqp_codegen.py
parent50af2cc41ccb589331113b34b11fd3bc37bca06d (diff)
downloadrabbitmq-codegen-becc3b0b7580c0c08105ec208ea590dc27972bce.tar.gz
Check for duplicate properties.
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r--amqp_codegen.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py
index 1ade01f..2fcf9b6 100644
--- a/amqp_codegen.py
+++ b/amqp_codegen.py
@@ -64,7 +64,7 @@ class AmqpSpecFileMergeConflict(Exception): pass
def default_spec_value_merger(key, old, new):
if old is None or old == new:
return new
- raise AmqpSpecFileMergeConflict((key, old, new))
+ raise AmqpSpecFileMergeConflict(key, old, new)
def extension_info_merger(key, old, new):
return old + [new]
@@ -89,13 +89,23 @@ def methods_merger(classname, old, new):
o = dict((v["name"], v) for v in old)
for v in new:
if o.has_key(v["name"]):
- raise AmqpSpecFileMergeConflict(("class", classname), old, new)
+ raise AmqpSpecFileMergeConflict(("class-methods", classname), old, new)
o[v["name"]] = v
return list(o.values())
+def properties_merger(classname, old, new):
+ oldnames = set(v["name"] for v in old)
+ newnames = set(v["name"] for v in new)
+ clashes = oldnames.intersection(newnames)
+ if clashes:
+ raise AmqpSpecFileMergeConflict(("class-properties", classname), old, new)
+ return old + new
+
def class_merger(old, new):
old["methods"] = methods_merger(old["name"], old["methods"], new["methods"])
- old["properties"] = old.get("properties", []) + new.get("properties", [])
+ old["properties"] = properties_merger(old["name"],
+ old.get("properties", []),
+ new.get("properties", []))
return old
def classes_merger(key, old, new):