[PEAK] ZConfigInterpreter with data from STDIN

PJ Eby pje at telecommunity.com
Wed Apr 15 18:48:11 EDT 2015

No problem.  The whole idea behind adaptation and generic components
in PEAK is so that you don't have to replace things.  For that matter,
the idea behind the naming system is that you should be able to turn
arbitrary names into arbitrary things; if the `fd.file:` scheme didn't
already exist, it would be straightforward to make it yourself.  (See
the last 80 lines of peak.naming.factories.openable for the code.)

In fact, your original script could have been implemented simply using
a #! line, like '#!/bin/invoke peak ZConfig' at the beginning of your
schema file.  Or you could make your app's .ini file executable, with
'#!/bin/invoke peak runIni'.  Everywhere the original PEAK framework
tries to make things composable and to map names of things to objects
so that coding isn't needed when you're just gluing together existing

On Wed, Apr 15, 2015 at 4:42 PM, Alexey Smishlayev <alexey at xtech2.lv> wrote:
> I looks like it worked. So simple! Great thanks for the advice, PJ!
> Alexey
> On 15/04/15 20:19, PJ Eby wrote:
>> Have you tried just using  "fd.file:stdin" as the cfgName?
>> On Wed, Apr 15, 2015 at 8:49 AM, Alexey Smishlayev <alexey at xtech2.lv>
>> wrote:
>>> Hello!
>>> I am trying to refactor existing peak application. I need to be able to
>>> load
>>> ZConfig file from data incoming by STDIN. Now, the loader included in
>>> peak
>>> is using files, so I implemented a subclass which should simulate a file
>>> resource (in file zconfig.py). I also searched peak.ini for any lines
>>> regarding zconfig. I copied all settings and changed them to point to my
>>> custom classes (in file custom.ini; "ank.BBS" is my project package).
>>> In the python script, ZConfigInperpreter was used to get the application
>>> root component in the following way:
>>>>     _argv=["ZConfig", scheme, cfgName]
>>>>     _argv.extend(sys.argv[1:])
>>>>     return ZConfigInterpreter(
>>>>         config.makeRoot(),
>>>>         argv=_argv,
>>>>         componentName="MYAPP"
>>>>     )
>>> Now I want to pass no cfgName and get interpreter to process the STDIN.
>>> But
>>> the PEAK seem to not find settings which I've put in my .ini file and I'm
>>> stuck.
>>> I've narrowed it down - the
>>> ZConfigInterpreter.lookupComponent('zconfig.schema:'+str(url)) returns
>>> peak.config.load_zconfig.ConfigLoader, instead of my custom class
>>> (STDINConfigLoader from my file). I tried to trace down the stack with
>>> pdb,
>>> and it seems that some lookup for
>>> "zconfig.schema:/path/to/schema/file.xml"
>>> returns peak.config.load_zconfig.ZConfigSchemaContext.
>>> I've subclassed that one too, but have no success.
>>> Can anyone, please, help me, how to replace the standard ZConfig classes?
>>> Best regards,
>>> Alexey
>>> _______________________________________________
>>> PEAK mailing list
>>> PEAK at eby-sarna.com
>>> http://www.eby-sarna.com/mailman/listinfo/peak
> _______________________________________________
> PEAK mailing list
> PEAK at eby-sarna.com
> http://www.eby-sarna.com/mailman/listinfo/peak

More information about the PEAK mailing list