Beispiel #1
0
 def validator(self):
     from flexget import validator
     root = validator.factory('list')
     key_validator = validator.factory('regexp_match',
                                       message='If statements cannot contain \'__\' or \'try\' statements')
     key_validator.reject(r'.*?(__|try\s*:)')
     key_validator.accept('.')
     action = root.accept('dict').accept_valid_keys('root', key_validator=key_validator)
     action.accept('choice').accept_choices(['accept', 'reject', 'fail'])
     filter_action = action.accept('dict')
     # Get a list of apiv2 input plugins, make sure to exclude self
     valid_filters = [plugin for plugin in get_plugins_by_phase('filter')
                      if plugin.api_ver > 1 and plugin.name != 'if']
     # Build a dict validator that accepts the available filter plugins and their settings
     for plugin in valid_filters:
         if hasattr(plugin.instance, 'validator'):
             validator = plugin.instance.validator()
             if validator.name == 'root':
                 # If a root validator is returned, grab the list of child validators
                 filter_action.valid[plugin.name] = validator.valid
             else:
                 filter_action.valid[plugin.name] = [plugin.instance.validator()]
         else:
             filter_action.valid[plugin.name] = [validator.factory('any')]
     return root
    def test_path(self, tmpdir):
        path = validator.factory('path')
        path_allow_missing = validator.factory('path', allow_missing=True)

        path.validate(tmpdir.strpath)
        assert not path.errors.messages, '%s should be valid' % tmpdir.strpath

        path_allow_missing.validate('missing_directory')
        assert not path_allow_missing.errors.messages, 'missing_directory should be valid with allow_missing'

        path.validate('missing_directory')
        assert path.errors.messages, 'missing_directory should be invalid'
        path_allow_missing.errors.messages = []
Beispiel #3
0
 def test_path(self):
     path = validator.factory('path')
     path_allow_missing = validator.factory('path', allow_missing=True)
     temp_path = maketemp()
     path.validate(temp_path)
     print path.errors.messages
     assert not path.errors.messages, '%s should be valid' % (temp_path)
     path_allow_missing.validate('missing_directory')
     print path_allow_missing.errors.messages
     assert not path_allow_missing.errors.messages, 'missing_directory should be valid with allow_missing'
     path.validate('missing_directory')
     print path.errors.messages
     assert path.errors.messages, 'missing_directory should be invalid'
     path_allow_missing.errors.messages = []
Beispiel #4
0
 def validator(self):
     from flexget import validator
     root = validator.factory('list')
     key_validator = validator.factory('regexp_match',
                                       message='If statements cannot contain \'__\' or \'try\' statements')
     key_validator.reject(r'.*?(__|try\s*:)')
     key_validator.accept('.')
     action = root.accept('dict').accept_valid_keys('root', key_validator=key_validator)
     action.accept('choice').accept_choices(['accept', 'reject', 'fail'])
     filter_action = action.accept('dict')
     # Build a dict validator that accepts the available filter plugins and their settings
     for plugin in get_plugins_by_phase('filter'):
         if plugin.api_ver > 1 and hasattr(plugin.instance, 'validator'):
             filter_action.accept(plugin.instance.validator, key=plugin.name)
     return root
 def test_dict(self):
     dv = validator.factory('dict')
     dv.accept('dict', key='foo')
     result = dv.validate({'foo': {}})
     assert not dv.errors.messages, 'should have passed foo'
     assert result, 'invalid result for foo'
     result = dv.validate({'bar': {}})
     assert dv.errors.messages, 'should not have passed bar'
     assert not result, 'should have an invalid result for bar'
     # Test validation of dictionary keys
     dv = validator.factory('dict')
     dv.accept_valid_keys('dict', key_type='number')
     result = dv.validate({3: {}})
     assert not dv.errors.messages, 'should have passed 3'
     assert result, 'invalid result for key 3'
