On 2 July 2010 11:53, Cédric Krier <[email protected]> wrote:
> On 02/07/10 11:44 +0300, Elver Loho wrote:
>> On 1 July 2010 21:05, Cédric Krier <[email protected]> wrote:
>> > I have updated the wiki page to add load of config.
>>
>> You seem to have added the two lines:
>>
>> from trytond.config import CONFIG
>> CONFIG.load()
>>
>> But that fails on me the exact same way and when I look at the
>> trytond.config source code (which is amazingly clean! my hat is off to
>> you!) then it makes sense, too:
>>
>> 1. The CONFIG object that you call load() on is an instance of the
>> ConfigManager class.
>> 2. ConfigManager.__init__() sets self.options to a dictionary of default 
>> values.
>> 3. ConfigManager.__init__() sets self.configfile = None
>> 4. CONFIG.load() is ConfigManager.load() which, as the first thing it
>> does, is check if self.configfile is set.
>> 5. Because self.configfile == None, then load() simply returns.
>> 6. The CONFIG object contains only default values.
>>
>> This works as a temporary fix:
>>
>> from trytond.config import CONFIG
>> CONFIG.configfile = "/etc/trytond.conf"  # Bad Hack!
>> CONFIG.load()
>
> I think better to put:
>
> from trytond.config import CONFIG
> CONFIG.parse()

CONFIG.parse() calls optparse.OptionParser().parse_args() without
arguments, which means it works directly on sys.args:
http://docs.python.org/library/optparse.html#parsing-arguments

Therefore calling CONFIG.parse() directly when using trytond as a
module would be a Bad Idea as it could conflict with any options
you're passing to your own script.

>> Looking at ConfigManager.parse() leads me to believe that this is the
>> main function you're usually calling. And it also sets self.configfile
>> properly.
>>
>> So I dove right in and created a patch that is doing what you intended
>> in the wiki:
>>
>> http://codereview.appspot.com/1692048/diff/1/2
>
> Good. But I will prefer to remove the optparse from this module and put it on
> server.py and make config just load from file.

Can I expect...

from trytond.config import CONFIG
CONFIG.load()

...to work properly in future versions of Tryton as it does with my patch?

I don't want to have to worry about my import script breaking after an upgrade.

Best,
Elver

>
>>
>> Now using trytond as a module works great with only a CONFIG.load()
>>
>
> Great :-)
>
> --
> Cédric Krier
>
> B2CK SPRL
> Rue de Rotterdam, 4
> 4000 Liège
> Belgium
> Tel: +32 472 54 46 59
> Email/Jabber: [email protected]
> Website: http://www.b2ck.com/
>

-- 
[email protected] mailing list

Reply via email to