From: Tony Mack Date: Mon, 4 Jan 2010 16:53:59 +0000 (+0000) Subject: added hrn_to_urn() and urn_to_hrn() methods X-Git-Tag: sfa-0.9-7~20 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=6938eec0da3bdb0f9d9996084527bbefbdf60db6;p=sfa.git added hrn_to_urn() and urn_to_hrn() methods --- diff --git a/sfa/util/namespace.py b/sfa/util/namespace.py index edd026a6..86af66f1 100644 --- a/sfa/util/namespace.py +++ b/sfa/util/namespace.py @@ -3,6 +3,8 @@ from sfa.util.faults import * +URN_PREFIX = "urn:publicid:IDN" + def get_leaf(hrn): parts = hrn.split(".") return ".".join(parts[-1:]) @@ -47,3 +49,42 @@ def email_to_hrn(auth_hrn, email): person_hrn = ".".join([auth_hrn, username]) return person_hrn + +def urn_to_hrn(urn): + """ + convert a urn to hrn + return a tuple (hrn, type) + """ + + # if this is already a hrn dont do anything + if not urn.startswith(URN_PREFIX): + return urn, None + name = urn[len(URN_PREFIX):] + hrn_parts = name.split("+") + + # type is always the second to last element in the list + type = hrn_parts.pop(-2) + + # convert hrn_parts (list) into hrn (str) by doing the following + # remove blank elements + # replace ':' with '.' + # join list elements using '.' + hrn = '.'.join([part.replace(':', '.') for part in hrn_parts if part]) + + return hrn, type + + +def hrn_to_urn(hrn, type=None): + """ + convert an hrn and type to a urn string + """ + # if this is already a urn dont do anything + if hrn.startswith(URN_PREFIX): + return hrn + + authority = get_authority(hrn) + name = get_leaf(hrn) + urn = "+".join([unicode(part).replace('.', ':') \ + for part in ['',authority,type,name]]) + + return URN_PREFIX + urn