Bumping the deb to 0.8.4
[theonering] / src / util / misc.py
index fba0abf..69a5b09 100644 (file)
@@ -16,6 +16,45 @@ import warnings
 import string
 
 
+_indentationLevel = [0]
+
+
+def log_call(logger):
+
+       def log_call_decorator(func):
+
+               @functools.wraps(func)
+               def wrapper(*args, **kwds):
+                       logger.debug("%s> %s" % (" " * _indentationLevel[0], func.__name__, ))
+                       _indentationLevel[0] += 1
+                       try:
+                               return func(*args, **kwds)
+                       finally:
+                               _indentationLevel[0] -= 1
+                               logger.debug("%s< %s" % (" " * _indentationLevel[0], func.__name__, ))
+
+               return wrapper
+
+       return log_call_decorator
+
+
+def log_exception(logger):
+
+       def log_exception_decorator(func):
+
+               @functools.wraps(func)
+               def wrapper(*args, **kwds):
+                       try:
+                               return func(*args, **kwds)
+                       except Exception:
+                               logger.exception(func.__name__)
+                               raise
+
+               return wrapper
+
+       return log_exception_decorator
+
+
 def printfmt(template):
        """
        This hides having to create the Template object and call substitute/safe_substitute on it. For example:
@@ -656,12 +695,26 @@ def normalize_number(prettynumber):
        '+13456789000'
        """
        uglynumber = re.sub('[^0-9+]', '', prettynumber)
-       if uglynumber.startswith("1") and len(uglynumber) == 11:
+       if uglynumber.startswith("+"):
+               pass
+       elif uglynumber.startswith("1") and len(uglynumber) == 11:
                uglynumber = "+"+uglynumber
        elif len(uglynumber) == 10:
                uglynumber = "+1"+uglynumber
+       else:
+               pass
 
        #validateRe = re.compile("^\+?[0-9]{10,}$")
        #assert validateRe.match(uglynumber) is not None
 
        return uglynumber
+
+
+_VALIDATE_RE = re.compile("^\+?[0-9]{10,}$")
+
+
+def is_valid_number(number):
+       """
+       @returns If This number be called ( syntax validation only )
+       """
+       return _VALIDATE_RE.match(number) is not None