Author: duncan
Date: Tue Oct 30 17:20:56 2007
New Revision: 10046

Log:
[ 1640870 ] twisted.internet.app no more in twisted-2.5.0
Updated to allow Twisted 2.5 to work


Modified:
   branches/rel-1-7/freevo/src/helpers/recordserver.py
   branches/rel-1-7/freevo/src/helpers/webserver.py
   branches/rel-1/freevo/src/helpers/recordserver.py
   branches/rel-1/freevo/src/helpers/webserver.py

Modified: branches/rel-1-7/freevo/src/helpers/recordserver.py
==============================================================================
--- branches/rel-1-7/freevo/src/helpers/recordserver.py (original)
+++ branches/rel-1-7/freevo/src/helpers/recordserver.py Tue Oct 30 17:20:56 2007
@@ -53,24 +53,17 @@
             os.environ['HOME'] = pwd.getpwuid(os.getuid())[5]
     except Exception, e:
         print e
+        sys.exit(1)
 
 from twisted.web import xmlrpc, server, sux
-from twisted.internet.app import Application
 from twisted.internet import reactor
-from twisted.python import log
 from util.marmalade import jellyToXML, unjellyFromXML
-from video.commdetectclient import initCommDetectJob
-from video.commdetectclient import queueIt
-from video.commdetectclient import listJobs
-from video.commdetectclient import connectionTest
 
-import rc
-rc_object = rc.get_singleton(use_pylirc=0, use_netremote=0)
+from video.commdetectclient import initCommDetectJob, queueIt, listJobs, 
connectionTest
 
+import tv.record_types
 from tv.record_types import TYPES_VERSION
 from tv.record_types import ScheduledRecordings
-
-import tv.record_types
 import tv.epg_xmltv
 import util.tv_util as tv_util
 import plugin
@@ -83,48 +76,13 @@
 DEBUG = hasattr(config, 'DEBUG_'+appconf) and eval('config.DEBUG_'+appconf) or 
config.DEBUG
 LOGGING = hasattr(config, 'LOGGING_'+appconf) and 
eval('config.LOGGING_'+appconf) or config.LOGGING
 
-def _debug_func_(s, level=1):
-    import traceback
-    if DEBUG < level:
-        return
-    global lock
-    if not lock.acquire():
-        print '%r' % s
-    try:
-        try:
-            # add the current trace to the string
-            where =  traceback.extract_stack(limit = 2)[0]
-            if isinstance(s, unicode):
-                s = s.encode(config.encoding, 'replace')
-            s = '%s %-6s: %s' % (where[0][where[0].rfind('/')+1:], 
'('+str(where[1])+')', s)
-            # print debug message
-            if level <= DCRITICAL:
-                logging.critical(s)
-            elif level == DERROR:
-                logging.error(s)
-            elif level == DWARNING:
-                logging.warning(s)
-            elif level == DINFO:
-                logging.info(s)
-            else:
-                logging.debug(s)
-        except UnicodeEncodeError:
-            print "_debug_ failed. %r" % s
-        except Exception, e:
-            print "_debug_ failed: %r" % e
-    finally:
-        lock.release()
-
-__builtin__.__dict__['_debug_']= _debug_func_
-
-
 logfile = '%s/%s-%s.log' % (config.FREEVO_LOGDIR, appname, os.getuid())
 sys.stdout = open(logfile, 'a')
 sys.stderr = sys.stdout
 
 logging.getLogger('').setLevel(LOGGING)
 logging.basicConfig(level=LOGGING, \
-    #datefmt='%a, %H:%M:%S',
+    #datefmt='%a, %H:%M:%S', # datefmt does not support msecs :(
     format='%(asctime)s %(levelname)-8s %(message)s', \
     filename=logfile, filemode='a')
 
@@ -140,14 +98,14 @@
 plugin.init_special_plugin(config.plugin_record)
 
 def print_plugin_warning():
-    _debug_('''
+    _debug_("""
     *************************************************
     **  Warning: No recording plugin registered.   **
     **           Check your local_conf.py for a    **
     **           bad "plugin_record =" line or     **
     **           this log for a plugin failure.    **
     **           Recordings will fail!             **
-    *************************************************''', DWARNING)
+    *************************************************""", DWARNING)
 
 
 if not plugin.getbyname('RECORD'):
@@ -167,7 +125,7 @@
 
 
     def isRecording(self):
-        _debug_('in isRecording', 4)
+        _debug_('isRecording()', 4)
         return glob.glob(config.FREEVO_CACHEDIR + '/record.*') and TRUE or 
FALSE
 
 
@@ -198,7 +156,7 @@
 
 
     def findNextProgram(self):
-        _debug_('in findNextProgram', 4)
+        _debug_('findNextProgram()', 4)
 
         next_program = None
         progs = self.getScheduledRecordings().getProgramList()
@@ -235,18 +193,18 @@
 
 
     def isPlayerRunning(self):
-        '''
+        """
         returns the state of a player, mplayer, xine, etc.
         TODO:
             real player running test, check /dev/videoX.
             this could go into the upsoon client