Beispiel #6
0
 def validator(self):
     from flexget import validator
     root = validator.factory('list')
     key_validator = validator.factory('regexp_match',
                                       message='If statements cannot contain `__`,  `try` or `lambda` statements')
     key_validator.reject(r'.*?(__|try\s*:|lambda)')
     key_validator.accept('.')
     action = root.accept('dict').accept_valid_keys('root', key_validator=key_validator)
     action.accept('choice').accept_choices(['accept', 'reject', 'fail'])
     filter_action = action.accept('dict')
     # Build a dict validator that accepts all api > 2 plugins except input plugins.
     for plugin in all_plugins.itervalues():
         if plugin.api_ver > 1 and hasattr(plugin.instance, 'validator') and 'input' not in plugin.phase_handlers:
             filter_action.accept(plugin.instance.validator, key=plugin.name)
     return root
Beispiel #7
0
    def validator(self):
        from flexget import validator
        root = validator.factory('root')
        # Simple format, runs on_output for_accepted
        root.accept('text')

        # Advanced format
        adv = root.accept('dict')

        def add(name):
            phase = adv.accept('dict', key=name)
            phase.accept('text', key='phase')
            phase.accept('text', key='for_entries')
            phase.accept('text', key='for_accepted')
            phase.accept('text', key='for_rejected')
            phase.accept('text', key='for_failed')

        for name in ['on_start', 'on_input', 'on_filter', 'on_output', 'on_exit']:
            add(name)

        adv.accept('boolean', key='fail_entries')
        adv.accept('boolean', key='auto_escape')
        adv.accept('boolean', key='allow_background')

        return root
Beispiel #8
0
 def validator(self):
     from flexget import validator
     config = validator.factory('dict')
     config.accept('number', key='min')
     config.accept('number', key='max')
     config.accept('boolean', key='strict')
     return config
Beispiel #9
0
 def validator(self):
     from flexget import validator
     config = validator.factory("dict")
     config.accept("text", key="phonenumber", required=True)
     config.accept("text", key="password", required=True)
     config.accept("text", key="message", required=False)
     return config
Beispiel #10
0
    def validator(self):
        from flexget import validator
        root = validator.factory('root')
        # Simple format, runs on_output for_accepted
        root.accept('text')

        # Advanced format
        adv = root.accept('dict')

        def add(name):
            phase = adv.accept('dict', key=name)
            phase.accept('text', key='phase')
            phase.accept('text', key='for_entries')
            phase.accept('text', key='for_accepted')
            phase.accept('text', key='for_rejected')
            phase.accept('text', key='for_failed')

        for phase in self.HANDLED_PHASES:
            add('on_' + phase)

        adv.accept('boolean', key='fail_entries')
        adv.accept('boolean', key='auto_escape')
        adv.accept('text', key='encoding')
        adv.accept('boolean', key='allow_background')

        return root
Beispiel #11
0
    def validator(self):
        from flexget import validator

        root = validator.factory('dict')
        root.accept('choice', key='category').accept_choices(['all', 'movies', 'tv', 'music', 'books', 'xxx', 'other'])
        root.accept('boolean', key='verified')
        return root
Beispiel #12
0
    def validator(self):
        from flexget import validator

        root = validator.factory("dict")
        root.accept("text", key="template")
        root.accept("text", key="file", required=True)
        return root
Beispiel #13
0
 def validator(self):
     from flexget import validator
     config = validator.factory()
     # TODO: 320 and 480 need to be quoted. is it possible to validate
     # without the need for quotes?
     config.accept('choice').accept_choices(self.qualities, ignore_case=True)
     return config
Beispiel #14
0
    def validator(self):
        from flexget import validator

        root = validator.factory()
        root.accept('quality_requirements')
        root.accept('list').accept('quality_requirements')
        return root
Beispiel #15
0
    def validator(self):
        from flexget import validator

        root = validator.factory()
        root.accept('boolean')
        root.accept('list').accept('text')
        return root
