X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Fnamespace.py;h=61b05b9142747eda430a19dc30cc75589abf6f59;hb=3d7237fa0b5f2b4a60cb97c7fb3b6aecfd94558a;hp=edd026a6207601f0e6845fc1f28bad510ecb4a61;hpb=adbb6e64e6a2d772f716ffd2a648b78626c242bd;p=sfa.git diff --git a/sfa/util/namespace.py b/sfa/util/namespace.py index edd026a6..61b05b91 100644 --- a/sfa/util/namespace.py +++ b/sfa/util/namespace.py @@ -1,8 +1,10 @@ -### $Id: namespace.py 15020 2009-09-14 23:11:37Z tmack $ -### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/util/namespace.py $ +### $Id$ +### $URL$ from sfa.util.faults import * +URN_PREFIX = "urn:publicid:IDN" + def get_leaf(hrn): parts = hrn.split(".") return ".".join(parts[-1:]) @@ -28,8 +30,8 @@ def hostname_to_hrn(auth_hrn, login_base, hostname): """ Convert hrn to plantelab name. """ - genihostname = ".".join([auth_hrn, login_base, hostname.split(".")[0]]) - return genihostname + sfa_hostname = ".".join([auth_hrn, login_base, hostname.split(".")[0]]) + return sfa_hostname def slicename_to_hrn(auth_hrn, slicename): """ @@ -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