Any ideas ? I can provide further explanations if it is not clear ;) Sorry for this mail bombing.
2010/4/20 ALAHYANE Rachid <[email protected]> > 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 on my browser I get this error : > > --------------------------------------------------------- > MOD_PYTHON ERROR > > ProcessId: 12393 > Interpreter: 'client.domain.org' > > ServerName: '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 <[email protected]> > > 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 <[email protected]> >> > Thank you for your answer, it works ! >> > >> > 2010/4/19 Jason Gerard DeRose <[email protected]> >> > >> > >> > 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, >> > *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, 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 >> > > [email protected] >> > > >> > 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 [email protected] https://www.redhat.com/mailman/listinfo/freeipa-users