Beispiel #16
0
 def test_choice(self):
     choice = validator.factory('choice')
     choice.accept('foo')
     choice.accept('Bar', ignore_case=True)
     choice.accept(120)
     choice.validate('foo')
     print choice.errors.messages
     assert not choice.errors.messages, 'foo should be valid'
     choice.validate(120)
     print choice.errors.messages
     assert not choice.errors.messages, '120 should be valid'
     choice.validate('bAR')
     print choice.errors.messages
     assert not choice.errors.messages, 'bAR should be valid'
     choice.validate('xxx')
     print choice.errors.messages
     assert choice.errors.messages, 'xxx should be invalid'
     choice.errors.messages = []
     choice.validate(300)
     print choice.errors.messages
     assert choice.errors.messages, '300 should be invalid'
     choice.errors.messages = []
     choice.validate('fOO')
     print choice.errors.messages
     assert choice.errors.messages, 'fOO should be invalid'
 def validator(self):
     from flexget import validator
     root = validator.factory('dict')
     root.accept('list', key='dvds').accept('choice').accept_choices(self.dvd_lists)
     root.accept('list', key='movies').accept('choice').accept_choices(self.movie_lists)
     root.accept('text', key='api_key')
     return root
Beispiel #18
0
    def validator(self):
        from flexget import validator

        root = validator.factory("dict")
        root.accept("text", key="account_id", required=True)
        root.accept("boolean", key="strip_dates")
        return root
Beispiel #19
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     root.accept('text') # TODO: file
     bundle = root.accept('list')
     bundle.accept('text')
     return root
 def validator(self):
     from flexget import validator
     root = validator.factory('dict')
     config = root.accept_any_key('dict')
     config.accept('regexp', key='regexp', required=True)
     config.accept('text', key='format', required=True)
     return root
Beispiel #21
0
    def validator(self):
        from flexget import validator

        root = validator.factory("dict")
        root.accept("text", key="username", required=True)
        root.accept("text", key="password", required=True)
        return root
Beispiel #22
0
    def validator(self):
        from flexget import validator

        root = validator.factory("dict")
        root.accept("boolean", key="use-ssl")
        root.accept("path", key="ftp_tmp_path")
        return root
Beispiel #23
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     root.accept('boolean')
     deluge = root.accept('dict')
     self.validate_connection_info(deluge)
     deluge.accept(
         'path', key='path', allow_replacement=True, allow_missing=True)
     deluge.accept(
         'path', key='movedone', allow_replacement=True, allow_missing=True)
     deluge.accept('text', key='label')
     deluge.accept('boolean', key='queuetotop')
     deluge.accept('boolean', key='automanaged')
     deluge.accept('number', key='maxupspeed')
     deluge.accept('number', key='maxdownspeed')
     deluge.accept('integer', key='maxconnections')
     deluge.accept('integer', key='maxupslots')
     deluge.accept('number', key='ratio')
     deluge.accept('boolean', key='removeatratio')
     deluge.accept('boolean', key='addpaused')
     deluge.accept('boolean', key='compact')
     deluge.accept('text', key='content_filename')
     deluge.accept('boolean', key='main_file_only')
     deluge.accept('boolean', key='enabled')
     return root
Beispiel #24
0
 def validator(self):
     from flexget import validator
     root = validator.factory('root')
     root.accept('boolean')
     regexp = root.accept('regexp_match')
     regexp.accept('\d+ (minutes|hours|days|weeks)')
     return root
Beispiel #25
0
    def validator(self):
        """Return config validator."""
        root = validator.factory('dict')
        root.accept('text', key='username', required=True)
        root.accept('text', key='password', required=True)
        root.accept('number', key='gravity_multiplier')

        # Scope as in pages like `browse`, `mp3/0day`, `foreign`, etc.
        # Will only accept categories from `browse` which will it default to, unless user specifies other scopes
        # via dict
        root.accept('choice', key='category').accept_choices(CATEGORIES['browse'])
        root.accept('number', key='category')
        categories = root.accept('dict', key='category')

        category_list = root.accept('list', key='category')
        category_list.accept('choice').accept_choices(CATEGORIES['browse'])

        for category in CATEGORIES:
            categories.accept('choice', key=category).accept_choices(CATEGORIES[category])
            categories.accept('boolean', key=category)
            categories.accept('number', key=category)
            category_list = categories.accept('list', key=category)
            category_list.accept('choice', key=category).accept_choices(CATEGORIES[category])
            category_list.accept('number', key=category)
        return root
