• Jérome Perrin's avatar
    userinfo: expose values as string · f06e61a6
    Jérome Perrin authored
    To be compatible with buildout (and not only `slapos.recipe.template:jinja2`)
    
    See [#20180416-1138FFA](https://nexedi.erp5.net/bug_module/20180416-1138FFA/)
    
    ---
    
    Running this buildout:
    
    ```
    [buildout]
    parts=x
    
    [userinfo]
    recipe = slapos.cookbook:userinfo
    
    [x]
    recipe = plone.recipe.command
    command = echo "Hello user id ${userinfo:pw-uid}"
    ```
    
    
    In a slapos patched buildout it outputs: `"Hello user id !py!991"` (which means it's not usable for references directly in other buildout parts)
    
    In a "non patched" buildout fail with error:
    
    ```
    While:
      Installing.
      Getting section x.
      Initializing section x.
      Getting option x:command.
      Getting section userinfo.
      Initializing section userinfo.
    
    An internal error occurred due to a bug in either zc.buildout or in a
    recipe being used:
    Traceback (most recent call last):
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 2127, in main
        getattr(buildout, command)(args)
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 681, in install
        [self[part]['recipe'] for part in install_parts]
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1278, in __getitem__
        options._initialize()
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1376, in _initialize
        self._dosub(k, v)
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1431, in _dosub
        v = '$$'.join([self._sub(s, seen) for s in v.split('$$')])
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1495, in _sub
        v = self.buildout[section].get(option, None, seen)
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1278, in __getitem__
        options._initialize()
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1386, in _initialize
        self.initialize()
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1395, in initialize
        self.recipe = recipe_class(buildout, name, self)
      File "/tmp/x/eggs/slapos.cookbook-1.0.62-py2.7.egg/slapos/recipe/userinfo.py", line 13, in __init__
        options['pw-uid'] = pinfo.pw_uid
      File "/tmp/x/env/lib/python2.7/site-packages/zc/buildout/buildout.py", line 1520, in __setitem__
        raise TypeError('Option values must be strings', value)
    TypeError: ('Option values must be strings', 991)
    ```
    
    /cc @Nicolas @alain.takoudjou  @vpelletier 
    
    /reviewed-on !321
    f06e61a6