diff options
author | Rob Austein <sra@hactrn.net> | 2014-07-18 17:08:13 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2014-07-18 17:08:13 +0000 |
commit | 0c945963b240cbc0b4155ead94205e9a6956fbf1 (patch) | |
tree | af08c2d0efc296584fb5d424bd402c425b8308e7 | |
parent | e2b9b042765d3e42bf9166d3f7980949a38a70b9 (diff) | |
parent | 4d78736439f3cf313d7f05ee59dbae3822dfbf40 (diff) |
Pull changes from trunk.
svn path=/branches/tk705/; revision=5903
-rw-r--r-- | buildtools/make-relaxng.py | 62 | ||||
-rw-r--r-- | ca/tests/yamlconf.py | 6 | ||||
-rw-r--r-- | ca/tests/yamltest.py | 6 | ||||
-rw-r--r-- | rpki/irdb/zookeeper.py | 24 | ||||
-rw-r--r-- | rpki/left_right.py | 8 | ||||
-rw-r--r-- | rpki/publication.py | 8 | ||||
-rw-r--r-- | rpki/publication_control.py | 8 | ||||
-rw-r--r-- | rpki/relaxng.py | 37 | ||||
-rw-r--r-- | rpki/relaxng_parser.py | 42 | ||||
-rw-r--r-- | rpki/sql_schemas.py | 2 | ||||
-rw-r--r-- | rpki/up_down.py | 9 | ||||
-rw-r--r-- | rpki/xml_utils.py | 6 | ||||
-rw-r--r-- | schemas/relaxng/left-right.rnc | 2 | ||||
-rw-r--r-- | schemas/relaxng/left-right.rng | 3 | ||||
-rw-r--r-- | schemas/relaxng/publication-control.rnc | 2 | ||||
-rw-r--r-- | schemas/relaxng/publication-control.rng | 3 |
16 files changed, 140 insertions, 88 deletions
diff --git a/buildtools/make-relaxng.py b/buildtools/make-relaxng.py index 7580016f..d540fa9a 100644 --- a/buildtools/make-relaxng.py +++ b/buildtools/make-relaxng.py @@ -1,32 +1,21 @@ # $Id$ # -# Copyright (C) 2009-2012 Internet Systems Consortium ("ISC") -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH -# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# +# Copyright (C) 2014 Dragon Research Labs ("DRL") +# Portions copyright (C) 2009--2012 Internet Systems Consortium ("ISC") # Portions copyright (C) 2007--2008 American Registry for Internet Numbers ("ARIN") -# +# # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND ARIN DISCLAIMS ALL WARRANTIES WITH -# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS. IN NO EVENT SHALL ARIN BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. +# copyright notices and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND DRL, ISC, AND ARIN DISCLAIM ALL +# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DRL, +# ISC, OR ARIN BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """ Script to generate rpki/relaxng.py. @@ -34,27 +23,30 @@ Script to generate rpki/relaxng.py. import sys -format_1 = """\ +header = """\ # Automatically generated, do not edit. -import lxml.etree +from rpki.relaxng_parser import RelaxNGParser """ -format_2 = """\ +format = """ ## @var %(name)s ## Parsed RelaxNG %(name)s schema -%(name)s = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''%(rng)s''')) +%(name)s = RelaxNGParser(r'''%(rng)s''') """ -def filename_to_symbol(s): +footer = """ +del RelaxNGParser +""" + +def symbol(s): for suffix in (".rng", "-schema"): if s.endswith(suffix): s = s[:-len(suffix)] return s.replace("-", "_") -print format_1 - -for filename in sys.argv[1:]: - print format_2 % { - "name" : filename_to_symbol(filename), - "rng" : open(filename).read() } +sys.stdout.write(header) +for fn in sys.argv[1:]: + with open(fn, "r") as f: + sys.stdout.write(format % dict(name = symbol(fn), rng = f.read())) +sys.stdout.write(footer) diff --git a/ca/tests/yamlconf.py b/ca/tests/yamlconf.py index acc56497..1b339a89 100644 --- a/ca/tests/yamlconf.py +++ b/ca/tests/yamlconf.py @@ -357,8 +357,10 @@ class allocation(object): path = self.path(fn) if not quiet: print "Writing", path - xmlns = "{http://www.hactrn.net/uris/rpki/router-certificate/}" - xml = lxml.etree.Element(xmlns + "router_certificate_requests", version = "1") + xmlns = rpki.relaxng.router_certificate.xmlns + xml = lxml.etree.Element(xmlns + "router_certificate_requests", + version = rpki.relaxng.router_certificate.version, + nsmap = rpki.relaxng.router_certificate.nsmap) for r in self.router_certs: x = lxml.etree.SubElement(xml, xmlns + "router_certificate_request", router_id = str(r.router_id), diff --git a/ca/tests/yamltest.py b/ca/tests/yamltest.py index a97e2554..0d427cf3 100644 --- a/ca/tests/yamltest.py +++ b/ca/tests/yamltest.py @@ -432,8 +432,10 @@ class allocation(object): if not args.skip_config: path = self.path(fn) print "Writing", path - xmlns = "{http://www.hactrn.net/uris/rpki/router-certificate/}" - xml = lxml.etree.Element(xmlns + "router_certificate_requests", version = "1") + xmlns = rpki.relaxng.router_certificate.xmlns + xml = lxml.etree.Element(xmlns + "router_certificate_requests", + version = rpki.relaxng.router_certificate.version, + nsmap = rpki.relaxng.router_certificate.nsmap) for r in self.router_certs: x = lxml.etree.SubElement(xml, xmlns + "router_certificate_request", router_id = str(r.router_id), diff --git a/rpki/irdb/zookeeper.py b/rpki/irdb/zookeeper.py index 28197de0..0effe213 100644 --- a/rpki/irdb/zookeeper.py +++ b/rpki/irdb/zookeeper.py @@ -47,9 +47,8 @@ from rpki.csv_utils import csv_reader # is historical and may change before we propose this as the basis for # a standard. -myrpki_namespace = "http://www.hactrn.net/uris/rpki/myrpki/" -myrpki_version = "2" -myrpki_namespaceQName = "{" + myrpki_namespace + "}" +myrpki_xmlns = rpki.relaxng.myrpki.xmlns +myrpki_version = rpki.relaxng.myrpki.version # XML namespace and protocol version for router certificate requests. # We probably ought to be pulling this sort of thing from the schema, @@ -57,9 +56,8 @@ myrpki_namespaceQName = "{" + myrpki_namespace + "}" # protocol version number, but just copy what we did for myrpki until # I'm ready to rewrite the rpki.relaxng code. -routercert_namespace = "http://www.hactrn.net/uris/rpki/router-certificate/" -routercert_version = "1" -routercert_namespaceQName = "{" + routercert_namespace + "}" +routercert_xmlns = rpki.relaxng.router_certificate.xmlns +routercert_version = rpki.relaxng.router_certificate.version myrpki_section = "myrpki" irdbd_section = "irdbd" @@ -140,10 +138,10 @@ def etree_read(filename): e = ElementTree(file = filename).getroot() rpki.relaxng.myrpki.assertValid(e) for i in e.getiterator(): - if i.tag.startswith(myrpki_namespaceQName): - i.tag = i.tag[len(myrpki_namespaceQName):] + if i.tag.startswith(myrpki_xmlns): + i.tag = i.tag[len(myrpki_xmlns):] else: - raise BadXMLMessage("XML tag %r is not in namespace %r" % (i.tag, myrpki_namespace)) + raise BadXMLMessage("XML tag %r is not in namespace %r" % (i.tag, myrpki_xmlns[1:-1])) return e @@ -159,8 +157,8 @@ class etree_wrapper(object): e.set("version", myrpki_version) for i in e.getiterator(): if i.tag[0] != "{": - i.tag = myrpki_namespaceQName + i.tag - assert i.tag.startswith(myrpki_namespaceQName) + i.tag = myrpki_xmlns + i.tag + assert i.tag.startswith(myrpki_xmlns) if debug: print ElementToString(e) rpki.relaxng.myrpki.assertValid(e) @@ -615,7 +613,7 @@ class Zookeeper(object): proposed_sia_base = repo.sia_base + child.handle + "/" referral_cert, created = rpki.irdb.Referral.objects.get_or_certify(issuer = self.resource_ca) auth = rpki.x509.SignedReferral() - auth.set_content(B64Element(None, myrpki_namespaceQName + "referral", child.ta, + auth.set_content(B64Element(None, myrpki_xmlns + "referral", child.ta, version = myrpki_version, authorized_sia_base = proposed_sia_base)) auth.schema_check() @@ -1620,7 +1618,7 @@ class Zookeeper(object): xml = ElementTree(file = router_certificate_request_xml).getroot() rpki.relaxng.router_certificate.assertValid(xml) - for req in xml.getiterator(routercert_namespaceQName + "router_certificate_request"): + for req in xml.getiterator(routercert_xmlns + "router_certificate_request"): pkcs10 = rpki.x509.PKCS10(Base64 = req.text) router_id = long(req.get("router_id")) diff --git a/rpki/left_right.py b/rpki/left_right.py index c90cac29..e4cf25fe 100644 --- a/rpki/left_right.py +++ b/rpki/left_right.py @@ -48,8 +48,8 @@ class left_right_namespace(object): XML namespace parameters for left-right protocol. """ - xmlns = "http://www.hactrn.net/uris/rpki/left-right-spec/" - nsmap = { None : xmlns } + xmlns = rpki.relaxng.left_right.xmlns + nsmap = rpki.relaxng.left_right.nsmap class data_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistent, left_right_namespace): """ @@ -1287,7 +1287,7 @@ class msg(rpki.xml_utils.msg, left_right_namespace): ## @var version # Protocol version - version = 1 + version = int(rpki.relaxng.left_right.version) ## @var pdus # Dispatch table of PDUs for this protocol. @@ -1335,7 +1335,7 @@ class sax_handler(rpki.xml_utils.sax_handler): pdu = msg name = "msg" - version = "1" + version = rpki.relaxng.left_right.version class cms_msg(rpki.x509.XML_CMS_object): """ diff --git a/rpki/publication.py b/rpki/publication.py index 5d9daf20..8970ff7a 100644 --- a/rpki/publication.py +++ b/rpki/publication.py @@ -39,8 +39,8 @@ logger = logging.getLogger(__name__) class publication_namespace(object): - xmlns = "http://www.hactrn.net/uris/rpki/publication-spec/" - nsmap = { None : xmlns } + xmlns = rpki.relaxng.publication.xmlns + nsmap = rpki.relaxng.publication.nsmap class base_publication_elt(rpki.xml_utils.base_elt, publication_namespace): @@ -230,7 +230,7 @@ class msg(rpki.xml_utils.msg, publication_namespace): ## @var version # Protocol version - version = 3 + version = int(rpki.relaxng.publication.version) ## @var pdus # Dispatch table of PDUs for this protocol. @@ -244,7 +244,7 @@ class sax_handler(rpki.xml_utils.sax_handler): pdu = msg name = "msg" - version = "3" + version = rpki.relaxng.publication.version class cms_msg(rpki.x509.XML_CMS_object): diff --git a/rpki/publication_control.py b/rpki/publication_control.py index f1cc5f2c..4ddcd8b2 100644 --- a/rpki/publication_control.py +++ b/rpki/publication_control.py @@ -55,8 +55,8 @@ class publication_control_namespace(object): XML namespace parameters for publication control protocol. """ - xmlns = "http://www.hactrn.net/uris/rpki/publication-control/" - nsmap = { None : xmlns } + xmlns = rpki.relaxng.publication_control.xmlns + nsmap = rpki.relaxng.publication_control.nsmap class client_elt(rpki.xml_utils.data_elt, rpki.sql.sql_persistent, publication_control_namespace): @@ -190,7 +190,7 @@ class msg(rpki.xml_utils.msg, publication_control_namespace): ## @var version # Protocol version - version = 1 + version = int(rpki.relaxng.publication_control.version) ## @var pdus # Dispatch table of PDUs for this protocol. @@ -234,7 +234,7 @@ class sax_handler(rpki.xml_utils.sax_handler): pdu = msg name = "msg" - version = "1" + version = rpki.relaxng.publication_control.version class cms_msg(rpki.x509.XML_CMS_object): diff --git a/rpki/relaxng.py b/rpki/relaxng.py index 5e86df7c..a7bc7578 100644 --- a/rpki/relaxng.py +++ b/rpki/relaxng.py @@ -1,10 +1,10 @@ # Automatically generated, do not edit. -import lxml.etree +from rpki.relaxng_parser import RelaxNGParser ## @var left_right ## Parsed RelaxNG left_right schema -left_right = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?> +left_right = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: left-right.rnc 5881 2014-07-03 16:55:02Z sra $ @@ -28,6 +28,9 @@ left_right = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" en WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --> <grammar ns="http://www.hactrn.net/uris/rpki/left-right-spec/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> + <define name="version"> + <value>1</value> + </define> <!-- Top level PDU --> <start> <element name="msg"> @@ -1093,11 +1096,11 @@ left_right = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" en comment-start-skip: "#[ \t]*" End: --> -''')) +''') ## @var myrpki ## Parsed RelaxNG myrpki schema -myrpki = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?> +myrpki = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: myrpki.rnc 5876 2014-06-26 19:00:12Z sra $ @@ -1476,11 +1479,11 @@ myrpki = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encodi comment-start-skip: "#[ \t]*" End: --> -''')) +''') ## @var publication_control ## Parsed RelaxNG publication_control schema -publication_control = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?> +publication_control = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: publication-control.rnc 5883 2014-07-03 19:21:31Z sra $ @@ -1504,6 +1507,9 @@ publication_control = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --> <grammar ns="http://www.hactrn.net/uris/rpki/publication-control/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> + <define name="version"> + <value>1</value> + </define> <!-- Top level PDU --> <start> <element name="msg"> @@ -1757,11 +1763,11 @@ publication_control = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version comment-start-skip: "#[ \t]*" End: --> -''')) +''') ## @var publication ## Parsed RelaxNG publication schema -publication = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?> +publication = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: publication.rnc 5896 2014-07-15 19:34:32Z sra $ @@ -1962,11 +1968,11 @@ publication = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" e comment-start-skip: "#[ \t]*" End: --> -''')) +''') ## @var router_certificate ## Parsed RelaxNG router_certificate schema -router_certificate = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?> +router_certificate = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: router-certificate.rnc 5881 2014-07-03 16:55:02Z sra $ @@ -2064,11 +2070,11 @@ router_certificate = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version= comment-start-skip: "#[ \t]*" End: --> -''')) +''') ## @var rrdp ## Parsed RelaxNG rrdp schema -rrdp = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?> +rrdp = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: rrdp.rnc 5888 2014-07-09 05:39:54Z sra $ @@ -2231,11 +2237,11 @@ rrdp = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding comment-start-skip: "#[ \t]*" End: --> -''')) +''') ## @var up_down ## Parsed RelaxNG up_down schema -up_down = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encoding="UTF-8"?> +up_down = RelaxNGParser(r'''<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: up-down.rnc 5881 2014-07-03 16:55:02Z sra $ @@ -2512,5 +2518,6 @@ up_down = lxml.etree.RelaxNG(lxml.etree.fromstring(r'''<?xml version="1.0" encod comment-start-skip: "#[ \t]*" End: --> -''')) +''') +del RelaxNGParser diff --git a/rpki/relaxng_parser.py b/rpki/relaxng_parser.py new file mode 100644 index 00000000..466b1a79 --- /dev/null +++ b/rpki/relaxng_parser.py @@ -0,0 +1,42 @@ +# $Id$ +# +# Copyright (C) 2014 Dragon Research Labs ("DRL") +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND DRL DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL DRL BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +""" +Wrapper around lxml to extract various useful data and methods +from an XML-format RelaxNG schema. +""" + +import lxml.etree + +class RelaxNGParser(object): + """ + Parse schema, extract XML namespace and protocol version (if any). + Method calls are just passed along to the parsed RelaxNG schema. + """ + + def __init__(self, text): + xml = lxml.etree.fromstring(text) + self.schema = lxml.etree.RelaxNG(xml) + ns = xml.get("ns") + self.xmlns = "{" + ns + "}" + self.nsmap = { None : ns } + x = xml.xpath("ns0:define[@name = 'version']/ns0:value", + namespaces = dict(ns0 = "http://relaxng.org/ns/structure/1.0")) + if len(x) == 1: + self.version = x[0].text + + def __getattr__(self, name): + return getattr(self.schema, name) diff --git a/rpki/sql_schemas.py b/rpki/sql_schemas.py index 6778ecd9..ad469204 100644 --- a/rpki/sql_schemas.py +++ b/rpki/sql_schemas.py @@ -245,7 +245,7 @@ CREATE TABLE ee_cert ( ## @var pubd ## SQL schema pubd -pubd = '''-- $Id: pubd.sql 5898 2014-07-17 17:26:12Z sra $ +pubd = '''-- $Id: pubd.sql 5901 2014-07-17 21:57:36Z sra $ -- Copyright (C) 2012--2014 Dragon Research Labs ("DRL") -- Portions copyright (C) 2009--2010 Internet Systems Consortium ("ISC") diff --git a/rpki/up_down.py b/rpki/up_down.py index df45c8c2..9fb627a1 100644 --- a/rpki/up_down.py +++ b/rpki/up_down.py @@ -33,9 +33,8 @@ import rpki.relaxng logger = logging.getLogger(__name__) -xmlns = "http://www.apnic.net/specs/rescerts/up-down/" - -nsmap = { None : xmlns } +xmlns = rpki.relaxng.up_down.xmlns +nsmap = rpki.relaxng.up_down.nsmap class base_elt(object): """ @@ -68,7 +67,7 @@ class base_elt(object): Construct a element, copying over a set of attributes. """ - elt = lxml.etree.Element("{%s}%s" % (xmlns, name), nsmap=nsmap) + elt = lxml.etree.Element(xmlns + name, nsmap = nsmap) for key in attrs: val = getattr(self, key, None) if val is not None: @@ -81,7 +80,7 @@ class base_elt(object): """ if value is not None and not value.empty(): - lxml.etree.SubElement(elt, "{%s}%s" % (xmlns, name), nsmap=nsmap).text = value.get_Base64() + lxml.etree.SubElement(elt, xmlns + name, nsmap = nsmap).text = value.get_Base64() def serve_pdu(self, q_msg, r_msg, child, callback, errback): """ diff --git a/rpki/xml_utils.py b/rpki/xml_utils.py index 11c2180e..3a7b919a 100644 --- a/rpki/xml_utils.py +++ b/rpki/xml_utils.py @@ -199,7 +199,7 @@ class base_elt(object): XML element constructor. """ - elt = lxml.etree.Element("{%s}%s" % (self.xmlns, self.element_name), nsmap = self.nsmap) + elt = lxml.etree.Element(self.xmlns + self.element_name, nsmap = self.nsmap) for key in self.attributes: val = getattr(self, key, None) if val is not None: @@ -215,7 +215,7 @@ class base_elt(object): """ if value is not None and not value.empty(): - lxml.etree.SubElement(elt, "{%s}%s" % (self.xmlns, name), nsmap = self.nsmap).text = value.get_Base64() + lxml.etree.SubElement(elt, self.xmlns + name, nsmap = self.nsmap).text = value.get_Base64() def __str__(self): """ @@ -493,7 +493,7 @@ class msg(list): Generate top-level PDU. """ - elt = lxml.etree.Element("{%s}msg" % (self.xmlns), nsmap = self.nsmap, version = str(self.version), type = self.type) + elt = lxml.etree.Element(self.xmlns + "msg", nsmap = self.nsmap, version = str(self.version), type = self.type) elt.extend(i.toXML() for i in self) return elt diff --git a/schemas/relaxng/left-right.rnc b/schemas/relaxng/left-right.rnc index 81c1e1e1..201f8ff0 100644 --- a/schemas/relaxng/left-right.rnc +++ b/schemas/relaxng/left-right.rnc @@ -21,6 +21,8 @@ default namespace = "http://www.hactrn.net/uris/rpki/left-right-spec/" +version = "1" + # Top level PDU start = element msg { diff --git a/schemas/relaxng/left-right.rng b/schemas/relaxng/left-right.rng index 7d5b7aba..31bea740 100644 --- a/schemas/relaxng/left-right.rng +++ b/schemas/relaxng/left-right.rng @@ -22,6 +22,9 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --> <grammar ns="http://www.hactrn.net/uris/rpki/left-right-spec/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> + <define name="version"> + <value>1</value> + </define> <!-- Top level PDU --> <start> <element name="msg"> diff --git a/schemas/relaxng/publication-control.rnc b/schemas/relaxng/publication-control.rnc index bf605640..ac59c617 100644 --- a/schemas/relaxng/publication-control.rnc +++ b/schemas/relaxng/publication-control.rnc @@ -21,6 +21,8 @@ default namespace = "http://www.hactrn.net/uris/rpki/publication-control/" +version = "1" + # Top level PDU start = element msg { diff --git a/schemas/relaxng/publication-control.rng b/schemas/relaxng/publication-control.rng index 2376f3e9..16ec2371 100644 --- a/schemas/relaxng/publication-control.rng +++ b/schemas/relaxng/publication-control.rng @@ -22,6 +22,9 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --> <grammar ns="http://www.hactrn.net/uris/rpki/publication-control/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> + <define name="version"> + <value>1</value> + </define> <!-- Top level PDU --> <start> <element name="msg"> |