Beispiel #26
0
 def validator(self):
     root = validator.factory()
     root.accept('text')
     root.accept('boolean')
     presets = root.accept('list')
     presets.accept('text')
     return root
Beispiel #27
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     root.accept('path')
     bundle = root.accept('list')
     bundle.accept('path')
     return root
Beispiel #28
0
    def validator(self):
        from flexget import validator

        root = validator.factory('choice')
        root.accept_choices(['misc', 'movies', 'audio', 'tv', 'games', 'apps', 'pics', 'anime', 'comics',
                             'books', 'music video', 'unclassified', 'all'])
        return root
Beispiel #29
0
 def validator(self):
     """Validate given configuration"""
     from flexget import validator
     thetvdb = validator.factory('dict')
     thetvdb.accept('number', key='min_series_rating')
     thetvdb.accept('number', key='min_episode_rating')
     thetvdb.accept('integer', key='min_episode_air_year')
     thetvdb.accept('integer', key='max_episode_air_year')
     thetvdb.accept('number', key='min_episode_runtime')
     thetvdb.accept('number', key='max_episode_runtime')
     thetvdb.accept('list', key='reject_content_rating').accept('text')
     thetvdb.accept('list', key='accept_content_rating').accept('text')
     thetvdb.accept('list', key='accept_network').accept('text')
     thetvdb.accept('list', key='reject_network').accept('text')
     thetvdb.accept('list', key='reject_genres').accept('text')
     thetvdb.accept('list', key='reject_status').accept('text')
     thetvdb.accept('list', key='reject_languages').accept('text')
     thetvdb.accept('list', key='accept_languages').accept('text')
     thetvdb.accept('list', key='accept_actors').accept('text')
     thetvdb.accept('list', key='reject_actors').accept('text')
     thetvdb.accept('list', key='accept_writers').accept('text')
     thetvdb.accept('list', key='reject_writers').accept('text')
     thetvdb.accept('list', key='accept_directors').accept('text')
     thetvdb.accept('list', key='reject_directors').accept('text')
     return thetvdb
Beispiel #30
0
 def validator(self):
     from flexget import validator
     config = validator.factory('dict')
     config.accept('url', key='url', required=True)
     values = config.accept('dict', key='values', required=True)
     values.accept_any_key('integer')
     return config
Beispiel #31
0
 def validator(self):
     from flexget import validator
     config = validator.factory("dict")
     config.accept("text", key="apikey", required=True)
     config.accept("text", key="device", required=True)
     config.accept("text", key="title", required=False)
     config.accept("text", key="body", required=False)
     return config
Beispiel #32
0
    def validator(self):
        from flexget import validator

        root = validator.factory('dict')
        root.accept('choice', key='category').accept_choices(
            ['all', 'movies', 'tv', 'music', 'books', 'xxx', 'other'])
        root.accept('boolean', key='verified')
        return root
 def validator(self):
     from flexget import validator
     root = validator.factory('dict')
     root.accept('list',
                 key='dvds').accept('choice').accept_choices(self.dvd_lists)
     root.accept('list', key='movies').accept('choice').accept_choices(
         self.movie_lists)
     return root
Beispiel #34
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     root.accept('url')
     complex = root.accept('dict')
     complex.accept('url', key='url')
     complex.accept('boolean', key='reverse')
     return root
Beispiel #35
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     root.accept('boolean')
     advanced = root.accept('dict')
     advanced.accept('boolean', key='year')
     advanced.accept('boolean', key='quality')
     return root
Beispiel #36
0
 def validator(self):
     root = validator.factory()
     advanced = root.accept("dict")
     advanced.accept("text", key="username")
     advanced.accept("text", key="password")
     advanced.accept("integer", key="limit")
     advanced.accept("any", key="fields")
     return root
