From 7c85acac98641c01dc2c096c0f24f2109b8509e0 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Thu, 2 Aug 2012 14:18:22 -0400 Subject: [PATCH] cc-4105: refactored some error handling code --- .../media-monitor2/media/monitor/airtime.py | 1 + .../media-monitor2/media/monitor/log.py | 9 ++++++++ .../media-monitor2/media/monitor/metadata.py | 6 +++--- .../media/monitor/watchersyncer.py | 21 ++++++++++--------- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/python_apps/media-monitor2/media/monitor/airtime.py b/python_apps/media-monitor2/media/monitor/airtime.py index 3330778fe..5a98ccb4f 100644 --- a/python_apps/media-monitor2/media/monitor/airtime.py +++ b/python_apps/media-monitor2/media/monitor/airtime.py @@ -120,6 +120,7 @@ class AirtimeMessageReceiver(Loggable): except Exception as e: # TODO : add md_path to problem path or something? self.logger.info("Unknown error when writing metadata to: '%s'" % md_path) + self.logger.info( traceback.format_exc() ) def new_watch(self, msg): self.logger.info("Creating watch for directory: '%s'" % msg['directory']) diff --git a/python_apps/media-monitor2/media/monitor/log.py b/python_apps/media-monitor2/media/monitor/log.py index 104630124..0372261f7 100644 --- a/python_apps/media-monitor2/media/monitor/log.py +++ b/python_apps/media-monitor2/media/monitor/log.py @@ -1,5 +1,6 @@ import logging import abc +import traceback from media.monitor.pure import LazyProperty logger = logging.getLogger('mediamonitor2') @@ -12,6 +13,14 @@ class Loggable(object): # TODO : Clean this up if not hasattr(self,"_logger"): self._logger = logging.getLogger('mediamonitor2') return self._logger + def unexpected_exception(self,e): + self.fatal_exception("'Unexpected' exception has occured:", e) + + def fatal_exception(self, message, e): + self.logger.error(message) + self.logger.error( str(e) ) + self.logger.error( traceback.format_exc() ) + def get_logger(): return logging.getLogger('mediamonitor2') diff --git a/python_apps/media-monitor2/media/monitor/metadata.py b/python_apps/media-monitor2/media/monitor/metadata.py index 97a9f950e..c2f99cae4 100644 --- a/python_apps/media-monitor2/media/monitor/metadata.py +++ b/python_apps/media-monitor2/media/monitor/metadata.py @@ -103,9 +103,9 @@ class Metadata(Loggable): song_file = mutagen.File(path, easy=True) for airtime_k, airtime_v in md.iteritems(): if airtime_k in airtime2mutagen: - song_file[ airtime2mutagen[airtime_k] ] = airtime_v - else: - song_file[ airtime2mutagen[airtime_k] ] = u"" + # The unicode cast here is mostly for integers that need to be + # strings + song_file[ airtime2mutagen[airtime_k] ] = unicode(airtime_v) song_file.save() diff --git a/python_apps/media-monitor2/media/monitor/watchersyncer.py b/python_apps/media-monitor2/media/monitor/watchersyncer.py index 8bd13ab9d..cea749411 100644 --- a/python_apps/media-monitor2/media/monitor/watchersyncer.py +++ b/python_apps/media-monitor2/media/monitor/watchersyncer.py @@ -5,7 +5,7 @@ import copy import traceback from media.monitor.handler import ReportHandler -from media.monitor.events import NewFile, DeleteFile +from media.monitor.events import NewFile, DeleteFile, ModifyFile from media.monitor.log import Loggable from media.monitor.listeners import FileMediator from media.monitor.exceptions import BadSongFile @@ -106,16 +106,17 @@ class WatchSyncer(ReportHandler,Loggable): def handle(self, sender, event): """We implement this abstract method from ReportHandler""" # TODO : more types of events need to be handled here - if isinstance(event, NewFile): - try: - self.logger.info("'%s' : New file added: '%s'" % (self.target_path, event.path)) - self.push_queue(event) + if hasattr(event, 'pack'): + # We push this event into queue + self.logger.info("Received event '%s'. Path: '%s'" % ( "", getattr(event,'path','No path exists') )) + try: self.push_queue( event ) except BadSongFile as e: - self.report_problem_file(event=event, exception=e) - elif isinstance(event, DeleteFile): - self.logger.info("'%s' : Deleted file: '%s'" % (self.target_path, event.path)) - self.push_queue(event) - else: raise Exception("Unknown event: %s" % str(event)) + self.logger.info("...") + except Exception as e: + self.unexpected_exception(e) + else: + self.logger.info("Received event that cannot be packed. Printing its representation:") + self.logger.info( repr(event) ) def requests_left_count(self): return len(self.__requests) def events_left_count(self): return len(self.__queue)