--- a/script/lib/iri_tweet/utils.py Fri Aug 12 18:17:27 2011 +0200
+++ b/script/lib/iri_tweet/utils.py Wed Aug 17 18:32:07 2011 +0200
@@ -3,10 +3,11 @@
ACCESS_TOKEN_SECRET, adapt_date, adapt_json, TweetSource, TweetLog, MediaType,
Media, EntityMedia, Entity, EntityType)
from sqlalchemy.sql import select, or_ #@UnresolvedImport
+import Queue #@UnresolvedImport
import anyjson #@UnresolvedImport
import datetime
import email.utils
-import logging #@UnresolvedImport
+import logging
import os.path
import sys
import twitter.oauth #@UnresolvedImport
@@ -14,7 +15,6 @@
import twitter_text #@UnresolvedImport
-
CACHE_ACCESS_TOKEN = {}
def get_oauth_token(token_file_path=None, check_access_token=True, application_name=APPLICATION_NAME, consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET):
@@ -448,7 +448,7 @@
self.obj_buffer.persists(self.session)
-def set_logging(options, plogger=None):
+def set_logging(options, plogger=None, queue=None):
logging_config = {
"format" : '%(asctime)s %(levelname)s:%(name)s:%(message)s',
@@ -466,14 +466,17 @@
if logger is None:
logger = get_logger() #@UndefinedVariable
- if len(logger.handlers) == 0:
+ if len(logger.handlers) == 0:
filename = logging_config.get("filename")
- if filename:
+ if queue is not None:
+ hdlr = QueueHandler(queue, True)
+ elif filename:
mode = logging_config.get("filemode", 'a')
hdlr = logging.FileHandler(filename, mode) #@UndefinedVariable
else:
stream = logging_config.get("stream")
hdlr = logging.StreamHandler(stream) #@UndefinedVariable
+
fs = logging_config.get("format", logging.BASIC_FORMAT) #@UndefinedVariable
dfs = logging_config.get("datefmt", None)
fmt = logging.Formatter(fs, dfs) #@UndefinedVariable
@@ -484,6 +487,7 @@
logger.setLevel(level)
options.debug = (options.verbose-options.quiet > 0)
+ return logger
def set_logging_options(parser):
parser.add_option("-l", "--log", dest="logfile",
@@ -536,5 +540,47 @@
return query.distinct()
+logger_name = "iri.tweet"
+
def get_logger():
- return logging.getLogger("iri_tweet") #@UndefinedVariable
+ global logger_name
+ return logging.getLogger(logger_name) #@UndefinedVariable
+
+
+# Next two import lines for this demo only
+
+class QueueHandler(logging.Handler): #@UndefinedVariable
+ """
+ This is a logging handler which sends events to a multiprocessing queue.
+ """
+
+ def __init__(self, queue, ignore_full):
+ """
+ Initialise an instance, using the passed queue.
+ """
+ logging.Handler.__init__(self) #@UndefinedVariable
+ self.queue = queue
+ self.ignore_full = True
+
+ def emit(self, record):
+ """
+ Emit a record.
+
+ Writes the LogRecord to the queue.
+ """
+ try:
+ ei = record.exc_info
+ if ei:
+ dummy = self.format(record) # just to get traceback text into record.exc_text
+ record.exc_info = None # not needed any more
+ if not self.ignore_full or not self.queue.full():
+ self.queue.put_nowait(record)
+ except Queue.Full:
+ if self.ignore_full:
+ pass
+ else:
+ raise
+ except (KeyboardInterrupt, SystemExit):
+ raise
+ except:
+ self.handleError(record)