Beispiel #37
0
 def validator(self):
     """Return config validator"""
     root = validator.factory()
     root.accept('boolean')
     advanced = root.accept('dict')
     self._validator(advanced)
     advanced.accept('boolean', key='onlycomplete')
     return root
Beispiel #38
0
 def test_dict(self):
     dv = validator.factory('dict')
     dv.accept('dict', key='foo')
     result = dv.validate({'foo': {}})
     assert not dv.errors.messages, 'should have passed foo'
     assert result, 'invalid result for foo'
     result = dv.validate({'bar': {}})
     assert dv.errors.messages, 'should not have passed bar'
     assert not result, 'should have an invalid result for bar'
     # Test validation of dictionary keys
     dv = validator.factory('dict')
     dv.accept_valid_keys('dict', key_type='number')
     result = dv.validate({3: {}})
     assert not dv.errors.messages, 'should have passed 3'
     assert result, 'invalid result for key 3'
     # Json schema cannot do key validation
     """result = dv.validate({'three': {}})
Beispiel #39
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     root.accept('boolean')
     root.accept('integer')
     advanced = root.accept('dict')
     advanced.accept('integer', key='min_seeds')
     advanced.accept('interval', key='reject_for')
     return root
Beispiel #40
0
 def validator(self):
     from flexget import validator
     config = validator.factory('dict')
     config.accept('text', key='require')
     config.accept('list', key='require').accept('text')
     config.accept('text', key='reject')
     config.accept('list', key='reject').accept('text')
     config.accept('boolean', key='strict')
     return config
Beispiel #41
0
 def validator(self):
     from flexget import validator
     subs = validator.factory('dict')
     langs = subs.accept('list', key='languages')
     langs.accept('text')
     subs.accept('number', key='min_sub_rating')
     subs.accept('number', key='match_limit')
     subs.accept('path', key='output')
     return subs
Beispiel #42
0
 def validator(self):
     """ Our configuration model.
     """
     root = validator.factory()
     root.accept("boolean")
     root.accept("choice").accept_choices(self.SCRUB_MODES,
                                          ignore_case=True)
     root.accept("list").accept("text")  # list of keys to scrub
     return root
Beispiel #43
0
def root_config_validator():
    """Returns a validator for the 'presets' key of config."""
    # TODO: better error messages
    valid_plugins = [p for p in all_plugins if hasattr(all_plugins[p].instance, 'validator')]
    root = validator.factory('dict')
    root.reject_keys(valid_plugins, message='plugins should go under a specific preset. '
        '(and presets are not allowed to be named the same as any plugins)')
    root.accept_any_key('dict').accept_any_key('any')
    return root
Beispiel #44
0
 def validator(self):
     from flexget import validator
     config = validator.factory()
     config.accept('boolean')
     advanced = config.accept('dict')
     advanced.accept('text', key='title_template')
     advanced.accept('text', key='item_template')
     advanced.accept('integer', key='timeout')
     return config
Beispiel #45
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     valid_plugins = root.accept('list').accept('dict')
     for plugin_name in get_plugin_keywords():
         plugin = get_plugin_by_name(plugin_name)
         if plugin.api_ver > 1 and hasattr(plugin.instance, 'validator'):
             valid_plugins.accept(plugin.instance.validator, key=plugin_name)
     return root
Beispiel #46
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     root.accept('file')
     cookies = root.accept('dict')
     cookies.accept('file', key='file', required=True)
     cookies.accept('choice', key='type').accept_choices(
         ['firefox3', 'mozilla', 'lwp'])
     return root
Beispiel #47
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     # Accept yes to just turn on
     root.accept('boolean')
     options = root.accept('dict')
     self.build_options_validator(options)
     options.accept('boolean', key='allow_seasonless')
     return root
Beispiel #48
0
 def validator(self):
     root = validator.factory()
     root.accept('boolean')
     advanced = root.accept('dict')
     advanced.accept('choice', key='category').accept_choices(CATEGORIES)
     advanced.accept('integer', key='category')
     advanced.accept('choice', key='sort_by').accept_choices(SORT)
     advanced.accept('boolean', key='sort_reverse')
     return root
Beispiel #49
0
 def validator(self):
     """Return config validator"""
     root = validator.factory()
     root.accept('boolean')
     advanced = root.accept('dict')
     self._validator(advanced)
     advanced.accept('number', key='min_ratio')
     advanced.accept('interval', key='finished_for')
     return root
Beispiel #50
0
 def validator(self):
     from flexget import validator
     root = validator.factory()
     root.accept('text')
     complex = root.accept('dict')
     # TODO: accept a list of fields.
     complex.accept('text', key='field')
     complex.accept('boolean', key='reverse')
     return root
Beispiel #51
0
 def validator(self):
     from flexget import validator
     root = validator.factory('dict')
     root.accept('url', key='url', required=True)
     root.accept('text', key='username', required=True)
     root.accept('text', key='password', required=True)
     root.accept('text', key='userfield')
     root.accept('text', key='passfield')
     return root
    def validator(self):
        from flexget import validator

        root = validator.factory('choice')
        root.accept_choices([
            'misc', 'movies', 'audio', 'tv', 'games', 'apps', 'pics', 'anime',
            'comics', 'books', 'music video', 'unclassified', 'all'
        ])
        return root
Beispiel #53
0
 def validator(self):
     """Return config validator."""
     root = validator.factory('dict')
     root.accept('url', key='url', required=False)
     root.accept('url', key='website', required=False)
     root.accept('text', key='apikey', required=False)
     root.accept('choice', key='category', required=True).accept_choices(
         ['movie', 'tvsearch', 'tv', 'music', 'book'])
     return root
Beispiel #54
0
 def validator(self):
     from flexget import validator
     root = validator.factory('dict')
     root.accept('path', key='path', required=True)
     root.accept('list', key='path').accept('path')
     root.accept('text', key='mask')
     root.accept('regexp', key='regexp')
     root.accept('boolean', key='recursive')
     return root
Beispiel #55
0
 def validator(self):
     from flexget import validator
     root = validator.factory('dict')
     root.accept('regexp_match', key='user_id').\
         accept(USER_ID_RE, message='user_id must be in the form urXXXXXXX')
     root.accept('text', key='username')
     root.accept('text', key='password')
     root.accept('text', key='list', required=True)
     return root
Beispiel #56
0
    def validator(self):
        from flexget.validator import factory
        root = factory('dict')
        root.accept('list', key='fields', required=True).accept('text')
        root.accept('choice', key='action', required=True).accept_choices(['accept', 'reject'])

        inputs = root.accept('list', key='from', required=True)
        add_plugin_validators(inputs, phase='input')
        return root
Beispiel #57
0
 def validator(self):
     '''validator'''
     from flexget import validator
     d = validator.factory('dict')
     d.accept('text', key='username')
     d.accept('text', key='password')
     d.accept('text', key='path')
     d.accept('list', key='messages').accept('text')
     return d
Beispiel #58
0
    def validator(self):
        from flexget import validator
        config = validator.factory('dict')

        config.accept('text', key='url', required=True)
        config.accept('text', key='category')
        config.accept('integer', key='priority')
        config.accept('boolean', key='top')
        return config
Beispiel #59
0
    def validator(self):
        from flexget import validator

        root = validator.factory()
        root.accept('choice').accept_choices(CATEGORIES)
        advanced = root.accept('dict')
        advanced.accept('choice', key='category').accept_choices(CATEGORIES)
        advanced.accept('choice', key='filter').accept_choices(FILTERS)
        return root
Beispiel #60
0
 def validator(self):
     from flexget import validator
     config = validator.factory('dict')
     config.accept('text', key='apikey', required=True)
     config.accept('text', key='application')
     config.accept('text', key='event')
     config.accept('integer', key='priority')
     config.accept('text', key='description')
     return config