ALAHYANE Rachid wrote:
Any ideas ? I can provide further explanations if it is not clear ;)

I think that will be needed.

You are doing server->server communication if you are running within Apache.

It would be helpful if you would describe what your end goal is.

rob


Sorry for this mail bombing.

2010/4/20 ALAHYANE Rachid <afk...@gmail.com <mailto:afk...@gmail.com>>

    Thanks for your answer, but I think that I don't explained my
    problem very clearly. Lets take this simple situation. I have two
    hosts: my client with apache+mod_python and my ipa server.

    This is the apache configuration on client :

    ---------------------------------------------------------
     <Files "test">
## python conf PythonPath "['/usr/lib/python2.6/site-packages/webservices']+sys.path"
      SetHandler python-program
      PythonHandler my_script
      PythonDebug on
    </Files>
    ---------------------------------------------------------

    and this the code of `my_script`

    ---------------------------------------------------------
    from mod_python import apache

    def handler(req):
        req.content_type = "text/plain"
        req.send_http_header()
        from ipalib import api
        # I am on the client host => mode server is False
        # I also tested this with api.bootstrap(context='example',
    in_server=False) but it doesn't work too
        api.bootstrap_with_global_options(context='example')
        api.finalize()
        api.Backend.xmlclient.connect()
        res = api.Command.user_show(user_name)
        req.write(str(res))

        return apache.OK
    ---------------------------------------------------------

    when I access to client.domain.org/test
    <http://client.domain.org/test> on my browser I get this error :

    ---------------------------------------------------------
    MOD_PYTHON ERROR

    ProcessId:      12393
    Interpreter:    'client.domain.org <http://client.domain.org>'

    ServerName:     'client.domain.org <http://client.domain.org>'
    DocumentRoot:   '/var/www/html'

    URI:            '/test'
    Location:       None
    Directory:      None
    Filename:       '/var/www/html/test'
    PathInfo:       ''

    Phase:          'PythonHandler'
    Handler:        'my_script'

    Traceback (most recent call last):

      File "/usr/lib/python2.6/site-packages/mod_python/importer.py",
    line 1537, in HandlerDispatch
        default=default_handler, arg=req, silent=hlist.silent)

      File "/usr/lib/python2.6/site-packages/mod_python/importer.py",
    line 1229, in _process_target
        result = _execute_target(config, req, object, arg)

      File "/usr/lib/python2.6/site-packages/mod_python/importer.py",
    line 1128, in _execute_target
        result = object(arg)

      File "/usr/lib/python2.6/site-packages/webservices/my_script.py",
    line 7, in handler
        api.bootstrap(context='example', in_server=False)

      File "/usr/lib/python2.6/site-packages/ipalib/plugable.py", line
    380, in bootstrap
        self.__doing('bootstrap')

      File "/usr/lib/python2.6/site-packages/ipalib/plugable.py", line
    365, in __doing
        '%s.%s() already called' % (self.__class__.__name__, name)

    StandardError: API.bootstrap() already called
    ---------------------------------------------------------

    I don't know where API.bootstrap()  was called.

    Thanks,

    2010/4/20 Jason Gerard DeRose <jder...@redhat.com
    <mailto:jder...@redhat.com>>

        On Tue, 2010-04-20 at 13:03 +0200, ALAHYANE Rachid wrote:
         > Hi,
         >
         >
         > Now I have another error. When I use the code
         > of doc/examples/python-api.py inside my server XML-RPC (not
        the ipa
         > server) that configured like this :
         >
         >
         > == Server ==
         > --------- httpd conf ------------
         > <Files "xmlrpc">
         >   ## python conf
         >
         >
         >   # ....
         >   SetHandler python-program
         >   PythonHandler xmlrpchandler
         >   PythonDebug on
         > </Files>
         > ------------------------------------
         >
         >
         > the handler xmlrpchandler calls the following method when the
        client
         > requests for the remote method getUserInfos().
         >
         >
         > --------- account.py ------------
         > def getUserInfos(user_name, env=None):
         >
         >
         >     from ipalib import api
         >
         >
         >     api.bootstrap_with_global_options(context='webservices')
         >     api.finalize()
         >     api.Backend.xmlclient.connect()
         >     return api.Command.user_show(user_name)
         > ------------------------------------
         >
         >
         >
         >
         > == Client ==
         > Now when I call  this method from my client, I get this
        exception :
         >
         >
         > ------------------------------------
         > <Fault 2: "account.getUserInfos: <type
        'exceptions.StandardError'>:
         > API.bootstrap() already called">
         > ------------------------------------
         >
         >
         > I don't know why it does not work, any ideas ??
         >

        Initializing ipalib is a somewhat expensive operation, so we only
        initialize it once when the process starts.  If you're
        implementing a
        new XML-RPC server that calls ipalib, you will need to slightly
        modify
        the code in the python-api.py example, which I'll explain.

        ipalib has 2 modes of operation: client and server.  In client mode,
        only plugins in ipalib/plugins/ are loaded.  In server mode,
        plugins in
        ipaserver/plugins/ are also loaded.

        In a nutshell, client mode will do some sanity checks and the
        forward
        the call to the server.  In server mode, the same sanity checks are
        performed, and then the command is executed, which usually means
        creating/modifying LDAP entries.

        So assuming you want to initialize ipalib in server mode (sounds
        like
        you do), you will need to do something like this (when the process
        starts):

         from ipalib import api
         api.bootstrap(context='example', in_server=True)
         api.finalize()

        Note the `in_server=True` that I added.  Then in your handler,
        you will
        need to create a context for the request, something like this:

         def getUserInfos(user_name, env=None):
             # Where are you getting Kerberos credentials?
             api.Backend.ldap2.connect(
               ccache=api.Backend.krb.default_ccname()
             )
             return api.Command.user_show(user_name)

        So the recipe is 1) initialize ipalib once at startup, and 2)
        create a
        context (LDAP connection) at each request.  To see how we do
        this is our
        RPC server, look at the ipaserver/rpcserver.py file.

        Hope that helps.  I'm glad to see someone wanting to use the Python
        API.  ;)

         > Thanks,
         >
         >
         > 2010/4/19 ALAHYANE Rachid <afk...@gmail.com
        <mailto:afk...@gmail.com>>
         >         Thank you for your answer, it works !
         >
         >         2010/4/19 Jason Gerard DeRose <jder...@redhat.com
        <mailto:jder...@redhat.com>>
         >
         >
         >                 On Mon, 2010-04-19 at 16:22 +0200, ALAHYANE
        Rachid
         >                 wrote:
         >                 > Hi,
         >                 >
         >                 >
         >                 > Using F12 with the alpha version of ipa, I
        want to
         >                 know if there is
         >                 > some ways to call implemented methods like
         >                  user_show() with my own
         >                 > script python. My goal is to call these
        methods with
         >                 a client xml-rpc
         >                 > that I will to developpe later.
         >                 >
         >                 >
         >                 > On my client, I tried this but it does not
        work :(
         >
         >
         >                 It needs more documentation, but see
         >                 doc/examples/python-api.py
         >
         >                 Let me know if that doesn't work or if you
        get stuck.
         >                  You will need to
         >                 do a kinit first.
         >
         >
         >                 >
> ----------------------------------------------------------------------------
         >                 > >>> from ipalib import api
         >                 > >>> api.bootstrap_with_global_options()
         >                 > (<Values at 0xb74f556c: {'debug': None, 'conf':
         >                 None, 'env': None,
         >                 > 'verbose': None}>, [])
         >                 > >>> api.load_plugins()
         >                 > >>> api.finalize()
         >                 > >>> api.Method.user_show.__doc__
         >                 > '\n    Display user.\n    '
         >                 > >>> api.Method.user_show(u'raca')
         >                 > Traceback (most recent call last):
         >                 >   File "<stdin>", line 1, in <module>
         >                 >   File
> "/usr/lib/python2.6/site-packages/ipalib/frontend.py",
         >                 line
         >                 > 398, in __call__
         >                 >     ret = self.run(*args, **options)
         >                 >   File
> "/usr/lib/python2.6/site-packages/ipalib/frontend.py",
         >                 line
         >                 > 667, in run
         >                 >     return self.forward(*args, **options)
         >                 >   File
> "/usr/lib/python2.6/site-packages/ipalib/frontend.py",
         >                 line
         >                 > 688, in forward
         >                 >     return
        self.Backend.xmlclient.forward(self.name <http://self.name>,
         >                 *args, **kw)
         >                 >   File
> "/usr/lib/python2.6/site-packages/ipalib/rpc.py", line
         >                 403, in
         >                 > forward
         >                 >     command = getattr(self.conn, name)
         >                 >   File
> "/usr/lib/python2.6/site-packages/ipalib/backend.py",
         >                 line 96,
         >                 > in __get_conn
         >                 >     self.id <http://self.id>,
        threading.currentThread().getName())
         >                 > AttributeError: no context.xmlclient in thread
         >                 'MainThread'
         >                 >
         >                 >
         >                 >