-        '''
-        _debug_('in isPlayerRunning', 4)
+        """
+        _debug_('isPlayerRunning()', 4)
         return (os.path.exists(config.FREEVO_CACHEDIR + '/playing'))
 
 
-    # note: add locking and r/rw options to get/save funs
     def getScheduledRecordings(self):
+        _debug_('getScheduledRecordings()', 4)
         file_ver = None
         scheduledRecordings = None
 
@@ -287,8 +245,7 @@
             scheduledRecordings = ScheduledRecordings()
             self.saveScheduledRecordings(scheduledRecordings)
 
-        _debug_('ScheduledRecordings has %s items.' % \
-                len(scheduledRecordings.programList), 1)
+        _debug_('ScheduledRecordings has %s items.' % 
len(scheduledRecordings.programList))
 
         try:
             mod_time = os.stat(config.TV_RECORD_SCHEDULE)[stat.ST_MTIME]
@@ -299,7 +256,10 @@
 
 
     def saveScheduledRecordings(self, scheduledRecordings=None):
-        ''' function to save the schedule to disk '''
+        """
+        Save the schedule to disk
+        """
+        _debug_('saveScheduledRecordings(scheduledRecordings=%r)' % 
(scheduledRecordings), 3)
 
         if not scheduledRecordings:
             _debug_('making a new ScheduledRecordings', DINFO)
@@ -326,7 +286,7 @@
         return TRUE
 
     def loadPreviouslyRecordedShows(self):
-        ''' Load the saved set of recorded shows '''
+        """ Load the saved set of recorded shows """
         if self.previouslyRecordedShows:
             return
 
@@ -338,7 +298,7 @@
             pass
 
     def savePreviouslyRecordedShows(self):
-        ''' Save the set of recorded shows '''
+        """ Save the set of recorded shows """
         if not self.previouslyRecordedShows:
             return
 
@@ -346,7 +306,7 @@
         pickle.dump(self.previouslyRecordedShows, open(cacheFile, "w"))
 
     def newEpisode(self, prog=None):
-        ''' Return true if this is a new episode of 'prog' '''
+        """ Return true if this is a new episode of 'prog' """
         todayStr = datetime.date.today().strftime('%Y%m%d')
         progStr = str(prog.date)
         _debug_('Program Date: "%s"' % progStr, DINFO)
@@ -392,8 +352,8 @@
             return TRUE
 
     def shrink(self, text):
-        ''' Shrink a string by removing all spaces and making it
-        lower case and then returning the MD5 digest of it. '''
+        """ Shrink a string by removing all spaces and making it
+        lower case and then returning the MD5 digest of it. """
         if text:
             text = md5.new(text.lower().replace(' ', '')).hexdigest()
         else:
@@ -402,8 +362,8 @@
 
 
     def getPreviousRecordingKey(self, prog):
-        '''Return the key to be used for a given prog in the
-        previouslyRecordedShows hashtable.'''
+        """Return the key to be used for a given prog in the
+        previouslyRecordedShows hashtable."""
         shrunkTitle = self.shrink(prog.title)
         shrunkSub   = self.shrink(prog.sub_title)
         shrunkDesc  = self.shrink(prog.desc);
@@ -413,7 +373,7 @@
 
 
     def getPreviousRecording(self, prog):
-        '''Get a previous recording, or None if none.'''
+        """Get a previous recording, or None if none."""
         try:
             return 
self.previouslyRecordedShows[self.getPreviousRecordingKey(prog)]
         except KeyError:
@@ -421,7 +381,7 @@
 
 
     def removeDuplicate(self, prog=None):
-        '''Remove a duplicate recording'''
+        """Remove a duplicate recording"""
         self.loadPreviouslyRecordedShows()
         previous = self.getPreviousRecording(prog)
         if previous:
@@ -431,7 +391,7 @@
 
 
     def addDuplicate(self, prog=None):
-        '''Add program to duplicates hash'''
+        """Add program to duplicates hash"""
         _debug_('No previous recordings for "%s", "%s", "%s", adding to hash 
and saving' % \
         (prog.title, prog.sub_title, prog.desc), 5)
         self.loadPreviouslyRecordedShows()
@@ -442,8 +402,8 @@
 
 
     def duplicate(self, prog=None):
-        '''Identify if the given programme is a duplicate. If not,
-        record it as previously recorded.'''
+        """Identify if the given programme is a duplicate. If not,
+        record it as previously recorded."""
         self.loadPreviouslyRecordedShows()
         previous = self.getPreviousRecording(prog)
         if previous:
@@ -684,6 +644,7 @@
 
 
     def scheduleRecording(self, prog=None):
+        _debug_('scheduleRecording(prog=%r)' % (prog), 4)
         global guide
 
         if not prog:
@@ -736,6 +697,7 @@
 
 
     def removeScheduledRecording(self, prog=None):
+        _debug_('removeScheduledRecording(prog=%r)' % (prog), 4)
         if not prog:
             return (FALSE, 'no prog')
 
@@ -769,6 +731,7 @@
 
 
     def isProgScheduled(self, prog, schedule=None):
+        _debug_('isProgScheduled(proc=%r, schedule=%r)' % (prog, schedule), 4)
 
         if schedule == {}:
             return (FALSE, 'prog not scheduled')
@@ -784,10 +747,9 @@
 
 
     def findProg(self, chan=None, start=None):
+        _debug_('findProg(chan=%r, start=%r' % (chan, start))
         global guide
 
-        _debug_('findProg: %s, %s' % (chan, start), DINFO)
-
         if not chan or not start:
             return (FALSE, 'no chan or no start')
 
@@ -805,10 +767,9 @@
 
 
     def findMatches(self, find=None, movies_only=None):
+        _debug_('findMatches(find=%r, movies_only=%r)' % (find, movies_only))
         global guide
 
-        _debug_('findMatches: %s' % find, DINFO)
-
         matches = []
         max_results = 500
 
@@ -985,6 +946,7 @@
                         i = i + 1
 
     def addFavorite(self, name, prog, exactchan=FALSE, exactdow=FALSE, 
exacttod=FALSE):
+        _debug_('addFavorite(name=%r)' % (name,))
         if not name:
             return (FALSE, 'no name')
 
@@ -1001,6 +963,7 @@
 
 
     def addEditedFavorite(self, name, title, chan, dow, mod, priority, 
allowDuplicates, onlyNew):
+        _debug_('addEditedFavorite(name=%r)' % (name))
         fav = tv.record_types.Favorite()
 
         fav.name = name
@@ -1021,6 +984,7 @@
 
 
     def removeFavorite(self, name=None):
+        _debug_('removeFavorite(name=%r)' % (name))
         if not name:
             return (FALSE, 'no name')
 
@@ -1034,6 +998,7 @@
 
 
     def clearFavorites(self):
+        _debug_('clearFavorites()')
         scheduledRecordings = self.getScheduledRecordings()
         scheduledRecordings.clearFavorites()
         self.saveScheduledRecordings(scheduledRecordings)
@@ -1042,10 +1007,12 @@
 
 
     def getFavorites(self):
+        _debug_('getFavorites()')
         return (TRUE, self.getScheduledRecordings().getFavorites())
 
 
     def getFavorite(self, name):
+        _debug_('getFavorite(name=%r)' % (name))
         (status, favs) = self.getFavorites()
 
         if favs.has_key(name):
@@ -1056,6 +1023,7 @@
 
 
     def adjustPriority(self, favname, mod=0):
+        _debug_('adjustPriority(favname=%r, mod=%r)' % (favname, mod))
         save = []
         mod = int(mod)
         (status, me) = self.getFavorite(favname)
@@ -1096,8 +1064,12 @@
 
         return (TRUE, 'priorities adjusted')
 
+
     def getFavoriteObject(self, prog, favs=None):
-        """more liberal favorite check that returns an object"""
+        """
+        more liberal favorite check that returns an object
+        """
+        _debug_('getFavoriteObject(prog=%r)' % (prog))
         if not favs:
             (status, favs) = self.getFavorites()
         # first try the strict test
@@ -1112,7 +1084,9 @@
         # if we get this far prog is not a favorite
         return (FALSE, 'not a favorite')
 
+
     def isProgAFavorite(self, prog, favs=None):
+        _debug_('isProgAFavorite(prog=%r)' % (prog))
         if not favs:
             (status, favs) = self.getFavorites()
 
@@ -1154,7 +1128,9 @@
                 if fav.allowDuplicates == '1':
                     return TRUE
 
+
     def removeFavoriteFromSchedule(self, fav):
+        _debug_('removeFavoriteFromSchedule(fav=%r)' % (fav))
         # TODO: make sure the program we remove is not
         #       covered by another favorite.
 
@@ -1172,6 +1148,7 @@
 
 
     def addFavoriteToSchedule(self, fav):
+        _debug_('addFavoriteToSchedule(fav=%r)' % (fav))
         global guide
         favs = {}
         favs[fav.name] = fav
@@ -1191,6 +1168,7 @@
     def updateFavoritesSchedule(self):
         #  TODO: do not re-add a prog to record if we have
         #        previously decided not to record it.
+        _debug_('updateFavoritesSchedule()')
 
         global guide
 
@@ -1533,7 +1511,10 @@
         fxd.info['runtime'] = None
         fxd.info['recording_timestamp'] = str(rec_prog.start)
         # bad use of the movie year field :)
+        try:
         fxd.info['year'] = time.strftime(config.TV_RECORD_YEAR_FORMAT, 
time.localtime(rec_prog.start))
+        except:
+            fxd.info['year'] = '2007'
         fxd.title = rec_prog.title
         fxd.writeFxd()
 
@@ -1543,6 +1524,7 @@
         _debug_('top of the minute in %s seconds' % next_minute, DINFO)
         reactor.callLater(next_minute, self.minuteCheck)
 
+
     def minuteCheck(self):
         next_minute = (int(time.time()/60) * 60 + 60) - int(time.time())
         if next_minute != 60:
@@ -1692,15 +1674,14 @@
 def main():
     app = Application("RecordServer")
     rs = RecordServer()
-    app.listenTCP(config.RECORDSERVER_PORT, server.Site(rs, 
logPath='/dev/null'))
+    reactor.listenTCP(config.RECORDSERVER_PORT, server.Site(rs))
     rs.startMinuteCheck()
     rc_object.subscribe(rs.eventNotice)
-    app.run(save=0)
+    reactor.run()
 
 
 if __name__ == '__main__':
     import traceback
-    import time
     import glob
 
     locks = glob.glob(config.FREEVO_CACHEDIR + '/record.*')
@@ -1708,18 +1689,8 @@
         _debug_('Removed old record lock \"%s\"' % f, DINFO)
         os.remove(f)
 
-    while 1:
+    try:
         main()
-
-        # Don't see the point to this code, errors are system errors or 
programming errors
-        # Better to exit. May there was a reason
-        #try:
-        #    start = time.time()
-        #    main()
-        #    break
-        #except Exception, e:
-        #    print e
-        #    traceback.print_exc()
-        #    if start + 10 > time.time():
-        #        _debug_('server problem, sleeping 1 min', DINFO)
-        #        time.sleep(60)
+    except Exception, e:
+        traceback.print_exc()
+    print 'done.'

Modified: branches/rel-1-7/freevo/src/helpers/webserver.py
==============================================================================
--- branches/rel-1-7/freevo/src/helpers/webserver.py    (original)
+++ branches/rel-1-7/freevo/src/helpers/webserver.py    Tue Oct 30 17:20:56 2007
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: iso-8859-1 -*-
 # -----------------------------------------------------------------------
-# webserver.py - start the webserver
+# start the webserver
 # -----------------------------------------------------------------------
 # $Id$
 #
@@ -31,7 +31,7 @@
 # -----------------------------------------------------------------------
 
 
-import sys, os
+import sys, os, pwd
 import config
 
 appname = os.path.splitext(os.path.basename(sys.argv[0]))[0]
@@ -50,10 +50,9 @@
     except Exception, e:
         print e
 
-from twisted.internet import app
-from twisted.web import static, server, vhost, script
-from twisted.python import log
-import twisted.web.rewrite as rewrite
+from twisted.application import internet, service
+from twisted.internet import reactor
+from twisted.web import static, server, vhost, script, rewrite
 
 
 if len(sys.argv)>1 and sys.argv[1] == '--help':
@@ -64,12 +63,6 @@
 # No debugging in this module
 DEBUG = hasattr(config, 'DEBUG_'+appconf) and eval('config.DEBUG_'+appconf) or 
config.DEBUG
 
-def _debug_(text, level=1):
-    if DEBUG >= level:
-        try:
-            log.debug(String(text))
-        except:
-            print String(text)
 
 def helpimagesrewrite(request):
     if request.postpath and request.postpath[0]=='help' and 
request.postpath[1]=='images':
@@ -82,9 +75,6 @@
 def main():
     # the start and stop stuff will be handled from the freevo script
 
-    logfile = '%s/%s-%s.log' % (config.FREEVO_LOGDIR, appname, os.getuid())
-    log.startLogging(open(logfile, 'a'))
-
     if os.path.isdir(os.path.join(os.environ['FREEVO_PYTHON'], 'www/htdocs')):
         docRoot = os.path.join(os.environ['FREEVO_PYTHON'], 'www/htdocs')
     else:
@@ -106,26 +96,21 @@
 
     root.putChild('vhost', vhost.VHostMonsterResource())
     rewriter =  rewrite.RewriterResource(root, helpimagesrewrite)
-    if (config.DEBUG == 0):
-        site = server.Site(rewriter, logPath='/dev/null')
-    else:
-        site = server.Site(rewriter)
+    #Site(self, resource, logPath=None, timeout=60 * 60 * 12)
+    site = server.Site(rewriter)
 
-    application = app.Application('web')
-    application.listenTCP(config.WEBSERVER_PORT, site)
-    application.run(save=0)
+    try:
+        application = service.Application('web', uid=eval(uid), gid=eval(gid))
+    except Exception, e:
+        application = service.Application('web')
+        print e
+    reactor.listenTCP(config.WEBSERVER_PORT, site)
+    reactor.run()
 
 
 if __name__ == '__main__':
     import traceback
-    import time
-    while 1:
-        try:
-            start = time.time()
-            main()
-            break
-        except:
-            traceback.print_exc()
-            if start + 10 > time.time():
-                print 'server problem, sleeping 1 min'
-                time.sleep(60)
+    try:
+        main()
+    except Exception, e:
+        traceback.print_exc()

Modified: branches/rel-1/freevo/src/helpers/recordserver.py
==============================================================================
--- branches/rel-1/freevo/src/helpers/recordserver.py   (original)
+++ branches/rel-1/freevo/src/helpers/recordserver.py   Tue Oct 30 17:20:56 2007
@@ -36,6 +36,10 @@
 import config
 from util import vfs
 
+import kaa.rpc
+import kaa.notifier
+from kaa.notifier import EventHandler, AtTimer
+
 appname = os.path.splitext(os.path.basename(sys.argv[0]))[0]
 appconf = appname.upper()
 
@@ -53,24 +57,19 @@
             os.environ['HOME'] = pwd.getpwuid(os.getuid())[5]
     except Exception, e:
         print e
+        sys.exit(1)
 
+# The twisted modules will go away when all the recordserver clients
+# have been updated to use kaa.rpc
 from twisted.web import xmlrpc, server, sux
-from twisted.internet.app import Application
 from twisted.internet import reactor
-from twisted.python import log
 from util.marmalade import jellyToXML, unjellyFromXML
-from video.commdetectclient import initCommDetectJob
-from video.commdetectclient import queueIt
-from video.commdetectclient import listJobs
-from video.commdetectclient import connectionTest
 
-import rc
-rc_object = rc.get_singleton(use_pylirc=0, use_netremote=0)
+from video.commdetectclient import initCommDetectJob, queueIt, listJobs, 
connectionTest
 
+import tv.record_types
 from tv.record_types import TYPES_VERSION
 from tv.record_types import ScheduledRecordings
-
-import tv.record_types
 import tv.epg_xmltv
 import util.tv_util as tv_util
 import plugin
@@ -83,48 +82,13 @@
 DEBUG = hasattr(config, 'DEBUG_'+appconf) and eval('config.DEBUG_'+appconf) or 
config.DEBUG
 LOGGING = hasattr(config, 'LOGGING_'+appconf) and 
eval('config.LOGGING_'+appconf) or config.LOGGING
 
-def _debug_func_(s, level=1):
-    import traceback
-    if DEBUG < level:
-        return
-    global lock
-    if not lock.acquire():
-        print '%r' % s
-    try:
-        try:
-            # add the current trace to the string
-            where =  traceback.extract_stack(limit = 2)[0]
-            if isinstance(s, unicode):
-                s = s.encode(config.encoding, 'replace')
-            s = '%s %-6s: %s' % (where[0][where[0].rfind('/')+1:], 
'('+str(where[1])+')', s)
-            # print debug message
-            if level <= DCRITICAL:
-                logging.critical(s)
-            elif level == DERROR:
-                logging.error(s)
-            elif level == DWARNING:
-                logging.warning(s)
-            elif level == DINFO:
-                logging.info(s)
-            else:
-                logging.debug(s)
-        except UnicodeEncodeError:
-            print "_debug_ failed. %r" % s
-        except Exception, e:
-            print "_debug_ failed: %r" % e
-    finally:
-        lock.release()
-
-__builtin__.__dict__['_debug_'] = _debug_func_
-
-
 logfile = '%s/%s-%s.log' % (config.FREEVO_LOGDIR, appname, os.getuid())
 sys.stdout = open(logfile, 'a')
 sys.stderr = sys.stdout
 
 logging.getLogger('').setLevel(LOGGING)
 logging.basicConfig(level=LOGGING, \
-    #datefmt='%a, %H:%M:%S',
+    #datefmt='%a, %H:%M:%S', # datefmt does not support msecs :(
     format='%(asctime)s %(levelname)-8s %(message)s', \
     filename=logfile, filemode='a')
 
@@ -140,14 +104,14 @@
 plugin.init_special_plugin(config.plugin_record)
 
 def print_plugin_warning():
-    _debug_('''
+    _debug_("""
     *************************************************
     **  Warning: No recording plugin registered.   **
     **           Check your local_conf.py for a    **
     **           bad "plugin_record =" line or     **
     **           this log for a plugin failure.    **
     **           Recordings will fail!             **
-    *************************************************''', DWARNING)
+    *************************************************""", DWARNING)
 
 
 if not plugin.getbyname('RECORD'):
