Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(174)

Unified Diff: third_party/twisted_8_1/twisted/python/log.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/twisted_8_1/twisted/python/log.py
diff --git a/third_party/twisted_8_1/twisted/python/log.py b/third_party/twisted_8_1/twisted/python/log.py
deleted file mode 100644
index 37514f47c70ef2ed9f1c77d10d6f16c7bebc5ef8..0000000000000000000000000000000000000000
--- a/third_party/twisted_8_1/twisted/python/log.py
+++ /dev/null
@@ -1,584 +0,0 @@
-# -*- test-case-name: twisted.test.test_log -*-
-# Copyright (c) 2001-2007 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-Logging and metrics infrastructure.
-"""
-
-from __future__ import division
-
-# System Imports
-import sys
-import time
-import warnings
-from datetime import datetime
-import logging
-
-# Sibling Imports
-from twisted.python import util, context, reflect
-
-class ILogContext:
- """
- Actually, this interface is just a synoym for the dictionary interface,
- but it serves as a key for the default information in a log.
-
- I do not inherit from Interface because the world is a cruel place.
- """
-
-context.setDefault(ILogContext,
- {"isError": 0,
- "system": "-"})
-
-def callWithContext(ctx, func, *args, **kw):
- newCtx = context.get(ILogContext).copy()
- newCtx.update(ctx)
- return context.call({ILogContext: newCtx}, func, *args, **kw)
-
-def callWithLogger(logger, func, *args, **kw):
- """
- Utility method which wraps a function in a try:/except:, logs a failure if
- one occurrs, and uses the system's logPrefix.
- """
- try:
- lp = logger.logPrefix()
- except KeyboardInterrupt:
- raise
- except:
- lp = '(buggy logPrefix method)'
- err(system=lp)
- try:
- return callWithContext({"system": lp}, func, *args, **kw)
- except KeyboardInterrupt:
- raise
- except:
- err(system=lp)
-
-def showwarning(message, category, filename, lineno, file=None):
- if file is None:
- msg(warning=message, category=reflect.qual(category), filename=filename, lineno=lineno,
- format="%(filename)s:%(lineno)s: %(category)s: %(warning)s")
- else:
- _oldshowwarning(message, category, filename, lineno, file)
-
-_keepErrors = 0
-_keptErrors = []
-_ignoreErrors = []
-
-def startKeepingErrors():
- """
- DEPRECATED in Twisted 2.5.
-
- Support function for testing frameworks.
-
- Start keeping errors in a buffer which can be retrieved (and emptied) with
- flushErrors.
- """
- warnings.warn("log.startKeepingErrors is deprecated since Twisted 2.5",
- category=DeprecationWarning, stacklevel=2)
- global _keepErrors
- _keepErrors = 1
-
-
-def flushErrors(*errorTypes):
- """
- DEPRECATED in Twisted 2.5. See L{TestCase.flushLoggedErrors}.
-
- Support function for testing frameworks.
-
- Return a list of errors that occurred since the last call to flushErrors().
- (This will return None unless startKeepingErrors has been called.)
- """
-
- warnings.warn("log.flushErrors is deprecated since Twisted 2.5. "
- "If you need to flush errors from within a unittest, "
- "use TestCase.flushLoggedErrors instead.",
- category=DeprecationWarning, stacklevel=2)
- return _flushErrors(*errorTypes)
-
-
-def _flushErrors(*errorTypes):
- """
- PRIVATE. DEPRECATED. DON'T USE.
- """
- global _keptErrors
- k = _keptErrors
- _keptErrors = []
- if errorTypes:
- for erk in k:
- shouldReLog = 1
- for errT in errorTypes:
- if erk.check(errT):
- shouldReLog = 0
- if shouldReLog:
- err(erk)
- return k
-
-def ignoreErrors(*types):
- """
- DEPRECATED
- """
- warnings.warn("log.ignoreErrors is deprecated since Twisted 2.5",
- category=DeprecationWarning, stacklevel=2)
- _ignore(*types)
-
-def _ignore(*types):
- """
- PRIVATE. DEPRECATED. DON'T USE.
- """
- for type in types:
- _ignoreErrors.append(type)
-
-def clearIgnores():
- """
- DEPRECATED
- """
- warnings.warn("log.clearIgnores is deprecated since Twisted 2.5",
- category=DeprecationWarning, stacklevel=2)
- _clearIgnores()
-
-def _clearIgnores():
- """
- PRIVATE. DEPRECATED. DON'T USE.
- """
- global _ignoreErrors
- _ignoreErrors = []
-
-
-def err(_stuff=None, _why=None, **kw):
- """
- Write a failure to the log.
- """
- if _stuff is None:
- _stuff = failure.Failure()
- if isinstance(_stuff, failure.Failure):
- if _keepErrors:
- if _ignoreErrors:
- keep = 0
- for err in _ignoreErrors:
- r = _stuff.check(err)
- if r:
- keep = 0
- break
- else:
- keep = 1
- if keep:
- _keptErrors.append(_stuff)
- else:
- _keptErrors.append(_stuff)
- msg(failure=_stuff, why=_why, isError=1, **kw)
- elif isinstance(_stuff, Exception):
- msg(failure=failure.Failure(_stuff), why=_why, isError=1, **kw)
- else:
- msg(repr(_stuff), why=_why, isError=1, **kw)
-
-deferr = err
-
-
-class Logger:
- """
- This represents a class which may 'own' a log. Used by subclassing.
- """
- def logPrefix(self):
- """
- Override this method to insert custom logging behavior. Its
- return value will be inserted in front of every line. It may
- be called more times than the number of output lines.
- """
- return '-'
-
-
-class LogPublisher:
- """
- Class for singleton log message publishing.
- """
-
- synchronized = ['msg']
-
- def __init__(self):
- self.observers = []
-
- def addObserver(self, other):
- """
- Add a new observer.
-
- Observers are callable objects that will be called with each new log
- message (a dict).
- """
- assert callable(other)
- self.observers.append(other)
-
- def removeObserver(self, other):
- """
- Remove an observer.
- """
- self.observers.remove(other)
-
- def msg(self, *message, **kw):
- """
- Log a new message.
-
- For example::
-
- >>> log.msg('Hello, world.')
-
- In particular, you MUST avoid the forms::
-
- >>> log.msg(u'Hello, world.')
- >>> log.msg('Hello ', 'world.')
-
- These forms work (sometimes) by accident and will be disabled
- entirely in the future.
- """
- actualEventDict = (context.get(ILogContext) or {}).copy()
- actualEventDict.update(kw)
- actualEventDict['message'] = message
- actualEventDict['time'] = time.time()
- for i in xrange(len(self.observers) - 1, -1, -1):
- try:
- self.observers[i](actualEventDict)
- except KeyboardInterrupt:
- # Don't swallow keyboard interrupt!
- raise
- except UnicodeEncodeError:
- raise
- except:
- o = self.observers.pop(i)
- err(failure.Failure(),
- "Log observer %s failed, removing from observer list." % (o,))
-
-
-try:
- theLogPublisher
-except NameError:
- theLogPublisher = LogPublisher()
- addObserver = theLogPublisher.addObserver
- removeObserver = theLogPublisher.removeObserver
- msg = theLogPublisher.msg
-
-
-def _safeFormat(fmtString, fmtDict):
- """
- Try to format the string C{fmtString} using C{fmtDict} arguments,
- swallowing all errors to always return a string.
- """
- # There's a way we could make this if not safer at least more
- # informative: perhaps some sort of str/repr wrapper objects
- # could be wrapped around the things inside of C{fmtDict}. That way
- # if the event dict contains an object with a bad __repr__, we
- # can only cry about that individual object instead of the
- # entire event dict.
- try:
- text = fmtString % fmtDict
- except KeyboardInterrupt:
- raise
- except:
- try:
- text = ('Invalid format string or unformattable object in log message: %r, %s' % (fmtString, fmtDict))
- except:
- try:
- text = 'UNFORMATTABLE OBJECT WRITTEN TO LOG with fmt %r, MESSAGE LOST' % (fmtString,)
- except:
- text = 'PATHOLOGICAL ERROR IN BOTH FORMAT STRING AND MESSAGE DETAILS, MESSAGE LOST'
- return text
-
-
-def textFromEventDict(eventDict):
- """
- Extract text from an event dict passed to a log observer. If it cannot
- handle the dict, it returns None.
-
- The possible keys of eventDict are:
- - C{message}: by default, it holds the final text. It's required, but can
- be empty if either C{isError} or C{format} is provided (the first
- having the priority).
- - C{isError}: boolean indicating the nature of the event.
- - C{failure}: L{failure.Failure} instance, required if the event is an
- error.
- - C{why}: if defined, used as header of the traceback in case of errors.
- - C{format}: string format used in place of C{message} to customize
- the event. It uses all keys present in C{eventDict} to format
- the text.
- Other keys will be used when applying the C{format}, or ignored.
- """
- edm = eventDict['message']
- if not edm:
- if eventDict['isError'] and 'failure' in eventDict:
- text = ((eventDict.get('why') or 'Unhandled Error')
- + '\n' + eventDict['failure'].getTraceback())
- elif 'format' in eventDict:
- text = _safeFormat(eventDict['format'], eventDict)
- else:
- # we don't know how to log this
- return
- else:
- text = ' '.join(map(reflect.safe_str, edm))
- return text
-
-
-class FileLogObserver:
- """
- Log observer that writes to a file-like object.
-
- @type timeFormat: C{str} or C{NoneType}
- @ivar timeFormat: If not C{None}, the format string passed to strftime().
- """
- timeFormat = None
-
- def __init__(self, f):
- self.write = f.write
- self.flush = f.flush
-
- def getTimezoneOffset(self, when):
- """
- Return the current local timezone offset from UTC.
-
- @type when: C{int}
- @param when: POSIX (ie, UTC) timestamp for which to find the offset.
-
- @rtype: C{int}
- @return: The number of seconds offset from UTC. West is positive,
- east is negative.
- """
- offset = datetime.utcfromtimestamp(when) - datetime.fromtimestamp(when)
- return offset.days * (60 * 60 * 24) + offset.seconds
-
- def formatTime(self, when):
- """
- Format the given UTC value as a string representing that time in the
- local timezone.
-
- By default it's formatted as a ISO8601-like string (ISO8601 date and
- ISO8601 time separated by a space). It can be customized using the
- C{timeFormat} attribute, which will be used as input for the underlying
- C{time.strftime} call.
-
- @type when: C{int}
- @param when: POSIX (ie, UTC) timestamp for which to find the offset.
-
- @rtype: C{str}
- """
- if self.timeFormat is not None:
- return time.strftime(self.timeFormat, time.localtime(when))
-
- tzOffset = -self.getTimezoneOffset(when)
- when = datetime.utcfromtimestamp(when + tzOffset)
- tzHour = int(tzOffset / 60 / 60)
- tzMin = int(tzOffset / 60 % 60)
- return '%d-%02d-%02d %02d:%02d:%02d%+03d%02d' % (
- when.year, when.month, when.day,
- when.hour, when.minute, when.second,
- tzHour, tzMin)
-
- def emit(self, eventDict):
- text = textFromEventDict(eventDict)
- if text is None:
- return
-
- timeStr = self.formatTime(eventDict['time'])
- fmtDict = {'system': eventDict['system'], 'text': text.replace("\n", "\n\t")}
- msgStr = _safeFormat("[%(system)s] %(text)s\n", fmtDict)
-
- util.untilConcludes(self.write, timeStr + " " + msgStr)
- util.untilConcludes(self.flush) # Hoorj!
-
- def start(self):
- """
- Start observing log events.
- """
- addObserver(self.emit)
-
- def stop(self):
- """
- Stop observing log events.
- """
- removeObserver(self.emit)
-
-
-class PythonLoggingObserver(object):
- """
- Output twisted messages to Python standard library L{logging} module.
-
- WARNING: specific logging configurations (example: network) can lead to
- a blocking system. Nothing is done here to prevent that, so be sure to not
- use this: code within Twisted, such as twisted.web, assumes that logging
- does not block.
- """
-
- def __init__(self, loggerName="twisted"):
- """
- @param loggerName: identifier used for getting logger.
- @type loggerName: C{str}
- """
- self.logger = logging.getLogger(loggerName)
-
- def emit(self, eventDict):
- """
- Receive a twisted log entry, format it and bridge it to python.
-
- By default the logging level used is info; log.err produces error
- level, and you can customize the level by using the C{logLevel} key::
-
- >>> log.msg('debugging', logLevel=logging.DEBUG)
-
- """
- if 'logLevel' in eventDict:
- level = eventDict['logLevel']
- elif eventDict['isError']:
- level = logging.ERROR
- else:
- level = logging.INFO
- text = textFromEventDict(eventDict)
- if text is None:
- return
- self.logger.log(level, text)
-
- def start(self):
- """
- Start observing log events.
- """
- addObserver(self.emit)
-
- def stop(self):
- """
- Stop observing log events.
- """
- removeObserver(self.emit)
-
-
-class StdioOnnaStick:
- """
- Class that pretends to be stout/err.
- """
-
- closed = 0
- softspace = 0
- mode = 'wb'
- name = '<stdio (log)>'
-
- def __init__(self, isError=0):
- self.isError = isError
- self.buf = ''
-
- def close(self):
- pass
-
- def fileno(self):
- return -1
-
- def flush(self):
- pass
-
- def read(self):
- raise IOError("can't read from the log!")
-
- readline = read
- readlines = read
- seek = read
- tell = read
-
- def write(self, data):
- d = (self.buf + data).split('\n')
- self.buf = d[-1]
- messages = d[0:-1]
- for message in messages:
- msg(message, printed=1, isError=self.isError)
-
- def writelines(self, lines):
- for line in lines:
- msg(line, printed=1, isError=self.isError)
-
-
-try:
- _oldshowwarning
-except NameError:
- _oldshowwarning = None
-
-
-def startLogging(file, *a, **kw):
- """
- Initialize logging to a specified file.
- """
- flo = FileLogObserver(file)
- startLoggingWithObserver(flo.emit, *a, **kw)
-
-def startLoggingWithObserver(observer, setStdout=1):
- """
- Initialize logging to a specified observer. If setStdout is true
- (defaults to yes), also redirect sys.stdout and sys.stderr
- to the specified file.
- """
- global defaultObserver, _oldshowwarning
- if not _oldshowwarning:
- _oldshowwarning = warnings.showwarning
- warnings.showwarning = showwarning
- if defaultObserver:
- defaultObserver.stop()
- defaultObserver = None
- addObserver(observer)
- msg("Log opened.")
- if setStdout:
- sys.stdout = logfile
- sys.stderr = logerr
-
-
-class NullFile:
- softspace = 0
- def read(self): pass
- def write(self, bytes): pass
- def flush(self): pass
- def close(self): pass
-
-
-def discardLogs():
- """
- Throw away all logs.
- """
- global logfile
- logfile = NullFile()
-
-
-# Prevent logfile from being erased on reload. This only works in cpython.
-try:
- logfile
-except NameError:
- logfile = StdioOnnaStick(0)
- logerr = StdioOnnaStick(1)
-
-
-class DefaultObserver:
- """
- Default observer.
-
- Will ignore all non-error messages and send error messages to sys.stderr.
- Will be removed when startLogging() is called for the first time.
- """
-
- def _emit(self, eventDict):
- if eventDict["isError"]:
- if 'failure' in eventDict:
- text = eventDict['failure'].getTraceback()
- else:
- text = " ".join([str(m) for m in eventDict["message"]]) + "\n"
- sys.stderr.write(text)
- sys.stderr.flush()
-
- def start(self):
- addObserver(self._emit)
-
- def stop(self):
- removeObserver(self._emit)
-
-
-# Some more sibling imports, at the bottom and unqualified to avoid
-# unresolvable circularity
-import threadable, failure
-threadable.synchronize(LogPublisher)
-
-
-try:
- defaultObserver
-except NameError:
- defaultObserver = DefaultObserver()
- defaultObserver.start()
-
« no previous file with comments | « third_party/twisted_8_1/twisted/python/lockfile.py ('k') | third_party/twisted_8_1/twisted/python/logfile.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698