|
From: Darren S. <pha...@gm...> - 2015-01-10 23:12:15
|
Thanks. I think it's on the right track (repr() didn't occur to me
before), but although testing with Validator.check() works, I still
get validation failures when using the resulting code within a
configspec.
BTW this is CPython 2.6.6.
# DEFAULTS['CATEGORIES'] is the list() of categories
allowed_category_options = "option({0})".format(
', '.join([repr(cat) for cat in DEFAULTS['CATEGORIES']])
)
CONFIGSPEC = '''\
logfile = string
[foo]
user = string
pass = string
[bar]
[[__many__]]
category = allowed_category_options
'''
config = ConfigObj(conf_file, configspec=CONFIGSPEC.splitlines())
validator = Validator()
results = config.validate(validator)
Results in:
The 'category' key in section 'bar, 2019761' failed validation
Should this type of usage in a configspec (the way it's being parsed
in my case) work correctly?
DS
On Sat, Jan 10, 2015 at 6:26 AM, Rob Dennis <rd...@gm...> wrote:
> Hello Darren,
>
> I'm one of the current maintainers along with Eli, I'm modifying a slightly
> tweaked example from here:
> https://configobj.readthedocs.org/en/latest/validate.html#the-standard-functions
>
> I'm seeing the behavior I expect for handcrafting the options validator:
>>>> from validate import Validator
>>>> vtor = Validator()
>>>> checked_val = vtor.check("option('option 1', 'option 2', 'option 3')",
>>>> 'option 1')
>>>> checked_val
> 'option 1'
>>>> checked_val = vtor.check("option('option 1', 'option 2', 'option 3')",
>>>> 'option 4')
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "validate.py", line 625, in check
> return self._check_value(value, fun_name, fun_args, fun_kwargs)
> File "validate.py", line 657, in _check_value
> return fun(value, *fun_args, **fun_kwargs)
> File "validate.py", line 1332, in is_option
> raise VdtValueError(value)
> validate.VdtValueError: the value "option 4" is unacceptable.
>
>
> which if we tweak a bit more shows:
>>>> my_categories = 'option 1', 'option 2', 'option 3'
>>>> checked_val = vtor.check("option({})".format(', '.join(repr(cat) for cat
>>>> in my_categories)), 'option 1')
>>>> checked_val
> 'option 1'
>
> note the example still does use join, but is also joining the repr of each
> element (to get the quotes around strings, mostly)
>>>> "option({})".format(', '.join(repr(cat) for cat in my_categories))
> "option('option 1', 'option 2', 'option 3')"
>
>
> Is this on the right track for what you need?
> I'm out of contact for the next ~6 hours, but could try and respond after
>
> On Sat, Jan 10, 2015 at 12:57 AM, Darren Spruell <pha...@gm...>
> wrote:
>>
>> I have a case in a script where I have a data structure defined in an
>> external module, which is also a library we use in the script. I'd
>> like to use that data in a DRY fashion in this script (which uses
>> ConfigObj) by passing the structure (a list) as the argument to the
>> option() validator. The reason for this is that the data in the target
>> configuration field will ultimately be passed to the external module
>> and will be validated against it, so the external module is
>> essentially "authoritative" for the application.
>>
>> In the external module (mylib.py):
>>
>> CATEGORIES = ['WHITE', 'GREEN', 'AMBER', 'RED']
>>
>>
>> In the script:
>>
>> from mylib import CATEGORIES as allowed_categories
>>
>> CONFIGSPEC = '''\
>> logfile = string
>> [foo]
>> user = string
>> pass = string
>> [bar]
>> [[__many__]]
>> category = string
>> '''
>>
>>
>> As shown I currently validate the 'category' option with string(), but
>> I'd really like to use option() instead with the set of choices taken
>> from the list imported from mylib; something like the following:
>>
>> category = option(allowed_categories)
>>
>> That syntax doesn't work and various attempts to coerce the list into
>> a string that resembles a list of allowed values with join() hasn't
>> done the trick. Is there currently a way to get this to function as I
>> want? Any way to allow option() to accept a tuple or list as the
>> arguments to ease working with structured data for that validator?
>>
>> --
>> Darren Spruell
>> pha...@gm...
>>
>>
>> ------------------------------------------------------------------------------
>> Dive into the World of Parallel Programming! The Go Parallel Website,
>> sponsored by Intel and developed in partnership with Slashdot Media, is
>> your
>> hub for all things parallel software development, from weekly thought
>> leadership blogs to news, videos, case studies, tutorials and more. Take a
>> look and join the conversation now. http://goparallel.sourceforge.net
>> _______________________________________________
>> Configobj-develop mailing list
>> Con...@li...
>> https://lists.sourceforge.net/lists/listinfo/configobj-develop
>
>
>
> ------------------------------------------------------------------------------
> Dive into the World of Parallel Programming! The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media, is your
> hub for all things parallel software development, from weekly thought
> leadership blogs to news, videos, case studies, tutorials and more. Take a
> look and join the conversation now. http://goparallel.sourceforge.net
> _______________________________________________
> Configobj-develop mailing list
> Con...@li...
> https://lists.sourceforge.net/lists/listinfo/configobj-develop
>
--
Darren Spruell
pha...@gm...
|