summaryrefslogtreecommitdiff
path: root/amqp_codegen.py
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonyg@lshift.net>2009-10-07 16:11:54 +0100
committerTony Garnock-Jones <tonyg@lshift.net>2009-10-07 16:11:54 +0100
commit2827b11a8020d2d59f813528d476d85969eb574c (patch)
tree022909e3112940810b23346da7ccd0d2d105dfa3 /amqp_codegen.py
parentdc89be70621c1f5ea94c91cb94d4a2cb0e32c626 (diff)
downloadrabbitmq-codegen-2827b11a8020d2d59f813528d476d85969eb574c.tar.gz
Extensions mergers.
Diffstat (limited to 'amqp_codegen.py')
-rw-r--r--amqp_codegen.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/amqp_codegen.py b/amqp_codegen.py
index bd42950..1ade01f 100644
--- a/amqp_codegen.py
+++ b/amqp_codegen.py
@@ -66,7 +66,52 @@ def default_spec_value_merger(key, old, new):
return new
raise AmqpSpecFileMergeConflict((key, old, new))
+def extension_info_merger(key, old, new):
+ return old + [new]
+
+def domains_merger(key, old, new):
+ o = dict((k, v) for [k, v] in old)
+ for [k, v] in new:
+ if o.has_key(k):
+ raise AmqpSpecFileMergeConflict(key, old, new)
+ o[k] = v
+ return [[k, v] for (k, v) in o.iteritems()]
+
+def constants_merger(key, old, new):
+ o = dict((v["name"], v) for v in old)
+ for v in new:
+ if o.has_key(v["name"]):
+ raise AmqpSpecFileMergeConflict(key, old, new)
+ o[v["name"]] = v
+ return list(o.values())
+
+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)
+ o[v["name"]] = v
+ return list(o.values())
+
+def class_merger(old, new):
+ old["methods"] = methods_merger(old["name"], old["methods"], new["methods"])
+ old["properties"] = old.get("properties", []) + new.get("properties", [])
+ return old
+
+def classes_merger(key, old, new):
+ o = dict((v["name"], v) for v in old)
+ for v in new:
+ if o.has_key(v["name"]):
+ o[v["name"]] = class_merger(o[v["name"]], v)
+ else:
+ o[v["name"]] = v
+ return list(o.values())
+
mergers = {
+ "extension": (extension_info_merger, []),
+ "domains": (domains_merger, []),
+ "constants": (constants_merger, []),
+ "classes": (classes_merger, []),
}
def merge_load_specs(filenames):