X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Frspec.py;h=f3e6f80704db0e1417a6e69f2fa9607489a6c4e7;hb=0987f22edd6d6f0d32dcb929cafe78bca9369f80;hp=cc42a87833915ea904f8a5c23c24a5b69293a458;hpb=2f163dd107eb8b4fd311ba8ac110c126c7720e1e;p=sfa.git diff --git a/sfa/rspecs/rspec.py b/sfa/rspecs/rspec.py index cc42a878..f3e6f807 100755 --- a/sfa/rspecs/rspec.py +++ b/sfa/rspecs/rspec.py @@ -8,10 +8,11 @@ from sfa.util.config import Config from sfa.util.faults import SfaNotImplemented, InvalidRSpec class RSpec: - xml = None header = '\n' + template = """""" namespaces = {} config = Config() + xml = None def __init__(self, rspec="", namespaces={}): if rspec: @@ -24,10 +25,10 @@ class RSpec: date_format = '%Y-%m-%dT%H:%M:%SZ' now = datetime.utcnow() generated_ts = now.strftime(date_format) - expires_ts = (now + timedelta(minutes=30)).strftime(date_format) - self.xml = etree.Element("rspec", type = type, - valid_until=expires_ts, - generated=generated_ts) + expires_ts = (now + timedelta(hours=1)).strftime(date_format) + self.parse_rspec(self.template, self.namespaces) + self.xml.set('valid_until', expires_ts) + self.xml.set('generated', generated_ts) def parse_rspec(self, rspec, namespaces={}): parser = etree.XMLParser(remove_blank_text=True) @@ -56,6 +57,17 @@ class RSpec: if opt.text == value: elem.remove(opt) + + def validate(self, schema): + relaxng_doc = etree.parse(schema) + relaxng = etree.RelaxNG(relaxng_doc) + if not relaxng(self.xml): + error = relaxng.error_log.last_error + message = "%s (line %s)" % (error.message, error.line) + raise InvalidRSpec(message) + return True + + def __str__(self): return self.toxml()