Repository :
http://git.fedorahosted.org/cgit/cura-tools.git
On branch : master
---------------------------------------------------------------
commit c18421428acb8ace3662ccedb9f239c240596cd6
Author: Peter Hatina <phatina(a)redhat.com>
Date: Sat Oct 6 20:45:48 2012 +0200
use regexps for address pattern iteration in FmciHostGenerator
---------------------------------------------------------------
cli-tools/fmci/fmci_address.py | 47 ++++++++++++++++++++++++++++++++++++---
1 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/cli-tools/fmci/fmci_address.py b/cli-tools/fmci/fmci_address.py
index 350a114..16da184 100644
--- a/cli-tools/fmci/fmci_address.py
+++ b/cli-tools/fmci/fmci_address.py
@@ -114,13 +114,52 @@ class FmciIpv4Addr(object):
return rval
class FmciHostGenerator(object):
+ PATTERN_TYPE_UNKNOWN, \
+ PATTERN_TYPE_FQDN, \
+ PATTERN_TYPE_IPV4, \
+ PATTERN_TYPE_IPV6 = range(4)
+
+ @staticmethod
+ def recognizePatternType(pattern):
+ pattern_regexps = (
+ ("(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\."
+ "?)+(?:[a-zA-Z]{2,})$)",
+ FmciHostGenerator.PATTERN_TYPE_FQDN),
+ ("^(([\d]{1,3})|(\{([\d]{1,3}|[\d]{1,3}-[\d]{1,3})(;("
+ "[\d]{1,3}|[\d]{1,3}-[\d]{1,3}))*\}))\.(([\d]{1,3})"
+ "|(\{([\d]{1,3}|[\d]{1,3}-[\d]{1,3})(;([\d]{1,3}|[\d"
+ "]{1,3}-[\d]{1,3}))*\}))\.(([\d]{1,3})|(\{([\d]{1,3"
+ "}|[\d]{1,3}-[\d]{1,3})(;([\d]{1,3}|[\d]{1,3}-[\d]{1"
+ ",3}))*\}))\.(([\d]{1,3})|(\{([\d]{1,3}|[\d]{1,3}-["
+ "\d]{1,3})(;([\d]{1,3}|[\d]{1,3}-[\d]{1,3}))*\}))$",
+ FmciHostGenerator.PATTERN_TYPE_IPV4),
+ ("^(([\da-fA-F]{1,4})|(\{([\da-fA-F]{1,4}|[\da-fA-F]{"
+ "1,4}-[\da-fA-F]{1,4})(;([\da-fA-F]{1,4}|[\da-fA-F]"
+ "{1,4}-[\da-fA-F]{1,4}))*\})){0,1}(:(([\da-fA-F]{1,"
+ "4})|(\{([\da-fA-F]{1,4}|[\da-fA-F]{1,4}-[\da-fA-F]"
+ "{1,4})(;([\da-fA-F]{1,4}|[\da-fA-F]{1,4}-[\da-fA-F"
+ "]{1,4}))*\})*)){0,6}:(([\da-fA-F]{1,4})|(\{([\da-f"
+ "A-F]{1,4}|[\da-fA-F]{1,4}-[\da-fA-F]{1,4})(;([\da-f"
+ "A-F]{1,4}|[\da-fA-F]{1,4}-[\da-fA-F]{1,4}))*\}))$",
+ FmciHostGenerator.PATTERN_TYPE_IPV6)
+ )
+ for (p, rval) in pattern_regexps:
+ if re.match(p, pattern):
+ return rval
+ return FmciHostGenerator.PATTERN_TYPE_UNKNOWN
+
@staticmethod
def enumerate(lst):
rval = []
for pattern in lst.split(","):
- addresses = FmciIpv4Addr.enumerate(pattern)
- if addresses:
- rval.extend(addresses)
- else:
+ pattern_type = FmciHostGenerator.recognizePatternType(pattern)
+ if pattern_type == FmciHostGenerator.PATTERN_TYPE_FQDN:
rval.append(FmciHost(pattern))
+ elif pattern_type == FmciHostGenerator.PATTERN_TYPE_IPV4:
+ rval.extend(FmciIpv4Addr.enumerate(pattern))
+ elif pattern_type == FmciHostGenerator.PATTERN_TYPE_IPV6:
+ pass
+ else:
+ sys.stderr.write("Unrecognized host pattern supplied!\n")
+ return []
return rval