@@ -166,8 +130,9 @@
         self.delay_recording = None
 
 
+    @kaa.rpc.expose('isRecording')
     def isRecording(self):
-        _debug_('in isRecording', 4)
+        _debug_('isRecording()', 1)
         return glob.glob(config.FREEVO_CACHEDIR + '/record.*') and TRUE or 
FALSE
 
 
@@ -197,8 +162,9 @@
                 _debug_('Overlap:\n%s\n%s' % (thisprog, nextprog), DINFO)
 
 
+    @kaa.rpc.expose('findNextProgram')
     def findNextProgram(self):
-        _debug_('in findNextProgram', 4)
+        _debug_('findNextProgram()', 1)
 
         next_program = None
         progs = self.getScheduledRecordings().getProgramList()
@@ -234,19 +200,23 @@
         return next_program
 
 
+    @kaa.rpc.expose('isPlayerRunning')
     def isPlayerRunning(self):
-        '''
+        """
         returns the state of a player, mplayer, xine, etc.
         TODO:
             real player running test, check /dev/videoX.
             this could go into the upsoon client
-        '''
-        _debug_('in isPlayerRunning', 4)
-        return (os.path.exists(config.FREEVO_CACHEDIR + '/playing'))
+        """
+        _debug_('isPlayerRunning()', 1)
+        res = (os.path.exists(config.FREEVO_CACHEDIR + '/playing'))
+        _debug_('isPlayerRunning=%r' % (res), 1)
+        return res
 
 
-    # note: add locking and r/rw options to get/save funs
+    @kaa.rpc.expose('getScheduledRecordings')
     def getScheduledRecordings(self):
+        _debug_('getScheduledRecordings()', 1)
         file_ver = None
         scheduledRecordings = None
 
@@ -287,8 +257,7 @@
             scheduledRecordings = ScheduledRecordings()
             self.saveScheduledRecordings(scheduledRecordings)
 
-        _debug_('ScheduledRecordings has %s items.' % \
-                len(scheduledRecordings.programList), 1)
+        _debug_('ScheduledRecordings has %s items.' % 
len(scheduledRecordings.programList))
 
         try:
             mod_time = os.stat(config.TV_RECORD_SCHEDULE)[stat.ST_MTIME]
@@ -298,8 +267,12 @@
         return scheduledRecordings
 
 
+    @kaa.rpc.expose('saveScheduledRecordings')
     def saveScheduledRecordings(self, scheduledRecordings=None):
-        ''' function to save the schedule to disk '''
+        """
+        Save the schedule to disk
+        """
+        _debug_('saveScheduledRecordings(scheduledRecordings=%r)' % 
(scheduledRecordings), 1)
 
         if not scheduledRecordings:
             _debug_('making a new ScheduledRecordings', DINFO)
@@ -326,7 +299,7 @@
         return TRUE
 
     def loadPreviouslyRecordedShows(self):
-        ''' Load the saved set of recorded shows '''
+        """ Load the saved set of recorded shows """
         if self.previouslyRecordedShows:
             return
 
@@ -338,7 +311,7 @@
             pass
 
     def savePreviouslyRecordedShows(self):
-        ''' Save the set of recorded shows '''
+        """ Save the set of recorded shows """
         if not self.previouslyRecordedShows:
             return
 
@@ -346,7 +319,7 @@
         pickle.dump(self.previouslyRecordedShows, open(cacheFile, "w"))
 
     def newEpisode(self, prog=None):
-        ''' Return true if this is a new episode of 'prog' '''
+        """ Return true if this is a new episode of 'prog' """
         todayStr = datetime.date.today().strftime('%Y%m%d')
         progStr = str(prog.date)
         _debug_('Program Date: "%s"' % progStr, DINFO)
@@ -361,7 +334,7 @@
             progMonth = (progStr[4:-2])
             #Day
             todaysDay = (todayStr[6:])
-            progprogDay = (progStr[6:])
+            progDay = (progStr[6:])
             if todaysYear > progYear:
                 #program from a previous year
                 return FALSE
@@ -392,8 +365,8 @@
             return TRUE
 
     def shrink(self, text):
-        ''' Shrink a string by removing all spaces and making it
-        lower case and then returning the MD5 digest of it. '''
+        """ Shrink a string by removing all spaces and making it
+        lower case and then returning the MD5 digest of it. """
         if text:
             text = md5.new(text.lower().replace(' ', '')).hexdigest()
         else:
@@ -402,8 +375,8 @@
 
 
     def getPreviousRecordingKey(self, prog):
-        '''Return the key to be used for a given prog in the
-        previouslyRecordedShows hashtable.'''
+        """Return the key to be used for a given prog in the
+        previouslyRecordedShows hashtable."""
         shrunkTitle = self.shrink(prog.title)
         shrunkSub   = self.shrink(prog.sub_title)
         shrunkDesc  = self.shrink(prog.desc);
@@ -413,7 +386,7 @@
 
 
     def getPreviousRecording(self, prog):
-        '''Get a previous recording, or None if none.'''
+        """Get a previous recording, or None if none."""
         try:
             return 
self.previouslyRecordedShows[self.getPreviousRecordingKey(prog)]
         except KeyError:
@@ -421,7 +394,7 @@
 
 
     def removeDuplicate(self, prog=None):
-        '''Remove a duplicate recording'''
+        """Remove a duplicate recording"""
         self.loadPreviouslyRecordedShows()
         previous = self.getPreviousRecording(prog)
         if previous:
@@ -431,7 +404,7 @@
 
 
     def addDuplicate(self, prog=None):
-        '''Add program to duplicates hash'''
+        """Add program to duplicates hash"""
         _debug_('No previous recordings for "%s", "%s", "%s", adding to hash 
and saving' % \
         (prog.title, prog.sub_title, prog.desc), 5)
         self.loadPreviouslyRecordedShows()
@@ -442,8 +415,8 @@
 
 
     def duplicate(self, prog=None):
-        '''Identify if the given programme is a duplicate. If not,
-        record it as previously recorded.'''
+        """Identify if the given programme is a duplicate. If not,
+        record it as previously recorded."""
         self.loadPreviouslyRecordedShows()
         previous = self.getPreviousRecording(prog)
         if previous:
@@ -683,7 +656,9 @@
         return prog
 
 
+    @kaa.rpc.expose('scheduleRecording')
     def scheduleRecording(self, prog=None):
+        _debug_('scheduleRecording(prog=%r)' % (prog), 1)
         global guide
 
         if not prog:
@@ -735,7 +710,9 @@
         return (TRUE, 'recording scheduled')
 
 
+    @kaa.rpc.expose('removeScheduledRecording')
     def removeScheduledRecording(self, prog=None):
+        _debug_('removeScheduledRecording(prog=%r)' % (prog), 1)
         if not prog:
             return (FALSE, 'no prog')
 
@@ -768,7 +745,9 @@
         return (TRUE, 'recording removed')
 
 
+    @kaa.rpc.expose('isProgScheduled')
     def isProgScheduled(self, prog, schedule=None):
+        _debug_('isProgScheduled(proc=%r, schedule=%r)' % (prog, schedule), 1)
 
         if schedule == {}:
             return (FALSE, 'prog not scheduled')
@@ -783,11 +762,11 @@
         return (FALSE, 'prog not scheduled')
 
 
+    @kaa.rpc.expose('findProg')
     def findProg(self, chan=None, start=None):
+        _debug_('findProg(chan=%r, start=%r' % (chan, start))
         global guide
 
-        _debug_('findProg: %s, %s' % (chan, start), DINFO)
-
         if not chan or not start:
             return (FALSE, 'no chan or no start')
 
@@ -804,11 +783,11 @@
         return (FALSE, 'prog not found')
 
 
+    @kaa.rpc.expose('findMatches')
     def findMatches(self, find=None, movies_only=None):
+        _debug_('findMatches(find=%r, movies_only=%r)' % (find, movies_only))
         global guide
 
-        _debug_('findMatches: %s' % find, DINFO)
-
         matches = []
         max_results = 500
 
@@ -855,7 +834,7 @@
 
 
     def checkToRecord(self):
-        _debug_('checkToRecord %s' % (time.strftime('%H:%M:%S', 
time.localtime(time.time()))), 2)
+        _debug_('checkToRecord %s' % (time.strftime('%H:%M:%S', 
time.localtime(time.time()))), 1)
         rec_cmd = None
         rec_prog = None
         cleaned = None
@@ -964,8 +943,6 @@
             self.tv_lock_file = config.FREEVO_CACHEDIR + '/record.'+suffix
             self.record_app.Record(rec_prog)
 
-            self.create_fxd(rec_prog)
-
             # Cleanup old recordings (if enabled)
             if config.RECORDSERVER_CLEANUP_THRESHOLD > 0:
                 space_threshold = config.RECORDSERVER_CLEANUP_THRESHOLD * 1024 
* 1024 * 1024
@@ -986,7 +963,9 @@
                         freespace = util.freespace(path)
                         i = i + 1
 
+    @kaa.rpc.expose('addFavorite')
     def addFavorite(self, name, prog, exactchan=FALSE, exactdow=FALSE, 
exacttod=FALSE):
+        _debug_('addFavorite(name=%r)' % (name,))
         if not name:
             return (FALSE, 'no name')
 
@@ -1002,7 +981,9 @@
         return (TRUE, 'favorite added')
 
 
+    @kaa.rpc.expose('addEditedFavorite')
     def addEditedFavorite(self, name, title, chan, dow, mod, priority, 
allowDuplicates, onlyNew):
+        _debug_('addEditedFavorite(name=%r)' % (name))
         fav = tv.record_types.Favorite()
 
         fav.name = name
@@ -1022,7 +1003,9 @@
         return (TRUE, 'favorite added')
 
 
+    @kaa.rpc.expose('removeFavorite')
     def removeFavorite(self, name=None):
+        _debug_('removeFavorite(name=%r)' % (name))
         if not name:
             return (FALSE, 'no name')
 
@@ -1035,7 +1018,9 @@
         return (TRUE, 'favorite removed')
 
 
+    @kaa.rpc.expose('clearFavorites')
     def clearFavorites(self):
+        _debug_('clearFavorites()')
         scheduledRecordings = self.getScheduledRecordings()
         scheduledRecordings.clearFavorites()
         self.saveScheduledRecordings(scheduledRecordings)
@@ -1043,11 +1028,15 @@
         return (TRUE, 'favorites cleared')
 
 
+    @kaa.rpc.expose('getFavorites')
     def getFavorites(self):
+        _debug_('getFavorites()')
         return (TRUE, self.getScheduledRecordings().getFavorites())
 
 
+    @kaa.rpc.expose('getFavorite')
     def getFavorite(self, name):
+        _debug_('getFavorite(name=%r)' % (name))
         (status, favs) = self.getFavorites()
 
         if favs.has_key(name):
@@ -1057,7 +1046,9 @@
             return (FALSE, 'not a favorite')
 
 
+    @kaa.rpc.expose('adjustPriority')
     def adjustPriority(self, favname, mod=0):
+        _debug_('adjustPriority(favname=%r, mod=%r)' % (favname, mod))
         save = []
         mod = int(mod)
         (status, me) = self.getFavorite(favname)
@@ -1098,8 +1089,13 @@
 
         return (TRUE, 'priorities adjusted')
 
+
+    @kaa.rpc.expose('getFavoriteObject')
     def getFavoriteObject(self, prog, favs=None):
-        """more liberal favorite check that returns an object"""
+        """
+        more liberal favorite check that returns an object
+        """
+        _debug_('getFavoriteObject(prog=%r)' % (prog))
         if not favs:
             (status, favs) = self.getFavorites()
         # first try the strict test
@@ -1114,7 +1110,10 @@
         # if we get this far prog is not a favorite
         return (FALSE, 'not a favorite')
 
+
+    @kaa.rpc.expose('isProgAFavorite')
     def isProgAFavorite(self, prog, favs=None):
+        _debug_('isProgAFavorite(prog=%r)' % (prog))
         if not favs:
             (status, favs) = self.getFavorites()
 
@@ -1156,7 +1155,10 @@
                 if fav.allowDuplicates == '1':
                     return TRUE
 
+
+    @kaa.rpc.expose('removeFavoriteFromSchedule')
     def removeFavoriteFromSchedule(self, fav):
+        _debug_('removeFavoriteFromSchedule(fav=%r)' % (fav))
         # TODO: make sure the program we remove is not
         #       covered by another favorite.
 
@@ -1173,7 +1175,9 @@
         return (TRUE, 'favorite unscheduled')
 
 
+    @kaa.rpc.expose('addFavoriteToSchedule')
     def addFavoriteToSchedule(self, fav):
+        _debug_('addFavoriteToSchedule(fav=%r)' % (fav))
         global guide
         favs = {}
         favs[fav.name] = fav
@@ -1190,9 +1194,11 @@
         return (TRUE, 'favorite scheduled')
 
 
+    @kaa.rpc.expose('updateFavoritesSchedule')
     def updateFavoritesSchedule(self):
         #  TODO: do not re-add a prog to record if we have
         #        previously decided not to record it.
+        _debug_('updateFavoritesSchedule()')
 
         global guide
 
@@ -1562,15 +1568,7 @@
         self.checkToRecord()
 
 
-    def eventNotice(self):
-        print 'RECORDSERVER GOT EVENT NOTICE'
-        # Use callLater so that handleEvents will get called the next time
-        # through the main loop.
-        reactor.callLater(0, self.handleEvents)
-
-
-    def handleEvents(self):
-        event = rc_object.get_event()
+    def handleEvents(self, event):
         if event:
             if hasattr(event, 'arg'):
                 _debug_('event=%s arg=%r' % (event, event.arg))
@@ -1696,19 +1694,36 @@
             _debug_('%s unknown' % (event), DINFO)
 
 
+    def handleTimer(self):
+        #rs.startMinuteCheck()
+        self.checkToRecord()
+
+
 def main():
-    app = Application("RecordServer")
+    kaa.notifier.init('twisted')
+
+    socket = (config.RECORDSERVER_IP, config.RECORDSERVER_PORT2)
+    secret = config.RECORDSERVER_SECRET
+    _debug_('socket=%r, secret=%r' % (socket, secret))
+
     rs = RecordServer()
-    app.listenTCP(config.RECORDSERVER_PORT, server.Site(rs, 
logPath='/dev/null'))
+
+    rpc = kaa.rpc.Server(socket, secret)
+    rpc.connect(rs)
+
+    eh = EventHandler(rs.handleEvents)
+    eh.register()
+
+    reactor.listenTCP(config.RECORDSERVER_PORT, server.Site(rs))
     rs.startMinuteCheck()
-    # this doesn't work
-    #rc_object.subscribe(rs.eventNotice)
-    app.run(save=0)
+    reactor.run()
+
+    #kaa.notifier.AtTimer(rs.handleTimer).start(sec=45)
+    #kaa.main()
 
 
 if __name__ == '__main__':
     import traceback
-    import time
     import glob
 
     locks = glob.glob(config.FREEVO_CACHEDIR + '/record.*')
@@ -1716,18 +1731,8 @@
         _debug_('Removed old record lock \"%s\"' % f, DINFO)
         os.remove(f)
 
-    while 1:
+    try:
         main()
-
-        # Don't see the point to this code, errors are system errors or 
programming errors
-        # Better to exit. May there was a reason
-        #try:
-        #    start = time.time()
-        #    main()
-        #    break
-        #except Exception, e:
-        #    print e
-        #    traceback.print_exc()
-        #    if start + 10 > time.time():
-        #        _debug_('server problem, sleeping 1 min', DINFO)
-        #        time.sleep(60)
+    except Exception, e:
+        traceback.print_exc()
+    print 'done.'

Modified: branches/rel-1/freevo/src/helpers/webserver.py
==============================================================================
--- branches/rel-1/freevo/src/helpers/webserver.py      (original)
+++ branches/rel-1/freevo/src/helpers/webserver.py      Tue Oct 30 17:20:56 2007
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: iso-8859-1 -*-
 # -----------------------------------------------------------------------
-# webserver.py - start the webserver
+# start the webserver
 # -----------------------------------------------------------------------
 # $Id$
 #
@@ -101,6 +101,7 @@
     rewriter =  rewrite.RewriterResource(root, helpimagesrewrite)
     #Site(self, resource, logPath=None, timeout=60 * 60 * 12)
     site = server.Site(rewriter)
+
     try:
         application = service.Application('web', uid=eval(uid), gid=eval(gid))
     except Exception, e:

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to