Changeset 41

Show
Ignore:
Timestamp:
08/13/10 20:46:21 (4 years ago)
Author:
clauz
Message:

making failure of a jukeslot not lethal to the main jukeslot, and removing useless backslashes

Location:
trunk/radiomate
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/radiomate/jukebox.py

    r27 r41  
    5050                try: 
    5151                        # make a new connection every time, otherwise we have an outdated view of the database 
    52                         cm = dao.DBConnectionManager(dbhost = config.DBHOST,\ 
    53                                         dbuser = config.DBUSER, dbpassword = config.DBPASSWORD,\ 
     52                        cm = dao.DBConnectionManager(dbhost = config.DBHOST, 
     53                                        dbuser = config.DBUSER, dbpassword = config.DBPASSWORD, 
    5454                                        database = config.DATABASE) 
    5555                        tsdao = dao.TimeSlotDAO(cm) 
     
    6666                else: 
    6767                        self.nexttimeslot = next 
    68                         self.logger.info("jukebox: queueing jukeslot %d %s at %s" % (self.nexttimeslot.id,\ 
     68                        self.logger.info("jukebox: queueing jukeslot %d %s at %s" % (self.nexttimeslot.id, 
    6969                                        self.nexttimeslot.title, self.nexttimeslot.getBeginningDatetime())) 
    7070                        return True 
     
    8383                        jukeslotclass = JUKESLOTTYPEDICT[self.currenttimeslot.slottype] 
    8484                except KeyError: 
    85                         self.logger.error("Slot type %s not found. '%s' will be canceled." \ 
    86                                         % (self.currenttimeslot.slottype, self.currenttimeslot.title)) 
     85                        self.logger.error("Slot type %s not found. '%s' will be canceled." % \ 
     86                                        (self.currenttimeslot.slottype, self.currenttimeslot.title)) 
    8787                        jukeslotclass = JukeSlot 
    8888 
    8989                self.logger.debug("chosen %s -> %s" % (self.currenttimeslot.slottype, jukeslotclass)) 
    9090                 
    91                 # spawn a new process 
    92                 self.currentjukeslot = jukeslotclass(timeslot=self.currenttimeslot, mainpassword=self.getPassword()) 
     91                try: 
     92                        # spawn a new process 
     93                        self.currentjukeslot = jukeslotclass(timeslot=self.currenttimeslot,  
     94                                        mainpassword=self.getPassword()) 
    9395 
    94                 self.currentjukeslot.deathtime = time.time() + self.currentjukeslot.duration*60 
     96                        self.currentjukeslot.deathtime = time.time() + self.currentjukeslot.duration*60 
    9597 
    96                 self.currentjukeslot.run() 
     98                        self.currentjukeslot.run() 
    9799                 
    98                 if self.pollcurrent(): 
    99                         self.logger.info("jukebox: playing jukeslot %d %s for %d minutes until %s" % (self.currentjukeslot.id,\ 
    100                                         self.currentjukeslot.title, self.currentjukeslot.duration,\ 
    101                                         time.ctime(self.currentjukeslot.deathtime))) 
    102                         return self.currentjukeslot.deathtime 
    103                 else: 
    104                         # TODO: if there is an error, update the timeslot info in the database 
    105                         self.logger.error("jukebox: jukeslot %d %s failed to start." %(self.currentjukeslot.id,\ 
    106                                         self.currentjukeslot.title)) 
    107                         return 0 
     100                        if self.pollcurrent(): 
     101                                self.logger.info("jukebox: playing jukeslot %d %s for %d minutes until %s" % (self.currentjukeslot.id, 
     102                                                self.currentjukeslot.title, self.currentjukeslot.duration, 
     103                                                time.ctime(self.currentjukeslot.deathtime))) 
     104                                return self.currentjukeslot.deathtime 
     105                        else: 
     106                                raise JukeBoxException("Process is dead.") 
     107                except Exception, e: 
     108                        self.logger.error("jukebox: jukeslot %d %s failed. %s" %(self.currentjukeslot.id, 
     109                                                self.currentjukeslot.title, str(e))) 
     110                        # TODO: update the timeslot info in the database 
     111                        self.currentjukeslot = None 
     112 
    108113         
    109114        def pollcurrent(self): 
     
    121126                now = time.time() 
    122127                if force or (now >= self.currentjukeslot.deathtime): 
    123                         self.logger.info("Stopping the current jukeslot (deathtime = %s, now = %s)" %\ 
     128                        self.logger.info("Stopping the current jukeslot (deathtime = %s, now = %s)" % \ 
    124129                                        (time.ctime(self.currentjukeslot.deathtime), time.ctime(now))) 
    125130                        self.currentjukeslot.gracefulKill() 
  • trunk/radiomate/jukeslots/base.py

    r27 r41  
    5858                # initialize the connection to the database 
    5959                try: 
    60                         self.cm = dao.DBConnectionManager(dbhost = config.DBHOST,\ 
    61                                         dbuser = config.DBUSER, dbpassword = config.DBPASSWORD,\ 
     60                        self.cm = dao.DBConnectionManager(dbhost = config.DBHOST, 
     61                                        dbuser = config.DBUSER, dbpassword = config.DBPASSWORD, 
    6262                                        database = config.DATABASE) 
    6363                        self.pldao = dao.PlayListDAO(self.cm) 
  • trunk/radiomate/jukeslots/simplelive.py

    r27 r41  
    6262                    description="%s", 
    6363                    radio) 
    64                 """ % (config.LIVESTREAMPORT, self.slotparams['livepassword'], config.LIVESTREAMMOUNT,\ 
    65                                 self.getFallBackPlayListName(), self.title, config.INTERNALJUKEPORT,\ 
     64                """ % (config.LIVESTREAMPORT, self.slotparams['livepassword'], config.LIVESTREAMMOUNT, 
     65                                self.getFallBackPlayListName(), self.title, config.INTERNALJUKEPORT, 
    6666                                self.mainpassword, self.title) 
    6767                return liq 
  • trunk/radiomate/jukeslots/simpleplaylist.py

    r27 r41  
    5757                        radio) 
    5858 
    59                 """ % (self.getPlayListName(self.playlist.id), self.getFallBackPlayListName(),\ 
     59                """ % (self.getPlayListName(self.playlist.id), self.getFallBackPlayListName(), 
    6060                                config.INTERNALJUKEPORT, self.mainpassword) 
    6161                self.logger.info("Starting playlist jukeslot") 
  • trunk/radiomate/mate.py

    r36 r41  
    186186        def __init__(self, classdict = {}): 
    187187                "take as parameter a row dictionary obtained through a MySQLdb.cursors.DictCursor object, or a json string" 
    188                 self.__dict__.update({'rolename' : '',\ 
    189                                 'canManageRoles' : False,\ 
    190                                 'canManageUsers' : False,\ 
    191                                 'canManageAllPlaylists' : False,\ 
    192                                 'canRegisterFiles' : False,\ 
    193                                 'canManageRegisteredFiles' : False,\ 
    194                                 'canManageTimetable' : False, \ 
    195                                 'fixedSlotTimes' : False, \ 
    196                                 'changeTimeBeforeTransmission' : 1440, \ 
    197                                 'canCreateTestSlot' : False, \ 
     188                self.__dict__.update({'rolename' : '', 
     189                                'canManageRoles' : False, 
     190                                'canManageUsers' : False, 
     191                                'canManageAllPlaylists' : False, 
     192                                'canRegisterFiles' : False, 
     193                                'canManageRegisteredFiles' : False, 
     194                                'canManageTimetable' : False,  
     195                                'fixedSlotTimes' : False,  
     196                                'changeTimeBeforeTransmission' : 1440,  
     197                                'canCreateTestSlot' : False,  
    198198                                'fixedSlotTimesList' : "15,30,45,60,75,90,105,120"}) 
    199199                RadioMateParentClass.__init__(self) 
     
    209209        def __init__(self, classdict = {}): 
    210210                "take as parameter a row dictionary obtained through a MySQLdb.cursors.DictCursor object, or a json string" 
    211                 self.__dict__.update({'name' : '',\ 
    212                                 'password' : '',\ 
    213                                 'displayname' : '',\ 
     211                self.__dict__.update({'name' : '', 
     212                                'password' : '', 
     213                                'displayname' : '', 
    214214                                'rolename' : ''}) 
    215215                RadioMateParentClass.__init__(self) 
     
    237237                "take as parameter a row dictionary obtained through a MySQLdb.cursors.DictCursor object, or a json string" 
    238238                self.__dict__.update({ 
    239                                 'id': 0L,\ 
    240                                 'user' : '',\ 
    241                                 'path' : '',\ 
    242                                 'type' : 'audio',\ 
    243                                 'title' : '',\ 
    244                                 'author' : '',\ 
    245                                 'album' : '',\ 
    246                                 'genre' : '',\ 
    247                                 'year' : 0, \ 
    248                                 'comment' : '', \ 
    249                                 'license' : '', \ 
    250                                 'tags' : '', \ 
     239                                'id': 0L, 
     240                                'user' : '', 
     241                                'path' : '', 
     242                                'type' : 'audio', 
     243                                'title' : '', 
     244                                'author' : '', 
     245                                'album' : '', 
     246                                'genre' : '', 
     247                                'year' : 0,  
     248                                'comment' : '',  
     249                                'license' : '',  
     250                                'tags' : '',  
    251251                                'position' : -1}) 
    252252                RadioMateParentClass.__init__(self) 
     
    260260                "take as parameter a row dictionary obtained through a MySQLdb.cursors.DictCursor object, or a json string" 
    261261                self.__dict__.update({ 
    262                                 'id': 0L,\ 
    263                                 'creator' : '',\ 
    264                                 'mediafilelist' : [],\ 
    265                                 'owners' : [],\ 
    266                                 'viewers' : [],\ 
    267                                 'private' : False,\ 
    268                                 'title' : '',\ 
    269                                 'description' : '',\ 
    270                                 'comment' : '',\ 
     262                                'id': 0L, 
     263                                'creator' : '', 
     264                                'mediafilelist' : [], 
     265                                'owners' : [], 
     266                                'viewers' : [], 
     267                                'private' : False, 
     268                                'title' : '', 
     269                                'description' : '', 
     270                                'comment' : '', 
    271271                                'tags' : ''}) 
    272272                RadioMateParentClass.__init__(self) 
     
    344344                "take as parameter a row dictionary obtained through a MySQLdb.cursors.DictCursor object, or a json string" 
    345345                self.__dict__.update({ 
    346                                 'id': 0L,\ 
    347                                 'creator' : '',\ 
    348                                 'slottype' : '',\ 
    349                                 'slotparams' : {},\ 
     346                                'id': 0L, 
     347                                'creator' : '', 
     348                                'slottype' : '', 
     349                                'slotparams' : {}, 
    350350                                'beginningtime': { 
    351                                         'year' : 0,\ 
    352                                         'month' : 0,\ 
    353                                         'day' : 0,\ 
    354                                         'hour' : 0,\ 
    355                                         'minute' : 0\ 
    356                                  }, \ 
    357                                 'duration': 0,\ 
    358                                 'title' : '',\ 
    359                                 'description' : '',\ 
    360                                 'comment' : '',\ 
    361                                 'fallbackplaylist' : 0L,\ 
     351                                        'year' : 0, 
     352                                        'month' : 0, 
     353                                        'day' : 0, 
     354                                        'hour' : 0, 
     355                                        'minute' : 0 
     356                                 },  
     357                                'duration': 0, 
     358                                'title' : '', 
     359                                'description' : '', 
     360                                'comment' : '', 
     361                                'fallbackplaylist' : 0L, 
    362362                                'tags' : ''}) 
    363363                RadioMateParentClass.__init__(self) 
     
    390390        def getBeginningTimestamp(self): 
    391391                "convert to unix timestamp" 
    392                 timetuple = (self.beginningtime['year'],\ 
    393                                 self.beginningtime['month'],\ 
    394                                 self.beginningtime['day'],\ 
    395                                 self.beginningtime['hour'],\ 
    396                                 self.beginningtime['minute'],\ 
     392                timetuple = (self.beginningtime['year'], 
     393                                self.beginningtime['month'], 
     394                                self.beginningtime['day'], 
     395                                self.beginningtime['hour'], 
     396                                self.beginningtime['minute'], 
    397397                                0, -1, -1, -1) 
    398398                return time.mktime(timetuple) 
     
    400400        def getEndingTimestamp(self): 
    401401                "convert to unix timestamp" 
    402                 timetuple = (self.beginningtime['year'],\ 
    403                                 self.beginningtime['month'],\ 
    404                                 self.beginningtime['day'],\ 
    405                                 self.beginningtime['hour'],\ 
    406                                 self.beginningtime['minute'],\ 
     402                timetuple = (self.beginningtime['year'], 
     403                                self.beginningtime['month'], 
     404                                self.beginningtime['day'], 
     405                                self.beginningtime['hour'], 
     406                                self.beginningtime['minute'], 
    407407                                0, -1, -1, -1) 
    408408                t = time.mktime(timetuple) 
     
    413413                "return a string with the beginning date and time" 
    414414                return "%04d-%02d-%02d %02d:%02d" % \ 
    415                                 (self.beginningtime['year'],\ 
    416                                 self.beginningtime['month'],\ 
    417                                 self.beginningtime['day'],\ 
    418                                 self.beginningtime['hour'],\ 
     415                                (self.beginningtime['year'], 
     416                                self.beginningtime['month'], 
     417                                self.beginningtime['day'], 
     418                                self.beginningtime['hour'], 
    419419                                self.beginningtime['minute']) 
    420420 
     
    434434                        tm = time.strptime(str(thetime), "%Y-%m-%d %H:%M:%S") 
    435435 
    436                 self.beginningtime = {'year': tm.tm_year, 'month': tm.tm_mon,\ 
     436                self.beginningtime = {'year': tm.tm_year, 'month': tm.tm_mon, 
    437437                                'day': tm.tm_mday, 'hour': tm.tm_hour, 'minute': tm.tm_min} 
    438438