Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mrDoctorWho/xmpppy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'xmpp/debug.py')
-rw-r--r--xmpp/debug.py628
1 files changed, 314 insertions, 314 deletions
diff --git a/xmpp/debug.py b/xmpp/debug.py
index 6d8c34a..fe422bf 100644
--- a/xmpp/debug.py
+++ b/xmpp/debug.py
@@ -1,314 +1,314 @@
-## debug.py
-##
-## Copyright (C) 2003 Jacob Lundqvist
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU Lesser General Public License as published
-## by the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-## GNU Lesser General Public License for more details.
-
-# $Id: debug.py, v1.41 2013/10/21 alkorgun Exp $
-
-_version_ = "1.4.1"
-
-import os
-import sys
-import time
-
-from traceback import format_exception as traceback_format_exception
-
-colors_enabled = "TERM" in os.environ
-
-color_none = chr(27) + "[0m"
-color_black = chr(27) + "[30m"
-color_red = chr(27) + "[31m"
-color_green = chr(27) + "[32m"
-color_brown = chr(27) + "[33m"
-color_blue = chr(27) + "[34m"
-color_magenta = chr(27) + "[35m"
-color_cyan = chr(27) + "[36m"
-color_light_gray = chr(27) + "[37m"
-color_dark_gray = chr(27) + "[30;1m"
-color_bright_red = chr(27) + "[31;1m"
-color_bright_green = chr(27) + "[32;1m"
-color_yellow = chr(27) + "[33;1m"
-color_bright_blue = chr(27) + "[34;1m"
-color_purple = chr(27) + "[35;1m"
-color_bright_cyan = chr(27) + "[36;1m"
-color_white = chr(27) + "[37;1m"
-
-class NoDebug:
-
- def __init__(self, *args, **kwargs):
- self.debug_flags = []
-
- def show(self, *args, **kwargs):
- pass
-
- def Show(self, *args, **kwargs):
- pass
-
- def is_active(self, flag):
- pass
-
- colors = {}
-
- def active_set(self, active_flags=None):
- return 0
-
-LINE_FEED = "\n"
-
-class Debug:
-
- def __init__(self, active_flags=None, log_file=sys.stderr, prefix="DEBUG: ", sufix="\n", time_stamp=0, flag_show=None, validate_flags=False, welcome=-1):
- self.debug_flags = []
- if welcome == -1:
- if active_flags and len(active_flags):
- welcome = 1
- else:
- welcome = 0
- self._remove_dupe_flags()
- if log_file:
- if isinstance(log_file, str):
- try:
- self._fh = open(log_file, "w")
- except Exception:
- print("ERROR: can open %s for writing." % log_file)
- sys.exit(0)
- else: # assume its a stream type object
- self._fh = log_file
- else:
- self._fh = sys.stdout
- if time_stamp not in (0, 1, 2):
- raise Exception("Invalid time_stamp param", str(time_stamp))
- self.prefix = prefix
- self.sufix = sufix
- self.time_stamp = time_stamp
- self.flag_show = None # must be initialised after possible welcome
- self.validate_flags = validate_flags
- self.active_set(active_flags)
- if welcome:
- self.show("")
- caller = sys._getframe(1) # used to get name of caller
- try:
- mod_name = ":%s" % caller.f_locals["__name__"]
- except Exception:
- mod_name = ""
- self.show("Debug created for %s%s" % (caller.f_code.co_filename, mod_name))
- self.show(" flags defined: %s" % ",".join(self.active))
- if isinstance(flag_show, (str, type(None))):
- self.flag_show = flag_show
- else:
- raise Exception("Invalid type for flag_show!", str(flag_show))
-
- def show(self, msg, flag=None, prefix=None, sufix=None, lf=0):
- """
- flag can be of folowing types:
- None - this msg will always be shown if any debugging is on
- flag - will be shown if flag is active
- (flag1,flag2,,,) - will be shown if any of the given flags are active
-
- if prefix / sufix are not given, default ones from init will be used
-
- lf = -1 means strip linefeed if pressent
- lf = 1 means add linefeed if not pressent
- """
- if self.validate_flags:
- self._validate_flag(flag)
- if not self.is_active(flag):
- return None
- if prefix:
- pre = prefix
- else:
- pre = self.prefix
- if sufix:
- suf = sufix
- else:
- suf = self.sufix
- if self.time_stamp == 2:
- output = "%s%s " % (
- pre,
- time.strftime("%b %d %H:%M:%S",
- time.localtime(time.time()))
- )
- elif self.time_stamp == 1:
- output = "%s %s" % (
- time.strftime("%b %d %H:%M:%S",
- time.localtime(time.time())),
- pre
- )
- else:
- output = pre
- if self.flag_show:
- if flag:
- output = "%s%s%s" % (output, flag, self.flag_show)
- else:
- # this call uses the global default, dont print "None", just show the separator
- output = "%s %s" % (output, self.flag_show)
- output = "%s%s%s" % (output, msg, suf)
- if lf:
- # strip/add lf if needed
- last_char = output[-1]
- if lf == 1 and last_char != LINE_FEED:
- output = output + LINE_FEED
- elif lf == -1 and last_char == LINE_FEED:
- output = output[:-1]
- try:
- self._fh.write(output)
- except Exception:
- # unicode strikes again ;)
- s = unicode()
- for i in xrange(len(output)):
- if ord(output[i]) < 128:
- c = output[i]
- else:
- c = "?"
- s += c
- self._fh.write("%s%s%s" % (pre, s, suf))
- self._fh.flush()
-
- def is_active(self, flag):
- """
- If given flag(s) should generate output.
- """
- # try to abort early to quicken code
- if not self.active:
- return 0
- if not flag or flag in self.active:
- return 1
- else:
- # check for multi flag type:
- if isinstance(flag, (list, tuple)):
- for s in flag:
- if s in self.active:
- return 1
- return 0
-
- def active_set(self, active_flags=None):
- """
- Returns 1 if any flags where actually set, otherwise 0.
- """
- r = 0
- ok_flags = []
- if not active_flags:
- # no debuging at all
- self.active = []
- elif isinstance(active_flags, (tuple, list)):
- flags = self._as_one_list(active_flags)
- for t in flags:
- if t not in self.debug_flags:
- sys.stderr.write("Invalid debugflag given: %s\n" % t)
- ok_flags.append(t)
-
- self.active = ok_flags
- r = 1
- else:
- # assume comma string
- try:
- flags = active_flags.split(",")
- except Exception:
- self.show("***")
- self.show("*** Invalid debug param given: %s" % active_flags)
- self.show("*** please correct your param!")
- self.show("*** due to this, full debuging is enabled")
- self.active = self.debug_flags
- for f in flags:
- s = f.strip()
- ok_flags.append(s)
- self.active = ok_flags
- self._remove_dupe_flags()
- return r
-
- def active_get(self):
- """
- Returns currently active flags.
- """
- return self.active
-
- def _as_one_list(self, items):
- """
- Init param might contain nested lists, typically from group flags.
- This code organises lst and remves dupes.
- """
- if not isinstance(items, (list, tuple)):
- return [items]
- r = []
- for l in items:
- if isinstance(l, list):
- lst2 = self._as_one_list(l)
- for l2 in lst2:
- self._append_unique_str(r, l2)
- elif l == None:
- continue
- else:
- self._append_unique_str(r, l)
- return r
-
- def _append_unique_str(self, lst, item):
- """
- Filter out any dupes.
- """
- if not isinstance(item, str):
- raise Exception("Invalid item type (should be string)", str(item))
- if item not in lst:
- lst.append(item)
- return lst
-
- def _validate_flag(self, flags):
- """
- Verify that flag is defined.
- """
- if flags:
- for flag in self._as_one_list(flags):
- if not flag in self.debug_flags:
- raise Exception("Invalid debugflag given", str(flag))
-
- def _remove_dupe_flags(self):
- """
- If multiple instances of Debug is used in same app,
- some flags might be created multiple time, filter out dupes.
- """
- unique_flags = []
- for f in self.debug_flags:
- if f not in unique_flags:
- unique_flags.append(f)
- self.debug_flags = unique_flags
-
- colors = {}
-
- def Show(self, flag, msg, prefix=""):
- msg = msg.replace("\r", "\\r").replace("\n", "\\n").replace("><", ">\n <")
- if not colors_enabled:
- pass
- elif prefix in self.colors:
- msg = self.colors[prefix] + msg + color_none
- else:
- msg = color_none + msg
- if not colors_enabled:
- prefixcolor = ""
- elif flag in self.colors:
- prefixcolor = self.colors[flag]
- else:
- prefixcolor = color_none
- if prefix == "error":
- e = sys.exc_info()
- if e[0]:
- msg = msg + "\n" + "".join(traceback_format_exception(e[0], e[1], e[2])).rstrip()
- prefix = self.prefix + prefixcolor + (flag + " " * 12)[:12] + " " + (prefix + " " * 6)[:6]
- self.show(msg, flag, prefix)
-
- def is_active(self, flag):
- if not self.active:
- return 0
- if not flag or flag in self.active and DBG_ALWAYS not in self.active or flag not in self.active and DBG_ALWAYS in self.active:
- return 1
- return 0
-
-DBG_ALWAYS = "always"
-
-# Debug=NoDebug # Uncomment this to effectively disable all debugging and all debugging overhead.
+## debug.py
+##
+## Copyright (C) 2003 Jacob Lundqvist
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU Lesser General Public License as published
+## by the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU Lesser General Public License for more details.
+
+# $Id: debug.py, v1.41 2013/10/21 alkorgun Exp $
+
+_version_ = "1.4.1"
+
+import os
+import sys
+import time
+
+from traceback import format_exception as traceback_format_exception
+
+colors_enabled = "TERM" in os.environ
+
+color_none = chr(27) + "[0m"
+color_black = chr(27) + "[30m"
+color_red = chr(27) + "[31m"
+color_green = chr(27) + "[32m"
+color_brown = chr(27) + "[33m"
+color_blue = chr(27) + "[34m"
+color_magenta = chr(27) + "[35m"
+color_cyan = chr(27) + "[36m"
+color_light_gray = chr(27) + "[37m"
+color_dark_gray = chr(27) + "[30;1m"
+color_bright_red = chr(27) + "[31;1m"
+color_bright_green = chr(27) + "[32;1m"
+color_yellow = chr(27) + "[33;1m"
+color_bright_blue = chr(27) + "[34;1m"
+color_purple = chr(27) + "[35;1m"
+color_bright_cyan = chr(27) + "[36;1m"
+color_white = chr(27) + "[37;1m"
+
+class NoDebug:
+
+ def __init__(self, *args, **kwargs):
+ self.debug_flags = []
+
+ def show(self, *args, **kwargs):
+ pass
+
+ def Show(self, *args, **kwargs):
+ pass
+
+ def is_active(self, flag):
+ pass
+
+ colors = {}
+
+ def active_set(self, active_flags=None):
+ return 0
+
+LINE_FEED = "\n"
+
+class Debug:
+
+ def __init__(self, active_flags=None, log_file=sys.stderr, prefix="DEBUG: ", sufix="\n", time_stamp=0, flag_show=None, validate_flags=False, welcome=-1):
+ self.debug_flags = []
+ if welcome == -1:
+ if active_flags and len(active_flags):
+ welcome = 1
+ else:
+ welcome = 0
+ self._remove_dupe_flags()
+ if log_file:
+ if isinstance(log_file, str):
+ try:
+ self._fh = open(log_file, "w")
+ except Exception:
+ print("ERROR: can open %s for writing." % log_file)
+ sys.exit(0)
+ else: # assume its a stream type object
+ self._fh = log_file
+ else:
+ self._fh = sys.stdout
+ if time_stamp not in (0, 1, 2):
+ raise Exception("Invalid time_stamp param", str(time_stamp))
+ self.prefix = prefix
+ self.sufix = sufix
+ self.time_stamp = time_stamp
+ self.flag_show = None # must be initialised after possible welcome
+ self.validate_flags = validate_flags
+ self.active_set(active_flags)
+ if welcome:
+ self.show("")
+ caller = sys._getframe(1) # used to get name of caller
+ try:
+ mod_name = ":%s" % caller.f_locals["__name__"]
+ except Exception:
+ mod_name = ""
+ self.show("Debug created for %s%s" % (caller.f_code.co_filename, mod_name))
+ self.show(" flags defined: %s" % ",".join(self.active))
+ if isinstance(flag_show, (str, type(None))):
+ self.flag_show = flag_show
+ else:
+ raise Exception("Invalid type for flag_show!", str(flag_show))
+
+ def show(self, msg, flag=None, prefix=None, sufix=None, lf=0):
+ """
+ flag can be of folowing types:
+ None - this msg will always be shown if any debugging is on
+ flag - will be shown if flag is active
+ (flag1,flag2,,,) - will be shown if any of the given flags are active
+
+ if prefix / sufix are not given, default ones from init will be used
+
+ lf = -1 means strip linefeed if pressent
+ lf = 1 means add linefeed if not pressent
+ """
+ if self.validate_flags:
+ self._validate_flag(flag)
+ if not self.is_active(flag):
+ return None
+ if prefix:
+ pre = prefix
+ else:
+ pre = self.prefix
+ if sufix:
+ suf = sufix
+ else:
+ suf = self.sufix
+ if self.time_stamp == 2:
+ output = "%s%s " % (
+ pre,
+ time.strftime("%b %d %H:%M:%S",
+ time.localtime(time.time()))
+ )
+ elif self.time_stamp == 1:
+ output = "%s %s" % (
+ time.strftime("%b %d %H:%M:%S",
+ time.localtime(time.time())),
+ pre
+ )
+ else:
+ output = pre
+ if self.flag_show:
+ if flag:
+ output = "%s%s%s" % (output, flag, self.flag_show)
+ else:
+ # this call uses the global default, dont print "None", just show the separator
+ output = "%s %s" % (output, self.flag_show)
+ output = "%s%s%s" % (output, msg, suf)
+ if lf:
+ # strip/add lf if needed
+ last_char = output[-1]
+ if lf == 1 and last_char != LINE_FEED:
+ output = output + LINE_FEED
+ elif lf == -1 and last_char == LINE_FEED:
+ output = output[:-1]
+ try:
+ self._fh.write(output)
+ except Exception:
+ # unicode strikes again ;)
+ s = unicode()
+ for i in xrange(len(output)):
+ if ord(output[i]) < 128:
+ c = output[i]
+ else:
+ c = "?"
+ s += c
+ self._fh.write("%s%s%s" % (pre, s, suf))
+ self._fh.flush()
+
+ def is_active(self, flag):
+ """
+ If given flag(s) should generate output.
+ """
+ # try to abort early to quicken code
+ if not self.active:
+ return 0
+ if not flag or flag in self.active:
+ return 1
+ else:
+ # check for multi flag type:
+ if isinstance(flag, (list, tuple)):
+ for s in flag:
+ if s in self.active:
+ return 1
+ return 0
+
+ def active_set(self, active_flags=None):
+ """
+ Returns 1 if any flags where actually set, otherwise 0.
+ """
+ r = 0
+ ok_flags = []
+ if not active_flags:
+ # no debuging at all
+ self.active = []
+ elif isinstance(active_flags, (tuple, list)):
+ flags = self._as_one_list(active_flags)
+ for t in flags:
+ if t not in self.debug_flags:
+ sys.stderr.write("Invalid debugflag given: %s\n" % t)
+ ok_flags.append(t)
+
+ self.active = ok_flags
+ r = 1
+ else:
+ # assume comma string
+ try:
+ flags = active_flags.split(",")
+ except Exception:
+ self.show("***")
+ self.show("*** Invalid debug param given: %s" % active_flags)
+ self.show("*** please correct your param!")
+ self.show("*** due to this, full debuging is enabled")
+ self.active = self.debug_flags
+ for f in flags:
+ s = f.strip()
+ ok_flags.append(s)
+ self.active = ok_flags
+ self._remove_dupe_flags()
+ return r
+
+ def active_get(self):
+ """
+ Returns currently active flags.
+ """
+ return self.active
+
+ def _as_one_list(self, items):
+ """
+ Init param might contain nested lists, typically from group flags.
+ This code organises lst and remves dupes.
+ """
+ if not isinstance(items, (list, tuple)):
+ return [items]
+ r = []
+ for l in items:
+ if isinstance(l, list):
+ lst2 = self._as_one_list(l)
+ for l2 in lst2:
+ self._append_unique_str(r, l2)
+ elif l == None:
+ continue
+ else:
+ self._append_unique_str(r, l)
+ return r
+
+ def _append_unique_str(self, lst, item):
+ """
+ Filter out any dupes.
+ """
+ if not isinstance(item, str):
+ raise Exception("Invalid item type (should be string)", str(item))
+ if item not in lst:
+ lst.append(item)
+ return lst
+
+ def _validate_flag(self, flags):
+ """
+ Verify that flag is defined.
+ """
+ if flags:
+ for flag in self._as_one_list(flags):
+ if not flag in self.debug_flags:
+ raise Exception("Invalid debugflag given", str(flag))
+
+ def _remove_dupe_flags(self):
+ """
+ If multiple instances of Debug is used in same app,
+ some flags might be created multiple time, filter out dupes.
+ """
+ unique_flags = []
+ for f in self.debug_flags:
+ if f not in unique_flags:
+ unique_flags.append(f)
+ self.debug_flags = unique_flags
+
+ colors = {}
+
+ def Show(self, flag, msg, prefix=""):
+ msg = msg.replace("\r", "\\r").replace("\n", "\\n").replace("><", ">\n <")
+ if not colors_enabled:
+ pass
+ elif prefix in self.colors:
+ msg = self.colors[prefix] + msg + color_none
+ else:
+ msg = color_none + msg
+ if not colors_enabled:
+ prefixcolor = ""
+ elif flag in self.colors:
+ prefixcolor = self.colors[flag]
+ else:
+ prefixcolor = color_none
+ if prefix == "error":
+ e = sys.exc_info()
+ if e[0]:
+ msg = msg + "\n" + "".join(traceback_format_exception(e[0], e[1], e[2])).rstrip()
+ prefix = self.prefix + prefixcolor + (flag + " " * 12)[:12] + " " + (prefix + " " * 6)[:6]
+ self.show(msg, flag, prefix)
+
+ def is_active(self, flag):
+ if not self.active:
+ return 0
+ if not flag or flag in self.active and DBG_ALWAYS not in self.active or flag not in self.active and DBG_ALWAYS in self.active:
+ return 1
+ return 0
+
+DBG_ALWAYS = "always"
+
+# Debug=NoDebug # Uncomment this to effectively disable all debugging and all debugging overhead.