> ----------------------------------------------------------------------------
         >                 >
         >                 >
         >                 > Have you any idea ? or some pertinent docs
         >                 >
         >                 >
         >                 > Sorry for my bad English :)
         >                 >
         >                 >
         >                 > --
         >                 > Meilleures salutations / Best Regards
         >                 >
         >                 > Rachid ALAHYANE
         >                 >
         >                 >
         >
         >                 > _______________________________________________
         >                 > Freeipa-users mailing list
         >                 > Freeipa-users@redhat.com
        <mailto:Freeipa-users@redhat.com>
         >                 >
> https://www.redhat.com/mailman/listinfo/freeipa-users
         >
         >
         >
         >
         >
         >         --
         >         Meilleures salutations / Best Regards
         >
         >         Rachid ALAHYANE
         >
         >
         >
         >
         >
         > --
         > Meilleures salutations / Best Regards
         >
         > Rachid ALAHYANE
         >
         >




-- Meilleures salutations / Best Regards

    Rachid ALAHYANE




--
Meilleures salutations / Best Regards

Rachid ALAHYANE


------------------------------------------------------------------------

_______________________________________________
Freeipa-users mailing list
Freeipa-users@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-users

_______________________________________________
Freeipa-users mailing list
Freeipa-users@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-users

Reply via email to