pvl/dns/labels.py
changeset 486 cf120b977790
parent 456 602838dfb6e7
child 515 996ccf5356b8
--- a/pvl/dns/labels.py	Thu Feb 26 15:22:30 2015 +0200
+++ b/pvl/dns/labels.py	Thu Feb 26 15:23:00 2015 +0200
@@ -19,7 +19,7 @@
     
     return fqdn
 
-def relative (origin, fqdn):
+def split (origin, fqdn):
     """
         Determine the relative label from the given zone origin to the given host fqnd.
     """
@@ -30,3 +30,56 @@
     else:
         raise ValueError("{fqdn} outside of zone {origin}".format(fqdn=fqdn, origin=origin))
 
+def relative (origin, domain, name) :
+    """
+        relative relative label @origin for name@domain
+
+        Raises ValueError if name is outside of origin
+
+        >>> print relative(None, None, 'fqdn')
+        fqdn.
+        >>> print relative(None, 'domain', 'host')
+        host.domain.
+        >>> print relative('origin', 'domain', 'host')
+        Traceback (most recent call last):
+            ...
+        ValueError: host: domain domain out of zone origin.
+        >>> print relative('origin', 'origin', 'host')
+        host
+        >>> print relative('origin', 'domain.origin', 'host')
+        host.domain
+        >>> print relative('origin', 'domainorigin', 'host')
+        Traceback (most recent call last):
+            ...
+        ValueError: host: domain domainorigin out of zone origin.
+        >>> print relative('origin', None, 'host.domain')
+        Traceback (most recent call last):
+            ...
+        ValueError: host.domain: fqdn host.domain. out of zone origin.
+    """
+
+    if origin:
+        origin = fqdn(origin)
+    
+    if domain:
+        host_fqdn = fqdn(name, domain)
+    else:
+        host_fqdn = fqdn(name)
+
+
+    if not origin:
+        return host_fqdn
+
+    elif domain == origin:
+         return name
+
+    elif host_fqdn.endswith('.' + origin):
+        return split(origin, host_fqdn)
+
+    elif domain:
+        raise ValueError("{name}: domain {domain} out of zone {origin}".format(name=name, domain=domain, origin=origin))
+
+    else:
+        raise ValueError("{name}: fqdn {fqdn} out of zone {origin}".format(name=name, fqdn=host_fqdn, origin=origin))
+
+