4.2. Using v-q from Python

Python language is gaining much on popularity so I think it's worth to publish some information about using v-q from it.

To start developing applications using v-q in python you need an IDL mapper. I used omniORB 4.0.5 and companion program omniORBpy 2.5. Installation is very simple.

After installation you're ready to create python stubs. To do it execute:

omniidl -b python vq.idl

This will generate some files and directories:


./vq_idl.py
./vq/__init__.py
./vq__POA
./vq__POA/__init__.py

While creating example I found that vq_idl.py has errors - you need to replace "_d__except" to "_d_except". If you don't do it you won't be able to use it. If you have other errors please contact us.

Here's an example I created, it calls vq::ivq::dom_val function to validate domain's name:


#!/usr/bin/env python
import sys
from omniORB import CORBA
import CosNaming
import vq

orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)

obj = orb.resolve_initial_references("NameService")
rootCtx = obj._narrow(CosNaming.NamingContext)

if rootCtx is None:
	print "Failed to narrow the root naming context"
	sys.exit(1)

name = [ CosNaming.NameComponent("VQ.ivq", "") ]

try:
	obj = rootCtx.resolve(name)

except CosNaming.NamingContext.NotFound, ex:
	print "Name not found"
	sys.exit(1)

vqo = obj._narrow(vq.ivq)

if vqo is None:
	print "Object reference is not an vq::ivq"
	sys.exit(1)

dom = "123123.asd.com.pl"
err = vqo.dom_val(dom)

if err.ec is vq.ivq.err_no:
	print "It's a valid domain name"
else:
	print "It's an invalid domain name"

Following script executes omniNames (name server), iauth (pgsqlauthd) and ivq (qmailvqd), then dom_val.py (above example). It is also located in examples/python.


#!/bin/sh
export BASE=../..
export VQ_HOME=.

export LD_LIBRARY_PATH="/tmp" 
cp -f $BASE/lib*/*.so* /tmp

host=localhost

echo "starting Naming Service daemon ..."
rm -f /tmp/omninames-*
omniNames -start 12456 -logdir /tmp &
nsd_pid=$!

trap "kill $nsd_pid" 0
sleep 2

echo "starting iauth(pgsqlauthd) server ..."
$BASE/base/pgsql/pgsqlauthd \
-ORBIIOPAddr inet:$host:44444 \
-ORBInitRef NameService=corbaloc::$host:12456/NameService . &
iauth_pid=$!
trap "kill $nsd_pid $iauth_pid" 0
sleep 2

echo -ORBInitRef NameService=corbaloc::$host:12453/NameService > etc/ivq/auth
echo "starting ivq(qmailvqd) server ..."
$BASE/base/qmailvqd/qmailvqd \
-ORBIIOPAddr inet:$host:33333 \
-ORBInitRef NameService=corbaloc::$host:12456/NameService . &
ivq_pid=$!

trap "kill $nsd_pid $iauth_pid $ivq_pid" 0
sleep 2

echo "running client ..."
./dom_val.py -ORBInitRef NameService=corbaloc::$host:12456/NameService

Note: qmailvqd and pgsqlauthd were compiled not using omniORB but MICO. So, it's also an example of interoperability :-)

Hosted by: BerliOS Logo SourceForge.net Logo