def _add_shows(self, config, station): for section_name in config.sections(): if config.has_option(section_name, 'station') and config.get(section_name, 'station') == station.id: show_id = section_name if config.has_option(show_id, 'title'): show_title = config.get(show_id, 'title') logging.warning("Setting 'title' of show '%s' is deprecated and should be replaced by 'name'." % show_id) elif config.has_option(show_id, 'name'): show_title = config.get(show_id, 'name') else: raise Exception('No "title" or "name" option defined for show "%s".' % show_id) if config.has_option(show_id, 'duration'): show_duration = parse_duration(config.get(show_id, 'duration')) else: raise Exception('No duration option defined for show "%s".' % show_id) show = self.add_show(station, show_id, show_title, show_duration) if config.has_option(show_id, 'logo_url'): show.logo_url = config.get(show_id, 'logo_url') if config.has_option(show_id, 'link_url'): show.link_url = config.get(show_id, 'link_url') if config.has_option(show_id, 'stream_url'): show.stream_url = config.get(show_id, 'stream_url') if config.has_option(show_id, 'endurance'): show.endurance = parse_duration(config.get(show_id, 'endurance')) if config.has_option(show_id, 'date_pattern'): show.date_pattern = config.get(show_id, 'date_pattern', raw=True)
def _add_shows(self, config, station): for section_name in config.sections(): if config.has_option(section_name, 'station') and config.get(section_name, 'station') == station.id: show_id = section_name if config.has_option(show_id, 'title'): show_title = u'%s' % unicode(config.get(show_id, 'title'), 'utf8') print("WARNING: setting 'title' of show '%s' is deprecated and should be replaced by 'name'." % show_id) elif config.has_option(show_id, 'name'): show_title = u'%s' % unicode(config.get(show_id, 'name'), 'utf8') else: raise Exception('No "title" or "name" option defined for show "%s".' % show_id) if config.has_option(show_id, 'duration'): show_duration = parse_duration(config.get(show_id, 'duration')) else: raise Exception('No duration option defined for show "%s".' % show_id) if config.has_option(show_id, 'logo_url'): show_logo_url = config.get(show_id, 'logo_url') else: show_logo_url = station.logo_url show = self.add_show(station, show_id, show_title, show_duration, show_logo_url) if config.has_option(show_id, 'link_url'): show.link_url = config.get(show_id, 'link_url') else: show.link_url = station.link_url if config.has_option(show_id, 'date_pattern'): show.date_pattern = config.get(show_id, 'date_pattern', True)
def _add_shows(self, config, station): for section_name in config.sections(): if config.has_option(section_name, 'station') and config.get( section_name, 'station') == station.id: show_id = section_name if config.has_option(show_id, 'title'): show_title = config.get(show_id, 'title') logging.warning( "Setting 'title' of show '%s' is deprecated and should be replaced by 'name'." % show_id) elif config.has_option(show_id, 'name'): show_title = config.get(show_id, 'name') else: raise Exception( 'No "title" or "name" option defined for show "%s".' % show_id) if config.has_option(show_id, 'duration'): show_duration = parse_duration( config.get(show_id, 'duration')) else: raise Exception( 'No duration option defined for show "%s".' % show_id) show = self.add_show(station, show_id, show_title, show_duration) if config.has_option(show_id, 'logo_url'): show.logo_url = config.get(show_id, 'logo_url') if config.has_option(show_id, 'link_url'): show.link_url = config.get(show_id, 'link_url') if config.has_option(show_id, 'stream_url'): show.stream_url = config.get(show_id, 'stream_url') if config.has_option(show_id, 'endurance'): show.endurance = parse_duration( config.get(show_id, 'endurance')) if config.has_option(show_id, 'date_pattern'): show.date_pattern = config.get(show_id, 'date_pattern', raw=True)
def config_setup(args): """Usage: recorder config setup [ -u | -p ] Setup program settings. A new settings file is created. Options: -u Create user settings in ~/.capturadio -p Crete local settings in current work directory """ config = Configuration() bbcradio2 = config.add_station( 'bbc2', 'http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio2_mf_p?s=1423688987&e=1423703387&h=1f97ff4f9b0e0f1ae988bdf684f233b3', 'BBC Radio 2', ) bobharriscountry = config.add_show( bbcradio2, 'bobharriscountry', 'Bob Harris Country', parse_duration('58m'), ) bobharriscountry.link_url = 'http://www.bbc.co.uk/programmes/b006x527' bobharrissunday = config.add_show( bbcradio2, 'bobharrissunday', 'Bob Harris Sunday', parse_duration('2h57m'), ) bobharrissunday.link_url = 'http://www.bbc.co.uk/programmes/b006wqtf' config.write_config() print( """ Created a new configuration at %(filename)s. The URL is set to %(url)s and the files are stored at %(destination)s. You can change all settings by editing %(filename)s and you are engcouraged to do that. Use the command 'config list' to see all settings.""" % { 'destination': config.destination, 'filename': config.filename, 'url': config.feed['base_url'], })
def config_setup(args): """Usage: recorder config setup [ -u | -p ] Setup program settings. A new settings file is created. Options: -u Create user settings in ~/.capturadio -p Crete local settings in current work directory """ config = Configuration() bbcradio2 = config.add_station( 'bbc2', 'http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio2_mf_p?s=1423688987&e=1423703387&h=1f97ff4f9b0e0f1ae988bdf684f233b3', 'BBC Radio 2', 'http://www.bbc.co.uk/radio2/images/homepage/bbcradio2.gif' ) bobharriscountry = config.add_show( bbcradio2, 'bobharriscountry', 'Bob Harris Country', parse_duration('58m'), ) bobharriscountry.link_url = 'http://www.bbc.co.uk/programmes/b006x527' bobharrissunday = config.add_show( bbcradio2, 'bobharrissunday', 'Bob Harris Sunday', parse_duration('2h57m'), ) bobharrissunday.link_url = 'http://www.bbc.co.uk/programmes/b006wqtf' config.write_config() print """ Created a new configuration at %(filename)s. The URL is set to %(url)s and the files are stored at %(destination)s. You can change all settings by editing %(filename)s and you are engcouraged to do that. Use the command 'config list' to see all settings.""" % { 'destination': config.destination, 'filename': config.filename, 'url': config.feed['base_url'], }
def _cleanup_database(db): for slug, episode in db.items(): endurance = episode.endurance \ if 'endurance' in episode.__dict__ \ else parse_duration('14d') if endurance < (time() - mktime(episode.starttime)): del db[slug] try: os.unlink(episode.filename) except OSError as e: logging.error('Could not remove episode media file {}: {}' .format(episode.slug, e))
def _add_stations(self, config): logging.debug("Enter _add_stations") if config.has_section('stations'): for station_id in config.options('stations'): station_stream = config.get('stations', station_id) station_name = station_id if config.has_section(station_id): if config.has_option(station_id, 'name'): station_name = config.get(station_id, 'name') station = self.add_station(station_id, station_stream, station_name) if config.has_option(station_id, 'shows'): show_ids = re.split(r',? +', config.get(station_id, 'shows')) for show_id in show_ids: if config.has_section(show_id): config.set(show_id, 'station', station_id) logging.warning( "Removed legacy setting 'shows' for show '%s' of station '%s' in configuration file." % (show_id, station_id)) else: config.add_section(show_id) config.set(show_id, 'station', station_id) logging.warning( "Added show section '%s' in configuration file." % (show_id)) config.remove_option(station_id, 'shows') Configuration.changed_settings = True if config.has_option(station_id, 'logo_url'): station.logo_url = config.get(station_id, 'logo_url') if config.has_option(station_id, 'link_url'): station.link_url = config.get(station_id, 'link_url') if config.has_option(station_id, 'endurance'): station.endurance = parse_duration( config.get(station_id, 'endurance')) if config.has_option(station_id, 'date_pattern'): station.date_pattern = config.get(station_id, 'date_pattern', raw=True) self._add_shows(config, station)
def _read_feed_settings(self, config): if config.has_section('feed'): if config.has_option('feed', 'default_logo_url'): self.default_logo_url = config.get('feed', 'default_logo_url') if config.has_option('feed', 'base_url'): self.feed['base_url'] = config.get('feed', 'base_url') if config.has_option('feed', 'url'): if not config.has_option('feed', 'base_url'): self.feed['base_url'] = config.get('feed', 'url') config.set('feed', 'base_url', self.feed['base_url']) print( "WARNING: Replaced setting 'feed.url' with 'feed.base_url' in configuration file." ) else: print( "WARNING: Removed setting 'feed.url' from configuration file." ) config.remove_option('feed', 'url') Configuration.changed_settings = True if config.has_option('feed', 'title'): self.feed['title'] = config.get('feed', 'title') if config.has_option('feed', 'about_url'): self.feed['about_url'] = config.get('feed', 'about_url') if config.has_option('feed', 'description'): self.feed['description'] = config.get('feed', 'description') if config.has_option('feed', 'language'): self.feed['language'] = config.get('feed', 'language') if config.has_option('feed', 'filename'): self.feed['filename'] = config.get('feed', 'filename') if config.has_option('feed', 'default_logo_copyright'): self.feed['logo_copyright'] = config.get( 'feed', 'default_logo_copyright') if config.has_option('feed', 'default_logo_url'): self.feed['default_logo_url'] = config.get( 'feed', 'default_logo_url') if config.has_option('feed', 'default_link_url'): self.feed['default_link_url'] = config.get( 'feed', 'default_link_url') if config.has_option('feed', 'endurance'): self.feed['endurance'] = parse_duration( config.get('feed', 'endurance')) if self.feed['base_url'].endswith('/'): self.feed['base_url'] = self.feed['base_url'][:-1]
def _add_shows(self, config, station): for section_name in config.sections(): if config.has_option(section_name, 'station') and config.get( section_name, 'station') == station.id: show_id = section_name if config.has_option(show_id, 'title'): show_title = u'%s' % unicode(config.get(show_id, 'title'), 'utf8') print( "WARNING: setting 'title' of show '%s' is deprecated and should be replaced by 'name'." % show_id) elif config.has_option(show_id, 'name'): show_title = u'%s' % unicode(config.get(show_id, 'name'), 'utf8') else: raise Exception( 'No "title" or "name" option defined for show "%s".' % show_id) if config.has_option(show_id, 'duration'): show_duration = parse_duration( config.get(show_id, 'duration')) else: raise Exception( 'No duration option defined for show "%s".' % show_id) if config.has_option(show_id, 'logo_url'): show_logo_url = config.get(show_id, 'logo_url') else: show_logo_url = station.logo_url show = self.add_show(station, show_id, show_title, show_duration, show_logo_url) if config.has_option(show_id, 'link_url'): show.link_url = config.get(show_id, 'link_url') else: show.link_url = station.link_url if config.has_option(show_id, 'date_pattern'): show.date_pattern = config.get(show_id, 'date_pattern', True)
def _add_stations(self, config): logging.debug("Enter _add_stations") if config.has_section('stations'): for station_id in config.options('stations'): station_stream = config.get('stations', station_id) station_name = station_id if config.has_section(station_id): if config.has_option(station_id, 'name'): station_name = config.get(station_id, 'name') station = self.add_station(station_id, station_stream, station_name) if config.has_option(station_id, 'shows'): show_ids = re.split(r',? +', config.get(station_id, 'shows')) for show_id in show_ids: if config.has_section(show_id): config.set(show_id, 'station', station_id) logging.warning("Removed legacy setting 'shows' for show '%s' of station '%s' in configuration file." % ( show_id, station_id)) else: config.add_section(show_id) config.set(show_id, 'station', station_id) logging.warning("Added show section '%s' in configuration file." % (show_id)) config.remove_option(station_id, 'shows') Configuration.changed_settings = True if config.has_option(station_id, 'logo_url'): station.logo_url = config.get(station_id, 'logo_url') if config.has_option(station_id, 'link_url'): station.link_url = config.get(station_id, 'link_url') if config.has_option(station_id, 'endurance'): station.endurance = parse_duration(config.get(station_id, 'endurance')) if config.has_option(station_id, 'date_pattern'): station.date_pattern = config.get(station_id, 'date_pattern', raw=True) self._add_shows(config, station)
def _read_feed_settings(self, config): if config.has_section('feed'): if config.has_option('feed', 'default_logo_url'): self.default_logo_url = config.get('feed', 'default_logo_url') if config.has_option('feed', 'base_url'): self.feed['base_url'] = config.get('feed', 'base_url') if config.has_option('feed', 'url'): if not config.has_option('feed', 'base_url'): self.feed['base_url'] = config.get('feed', 'url') config.set('feed', 'base_url', self.feed['base_url']) print("WARNING: Replaced setting 'feed.url' with 'feed.base_url' in configuration file.") else: print("WARNING: Removed setting 'feed.url' from configuration file.") config.remove_option('feed', 'url') Configuration.changed_settings = True if config.has_option('feed', 'title'): self.feed['title'] = config.get('feed', 'title') if config.has_option('feed', 'about_url'): self.feed['about_url'] = config.get('feed', 'about_url') if config.has_option('feed', 'description'): self.feed['description'] = config.get('feed', 'description') if config.has_option('feed', 'language'): self.feed['language'] = config.get('feed', 'language') if config.has_option('feed', 'filename'): self.feed['filename'] = config.get('feed', 'filename') if config.has_option('feed', 'default_logo_copyright'): self.feed['logo_copyright'] = config.get('feed', 'default_logo_copyright') if config.has_option('feed', 'default_logo_url'): self.feed['default_logo_url'] = config.get('feed', 'default_logo_url') if config.has_option('feed', 'default_link_url'): self.feed['default_link_url'] = config.get('feed', 'default_link_url') if config.has_option('feed', 'endurance'): self.feed['endurance'] = parse_duration(config.get('feed', 'endurance')) if self.feed['base_url'].endswith('/'): self.feed['base_url'] = self.feed['base_url'][:-1]
def test_parse_duration(): from capturadio.util import parse_duration assert parse_duration("10h") == 36000 assert parse_duration("50m") == 3000 assert parse_duration("300s") == 300 assert parse_duration("300") == 300 assert parse_duration("1h15m20") == 4520 assert parse_duration("5d2h") == 439200 assert parse_duration("5d20s") == 432020 assert parse_duration("-50m") == 0 assert parse_duration("-300s") == 0 assert parse_duration("-300") == 0 assert parse_duration("1h-15m20") == 3600 assert parse_duration("trara") == 0 assert parse_duration("12trara") == 12
def test_parse_duration(): from capturadio.util import parse_duration assert parse_duration("10h") == 36000 assert parse_duration("50m") == 3000 assert parse_duration("300s") == 300 assert parse_duration("300") == 300 assert parse_duration("1h15m20") == 4520 assert parse_duration("-50m") == 0 assert parse_duration("-300s") == 0 assert parse_duration("-300") == 0 assert parse_duration("1h-15m20") == 3600 assert parse_duration("trara") == 0 assert parse_duration("12trara") == 12