Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
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'],
        })
Exemplo n.º 5
0
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'],
    }
Exemplo n.º 6
0
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))
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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]
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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]
Exemplo n.º 12
0
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
Exemplo n.º 13
0
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