1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>How to Implement SIDL Objects in Python</TITLE>
<META NAME="description" CONTENT="How to Implement SIDL Objects in Python">
<META NAME="keywords" CONTENT="users_guide">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="users_guide.css">
<LINK REL="previous" HREF="node169.html">
<LINK REL="up" HREF="node162.html">
<LINK REL="next" HREF="node171.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html3239"
HREF="node171.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html3233"
HREF="node162.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html3229"
HREF="node169.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html3235"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html3237"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html3240"
HREF="node171.html">SIDL Backend</A>
<B> Up:</B> <A NAME="tex2html3234"
HREF="node162.html">Python Bindings</A>
<B> Previous:</B> <A NAME="tex2html3230"
HREF="node169.html">Notes</A>
<B> <A NAME="tex2html3236"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html3238"
HREF="node317.html">Index</A></B>
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION03680000000000000000"></A>
<A NAME="10229"></A>
<BR>
How to Implement SIDL Objects in Python
</H1>
<P>
To build server side Python, you must have Python compiled as a shared
library or dynamically link library. The standard Python build only
builds the necessary shared library on a few platforms -- none of
which are target platforms for Babel. Some Linux distributions include
a Python shared library, and it is possible to make a Python shared
library on Solaris. The Python shared library should contain the
objects from libpythonx.y.a where x.y is your Python version.
Making a shared library is different on each platform, so it is not
covered here.
<P>
To implement an object in Python, first you must run Babel to create
the Python server side bindings <A NAME="tex2html43"
HREF="footnode.html#foot10246"><SUP><SPAN CLASS="arabic">12</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A>.
<P>
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>babel -server=python file.sidl</B></TT>
<BR>
</TT></BLOCKQUOTE>or simply
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>babel -s=python file.sidl</B></TT>
<BR>
</TT></BLOCKQUOTE>
<P>
This creates the IOR, Python skeleton (pSkel), and Python launch
(pLaunch) files in your currect directory, and it will create tree of
subdirectories based on the package hierarchy found in file.sidl. The
IOR, pSkel and pLaunch files must be compiled and place in a shared
library (in most cases).
<P>
The tree of subdirectories created by Babel includes Python
implementation files whose name ends with <TT>_Impl.py</TT> and Python
extension modules for the Python client side binding
(<TT>_Module.h</TT> and <TT>_Module.c</TT>). The extension modules need
to be compiled as above in section <A HREF="node167.html#pythonextbuild">11.5</A>, and you need
to fill in the implementations in the <TT>_Impl.py</TT> files.
<P>
Babel generates the outline of the implementation. It creates a class
definition and empty methods for you to fill in the each
<TT>_Impl.py</TT> file. If you put your code between the comments as
indicated, your code will be preserved if you rerun Babel. Any changes
out side the comment blocks will be lost if you rerun Babel. Here is
an example of a method implementation:
<P>
<BR>
<PRE CLASS="verbatim"> def passeverywhere(self, d1, d3):
#
# SIDL EXPECTED INCOMING TYPES
# ============================
# double d1
# double d3
#
#
# SIDL EXPECTED RETURN VALUE(s)
# =============================
# (_return, d2, d3)
# double _return
# double d2
# double d3
#
# DO-NOT-DELETE splicer.begin(passeverywhere)
if (d1 == 3.14):
retval = 3.14
else:
retval = 0
return (retval, 3.14, -d3)
# DO-NOT-DELETE splicer.end(passeverywhere)
</PRE></td></tr></table></blockquote>
<P>
Babel generated everything except the code that appears between the
<TT>splicer.begin</TT> and <TT>splicer.end</TT> comments.
<P>
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html3239"
HREF="node171.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html3233"
HREF="node162.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html3229"
HREF="node169.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html3235"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html3237"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html3240"
HREF="node171.html">SIDL Backend</A>
<B> Up:</B> <A NAME="tex2html3234"
HREF="node162.html">Python Bindings</A>
<B> Previous:</B> <A NAME="tex2html3230"
HREF="node169.html">Notes</A>
<B> <A NAME="tex2html3236"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html3238"
HREF="node317.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<br><br>babel-0.10.2<br>users_guide Last Modified 2005-03-23<br><br><a href="http://www.llnl.gov/CASC/components">http://www.llnl.gov/CASC/components</a><br><a href="mailto:components@llnl.gov">components@llnl.gov</a>
</ADDRESS>
</BODY>
</HTML>
|