From: Andy Bavier Date: Tue, 16 Feb 2010 18:23:49 +0000 (+0000) Subject: Validate RSpec against schema X-Git-Tag: sfa-0.9-11~103 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=4f07d3d7e0928d35bac70b3fb84465a5b9bfe645;p=sfa.git Validate RSpec against schema --- diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index 4a6fdf07..41a2c90f 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -43,7 +43,22 @@ def create_slice(api, xrn, rspec, origin_hrn=None): aggs = Aggregates(api) cred = api.getCredential() - # Validate the RSpec here against PlanetLab's schema + # Validate the RSpec against PlanetLab's schema + schema = "/var/www/html/schemas/pl.rng" + if schema: + try: + tree = etree.parse(StringIO(rspec)) + except etree.XMLSyntaxError: + message = str(sys.exc_info()[1]) + raise InvalidRSpec(message) + + relaxng_doc = etree.parse(schema) + relaxng = etree.RelaxNG(relaxng_doc) + + if not relaxng(tree): + error = relaxng.error_log.last_error + message = "%s (line %s)" % (error.message, error.line) + raise InvalidRSpec(message) aggs = Aggregates(api) cred = api.getCredential()