From: Darren S. <pha...@gm...> - 2015-01-22 05:37:50
|
Same results running the Gist: $ python config_fest.py expected to fail: formatted: [(['bar'], 'category', VdtValueError('the value "unknown" is unacceptable.',))] expected to pass: formatted: [] expected to fail: unformatted: [(['bar'], 'category', VdtUnknownCheckError('the check "allowed_category_options" is unknown.',))] expected to pass: unformatted: [(['bar'], 'category', VdtUnknownCheckError('the check "allowed_category_options" is unknown.',))] I have to admit ignorance knowing quite how to interpret that though. - Darren (My turn to be sorry for a late reply). On Wed, Jan 14, 2015 at 8:31 AM, Rob Dennis <rd...@gm...> wrote: > (sorry for the late reply; work situation came up when I started to reply > earlier, but I had already checked off that I had responded) > > I've taken your brief example and made a gist that you can execute: > https://gist.github.com/robdennis/bf13312a078fe8557101 > Unfortunately, I don't expect your example to work as written, since it'd > need the constructed "option" string to be formatted into the configspec. > > You have a different error message though, so I'm assuming there's some > other issue that's not obvious from what you included. > > the output I show for the test: > ``` > expected to fail: formatted: [(['bar'], 'category', VdtValueError('the value > "unknown" is unacceptable.',))] > expected to pass: formatted: [] > expected to fail: unformatted: [(['bar'], 'category', > VdtUnknownCheckError('the check "allowed_category_options" is unknown.',))] > expected to pass: unformatted: [(['bar'], 'category', > VdtUnknownCheckError('the check "allowed_category_options" is unknown.',))] > ``` > > Maybe give it a shot and see if that gets your closer? > > On Sat, Jan 10, 2015 at 6:12 PM, Darren Spruell <pha...@gm...> > wrote: >> >> 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... >> >> >> ------------------------------------------------------------------------------ >> 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 > > > > ------------------------------------------------------------------------------ > New Year. New Location. New Benefits. New Data Center in Ashburn, VA. > GigeNET is offering a free month of service with a new server in Ashburn. > Choose from 2 high performing configs, both with 100TB of bandwidth. > Higher redundancy.Lower latency.Increased capacity.Completely compliant. > http://p.sf.net/sfu/gigenet > _______________________________________________ > Configobj-develop mailing list > Con...@li... > https://lists.sourceforge.net/lists/listinfo/configobj-develop > -- Darren Spruell pha...@gm... |