From 4f07d3d7e0928d35bac70b3fb84465a5b9bfe645 Mon Sep 17 00:00:00 2001 From: Andy Bavier Date: Tue, 16 Feb 2010 18:23:49 +0000 Subject: [PATCH] Validate RSpec against schema --- sfa/managers/slice_manager_pl.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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() -- 2.47.0