X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Fnamespace.py;h=45ce06a751012ea18d6d4ae8a977d7f92e9ca713;hb=952322d76247f8991f3c2688ed7e1f5a22ca4572;hp=edd026a6207601f0e6845fc1f28bad510ecb4a61;hpb=adbb6e64e6a2d772f716ffd2a648b78626c242bd;p=sfa.git diff --git a/sfa/util/namespace.py b/sfa/util/namespace.py index edd026a6..45ce06a7 100644 --- a/sfa/util/namespace.py +++ b/sfa/util/namespace.py @@ -1,13 +1,19 @@ -### $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:]) -def get_authority(hrn): +def get_authority(xrn): + hrn, type = urn_to_hrn(xrn) + if type and type == 'authority': + return hrn + parts = hrn.split(".") return ".".join(parts[:-1]) @@ -28,8 +34,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): """ @@ -43,7 +49,54 @@ def slicename_to_hrn(auth_hrn, slicename): def email_to_hrn(auth_hrn, email): parts = email.split("@") username = parts[0] - username = username.replace(".", "_") + username = username.replace(".", "_").replace("+", "_") 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 or 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 str(hrn), str(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 not hrn or hrn.startswith(URN_PREFIX): + return hrn + + authority = get_authority(hrn) + name = get_leaf(hrn) + + if authority.startswith("plc"): + if type == None: + urn = "+".join(['',authority.replace('.',':'),name]) + else: + urn = "+".join(['',authority.replace('.',':'),type,name]) + + else: + urn = "+".join(['',authority,type,name]) + + return URN_PREFIX + urn