pvl.dns: split() and relative()
authorTero Marttila <tero.marttila@aalto.fi>
Thu, 26 Feb 2015 15:23:00 +0200
changeset 486 cf120b977790
parent 485 f0e09ec434e9
child 487 920394061b6f
pvl.dns: split() and relative()
pvl/dns/__init__.py
pvl/dns/labels.py
--- a/pvl/dns/__init__.py	Thu Feb 26 15:22:30 2015 +0200
+++ b/pvl/dns/__init__.py	Thu Feb 26 15:23:00 2015 +0200
@@ -8,6 +8,7 @@
 from pvl.dns.labels import (
         fqdn,
         join,
+        split,
         relative,
 )
 from pvl.dns.reverse import (
--- 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))
+
+