<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Frutiger45-Light;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Sprechblasentext Zchn";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";
        mso-fareast-language:EN-US;}
span.E-MailFormatvorlage17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.SprechblasentextZchn
        {mso-style-name:"Sprechblasentext Zchn";
        mso-style-priority:99;
        mso-style-link:Sprechblasentext;
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi,<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>we've been asked if Autobahn runs under Jython. Since there is an upcoming Jython version that supports 2.7 Python API, I thought I'd give it a try.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>To my astonishment, I was able to get Autobahn working with minor efforts &#8230;<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Tested: Twisted 12.3 under Jython from sources (together with zope.interface 4.05 and setuptools from sources) after applying the following patches. Stock AutobahnPython 0.6 from source.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>1) Missing __builtin__.buffer<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>The following is a workaround due to <a href="http://bugs.jython.org/issue1521">http://bugs.jython.org/issue1521</a><o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Include<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal># workaround for Jython, see: http://bugs.jython.org/issue1521<o:p></o:p></p><p class=MsoNormal>import __builtin__<o:p></o:p></p><p class=MsoNormal>if not hasattr(__builtin__, 'buffer'):<o:p></o:p></p><p class=MsoNormal>    def _buffer(object, offset = None, size = None):<o:p></o:p></p><p class=MsoNormal>       if offset is None:<o:p></o:p></p><p class=MsoNormal>          offset = 0<o:p></o:p></p><p class=MsoNormal>       if size is None:<o:p></o:p></p><p class=MsoNormal>          size = len(object)<o:p></o:p></p><p class=MsoNormal>       return object[offset:offset+size]<o:p></o:p></p><p class=MsoNormal>    __builtin__.buffer = _buffer<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>at the beginning of &quot;twisted/python/compat.py&quot;.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>2) Weird platform ident<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Jython identifies itself as &quot;Java&quot; .. I was testing on Windows.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>twisted/python/runtime.py<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Line 36<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>    #'java': 'java',<o:p></o:p></p><p class=MsoNormal>    'java': 'win32',<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>This is necessary on Windows since otherwise Posix API is assumed.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Of course above is just a quick hack.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>C:\Users\oberstet&gt;jython<o:p></o:p></p><p class=MsoNormal>Jython 2.7b1 (default:ac42d59644e9, Feb 9 2013, 15:24:52)<o:p></o:p></p><p class=MsoNormal>[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0<o:p></o:p></p><p class=MsoNormal>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.<o:p></o:p></p><p class=MsoNormal>&gt;&gt;&gt; import sys, os<o:p></o:p></p><p class=MsoNormal>&gt;&gt;&gt; sys.platform<o:p></o:p></p><p class=MsoNormal>'java1.7.0'<o:p></o:p></p><p class=MsoNormal>&gt;&gt;&gt; os.name<o:p></o:p></p><p class=MsoNormal>'java'<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>IMHO, os.name should return the real underlying OS on Jython, not &quot;java&quot; .. what do you think?<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>===<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Where should those issue be adressed? Should Twisted include workarounds or should I lobby at Jython to &quot;do the right&quot; thing?<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Cheers,<o:p></o:p></p><p class=MsoNormal>Tobias<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><span style='mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'>Mit freundlichen Grüßen,<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'>Tobias Oberstein<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'>Geschäftsführer</span><span style='mso-fareast-language:DE'><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'>+49(0)9131 940 3574<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'>+49(0)176 23 752 055<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'><a href="mailto:tobias.oberstein@tavendo.de">tobias.oberstein@tavendo.de</a><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'>Skype: <a href="skype:toberstein?call">toberstein</a><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'>Twitter: <a href="https://twitter.com/oberstet">@oberstet</a><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'>Xing: <a href="https://www.xing.com/profile/Tobias_Oberstein">Tobias Oberstein</a><o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal align=center style='text-align:center'><span style='mso-fareast-language:DE'><img border=0 width=256 height=54 id="Bild_x0020_1" src="cid:image003.png@01CE1BF7.08C826D0" alt="tavendo_with_phrase_small"><o:p></o:p></span></p><p class=MsoNormal align=center style='text-align:center'><span style='mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal align=center style='text-align:center'><span style='mso-fareast-language:DE'>Tavendo GmbH </span><span style='mso-fareast-language:DE'>·</span><span style='mso-fareast-language:DE'> Am Weihersbach 13 </span><span style='mso-fareast-language:DE'>·</span><span style='mso-fareast-language:DE'> 91074 Herzogenaurach</span><span style='mso-fareast-language:DE'> · Deutschland</span><span style='mso-fareast-language:DE'><o:p></o:p></span></p><p class=MsoNormal align=center style='text-align:center'><span style='mso-fareast-language:DE'>Office / Postanschrift : Waldstrasse 18 </span><span style='mso-fareast-language:DE'>· 91054 Erlangen · Deutschland<o:p></o:p></span></p><p class=MsoNormal align=center style='text-align:center'><span style='mso-fareast-language:DE'>+49(+)700 GO TAVENDO </span><span style='mso-fareast-language:DE'>· +49(0)700 46 828 36 36 · <a href="http://www.tavendo.de/">www.tavendo.de</a></span><span style='mso-fareast-language:DE'><o:p></o:p></span></p><p class=MsoNormal align=center style='text-align:center'><span style='mso-fareast-language:DE'>Amtsgericht Fürth · HRB 10365 · USt-Id.Nr DE246462916 · Geschäftsführer Tobias Oberstein</span><span style='mso-fareast-language:DE'><o:p></o:p></span></p><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></body></html>