The branch, build-baikal has been updated via efa7e704ac2aea6b04d290015e074ea5d1b3e8a5 (commit) from 3ba383429d71413734999e9d24a7886a41c63385 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: build-for-reprepro.sh | 41 ++ ...html => toc-x2go.gevent_subprocess-module.html} | 14 +- ...-module.html => toc-x2go.mimetypes-module.html} | 16 +- ...es-module.html => toc-x2go.xserver-module.html} | 13 +- ...ule.html => x2go.gevent_subprocess-module.html} | 38 +- doc/html/x2go.gevent_subprocess-pysrc.html | 317 +++++++++++ ...tml => x2go.gevent_subprocess.Popen-class.html} | 121 +++-- ...ting-module.html => x2go.mimetypes-module.html} | 99 +--- doc/html/x2go.mimetypes-pysrc.html | 562 ++++++++++++++++++++ ...> x2go.mimetypes.X2goMIMETypeAction-class.html} | 113 ++-- ...=> x2go.mimetypes.X2goMIMETypeQueue-class.html} | 84 ++- ...html => x2go.mimetypes.X2goPrintJob-class.html} | 16 +- ...gistry-module.html => x2go.xserver-module.html} | 21 +- ...settings-pysrc.html => x2go.xserver-pysrc.html} | 167 +++--- ...l => x2go.xserver.X2goClientXConfig-class.html} | 76 ++- ...ss.html => x2go.xserver.X2goXServer-class.html} | 38 +- x2go/gevent_subprocess.py | 197 +++++++ x2go/mimetypes.py | 281 ++++++++++ x2go/xserver.py | 92 ++++ 19 files changed, 1853 insertions(+), 453 deletions(-) create mode 100755 build-for-reprepro.sh copy doc/html/{toc-x2go.client-module.html => toc-x2go.gevent_subprocess-module.html} (59%) copy doc/html/{toc-x2go.guardian-module.html => toc-x2go.mimetypes-module.html} (53%) copy doc/html/{toc-x2go.inifiles-module.html => toc-x2go.xserver-module.html} (64%) copy doc/html/{x2go.registry-module.html => x2go.gevent_subprocess-module.html} (84%) create mode 100644 doc/html/x2go.gevent_subprocess-pysrc.html copy doc/html/{x2go.rforward.X2goRevFwChannelThread-class.html => x2go.gevent_subprocess.Popen-class.html} (67%) copy doc/html/{x2go.printing-module.html => x2go.mimetypes-module.html} (66%) create mode 100644 doc/html/x2go.mimetypes-pysrc.html copy doc/html/{x2go.printing.X2goPrintAction-class.html => x2go.mimetypes.X2goMIMETypeAction-class.html} (67%) copy doc/html/{x2go.printing.X2goPrintQueue-class.html => x2go.mimetypes.X2goMIMETypeQueue-class.html} (74%) copy doc/html/{x2go.printing.X2goPrintJob-class.html => x2go.mimetypes.X2goPrintJob-class.html} (91%) copy doc/html/{x2go.registry-module.html => x2go.xserver-module.html} (86%) copy doc/html/{x2go.settings-pysrc.html => x2go.xserver-pysrc.html} (56%) copy doc/html/{x2go.settings.X2goClientSettings-class.html => x2go.xserver.X2goClientXConfig-class.html} (67%) copy doc/html/{x2go.printing.X2goPrintJob-class.html => x2go.xserver.X2goXServer-class.html} (82%) create mode 100644 x2go/gevent_subprocess.py create mode 100644 x2go/mimetypes.py create mode 100644 x2go/xserver.py The diff of changes is: diff --git a/build-for-reprepro.sh b/build-for-reprepro.sh new file mode 100755 index 0000000..e7a1220 --- /dev/null +++ b/build-for-reprepro.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Copyright (C) 2010 by Mike Gabriel <m.gabriel@das-netzwerkteam.de> +# +# This programme is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This programme is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +PACKAGE=python-x2go + +rm -f ../$PACKAGE_*.changes +rm -f ../$PACKAGE_*.upload +rm -f ../$PACKAGE_*.build +rm -f ../$PACKAGE_*.dsc +rm -f ../$PACKAGE_*.tar.gz +rm -f ../$PACKAGE*.deb + +cp debian/changelog debian/changelog.new +editor debian/changelog.new +mv debian/changelog.new debian/changelog + +make -f Makefile.pre-debuild all docupload + +debuild + +cd .. +rm -f $PACKAGE_*.upload +dupload --to nwt-ubuntu $PACKAGE_*.changes +rm -f $PACKAGE_*.upload +dupload --to nwt-debian $PACKAGE_*.changes diff --git a/doc/html/toc-x2go.client-module.html b/doc/html/toc-x2go.gevent_subprocess-module.html similarity index 59% copy from doc/html/toc-x2go.client-module.html copy to doc/html/toc-x2go.gevent_subprocess-module.html index 832d03a..536baa4 100644 --- a/doc/html/toc-x2go.client-module.html +++ b/doc/html/toc-x2go.gevent_subprocess-module.html @@ -3,20 +3,22 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>client</title> + <title>gevent_subprocess</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> <body bgcolor="white" text="black" link="blue" vlink="#204080" alink="#204080"> -<h1 class="toc">Module client</h1> +<h1 class="toc">Module gevent_subprocess</h1> <hr /> <h2 class="toc">Classes</h2> - <a target="mainFrame" href="x2go.client.X2goClient-class.html" - >X2goClient</a><br /> <h2 class="toc">Variables</h2> - <a target="mainFrame" href="x2go.client-module.html#__NAME__" - >__NAME__</a><br /> <a target="mainFrame" href="x2go.client-module.html#__package__" + <a target="mainFrame" href="x2go.gevent_subprocess.Popen-class.html" + >Popen</a><br /> <h2 class="toc">Variables</h2> + <a target="mainFrame" href="x2go.gevent_subprocess-module.html#MAXFD" + >MAXFD</a><br /> <a target="mainFrame" href="x2go.gevent_subprocess-module.html#PIPE" + >PIPE</a><br /> <a target="mainFrame" href="x2go.gevent_subprocess-module.html#STDOUT" + >STDOUT</a><br /> <a target="mainFrame" href="x2go.gevent_subprocess-module.html#__package__" >__package__</a><br /><hr /> <script type="text/javascript"> diff --git a/doc/html/toc-x2go.guardian-module.html b/doc/html/toc-x2go.mimetypes-module.html similarity index 53% copy from doc/html/toc-x2go.guardian-module.html copy to doc/html/toc-x2go.mimetypes-module.html index e9d88c6..0190ef8 100644 --- a/doc/html/toc-x2go.guardian-module.html +++ b/doc/html/toc-x2go.mimetypes-module.html @@ -3,20 +3,24 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>guardian</title> + <title>mimetypes</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> <body bgcolor="white" text="black" link="blue" vlink="#204080" alink="#204080"> -<h1 class="toc">Module guardian</h1> +<h1 class="toc">Module mimetypes</h1> <hr /> <h2 class="toc">Classes</h2> - <a target="mainFrame" href="x2go.guardian.X2goSessionGuardian-class.html" - >X2goSessionGuardian</a><br /> <h2 class="toc">Variables</h2> - <a target="mainFrame" href="x2go.guardian-module.html#__NAME__" - >__NAME__</a><br /> <a target="mainFrame" href="x2go.guardian-module.html#__package__" + <a target="mainFrame" href="x2go.mimetypes.X2goMIMETypeAction-class.html" + >X2goMIMETypeAction</a><br /> <a target="mainFrame" href="x2go.mimetypes.X2goMIMETypeQueue-class.html" + >X2goMIMETypeQueue</a><br /> <a target="mainFrame" href="x2go.mimetypes.X2goPrintJob-class.html" + >X2goPrintJob</a><br /> <h2 class="toc">Functions</h2> + <a target="mainFrame" href="x2go.mimetypes-module.html#x2go_printjob_handler" + >x2go_printjob_handler</a><br /> <h2 class="toc">Variables</h2> + <a target="mainFrame" href="x2go.mimetypes-module.html#__NAME__" + >__NAME__</a><br /> <a target="mainFrame" href="x2go.mimetypes-module.html#__package__" >__package__</a><br /><hr /> <script type="text/javascript"> diff --git a/doc/html/toc-x2go.inifiles-module.html b/doc/html/toc-x2go.xserver-module.html similarity index 64% copy from doc/html/toc-x2go.inifiles-module.html copy to doc/html/toc-x2go.xserver-module.html index 66294e0..4a8ef74 100644 --- a/doc/html/toc-x2go.inifiles-module.html +++ b/doc/html/toc-x2go.xserver-module.html @@ -3,20 +3,21 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>inifiles</title> + <title>xserver</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> <body bgcolor="white" text="black" link="blue" vlink="#204080" alink="#204080"> -<h1 class="toc">Module inifiles</h1> +<h1 class="toc">Module xserver</h1> <hr /> <h2 class="toc">Classes</h2> - <a target="mainFrame" href="x2go.inifiles.X2goIniFile-class.html" - >X2goIniFile</a><br /> <h2 class="toc">Variables</h2> - <a target="mainFrame" href="x2go.inifiles-module.html#__NAME__" - >__NAME__</a><br /> <a target="mainFrame" href="x2go.inifiles-module.html#__package__" + <a target="mainFrame" href="x2go.xserver.X2goClientXConfig-class.html" + >X2goClientXConfig</a><br /> <a target="mainFrame" href="x2go.xserver.X2goXServer-class.html" + >X2goXServer</a><br /> <h2 class="toc">Variables</h2> + <a target="mainFrame" href="x2go.xserver-module.html#__NAME__" + >__NAME__</a><br /> <a target="mainFrame" href="x2go.xserver-module.html#__package__" >__package__</a><br /><hr /> <script type="text/javascript"> diff --git a/doc/html/x2go.registry-module.html b/doc/html/x2go.gevent_subprocess-module.html similarity index 84% copy from doc/html/x2go.registry-module.html copy to doc/html/x2go.gevent_subprocess-module.html index 1a70a24..44fd8c5 100644 --- a/doc/html/x2go.registry-module.html +++ b/doc/html/x2go.gevent_subprocess-module.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.registry</title> + <title>x2go.gevent_subprocess</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,7 +43,7 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - Module registry + Module gevent_subprocess </span> </td> <td> @@ -51,16 +51,16 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.registry-module.html" + >] | <a href="x2go.gevent_subprocess-module.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== MODULE DESCRIPTION ==================== --> -<h1 class="epydoc">Module registry</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.registry-pysrc.html">source code</a></span></p> -<p>X2goSessionRegistry class - the X2goClient's session registry - backend</p> +<h1 class="epydoc">Module gevent_subprocess</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html">source code</a></span></p> +<p>Implementation of the standard :mod:`subprocess` module that spawns + greenlets</p> <!-- ==================== CLASSES ==================== --> <a name="section-Classes"></a> @@ -74,15 +74,7 @@ <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a href="x2go.registry.X2goRegisteredSession-class.html" class="summary-name">X2goRegisteredSession</a> - </td> - </tr> -<tr> - <td width="15%" align="right" valign="top" class="summary"> - <span class="summary-type"> </span> - </td><td class="summary"> - <a href="x2go.registry.X2goSessionRegistry-class.html" class="summary-name">X2goSessionRegistry</a><br /> - STILL UNDOCUMENTED + <a href="x2go.gevent_subprocess.Popen-class.html" class="summary-name">Popen</a> </td> </tr> </table> @@ -98,7 +90,21 @@ <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2gosessregistry-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2gosessregistry-pylib</code><code class="variable-quote">'</code></code> + <a name="MAXFD"></a><span class="summary-name">MAXFD</span> = <code title="1024">1024</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="PIPE"></a><span class="summary-name">PIPE</span> = <code title="-1">-1</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="STDOUT"></a><span class="summary-name">STDOUT</span> = <code title="-2">-2</code> </td> </tr> <tr> diff --git a/doc/html/x2go.gevent_subprocess-pysrc.html b/doc/html/x2go.gevent_subprocess-pysrc.html new file mode 100644 index 0000000..9802c44 --- /dev/null +++ b/doc/html/x2go.gevent_subprocess-pysrc.html @@ -0,0 +1,317 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>x2go.gevent_subprocess</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="x2go-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <!-- Project homepage --> + <th class="navbar" align="right" width="100%"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr><th class="navbar" align="center" + ><a class="navbar" target="_top" href="http://www.x2go.org">Python X2go</a></th> + </tr></table></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="x2go-module.html">Package x2go</a> :: + Module gevent_subprocess + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="x2go.gevent_subprocess-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="x2go.gevent_subprocess-module.html">Module x2go.gevent_subprocess</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Copyright (C) 2010 by Mike Gabriel <m.gabriel@das-netzwerkteam.de></tt> </tt> +<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># Python X2go is free software; you can redistribute it and/or modify</tt> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"># it under the terms of the GNU General Public License as published by</tt> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># the Free Software Foundation; either version 3 of the License, or</tt> </tt> +<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># (at your option) any later version.</tt> </tt> +<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># Python X2go is distributed in the hope that it will be useful,</tt> </tt> +<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt> +<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt> +<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt> +<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU General Public License</tt> </tt> +<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the</tt> </tt> +<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># Free Software Foundation, Inc.,</tt> </tt> +<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment"># 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</tt> </tt> +<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"> </tt> +<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># found here: http://groups.google.com/group/gevent/browse_thread/thread/dba1a5d29e0a60ff</tt> </tt> +<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># Mark Visser <mjmvisser@gmail.com></tt> </tt> +<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> </tt> +<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-docstring">"""Implementation of the standard :mod:`subprocess` module that spawns greenlets"""</tt> </tt> +<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">errno</tt> </tt> +<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt> +<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">fcntl</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt> </tt> +<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> </tt> +<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-name">_subprocess</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-string">'subprocess'</tt><tt class="py-op">)</tt> </tt> +<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> </tt> +<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">gevent</tt> <tt class="py-keyword">import</tt> <tt class="py-name">socket</tt><tt class="py-op">,</tt> <tt class="py-name">select</tt><tt class="py-op">,</tt> <tt class="py-name">hub</tt> </tt> +<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> </tt> +<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment"># identical to original</tt> </tt> +<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-name">CalledProcessError</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt class="py-name">CalledProcessError</tt> </tt> +<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable x2go.gevent_subprocess.MAXFD=x2go.gevent_subprocess-module.html#MAXFD"><a title="x2go.gevent_subprocess.MAXFD" class="py-name" href="#" onclick="return doclink('link-0', 'MAXFD', 'link-0');">MAXFD</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name"><a title="x2go.gevent_subprocess.MAXFD" class="py-name" href="#" onclick="return doclink('link-1', 'MAXFD', 'link-0');">MAXFD</a></tt> </tt> +<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt id="link-2" class="py-name" targets="Variable x2go.gevent_subprocess.PIPE=x2go.gevent_subprocess-module.html#PIPE"><a title="x2go.gevent_subprocess.PIPE" class="py-name" href="#" onclick="return doclink('link-2', 'PIPE', 'link-2');">PIPE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name"><a title="x2go.gevent_subprocess.PIPE" class="py-name" href="#" onclick="return doclink('link-3', 'PIPE', 'link-2');">PIPE</a></tt> </tt> +<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable x2go.gevent_subprocess.STDOUT=x2go.gevent_subprocess-module.html#STDOUT"><a title="x2go.gevent_subprocess.STDOUT" class="py-name" href="#" onclick="return doclink('link-4', 'STDOUT', 'link-4');">STDOUT</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="x2go.gevent_subprocess.STDOUT" class="py-name" href="#" onclick="return doclink('link-5', 'STDOUT', 'link-4');">STDOUT</a></tt> </tt> +<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-name">call</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt class="py-name">call</tt> </tt> +<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-name">check_call</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt class="py-name">check_call</tt> </tt> +<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-name">list2cmdline</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt class="py-name">list2cmdline</tt> </tt> +<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> </tt> +<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> </tt> +<a name="Popen"></a><div id="Popen-def"><a name="L42"></a><tt class="py-lineno"> 42</tt> <a class="py-toggle" href="#" id="Popen-toggle" onclick="return toggle('Popen');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html">Popen</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="Popen-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Popen-expanded"><a name="Popen.__init__"></a><div id="Popen.__init__-def"><a name="L43"></a><tt class="py-lineno"> 43</tt> <a class="py-toggle" href="#" id="Popen.__init__-toggle" onclick="return toggle('Popen.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="Popen.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen.__init__-expanded"><a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> <tt class="py-comment"># delegate to an actual Popen object</tt> </tt> +<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__p</tt> <tt class="py-op">=</tt> <tt class="py-name">_subprocess</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Class x2go.gevent_subprocess.Popen=x2go.gevent_subprocess.Popen-class.html"><a title="x2go.gevent_subprocess.Popen" class="py-name" href="#" onclick="return doclink('link-6', 'Popen', 'link-6');">Popen</a></tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt> +<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-comment"># make the file handles nonblocking</tt> </tt> +<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">fcntl</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_SETFL</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NONBLOCK</tt><tt class="py-op">)</tt> </tt> +<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">fcntl</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_SETFL</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NONBLOCK</tt><tt class="py-op">)</tt> </tt> +<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">fcntl</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_SETFL</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NONBLOCK</tt><tt class="py-op">)</tt> </tt> +</div><a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt> +<a name="Popen.__getattr__"></a><div id="Popen.__getattr__-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="Popen.__getattr__-toggle" onclick="return toggle('Popen.__getattr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#__getattr__">__getattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="Popen.__getattr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen.__getattr__-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-comment"># delegate attribute lookup to the real Popen object</tt> </tt> +<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__p</tt><tt class="py-op">,</tt> <tt id="link-7" class="py-name" targets="Variable x2go.log.X2goLogger.name=x2go.log.X2goLogger-class.html#name,Variable x2go.printing.X2goPrintAction.name=x2go.printing.X2goPrintAction-class.html#name"><a title="x2go.log.X2goLogger.name +x2go.printing.X2goPrintAction.name" class="py-name" href="#" onclick="return doclink('link-7', 'name', 'link-7');">name</a></tt><tt class="py-op">)</tt> </tt> +</div><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> </tt> +<a name="Popen._write_pipe"></a><div id="Popen._write_pipe-def"><a name="L58"></a><tt class="py-lineno"> 58</tt> <a class="py-toggle" href="#" id="Popen._write_pipe-toggle" onclick="return toggle('Popen._write_pipe');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#_write_pipe">_write_pipe</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">f</tt><tt class="py-op">,</tt> <tt class="py-param">input</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="Popen._write_pipe-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen._write_pipe-expanded"><a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-comment"># writes the given input to f without blocking</tt> </tt> +<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">input</tt><tt class="py-op">:</tt> </tt> +<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">bytes_total</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">)</tt> </tt> +<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">bytes_written</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">bytes_written</tt> <tt class="py-op"><</tt> <tt class="py-name">bytes_total</tt><tt class="py-op">:</tt> </tt> +<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-comment"># f.write() doesn't return anything, so use os.write.</tt> </tt> +<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">bytes_written</tt> <tt class="py-op">+=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Method x2go.inifiles.X2goIniFile.write()=x2go.inifiles.X2goIniFile-class.html#write"><a title="x2go.inifiles.X2goIniFile.write" class="py-name" href="#" onclick="return doclink('link-8', 'write', 'link-8');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">input</tt><tt class="py-op">[</tt><tt class="py-name">bytes_written</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt> +<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ex</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EAGAIN</tt><tt class="py-op">:</tt> </tt> +<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt> +<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exc_clear</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">wait_write</tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +</div><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt> +<a name="Popen._read_pipe"></a><div id="Popen._read_pipe-def"><a name="L74"></a><tt class="py-lineno"> 74</tt> <a class="py-toggle" href="#" id="Popen._read_pipe-toggle" onclick="return toggle('Popen._read_pipe');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#_read_pipe">_read_pipe</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">f</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="Popen._read_pipe-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen._read_pipe-expanded"><a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-comment"># reads output from f without blocking</tt> </tt> +<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-comment"># returns output</tt> </tt> +<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">chunks</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt> +<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-name">chunk</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-number">4096</tt><tt class="py-op">)</tt> </tt> +<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">chunk</tt><tt class="py-op">:</tt> </tt> +<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt> +<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">chunks</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">chunk</tt><tt class="py-op">)</tt> </tt> +<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">,</tt> <tt class="py-name">ex</tt><tt class="py-op">:</tt> </tt> +<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ex</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EAGAIN</tt><tt class="py-op">:</tt> </tt> +<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt> +<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exc_clear</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">wait_read</tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">chunks</tt><tt class="py-op">)</tt> </tt> +</div><a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> </tt> +<a name="Popen.communicate"></a><div id="Popen.communicate-def"><a name="L92"></a><tt class="py-lineno"> 92</tt> <a class="py-toggle" href="#" id="Popen.communicate-toggle" onclick="return toggle('Popen.communicate');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#communicate">communicate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">input</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="Popen.communicate-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen.communicate-expanded"><a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-comment"># Optimization: If we are only using one pipe, or no pipe at</tt> </tt> +<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-comment"># all, using select() is unnecessary.</tt> </tt> +<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">count</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> <tt class="py-op">>=</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt> +<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">:</tt> </tt> +<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_write_pipe</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">,</tt> <tt class="py-name">input</tt><tt class="py-op">)</tt> </tt> +<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">:</tt> </tt> +<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_read_pipe</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt> +<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">:</tt> </tt> +<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_read_pipe</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt> +<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Method x2go.gevent_subprocess.Popen.wait()=x2go.gevent_subprocess.Popen-class.html#wait"><a title="x2go.gevent_subprocess.Popen.wait" class="py-name" href="#" onclick="return doclink('link-9', 'wait', 'link-9');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt> +<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_communicate</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">)</tt> </tt> +</div><a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> </tt> +<a name="Popen._communicate"></a><div id="Popen._communicate-def"><a name="L109"></a><tt class="py-lineno">109</tt> <a class="py-toggle" href="#" id="Popen._communicate-toggle" onclick="return toggle('Popen._communicate');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#_communicate">_communicate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">input</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="Popen._communicate-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen._communicate-expanded"><a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-comment"># identical to original... all the heavy lifting is done</tt> </tt> +<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-comment"># in gevent.select.select</tt> </tt> +<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">read_set</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-name">write_set</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> <tt class="py-comment"># Return</tt> </tt> +<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> <tt class="py-comment"># Return</tt> </tt> +<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> </tt> +<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">:</tt> </tt> +<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-comment"># Flush stdin buffer.</tt> </tt> +<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">flush</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">input</tt><tt class="py-op">:</tt> </tt> +<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-name">write_set</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">)</tt> </tt> +<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">:</tt> </tt> +<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-name">read_set</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt> +<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">:</tt> </tt> +<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-name">read_set</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt> +<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> </tt> +<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">input_offset</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">read_set</tt> <tt class="py-keyword">or</tt> <tt class="py-name">write_set</tt><tt class="py-op">:</tt> </tt> +<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-name">rlist</tt><tt class="py-op">,</tt> <tt class="py-name">wlist</tt><tt class="py-op">,</tt> <tt class="py-name">xlist</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">select</tt><tt class="py-op">(</tt><tt class="py-name">read_set</tt><tt class="py-op">,</tt> <tt class="py-name">write_set</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt> +<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EINTR</tt><tt class="py-op">:</tt> </tt> +<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt> +<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt> +<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> </tt> +<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt> <tt class="py-keyword">in</tt> <tt class="py-name">wlist</tt><tt class="py-op">:</tt> </tt> +<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-comment"># When select has indicated that the file is writable,</tt> </tt> +<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-comment"># we can write up to PIPE_BUF bytes without risk</tt> </tt> +<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-comment"># blocking. POSIX defines PIPE_BUF >= 512</tt> </tt> +<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-name">bytes_written</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="x2go.inifiles.X2goIniFile.write" class="py-name" href="#" onclick="return doclink('link-10', 'write', 'link-8');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">buffer</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">,</tt> <tt class="py-name">input_offset</tt><tt class="py-op">,</tt> <tt class="py-number">512</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-name">input_offset</tt> <tt class="py-op">+=</tt> <tt class="py-name">bytes_written</tt> </tt> +<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">input_offset</tt> <tt class="py-op">>=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">write_set</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">)</tt> </tt> +<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> </tt> +<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> <tt class="py-keyword">in</tt> <tt class="py-name">rlist</tt><tt class="py-op">:</tt> </tt> +<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt> +<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt><tt class="py-op">:</tt> </tt> +<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-name">read_set</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt> +<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> </tt> +<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">rlist</tt><tt class="py-op">:</tt> </tt> +<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">1024</tt><tt class="py-op">)</tt> </tt> +<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt> <tt class="py-op">==</tt> <tt class="py-string">""</tt><tt class="py-op">:</tt> </tt> +<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-name">read_set</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt> +<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> </tt> +<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-comment"># All data exchanged. Translate lists into strings.</tt> </tt> +<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stdout</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt> +<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stderr</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt> +<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> </tt> +<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-comment"># Translate newlines, if requested. We cannot let the file</tt> </tt> +<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-comment"># object do the translation: It is based on stdio, which is</tt> </tt> +<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-comment"># impossible to combine with select (unless forcing no</tt> </tt> +<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-comment"># buffering).</tt> </tt> +<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">universal_newlines</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">file</tt><tt class="py-op">,</tt> <tt class="py-string">'newlines'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stdout</tt><tt class="py-op">:</tt> </tt> +<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">stdout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_translate_newlines</tt><tt class="py-op">(</tt><tt class="py-name">stdout</tt><tt class="py-op">)</tt> </tt> +<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stderr</tt><tt class="py-op">:</tt> </tt> +<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_translate_newlines</tt><tt class="py-op">(</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt> +<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> </tt> +<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="x2go.gevent_subprocess.Popen.wait" class="py-name" href="#" onclick="return doclink('link-11', 'wait', 'link-9');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt> +</div><a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> </tt> +<a name="Popen.wait"></a><div id="Popen.wait-def"><a name="L183"></a><tt class="py-lineno">183</tt> <a class="py-toggle" href="#" id="Popen.wait-toggle" onclick="return toggle('Popen.wait');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.gevent_subprocess.Popen-class.html#wait">wait</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">check_interval</tt><tt class="py-op">=</tt><tt class="py-number">0.01</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="Popen.wait-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Popen.wait-expanded"><a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-comment"># non-blocking, use hub.sleep</tt> </tt> +<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt> +<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">status</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">status</tt> <tt class="py-op">>=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">status</tt> </tt> +<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-name">hub</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-name">check_interval</tt><tt class="py-op">)</tt> </tt> +<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OSError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt> +<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">errno</tt> <tt class="py-op">==</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">ECHILD</tt><tt class="py-op">:</tt> </tt> +<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-comment"># no child process, this happens if the child process</tt> </tt> +<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-comment"># already died and has been cleaned up</tt> </tt> +<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt> +<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt> +</div></div><a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="x2go-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <!-- Project homepage --> + <th class="navbar" align="right" width="100%"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr><th class="navbar" align="center" + ><a class="navbar" target="_top" href="http://www.x2go.org">Python X2go</a></th> + </tr></table></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Fri Nov 19 21:34:02 2010 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/doc/html/x2go.rforward.X2goRevFwChannelThread-class.html b/doc/html/x2go.gevent_subprocess.Popen-class.html similarity index 67% copy from doc/html/x2go.rforward.X2goRevFwChannelThread-class.html copy to doc/html/x2go.gevent_subprocess.Popen-class.html index 7275480..2f0204d 100644 --- a/doc/html/x2go.rforward.X2goRevFwChannelThread-class.html +++ b/doc/html/x2go.gevent_subprocess.Popen-class.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.rforward.X2goRevFwChannelThread</title> + <title>x2go.gevent_subprocess.Popen</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,8 +43,8 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - <a href="x2go.rforward-module.html">Module rforward</a> :: - Class X2goRevFwChannelThread + <a href="x2go.gevent_subprocess-module.html">Module gevent_subprocess</a> :: + Class Popen </span> </td> <td> @@ -52,34 +52,21 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.rforward.X2goRevFwChannelThread-class.html" + >] | <a href="x2go.gevent_subprocess.Popen-class.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> -<h1 class="epydoc">Class X2goRevFwChannelThread</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.rforward-pysrc.html#X2goRevFwChannelThread">source code</a></span></p> +<h1 class="epydoc">Class Popen</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen">source code</a></span></p> <pre class="base-tree"> - object --+ - | -threading._Verbose --+ - | - threading.Thread --+ - | - <strong class="uidshort">X2goRevFwChannelThread</strong> +object --+ + | + <strong class="uidshort">Popen</strong> </pre> -<dl><dt>Known Subclasses:</dt> -<dd> - <ul class="subclass-list"> -<li><a href="x2go.sftpserver.X2goRevFwSFTPChannelThread-class.html">sftpserver.X2goRevFwSFTPChannelThread</a></li> </ul> -</dd></dl> - <hr /> -<p>Starts a thread for each incoming Paramiko/SSH data channel trough the - reverse forwarding tunnel.</p> - <!-- ==================== INSTANCE METHODS ==================== --> <a name="section-InstanceMethods"></a> <table class="summary" border="1" cellpadding="3" @@ -94,13 +81,63 @@ threading._Verbose --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.rforward.X2goRevFwChannelThread-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, - <span class="summary-sig-arg">channel</span>, - <span class="summary-sig-arg">remote</span>=<span class="summary-sig-default">None</span>, + <td><span class="summary-sig"><a href="x2go.gevent_subprocess.Popen-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">*args</span>, <span class="summary-sig-arg">**kwargs</span>)</span><br /> x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.rforward-pysrc.html#X2goRevFwChannelThread.__init__">source code</a></span> + <span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="__getattr__"></a><span class="summary-sig-name">__getattr__</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">name</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.__getattr__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="communicate"></a><span class="summary-sig-name">communicate</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">input</span>=<span class="summary-sig-default">None</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.communicate">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="wait"></a><span class="summary-sig-name">wait</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">check_interval</span>=<span class="summary-sig-default">0.01</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.wait">source code</a></span> </td> </tr> @@ -110,18 +147,6 @@ threading._Verbose --+ </tr> <tr> <td colspan="2" class="summary"> - <p class="indent-wrapped-lines"><b>Inherited from <code>threading.Thread</code></b>: - <code>__repr__</code>, - <code>getName</code>, - <code>isAlive</code>, - <code>isDaemon</code>, - <code>is_alive</code>, - <code>join</code>, - <code>run</code>, - <code>setDaemon</code>, - <code>setName</code>, - <code>start</code> - </p> <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: <code>__delattr__</code>, <code>__format__</code>, @@ -130,6 +155,7 @@ threading._Verbose --+ <code>__new__</code>, <code>__reduce__</code>, <code>__reduce_ex__</code>, + <code>__repr__</code>, <code>__setattr__</code>, <code>__sizeof__</code>, <code>__str__</code>, @@ -148,11 +174,6 @@ threading._Verbose --+ </tr> <tr> <td colspan="2" class="summary"> - <p class="indent-wrapped-lines"><b>Inherited from <code>threading.Thread</code></b>: - <code>daemon</code>, - <code>ident</code>, - <code>name</code> - </p> <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: <code>__class__</code> </p> @@ -176,29 +197,21 @@ threading._Verbose --+ <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, - <span class="sig-arg">channel</span>, - <span class="sig-arg">remote</span>=<span class="sig-default">None</span>, + <span class="sig-arg">*args</span>, <span class="sig-arg">**kwargs</span>)</span> <br /><em class="fname">(Constructor)</em> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.rforward-pysrc.html#X2goRevFwChannelThread.__init__">source code</a></span> + ><span class="codelink"><a href="x2go.gevent_subprocess-pysrc.html#Popen.__init__">source code</a></span> </td> </tr></table> <p>x.__init__(...) initializes x; see x.__class__.__doc__ for signature</p> <dl class="fields"> - <dt>Parameters:</dt> - <dd><ul class="nomargin-top"> - <li><strong class="pname"><code>channel</code></strong> (class) - incoming Paramiko/SSH channel from the <a - href="x2go.session.X2goSession-class.html" - class="link">X2goSession</a>'s transport accept queue</li> - <li><strong class="pname"><code>remote</code></strong> ((str, int)) - tuple (addr, port) that specifies the data endpoint of the - channel</li> - </ul></dd> <dt>Overrides: object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> </dt> </dl> </td></tr></table> @@ -235,7 +248,7 @@ threading._Verbose --+ <table border="0" cellpadding="0" cellspacing="0" width="100%%"> <tr> <td align="left" class="footer"> - Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:56 2010 + Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:55 2010 </td> <td align="right" class="footer"> <a target="mainFrame" href="http://epydoc.sourceforge.net" diff --git a/doc/html/x2go.printing-module.html b/doc/html/x2go.mimetypes-module.html similarity index 66% copy from doc/html/x2go.printing-module.html copy to doc/html/x2go.mimetypes-module.html index 81c6a00..c1f4941 100644 --- a/doc/html/x2go.printing-module.html +++ b/doc/html/x2go.mimetypes-module.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.printing</title> + <title>x2go.mimetypes</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,7 +43,7 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - Module printing + Module mimetypes </span> </td> <td> @@ -51,34 +51,15 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.printing-module.html" + >] | <a href="x2go.mimetypes-module.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== MODULE DESCRIPTION ==================== --> -<h1 class="epydoc">Module printing</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html">source code</a></span></p> -<p>X2go printing sets up a thread that listens for incoming print jobs - (<a href="x2go.printing.X2goPrintQueue-class.html" - class="link">X2goPrintQueue</a>).</p> - <p>For each incoming print job in an X2go session's spool directory an - individual thread is started (<a - href="x2go.printing.X2goPrintJob-class.html" - class="link">X2goPrintJob</a>) that handles the processing of the - incoming print job.</p> - <p>Print jobs can either be sent to any of the local print queues (CUPS, - Win32API), be opened in an external PDF viewer, be saved to a local - folder or be handed over to a custom (print) command. This is defined by - four print action classes (X2goPrintActionPDFVIEW, - X2goPrintActionPDFSAVE, X2goPrintActionPRINT and - X2goPrintActionPRINTCMD).</p> - <p>Especially the <a href="x2go.printing.X2goClientPrinting-class.html" - class="link">X2goClientPrinting</a> class in this file is one of Python - X2go's public API classes. Retrieve an instance of this class from your - <a href="x2go.client.X2goClient-class.html" class="link">X2goClient</a> - instance. Use this class in your Python X2go based applications to access - the »printing« configuration file of your X2go client application.</p> +<h1 class="epydoc">Module mimetypes</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.mimetypes-pysrc.html">source code</a></span></p> +<p>STILL UNDOCUMENTED</p> <!-- ==================== CLASSES ==================== --> <a name="section-Classes"></a> @@ -92,70 +73,22 @@ <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a href="x2go.printing.X2goClientPrinting-class.html" class="summary-name">X2goClientPrinting</a><br /> - <a href="x2go.printing.X2goClientPrinting-class.html" - class="link">X2goClientPrinting</a> provides access to the X2go - ini-like file »printing« as stored in - <code>~/.x2goclient/printing</code> resp. + <a href="x2go.mimetypes.X2goMIMETypeAction-class.html" class="summary-name">X2goMIMETypeAction</a> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a href="x2go.printing.X2goPrintAction-class.html" class="summary-name">X2goPrintAction</a> + <a href="x2go.mimetypes.X2goMIMETypeQueue-class.html" class="summary-name">X2goMIMETypeQueue</a><br /> + STILL UNDOCUMENTED </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a href="x2go.printing.X2goPrintActionPDFVIEW-class.html" class="summary-name">X2goPrintActionPDFVIEW</a><br /> - Print action that views incoming print job in an external PDF - viewer application. - </td> - </tr> -<tr> - <td width="15%" align="right" valign="top" class="summary"> - <span class="summary-type"> </span> - </td><td class="summary"> - <a href="x2go.printing.X2goPrintActionPDFSAVE-class.html" class="summary-name">X2goPrintActionPDFSAVE</a><br /> - Print action that saves incoming print jobs to a local folder. - </td> - </tr> -<tr> - <td width="15%" align="right" valign="top" class="summary"> - <span class="summary-type"> </span> - </td><td class="summary"> - <a href="x2go.printing.X2goPrintActionPRINT-class.html" class="summary-name">X2goPrintActionPRINT</a><br /> - Print action that actually prints an incoming print job file. - </td> - </tr> -<tr> - <td width="15%" align="right" valign="top" class="summary"> - <span class="summary-type"> </span> - </td><td class="summary"> - <a href="x2go.printing.X2goPrintActionPRINTCMD-class.html" class="summary-name">X2goPrintActionPRINTCMD</a><br /> - Print action that calls an external command for further processing - of incoming print jobs. - </td> - </tr> -<tr> - <td width="15%" align="right" valign="top" class="summary"> - <span class="summary-type"> </span> - </td><td class="summary"> - <a href="x2go.printing.X2goPrintQueue-class.html" class="summary-name">X2goPrintQueue</a><br /> - If X2go printing is supported in a particaluar <a - href="x2go.session.X2goSession-class.html" - class="link">X2goSession</a> instance this class provides a - sub-thread for handling incoming X2go print jobs. - </td> - </tr> -<tr> - <td width="15%" align="right" valign="top" class="summary"> - <span class="summary-type"> </span> - </td><td class="summary"> - <a href="x2go.printing.X2goPrintJob-class.html" class="summary-name">X2goPrintJob</a><br /> + <a href="x2go.mimetypes.X2goPrintJob-class.html" class="summary-name">X2goPrintJob</a><br /> For each X2go print job we create a sub-thread that let's the print job be processed in the background. </td> @@ -175,7 +108,7 @@ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing-module.html#x2go_printjob_handler" class="summary-sig-name">x2go_printjob_handler</a>(<span class="summary-sig-arg">job_file</span>=<span class="summary-sig-default">None</span>, + <td><span class="summary-sig"><a href="x2go.mimetypes-module.html#x2go_printjob_handler" class="summary-sig-name">x2go_printjob_handler</a>(<span class="summary-sig-arg">job_file</span>=<span class="summary-sig-default">None</span>, <span class="summary-sig-arg">pdf_file</span>=<span class="summary-sig-default">None</span>, <span class="summary-sig-arg">job_title</span>=<span class="summary-sig-default">None</span>, <span class="summary-sig-arg">print_action</span>=<span class="summary-sig-default">None</span>, @@ -183,10 +116,10 @@ <span class="summary-sig-arg">logger</span>=<span class="summary-sig-default">None</span>)</span><br /> This function is called as a handler function for each incoming X2go print job represented by the class <a - href="x2go.printing.X2goPrintJob-class.html" + href="x2go.mimetypes.X2goPrintJob-class.html" class="link">X2goPrintJob</a>.</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#x2go_printjob_handler">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#x2go_printjob_handler">source code</a></span> </td> </tr> @@ -207,7 +140,7 @@ <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2goprint-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2goprint-pylib</code><code class="variable-quote">'</code></code> + <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2gomimetypes-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2gomimetypes-pylib</code><code class="variable-quote">'</code></code> </td> </tr> <tr> @@ -242,13 +175,13 @@ <span class="sig-arg">logger</span>=<span class="sig-default">None</span>)</span> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#x2go_printjob_handler">source code</a></span> + ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#x2go_printjob_handler">source code</a></span> </td> </tr></table> <p>This function is called as a handler function for each incoming X2go print job represented by the class <a - href="x2go.printing.X2goPrintJob-class.html" + href="x2go.mimetypes.X2goPrintJob-class.html" class="link">X2goPrintJob</a>.</p> <p>The handler function will (re-)read the »printing« configuration file (if no explicit <code>print_action</code> is passed to this function...). @@ -263,7 +196,7 @@ <code>X2goPrintActionXXX</code> classes</li> <li><strong class="pname"><code>parent_thread</code></strong> (<code>instance</code>) - the <a href="x2go.printing.X2goPrintQueue-class.html" class="link">X2goPrintQueue</a> thread that actually created this - handler's <a href="x2go.printing.X2goPrintJob-class.html" + handler's <a href="x2go.mimetypes.X2goPrintJob-class.html" class="link">X2goPrintJob</a> instance</li> <li><strong class="pname"><code>logger</code></strong> (<code>instance</code>) - the <a href="x2go.printing.X2goPrintQueue-class.html" class="link">X2goPrintQueue</a>'s logging instance</li> diff --git a/doc/html/x2go.mimetypes-pysrc.html b/doc/html/x2go.mimetypes-pysrc.html new file mode 100644 index 0000000..d24c283 --- /dev/null +++ b/doc/html/x2go.mimetypes-pysrc.html @@ -0,0 +1,562 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>x2go.mimetypes</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="x2go-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <!-- Project homepage --> + <th class="navbar" align="right" width="100%"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr><th class="navbar" align="center" + ><a class="navbar" target="_top" href="http://www.x2go.org">Python X2go</a></th> + </tr></table></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="x2go-module.html">Package x2go</a> :: + Module mimetypes + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="x2go.mimetypes-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="x2go.mimetypes-module.html">Module x2go.mimetypes</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"> </tt> +<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"># Copyright (C) 2010 by Mike Gabriel <m.gabriel@das-netzwerkteam.de></tt> </tt> +<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"># Python X2go is free software; you can redistribute it and/or modify</tt> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># it under the terms of the GNU General Public License as published by</tt> </tt> +<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># the Free Software Foundation; either version 3 of the License, or</tt> </tt> +<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># (at your option) any later version.</tt> </tt> +<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># Python X2go is distributed in the hope that it will be useful,</tt> </tt> +<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt> +<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt> +<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt> +<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU General Public License</tt> </tt> +<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the</tt> </tt> +<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment"># Free Software Foundation, Inc.,</tt> </tt> +<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</tt> </tt> +<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> </tt> +<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">"""\</tt> </tt> +<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-docstring">STILL UNDOCUMENTED</tt> </tt> +<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt> +<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable x2go.__NAME__=x2go-module.html#__NAME__,Variable x2go.client.__NAME__=x2go.client-module.html#__NAME__,Variable x2go.defaults.__NAME__=x2go.defaults-module.html#__NAME__,Variable x2go.forward.__NAME__=x2go.forward-module.html#__NAME__,Variable x2go.guardian.__NAME__=x2go.guardian-module.html#__NAME__,Variable x2go.inifiles.__NAME__=x2go.inifiles-module.html#__NAME__,Variable x2go.log.__NAME__=x2go.log-module.html#__NAME__,Variable x2go.mimetypes.__NAME__=x2go.mimetypes-module.html#__NAME__,Variable x2go.printing.__NAME__=x2go.printing-module.html#__NAME__,Variable x2go.profiles.__NAME__=x2go.profiles-module.html#__NAME__,Variable x2go.proxy.__NAME__=x2go.proxy-module.html#__NAME__,Variable x2go.registry.__NAME__=x2go.registry-module.html#__NAME__,Variable x2go.rforward.__NAME__=x2go.rforward-module.html#__NAME__,Variable x2go.session.__NAME__=x2go.session-m odule.ht ml#__NAME__,Variable x2go.settings.__NAME__=x2go.settings-module.html#__NAME__,Variable x2go.sftpserver.__NAME__=x2go.sftpserver-module.html#__NAME__,Variable x2go.utils.__NAME__=x2go.utils-module.html#__NAME__,Variable x2go.x2go_exceptions.__NAME__=x2go.x2go_exceptions-module.html#__NAME__,Variable x2go.xserver.__NAME__=x2go.xserver-module.html#__NAME__"><a title="x2go.__NAME__ +x2go.client.__NAME__ +x2go.defaults.__NAME__ +x2go.forward.__NAME__ +x2go.guardian.__NAME__ +x2go.inifiles.__NAME__ +x2go.log.__NAME__ +x2go.mimetypes.__NAME__ +x2go.printing.__NAME__ +x2go.profiles.__NAME__ +x2go.proxy.__NAME__ +x2go.registry.__NAME__ +x2go.rforward.__NAME__ +x2go.session.__NAME__ +x2go.settings.__NAME__ +x2go.sftpserver.__NAME__ +x2go.utils.__NAME__ +x2go.x2go_exceptions.__NAME__ +x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-0', '__NAME__', 'link-0');">__NAME__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'x2gomimetypes-pylib'</tt> </tt> +<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> </tt> +<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># modules</tt> </tt> +<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">,</tt> <tt class="py-name">shutil</tt><tt class="py-op">,</tt> <tt class="py-name">copy</tt> </tt> +<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">subprocess</tt> </tt> +<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">types</tt> </tt> +<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">threading</tt> </tt> +<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">gevent</tt> </tt> +<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Module x2go.inifiles=x2go.inifiles-module.html"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-1', 'inifiles', 'link-1');">inifiles</a></tt> </tt> +<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">cStringIO</tt> </tt> +<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">ConfigParser</tt> </tt> +<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"> </tt> +<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">platform</tt> <tt class="py-op">==</tt> <tt class="py-string">'win32'</tt><tt class="py-op">:</tt> </tt> +<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">win32api</tt> </tt> +<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> </tt> +<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> </tt> +<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-comment"># Python X2go modules</tt> </tt> +<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Module x2go.log=x2go.log-module.html"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-2', 'log', 'link-2');">log</a></tt> </tt> +<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Module x2go.defaults=x2go.defaults-module.html"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-3', 'defaults', 'link-3');">defaults</a></tt> </tt> +<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-comment"># we hide the default values from epydoc (that's why we transform them to _UNDERSCORE variables)</tt> </tt> +<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-4', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Variable x2go.defaults.LOCAL_HOME=x2go.defaults-module.html#LOCAL_HOME"><a title="x2go.defaults.LOCAL_HOME" class="py-name" href="#" onclick="return doclink('link-5', 'LOCAL_HOME', 'link-5');">LOCAL_HOME</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">_LOCAL_HOME</tt> </tt> +<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-6', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Variable x2go.defaults.X2GO_CLIENT_ROOTDIR=x2go.defaults-module.html#X2GO_CLIENT_ROOTDIR"><a title="x2go.defaults.X2GO_CLIENT_ROOTDIR" class="py-name" href="#" onclick="return doclink('link-7', 'X2GO_CLIENT_ROOTDIR', 'link-7');">X2GO_CLIENT_ROOTDIR</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">_X2GO_CLIENT_ROOTDIR</tt> </tt> +<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-8', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-9" class="py-name" targets="Variable x2go.defaults.X2GO_CLIENTPRINTING_DEFAULTS=x2go.defaults-module.html#X2GO_CLIENTPRINTING_DEFAULTS"><a title="x2go.defaults.X2GO_CLIENTPRINTING_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-9', 'X2GO_CLIENTPRINTING_DEFAULTS', 'link-9');">X2GO_CLIENTPRINTING_DEFAULTS</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">_X2GO_CLIENTPRINTING_DEFAULTS</tt> </tt> +<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-10" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-10', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Variable x2go.defaults.X2GO_PRINTING_CONFIGFILES=x2go.defaults-module.html#X2GO_PRINTING_CONFIGFILES"><a title="x2go.defaults.X2GO_PRINTING_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-11', 'X2GO_PRINTING_CONFIGFILES', 'link-11');">X2GO_PRINTING_CONFIGFILES</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">_X2GO_PRINTING_CONFIGFILES</tt> </tt> +<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-12" class="py-name" targets="Module x2go.utils=x2go.utils-module.html"><a title="x2go.utils" class="py-name" href="#" onclick="return doclink('link-12', 'utils', 'link-12');">utils</a></tt> </tt> +<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-13" class="py-name"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-13', 'inifiles', 'link-1');">inifiles</a></tt> </tt> +<a name="X2goMIMETypeAction"></a><div id="X2goMIMETypeAction-def"><a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt> +<a name="L52"></a><tt class="py-lineno"> 52</tt> <a class="py-toggle" href="#" id="X2goMIMETypeAction-toggle" onclick="return toggle('X2goMIMETypeAction');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeAction-class.html">X2goMIMETypeAction</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeAction-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="X2goMIMETypeAction-expanded"><a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt> +<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt id="link-14" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeAction.__name__=x2go.mimetypes.X2goMIMETypeAction-class.html#__name__,Variable x2go.printing.X2goPrintAction.__name__=x2go.printing.X2goPrintAction-class.html#__name__,Variable x2go.printing.X2goPrintActionPDFSAVE.__name__=x2go.printing.X2goPrintActionPDFSAVE-class.html#__name__,Variable x2go.printing.X2goPrintActionPDFVIEW.__name__=x2go.printing.X2goPrintActionPDFVIEW-class.html#__name__,Variable x2go.printing.X2goPrintActionPRINT.__name__=x2go.printing.X2goPrintActionPRINT-class.html#__name__,Variable x2go.printing.X2goPrintActionPRINTCMD.__name__=x2go.printing.X2goPrintActionPRINTCMD-class.html#__name__"><a title="x2go.mimetypes.X2goMIMETypeAction.__name__ +x2go.printing.X2goPrintAction.__name__ +x2go.printing.X2goPrintActionPDFSAVE.__name__ +x2go.printing.X2goPrintActionPDFVIEW.__name__ +x2go.printing.X2goPrintActionPRINT.__name__ +x2go.printing.X2goPrintActionPRINTCMD.__name__" class="py-name" href="#" onclick="return doclink('link-14', '__name__', 'link-14');">__name__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'MIME'</tt> </tt> +<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt id="link-15" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeAction.__description__=x2go.mimetypes.X2goMIMETypeAction-class.html#__description__,Variable x2go.printing.X2goPrintAction.__description__=x2go.printing.X2goPrintAction-class.html#__description__"><a title="x2go.mimetypes.X2goMIMETypeAction.__description__ +x2go.printing.X2goPrintAction.__description__" class="py-name" href="#" onclick="return doclink('link-15', '__description__', 'link-15');">__description__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'Execute a command depending on an incoming file\'s MIME type'</tt> </tt> +<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeAction.__init__"></a><div id="X2goMIMETypeAction.__init__-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <a class="py-toggle" href="#" id="X2goMIMETypeAction.__init__-toggle" onclick="return toggle('X2goMIMETypeAction.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeAction-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">loglevel</tt><tt class="py-op">=</tt><tt id="link-16" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-16', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Variable x2go.log.loglevel_DEFAULT=x2go.log-module.html#loglevel_DEFAULT"><a title="x2go.log.loglevel_DEFAULT" class ="py-nam e" href="#" onclick="return doclink('link-17', 'loglevel_DEFAULT', 'link-17');">loglevel_DEFAULT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeAction.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeAction.__init__-expanded"><a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> STILL UNDOCUMENTED</tt> </tt> +<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"> @param logger: you can pass an L{X2goLogger} object to the</tt> </tt> +<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> L{X2goMIMETypeAction} constructor</tt> </tt> +<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> @type logger: C{instance}</tt> </tt> +<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"> @param loglevel: if no L{X2goLogger} object has been supplied a new one will be</tt> </tt> +<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> constructed with the given loglevel</tt> </tt> +<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> @type loglevel: C{int}</tt> </tt> +<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">logger</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt> <tt class="py-op">=</tt> <tt id="link-18" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-18', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Class x2go.log.X2goLogger=x2go.log.X2goLogger-class.html"><a title="x2go.log.X2goLogger" class="py-name" href="#" onclick="return doclink('link-19', 'X2goLogger', 'link-19');">X2goLogger</a></tt><tt class="py-op">(</tt><tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt class="py-name">loglevel</tt><tt class="py-op">)</tt> </tt> +<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">logger</tt><tt class="py-op">)</tt> </tt> +<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Variable x2go.log.X2goLogger.tag=x2go.log.X2goLogger-class.html#tag"><a title="x2go.log.X2goLogger.tag" class="py-name" href="#" onclick="return doclink('link-20', 'tag', 'link-20');">tag</a></tt> <tt class="py-op">=</tt> <tt id="link-21" class="py-name"><a title="x2go.__NAME__ +x2go.client.__NAME__ +x2go.defaults.__NAME__ +x2go.forward.__NAME__ +x2go.guardian.__NAME__ +x2go.inifiles.__NAME__ +x2go.log.__NAME__ +x2go.mimetypes.__NAME__ +x2go.printing.__NAME__ +x2go.profiles.__NAME__ +x2go.proxy.__NAME__ +x2go.registry.__NAME__ +x2go.rforward.__NAME__ +x2go.session.__NAME__ +x2go.settings.__NAME__ +x2go.sftpserver.__NAME__ +x2go.utils.__NAME__ +x2go.x2go_exceptions.__NAME__ +x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-21', '__NAME__', 'link-0');">__NAME__</a></tt> </tt> +</div><a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeAction.do_execute"></a><div id="X2goMIMETypeAction.do_execute-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="X2goMIMETypeAction.do_execute-toggle" onclick="return toggle('X2goMIMETypeAction.do_execute');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeAction-class.html#do_execute">do_execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">mime_file</tt><tt class="py-op">,</tt> <tt class="py-param">mime_type_dir</tt><tt class="py-op">,</tt> <tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeAction.do_execute-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeAction.do_execute-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt class="py-docstring"> Perform the defined print action (doing nothing in L{X2goPrintAction} parent class).</tt> </tt> +<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-docstring"> @param mime_file: name of the incoming file</tt> </tt> +<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"> @type mime_file: C{str}</tt> </tt> +<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"> @param mime_type_dir: location of the X2go client's spool directory for incoming MIME files</tt> </tt> +<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> @type mime_type_dir: C{str}</tt> </tt> +<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">platform</tt> <tt class="py-op">==</tt> <tt class="py-string">"win32"</tt><tt class="py-op">:</tt> </tt> +<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'processing an incoming MIME file with Python\'s os.startfile(): %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">mime_file</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-22" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-22', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Variable x2go.log.loglevel_DEBUG=x2go.log-module.html#loglevel_DEBUG"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-23', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">startfile</tt><tt class="py-op">(</tt><tt class="py-name">mime_file</tt><tt class="py-op">)</tt> </tt> +<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-name">cmd_line</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-string">'xdg-open'</tt><tt class="py-op">,</tt> <tt class="py-name">mime_file</tt><tt class="py-op">,</tt> <tt class="py-op">]</tt> </tt> +<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'processing an incoming MIME file with command: %s'</tt> <tt class="py-op">%</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">cmd_line</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-24" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-24', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-25', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Class x2go.gevent_subprocess.Popen=x2go.gevent_subprocess.Popen-class.html"><a title="x2go.gevent_subprocess.Popen" class="py-name" href="#" onclick="return doclink('link-26', 'Popen', 'link-26');">Popen</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_line</tt><tt class="py-op">,</tt> <tt class="py-name">stdout</tt><tt class="py-op">=</tt><tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Variable x2go.gevent_subprocess.PIPE=x2go.gevent_subprocess-module.html#PIPE"><a title="x2go.gevent_subprocess.PIPE" class="py-name" href="#" onclick="return doclink('link-27', 'PIPE', 'link-27');">PIPE</a></tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">=</tt><tt class="py -name">s ubprocess</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Variable x2go.gevent_subprocess.STDOUT=x2go.gevent_subprocess-module.html#STDOUT"><a title="x2go.gevent_subprocess.STDOUT" class="py-name" href="#" onclick="return doclink('link-28', 'STDOUT', 'link-28');">STDOUT</a></tt><tt class="py-op">,</tt> <tt class="py-name">env</tt><tt class="py-op">=</tt><tt id="link-29" class="py-name" targets="Variable x2go.printing._PRINT_ENV=x2go.printing-module.html#_PRINT_ENV"><a title="x2go.printing._PRINT_ENV" class="py-name" href="#" onclick="return doclink('link-29', '_PRINT_ENV', 'link-29');">_PRINT_ENV</a></tt><tt class="py-op">)</tt> </tt> +<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-comment"># this is nasty!!!!</tt> </tt> +<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'giving PDF viewer 20s to get the PDF file %s loaded'</tt> <tt class="py-op">%</tt> <tt class="py-name">_hr_filename</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-30" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-30', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-31', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">gevent</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-number">20</tt><tt class="py-op">)</tt> </tt> +<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">mime_file</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeQueue"></a><div id="X2goMIMETypeQueue-def"><a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> </tt> +<a name="L98"></a><tt class="py-lineno"> 98</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue-toggle" onclick="return toggle('X2goMIMETypeQueue');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html">X2goMIMETypeQueue</a><tt class="py-op">(</tt><tt class="py-base-class">threading</tt><tt class="py-op">.</tt><tt class="py-base-class">Thread</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="X2goMIMETypeQueue-expanded"><a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt class="py-docstring"> STILL UNDOCUMENTED</tt> </tt> +<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt id="link-32" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeQueue.print_action=x2go.mimetypes.X2goMIMETypeQueue-class.html#print_action,Variable x2go.printing.X2goClientPrinting.print_action=x2go.printing.X2goClientPrinting-class.html#print_action,Variable x2go.printing.X2goPrintQueue.print_action=x2go.printing.X2goPrintQueue-class.html#print_action"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-32', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> </tt> +<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt id="link-33" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeQueue.spooldir=x2go.mimetypes.X2goMIMETypeQueue-class.html#spooldir,Variable x2go.printing.X2goPrintQueue.spooldir=x2go.printing.X2goPrintQueue-class.html#spooldir"><a title="x2go.mimetypes.X2goMIMETypeQueue.spooldir +x2go.printing.X2goPrintQueue.spooldir" class="py-name" href="#" onclick="return doclink('link-33', 'spooldir', 'link-33');">spooldir</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt id="link-34" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeQueue.active_jobs=x2go.mimetypes.X2goMIMETypeQueue-class.html#active_jobs,Variable x2go.printing.X2goPrintQueue.active_jobs=x2go.printing.X2goPrintQueue-class.html#active_jobs"><a title="x2go.mimetypes.X2goMIMETypeQueue.active_jobs +x2go.printing.X2goPrintQueue.active_jobs" class="py-name" href="#" onclick="return doclink('link-34', 'active_jobs', 'link-34');">active_jobs</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt> +<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt id="link-35" class="py-name" targets="Variable x2go.mimetypes.X2goMIMETypeQueue.job_history=x2go.mimetypes.X2goMIMETypeQueue-class.html#job_history,Variable x2go.printing.X2goPrintQueue.job_history=x2go.printing.X2goPrintQueue-class.html#job_history"><a title="x2go.mimetypes.X2goMIMETypeQueue.job_history +x2go.printing.X2goPrintQueue.job_history" class="py-name" href="#" onclick="return doclink('link-35', 'job_history', 'link-35');">job_history</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeQueue.__init__"></a><div id="X2goMIMETypeQueue.__init__-def"><a name="L109"></a><tt class="py-lineno">109</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.__init__-toggle" onclick="return toggle('X2goMIMETypeQueue.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">loglevel</tt><tt class="py-op">=</tt><tt id="link-36" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-36', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="x2go.log.loglevel_DEFAULT" class="py-name" href="#" onclick="return doclink('link-37', 'loglevel_DEFAULT', 'link-17');"
logleve l_DEFAULT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.__init__-expanded"><a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"><tt class="py-docstring"> STILL UNDOCUMENTED</tt> </tt> +<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"><tt class="py-docstring"> @param logger: you can pass an L{X2goLogger} object to the</tt> </tt> +<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"><tt class="py-docstring"> L{X2goProxy} constructor</tt> </tt> +<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"><tt class="py-docstring"> @type logger: C{instance}</tt> </tt> +<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"><tt class="py-docstring"> @param loglevel: if no L{X2goLogger} object has been supplied a new one will be</tt> </tt> +<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"><tt class="py-docstring"> constructed with the given loglevel</tt> </tt> +<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"><tt class="py-docstring"> @type loglevel: C{int}</tt> </tt> +<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">logger</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt> <tt class="py-op">=</tt> <tt id="link-38" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-38', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="x2go.log.X2goLogger" class="py-name" href="#" onclick="return doclink('link-39', 'X2goLogger', 'link-19');">X2goLogger</a></tt><tt class="py-op">(</tt><tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt class="py-name">loglevel</tt><tt class="py-op">)</tt> </tt> +<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">logger</tt><tt class="py-op">)</tt> </tt> +<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="x2go.log.X2goLogger.tag" class="py-name" href="#" onclick="return doclink('link-40', 'tag', 'link-20');">tag</a></tt> <tt class="py-op">=</tt> <tt id="link-41" class="py-name"><a title="x2go.__NAME__ +x2go.client.__NAME__ +x2go.defaults.__NAME__ +x2go.forward.__NAME__ +x2go.guardian.__NAME__ +x2go.inifiles.__NAME__ +x2go.log.__NAME__ +x2go.mimetypes.__NAME__ +x2go.printing.__NAME__ +x2go.profiles.__NAME__ +x2go.proxy.__NAME__ +x2go.registry.__NAME__ +x2go.rforward.__NAME__ +x2go.session.__NAME__ +x2go.settings.__NAME__ +x2go.sftpserver.__NAME__ +x2go.utils.__NAME__ +x2go.x2go_exceptions.__NAME__ +x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-41', '__NAME__', 'link-0');">__NAME__</a></tt> </tt> +<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> </tt> +<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Thread</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method x2go.client.X2goClient.__init__()=x2go.client.X2goClient-class.html#__init__,Method x2go.forward.X2goFwServer.__init__()=x2go.forward.X2goFwServer-class.html#__init__,Method x2go.gevent_subprocess.Popen.__init__()=x2go.gevent_subprocess.Popen-class.html#__init__,Method x2go.guardian.X2goSessionGuardian.__init__()=x2go.guardian.X2goSessionGuardian-class.html#__init__,Method x2go.inifiles.X2goIniFile.__init__()=x2go.inifiles.X2goIniFile-class.html#__init__,Method x2go.log.X2goLogger.__init__()=x2go.log.X2goLogger-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeAction.__init__()=x2go.mimetypes.X2goMIMETypeAction-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeQueue.__init__()=x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__,M ethod x2 go.mimetypes.X2goPrintJob.__init__()=x2go.mimetypes.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goClientPrinting.__init__()=x2go.printing.X2goClientPrinting-class.html#__init__,Method x2go.printing.X2goPrintAction.__init__()=x2go.printing.X2goPrintAction-class.html#__init__,Method x2go.printing.X2goPrintActionPDFSAVE.__init__()=x2go.printing.X2goPrintActionPDFSAVE-class.html#__init__,Method x2go.printing.X2goPrintActionPDFVIEW.__init__()=x2go.printing.X2goPrintActionPDFVIEW-class.html#__init__,Method x2go.printing.X2goPrintActionPRINT.__init__()=x2go.printing.X2goPrintActionPRINT-class.html#__init__,Method x2go.printing.X2goPrintActionPRINTCMD.__init__()=x2go.printing.X2goPrintActionPRINTCMD-class.html#__init__,Method x2go.printing.X2goPrintJob.__init__()=x2go.printing.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goPrintQueue.__init__()=x2go.printing.X2goPrintQueue-class.html#__init__,Method x2go.profiles.X2goSessionProfiles.__init__()=x2go.profiles.X2 goSessio nProfiles-class.html#__init__,Method x2go.proxy.X2goNX3Proxy.__init__()=x2go.proxy.X2goNX3Proxy-class.html#__init__,Method x2go.proxy.X2goProxy.__init__()=x2go.proxy.X2goProxy-class.html#__init__,Method x2go.registry.X2goRegisteredSession.__init__()=x2go.registry.X2goRegisteredSession-class.html#__init__,Method x2go.registry.X2goSessionRegistry.__init__()=x2go.registry.X2goSessionRegistry-class.html#__init__,Method x2go.rforward.X2goRevFwChannelThread.__init__()=x2go.rforward.X2goRevFwChannelThread-class.html#__init__,Method x2go.rforward.X2goRevFwTunnel.__init__()=x2go.rforward.X2goRevFwTunnel-class.html#__init__,Method x2go.session.X2goServerSessionList.__init__()=x2go.session.X2goServerSessionList-class.html#__init__,Method x2go.session.X2goSession.__init__()=x2go.session.X2goSession-class.html#__init__,Method x2go.settings.X2goClientSettings.__init__()=x2go.settings.X2goClientSettings-class.html#__init__,Method x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__()=x2go.sftpse rver.X2g oRevFwTunnelToSFTP-class.html#__init__,Method x2go.xserver.X2goClientXConfig.__init__()=x2go.xserver.X2goClientXConfig-class.html#__init__,Method x2go.xserver.X2goXServer.__init__()=x2go.xserver.X2goXServer-class.html#__init__"><a title="x2go.client.X2goClient.__init__ +x2go.forward.X2goFwServer.__init__ +x2go.gevent_subprocess.Popen.__init__ +x2go.guardian.X2goSessionGuardian.__init__ +x2go.inifiles.X2goIniFile.__init__ +x2go.log.X2goLogger.__init__ +x2go.mimetypes.X2goMIMETypeAction.__init__ +x2go.mimetypes.X2goMIMETypeQueue.__init__ +x2go.mimetypes.X2goPrintJob.__init__ +x2go.printing.X2goClientPrinting.__init__ +x2go.printing.X2goPrintAction.__init__ +x2go.printing.X2goPrintActionPDFSAVE.__init__ +x2go.printing.X2goPrintActionPDFVIEW.__init__ +x2go.printing.X2goPrintActionPRINT.__init__ +x2go.printing.X2goPrintActionPRINTCMD.__init__ +x2go.printing.X2goPrintJob.__init__ +x2go.printing.X2goPrintQueue.__init__ +x2go.profiles.X2goSessionProfiles.__init__ +x2go.proxy.X2goNX3Proxy.__init__ +x2go.proxy.X2goProxy.__init__ +x2go.registry.X2goRegisteredSession.__init__ +x2go.registry.X2goSessionRegistry.__init__ +x2go.rforward.X2goRevFwChannelThread.__init__ +x2go.rforward.X2goRevFwTunnel.__init__ +x2go.session.X2goServerSessionList.__init__ +x2go.session.X2goSession.__init__ +x2go.settings.X2goClientSettings.__init__ +x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__ +x2go.xserver.X2goClientXConfig.__init__ +x2go.xserver.X2goXServer.__init__" class="py-name" href="#" onclick="return doclink('link-42', '__init__', 'link-42');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">daemon</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt> +<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt> +</div><a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeQueue.__del__"></a><div id="X2goMIMETypeQueue.__del__-def"><a name="L131"></a><tt class="py-lineno">131</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.__del__-toggle" onclick="return toggle('X2goMIMETypeQueue.__del__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#__del__">__del__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue.__del__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.__del__-expanded"><a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method x2go.guardian.X2goSessionGuardian.stop_thread()=x2go.guardian.X2goSessionGuardian-class.html#stop_thread,Method x2go.mimetypes.X2goMIMETypeQueue.stop_thread()=x2go.mimetypes.X2goMIMETypeQueue-class.html#stop_thread,Method x2go.printing.X2goPrintQueue.stop_thread()=x2go.printing.X2goPrintQueue-class.html#stop_thread,Method x2go.proxy.X2goProxy.stop_thread()=x2go.proxy.X2goProxy-class.html#stop_thread,Method x2go.rforward.X2goRevFwTunnel.stop_thread()=x2go.rforward.X2goRevFwTunnel-class.html#stop_thread"><a title="x2go.guardian.X2goSessionGuardian.stop_thread +x2go.mimetypes.X2goMIMETypeQueue.stop_thread +x2go.printing.X2goPrintQueue.stop_thread +x2go.proxy.X2goProxy.stop_thread +x2go.rforward.X2goRevFwTunnel.stop_thread" class="py-name" href="#" onclick="return doclink('link-43', 'stop_thread', 'link-43');">stop_thread</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +</div><a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeQueue.pause"></a><div id="X2goMIMETypeQueue.pause-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.pause-toggle" onclick="return toggle('X2goMIMETypeQueue.pause');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#pause">pause</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue.pause-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.pause-expanded"><a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"><tt class="py-docstring"> Prevent acceptance of new incoming MIME type files. The processing of MIME type files</tt> </tt> +<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"><tt class="py-docstring"> that are currently still active will be completed, though.</tt> </tt> +<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">==</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt> +<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt> +<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'paused thread: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-44" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-44', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-45', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +</div><a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeQueue.resume"></a><div id="X2goMIMETypeQueue.resume-def"><a name="L144"></a><tt class="py-lineno">144</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.resume-toggle" onclick="return toggle('X2goMIMETypeQueue.resume');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#resume">resume</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue.resume-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.resume-expanded"><a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"><tt class="py-docstring"> Resume operation of the X2go MIME type thread and continue accepting new incoming </tt> </tt> +<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"><tt class="py-docstring"> MIME type files.</tt> </tt> +<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">==</tt> <tt class="py-name">False</tt><tt class="py-op">:</tt> </tt> +<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt> +<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'resumed thread: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-46" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-46', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-47', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +</div><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeQueue.stop_thread"></a><div id="X2goMIMETypeQueue.stop_thread-def"><a name="L154"></a><tt class="py-lineno">154</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.stop_thread-toggle" onclick="return toggle('X2goMIMETypeQueue.stop_thread');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#stop_thread">stop_thread</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue.stop_thread-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.stop_thread-expanded"><a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"> Stops this L{X2goMIMETypeQueue} thread completely.</tt> </tt> +<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method x2go.mimetypes.X2goMIMETypeQueue.pause()=x2go.mimetypes.X2goMIMETypeQueue-class.html#pause,Method x2go.printing.X2goPrintQueue.pause()=x2go.printing.X2goPrintQueue-class.html#pause,Method x2go.rforward.X2goRevFwTunnel.pause()=x2go.rforward.X2goRevFwTunnel-class.html#pause"><a title="x2go.mimetypes.X2goMIMETypeQueue.pause +x2go.printing.X2goPrintQueue.pause +x2go.rforward.X2goRevFwTunnel.pause" class="py-name" href="#" onclick="return doclink('link-48', 'pause', 'link-48');">pause</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keepalive</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt> +<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'stopping thread: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-49" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-49', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-50', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +</div><a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> </tt> +<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt> +<a name="X2goMIMETypeQueue._incoming_mime_files"></a><div id="X2goMIMETypeQueue._incoming_mime_files-def"><a name="L164"></a><tt class="py-lineno">164</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue._incoming_mime_files-toggle" onclick="return toggle('X2goMIMETypeQueue._incoming_mime_files');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#_incoming_mime_files">_incoming_mime_files</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue._incoming_mime_files-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue._incoming_mime_files-expanded"><a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> </tt> +<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-name">l</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">listdir</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mime_type_dir</tt><tt class="py-op">)</tt> </tt> +<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">mime_files</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">_job_file</tt> <tt class="py-keyword">in</tt> <tt class="py-name">job_files</tt><tt class="py-op">:</tt> </tt> +<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">j</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> <tt class="py-name">_job_file</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt> +<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">j</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">pdf_filename</tt><tt class="py-op">,</tt> <tt class="py-name">job_title</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt> +<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-name">j</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">jobs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">_job_file</tt><tt class="py-op">,</tt> <tt class="py-name">pdf_filename</tt><tt class="py-op">,</tt> <tt class="py-name">job_title</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt> <tt class="py-name">j</tt> <tt class="py-keyword">for</tt> <tt class="py-name">j</tt> <tt class="py-keyword">in</tt> <tt class="py-name">jobs</tt> <tt class="py-keyword">if</tt> <tt class="py-name">j</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.active_jobs +x2go.printing.X2goPrintQueue.active_jobs" class="py-name" href="#" onclick="return doclink('link-51', 'active_jobs', 'link-34');">active_jobs</a></tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">]</tt> </tt> +</div><a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeQueue.set_print_action"></a><div id="X2goMIMETypeQueue.set_print_action-def"><a name="L176"></a><tt class="py-lineno">176</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.set_print_action-toggle" onclick="return toggle('X2goMIMETypeQueue.set_print_action');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#set_print_action">set_print_action</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">print_action</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue.set_print_action-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.set_print_action-expanded"><a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"><tt class="py-docstring"> Modify the print action of this L{X2goPrintQueue} thread during runtime. The </tt> </tt> +<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"><tt class="py-docstring"> change of print action will be valid for the next incoming print job.</tt> </tt> +<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-52" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-52', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-keyword">in</tt> <tt id="link-53" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-53', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Variable x2go.defaults.X2GO_PRINT_ACTIONS=x2go.defaults-module.html#X2GO_PRINT_ACTIONS"><a title="x2go.defaults.X2GO_PRINT_ACTIONS" class="py-name" href="#" onclick="return doclink('link-54', 'X2GO_PRINT_ACTIONS', 'link-54');">X2GO_PRINT_ACTIONS</a></tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt id="link-55" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-55', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-op">=</tt> <tt id="link-56" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-56', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="x2go.defaults.X2GO_PRINT_ACTIONS" class="py-name" href="#" onclick="return doclink('link-57', 'X2GO_PRINT_ACTIONS', 'link-54');">X2GO_PRINT_ACTIONS</a></tt><tt class="py-op">[</tt><tt id="link-58" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-58', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">]</tt> </tt> +<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> </tt> +<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-59" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-59', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-keyword">in</tt> <tt id="link-60" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-60', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="x2go.defaults.X2GO_PRINT_ACTIONS" class="py-name" href="#" onclick="return doclink('link-61', 'X2GO_PRINT_ACTIONS', 'link-54');">X2GO_PRINT_ACTIONS</a></tt><tt class="py-op">.</tt><tt class="py-name">values</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-62', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-op">=</tt> <tt id="link-63" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-63', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">(</tt><tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt> +</div><a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> </tt> +<a name="X2goMIMETypeQueue.run"></a><div id="X2goMIMETypeQueue.run-def"><a name="L188"></a><tt class="py-lineno">188</tt> <a class="py-toggle" href="#" id="X2goMIMETypeQueue.run-toggle" onclick="return toggle('X2goMIMETypeQueue.run');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goMIMETypeQueue-class.html#run">run</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goMIMETypeQueue.run-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goMIMETypeQueue.run-expanded"><a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"><tt class="py-docstring"> Start this L{X2goPrintQueue} thread...</tt> </tt> +<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'starting print queue thread: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-64" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-64', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-65', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> </tt> +<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keepalive</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt> +<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keepalive</tt><tt class="py-op">:</tt> </tt> +<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> </tt> +<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_accept_jobs</tt><tt class="py-op">:</tt> </tt> +<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> </tt> +<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_incoming_print_jobs</tt><tt class="py-op">:</tt> </tt> +<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> </tt> +<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">_job</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_incoming_print_jobs</tt><tt class="py-op">:</tt> </tt> +<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'incoming print job: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-66" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-66', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-67', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">_new_printjob_thread</tt> <tt class="py-op">=</tt> <tt id="link-68" class="py-name" targets="Class x2go.mimetypes.X2goPrintJob=x2go.mimetypes.X2goPrintJob-class.html,Class x2go.printing.X2goPrintJob=x2go.printing.X2goPrintJob-class.html"><a title="x2go.mimetypes.X2goPrintJob +x2go.printing.X2goPrintJob" class="py-name" href="#" onclick="return doclink('link-68', 'X2goPrintJob', 'link-68');">X2goPrintJob</a></tt><tt class="py-op">(</tt><tt class="py-name">target</tt><tt class="py-op">=</tt><tt id="link-69" class="py-name" targets="Function x2go.mimetypes.x2go_printjob_handler()=x2go.mimetypes-module.html#x2go_printjob_handler,Function x2go.printing.x2go_printjob_handler()=x2go.printing-module.html#x2go_printjob_handler"><a title="x2go.mimetypes.x2go_printjob_handler +x2go.printing.x2go_printjob_handler" class="py-name" href="#" onclick="return doclink('link-69', 'x2go_printjob_handler', 'link-69');">x2go_printjob_handler</a></tt><tt class="py-op">,</tt> </tt> +<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">kwargs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt> </tt> +<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-string">'job_file'</tt><tt class="py-op">:</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt> +<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-string">'pdf_file'</tt><tt class="py-op">:</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt> +<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-string">'job_title'</tt><tt class="py-op">:</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt> +<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-string">'print_action'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-70', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">,</tt> </tt> +<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-string">'parent_thread'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">,</tt> </tt> +<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-string">'logger'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">logger</tt><tt class="py-op">,</tt> </tt> +<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-op">}</tt> </tt> +<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-op">)</tt> </tt> +<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.active_jobs +x2go.printing.X2goPrintQueue.active_jobs" class="py-name" href="#" onclick="return doclink('link-71', 'active_jobs', 'link-34');">active_jobs</a></tt><tt class="py-op">[</tt><tt class="py-string">'%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">_job</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">_new_printjob_thread</tt> </tt> +<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-name">_new_printjob_thread</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name" targets="Method x2go.registry.X2goRegisteredSession.start()=x2go.registry.X2goRegisteredSession-class.html#start,Method x2go.session.X2goSession.start()=x2go.session.X2goSession-class.html#start"><a title="x2go.registry.X2goRegisteredSession.start +x2go.session.X2goSession.start" class="py-name" href="#" onclick="return doclink('link-72', 'start', 'link-72');">start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> </tt> +<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">gevent</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt> +<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> </tt> +<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-name">gevent</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> </tt> +<a name="x2go_printjob_handler"></a><div id="x2go_printjob_handler-def"><a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> </tt> +<a name="L222"></a><tt class="py-lineno">222</tt> <a class="py-toggle" href="#" id="x2go_printjob_handler-toggle" onclick="return toggle('x2go_printjob_handler');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes-module.html#x2go_printjob_handler">x2go_printjob_handler</a><tt class="py-op">(</tt><tt class="py-param">job_file</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">pdf_file</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">job_title</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">print_action</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">parent_thread</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py- name">No ne</tt><tt class="py-op">,</tt> <tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="x2go_printjob_handler-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="x2go_printjob_handler-expanded"><a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"><tt class="py-docstring"> This function is called as a handler function for each incoming X2go print job </tt> </tt> +<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"><tt class="py-docstring"> represented by the class L{X2goPrintJob}.</tt> </tt> +<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"><tt class="py-docstring"> The handler function will (re-)read the »printing« configuration file (if no</tt> </tt> +<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"><tt class="py-docstring"> explicit C{print_action} is passed to this function...). It then will</tt> </tt> +<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"><tt class="py-docstring"> execute the C{<print_action>.do_print()} command.</tt> </tt> +<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"><tt class="py-docstring"> @param pdf_file: PDF file name as placed in to the X2go spool directory</tt> </tt> +<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"><tt class="py-docstring"> @type pdf_file: C{str}</tt> </tt> +<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"><tt class="py-docstring"> @param job_title: human readable print job title</tt> </tt> +<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"><tt class="py-docstring"> @type job_title: C{str}</tt> </tt> +<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"><tt class="py-docstring"> @param print_action: an instance of either of the possible C{X2goPrintActionXXX} classes</tt> </tt> +<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"><tt class="py-docstring"> @type print_action: C{X2goPrintActionXXX} nstance</tt> </tt> +<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"><tt class="py-docstring"> @param parent_thread: the L{X2goPrintQueue} thread that actually created this handler's L{X2goPrintJob} instance</tt> </tt> +<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"><tt class="py-docstring"> @type parent_thread: C{instance}</tt> </tt> +<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"><tt class="py-docstring"> @param logger: the L{X2goPrintQueue}'s logging instance</tt> </tt> +<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"><tt class="py-docstring"> @type logger: C{instance}</tt> </tt> +<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-73" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-73', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-name">_printing</tt> <tt class="py-op">=</tt> <tt id="link-74" class="py-name" targets="Class x2go.printing.X2goClientPrinting=x2go.printing.X2goClientPrinting-class.html"><a title="x2go.printing.X2goClientPrinting" class="py-name" href="#" onclick="return doclink('link-74', 'X2goClientPrinting', 'link-74');">X2goClientPrinting</a></tt><tt class="py-op">(</tt><tt class="py-name">logger</tt><tt class="py-op">=</tt><tt class="py-name">logger</tt><tt class="py-op">)</tt> </tt> +<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt id="link-75" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-75', 'print_action', 'link-32');">print_action</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_printing</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-76', 'print_action', 'link-32');">print_action</a></tt> </tt> +<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> </tt> +<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'action for printing is: %s'</tt> <tt class="py-op">%</tt> <tt id="link-77" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-77', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-78" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-78', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-79', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt id="link-80" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.print_action +x2go.printing.X2goClientPrinting.print_action +x2go.printing.X2goPrintQueue.print_action" class="py-name" href="#" onclick="return doclink('link-80', 'print_action', 'link-32');">print_action</a></tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method x2go.printing.X2goPrintAction.do_print()=x2go.printing.X2goPrintAction-class.html#do_print,Method x2go.printing.X2goPrintActionPDFSAVE.do_print()=x2go.printing.X2goPrintActionPDFSAVE-class.html#do_print,Method x2go.printing.X2goPrintActionPDFVIEW.do_print()=x2go.printing.X2goPrintActionPDFVIEW-class.html#do_print,Method x2go.printing.X2goPrintActionPRINT.do_print()=x2go.printing.X2goPrintActionPRINT-class.html#do_print,Method x2go.printing.X2goPrintActionPRINTCMD.do_print()=x2go.printing.X2goPrintActionPRINTCMD-class.html#do_print"><a title="x2go.printing.X2goPrintAction.do_print +x2go.printing.X2goPrintActionPDFSAVE.do_print +x2go.printing.X2goPrintActionPDFVIEW.do_print +x2go.printing.X2goPrintActionPRINT.do_print +x2go.printing.X2goPrintActionPRINTCMD.do_print" class="py-name" href="#" onclick="return doclink('link-81', 'do_print', 'link-81');">do_print</a></tt><tt class="py-op">(</tt><tt class="py-name">pdf_file</tt><tt class="py-op">=</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> <tt class="py-name">pdf_file</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt> +<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-name">job_title</tt><tt class="py-op">=</tt><tt class="py-name">job_title</tt><tt class="py-op">,</tt> </tt> +<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-name">spool_dir</tt><tt class="py-op">=</tt><tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> </tt> +<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-op">)</tt> </tt> +<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> </tt> +<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-name">logger</tt><tt class="py-op">(</tt><tt class="py-string">'removing print job files for %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">pdf_file</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt id="link-82" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-82', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="x2go.log.loglevel_DEBUG" class="py-name" href="#" onclick="return doclink('link-83', 'loglevel_DEBUG', 'link-23');">loglevel_DEBUG</a></tt><tt class="py-op">)</tt> </tt> +<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> <tt class="py-name">job_file</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt class="py-name">spool_dir</tt><tt class="py-op">,</tt> <tt class="py-name">pdf_file</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> </tt> +<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.active_jobs +x2go.printing.X2goPrintQueue.active_jobs" class="py-name" href="#" onclick="return doclink('link-84', 'active_jobs', 'link-34');">active_jobs</a></tt><tt class="py-op">[</tt><tt class="py-string">'%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">pdf_file</tt><tt class="py-op">]</tt> </tt> +<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-name">parent_thread</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="x2go.mimetypes.X2goMIMETypeQueue.job_history +x2go.printing.X2goPrintQueue.job_history" class="py-name" href="#" onclick="return doclink('link-85', 'job_history', 'link-35');">job_history</a></tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">pdf_file</tt><tt class="py-op">)</tt> </tt> +</div><a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> </tt> +<a name="X2goPrintJob"></a><div id="X2goPrintJob-def"><a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> </tt> +<a name="L261"></a><tt class="py-lineno">261</tt> <a class="py-toggle" href="#" id="X2goPrintJob-toggle" onclick="return toggle('X2goPrintJob');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.mimetypes.X2goPrintJob-class.html">X2goPrintJob</a><tt class="py-op">(</tt><tt class="py-base-class">threading</tt><tt class="py-op">.</tt><tt class="py-base-class">Thread</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goPrintJob-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="X2goPrintJob-expanded"><a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"><tt class="py-docstring"> For each X2go print job we create a sub-thread that let's </tt> </tt> +<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"><tt class="py-docstring"> the print job be processed in the background.</tt> </tt> +<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"><tt class="py-docstring"> As a handler for this class the function L{x2go_printjob_handler()} </tt> </tt> +<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"><tt class="py-docstring"> is used.</tt> </tt> +<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="X2goPrintJob.__init__"></a><div id="X2goPrintJob.__init__-def"><a name="L270"></a><tt class="py-lineno">270</tt> <a class="py-toggle" href="#" id="X2goPrintJob.__init__-toggle" onclick="return toggle('X2goPrintJob.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.mimetypes.X2goPrintJob-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goPrintJob.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="X2goPrintJob.__init__-expanded"><a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"><tt class="py-docstring"> Construct the X2go print job thread...</tt> </tt> +<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"><tt class="py-docstring"> All parameters (**kwargs) are passed through to the constructor</tt> </tt> +<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"><tt class="py-docstring"> of C{threading.Thread()}.</tt> </tt> +<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Thread</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="x2go.client.X2goClient.__init__ +x2go.forward.X2goFwServer.__init__ +x2go.gevent_subprocess.Popen.__init__ +x2go.guardian.X2goSessionGuardian.__init__ +x2go.inifiles.X2goIniFile.__init__ +x2go.log.X2goLogger.__init__ +x2go.mimetypes.X2goMIMETypeAction.__init__ +x2go.mimetypes.X2goMIMETypeQueue.__init__ +x2go.mimetypes.X2goPrintJob.__init__ +x2go.printing.X2goClientPrinting.__init__ +x2go.printing.X2goPrintAction.__init__ +x2go.printing.X2goPrintActionPDFSAVE.__init__ +x2go.printing.X2goPrintActionPDFVIEW.__init__ +x2go.printing.X2goPrintActionPRINT.__init__ +x2go.printing.X2goPrintActionPRINTCMD.__init__ +x2go.printing.X2goPrintJob.__init__ +x2go.printing.X2goPrintQueue.__init__ +x2go.profiles.X2goSessionProfiles.__init__ +x2go.proxy.X2goNX3Proxy.__init__ +x2go.proxy.X2goProxy.__init__ +x2go.registry.X2goRegisteredSession.__init__ +x2go.registry.X2goSessionRegistry.__init__ +x2go.rforward.X2goRevFwChannelThread.__init__ +x2go.rforward.X2goRevFwTunnel.__init__ +x2go.session.X2goServerSessionList.__init__ +x2go.session.X2goSession.__init__ +x2go.settings.X2goClientSettings.__init__ +x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__ +x2go.xserver.X2goClientXConfig.__init__ +x2go.xserver.X2goXServer.__init__" class="py-name" href="#" onclick="return doclink('link-86', '__init__', 'link-42');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt> +<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">daemon</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt> +</div></div><a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0"
bgcolor="#a0c0ff" cellspacing="0">
<th> <a
href="x2go-module.html">Home</a> </th>
<th> <a
href="module-tree.html">Trees</a> </th>
<th> <a
href="identifier-index.html">Indices</a> </th>
<th> <a
href="help.html">Help</a> </th>
<th class="navbar" align="right" width="100%">
<table border="0" cellpadding="0" cellspacing="0">
<tr><th class="navbar" align="center"
><a class="navbar" target="_top" href="http://www.x2go.org">Python X2go</a></th>
</tr></table></th>
<a target="mainFrame" href="http://epydoc.sourceforge.net"
>http://epydoc.sourceforge.net</a>
- <title>x2go.printing.X2goPrintAction</title> + <title>x2go.mimetypes.X2goMIMETypeAction</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,8 +43,8 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - <a href="x2go.printing-module.html">Module printing</a> :: - Class X2goPrintAction + <a href="x2go.mimetypes-module.html">Module mimetypes</a> :: + Class X2goMIMETypeAction </span> </td> <td> @@ -52,26 +52,20 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.printing.X2goPrintAction-class.html" + >] | <a href="x2go.mimetypes.X2goMIMETypeAction-class.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> -<h1 class="epydoc">Class X2goPrintAction</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction">source code</a></span></p> +<h1 class="epydoc">Class X2goMIMETypeAction</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction">source code</a></span></p> <pre class="base-tree"> object --+ | - <strong class="uidshort">X2goPrintAction</strong> + <strong class="uidshort">X2goMIMETypeAction</strong> </pre> -<dl><dt>Known Subclasses:</dt> -<dd> - <ul class="subclass-list"> -<li><a href="x2go.printing.X2goPrintActionPDFSAVE-class.html">X2goPrintActionPDFSAVE</a></li><li>, <a href="x2go.printing.X2goPrintActionPDFVIEW-class.html">X2goPrintActionPDFVIEW</a></li><li>, <a href="x2go.printing.X2goPrintActionPRINT-class.html">X2goPrintActionPRINT</a></li><li>, <a href="x2go.printing.X2goPrintActionPRINTCMD-class.html">X2goPrintActionPRINTCMD</a></li> </ul> -</dd></dl> - <hr /> <!-- ==================== INSTANCE METHODS ==================== --> <a name="section-InstanceMethods"></a> @@ -87,12 +81,12 @@ object --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing.X2goPrintAction-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeAction-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">logger</span>=<span class="summary-sig-default">None</span>, <span class="summary-sig-arg">loglevel</span>=<span class="summary-sig-default">56</span>)</span><br /> - This is a meta class has no functionality.</td> + STILL UNDOCUMENTED</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction.__init__">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction.__init__">source code</a></span> </td> </tr> @@ -106,15 +100,14 @@ object --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing.X2goPrintAction-class.html#do_print" class="summary-sig-name">do_print</a>(<span class="summary-sig-arg">self</span>, - <span class="summary-sig-arg">pdf_file</span>, - <span class="summary-sig-arg">job_title</span>, - <span class="summary-sig-arg">spool_dir</span>)</span><br /> + <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeAction-class.html#do_execute" class="summary-sig-name">do_execute</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">mime_file</span>, + <span class="summary-sig-arg">mime_type_dir</span>)</span><br /> Perform the defined print action (doing nothing in <a href="x2go.printing.X2goPrintAction-class.html" class="link">X2goPrintAction</a> parent class).</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction.do_print">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction.do_execute">source code</a></span> </td> </tr> @@ -153,14 +146,14 @@ object --+ <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a name="__name__"></a><span class="summary-name">__name__</span> = <code title="'NAME'"><code class="variable-quote">'</code><code class="variable-string">NAME</code><code class="variable-quote">'</code></code> + <a name="__name__"></a><span class="summary-name">__name__</span> = <code title="'MIME'"><code class="variable-quote">'</code><code class="variable-string">MIME</code><code class="variable-quote">'</code></code> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a name="__description__"></a><span class="summary-name">__description__</span> = <code title="'DESCRIPTION'"><code class="variable-quote">'</code><code class="variable-string">DESCRIPTION</code><code class="variable-quote">'</code></code> + <a href="x2go.mimetypes.X2goMIMETypeAction-class.html#__description__" class="summary-name">__description__</a> = <code title="'Execute a command depending on an incoming file\'s MIME type'"><code class="variable-quote">'</code><code class="variable-string">Execute a command depending on an incoming </code><code class="variable-ellipsis">...</code></code> </td> </tr> </table> @@ -172,22 +165,6 @@ object --+ <td align="left" colspan="2" class="table-header"> <span class="table-header">Properties</span></td> </tr> -<tr> - <td width="15%" align="right" valign="top" class="summary"> - <span class="summary-type"> </span> - </td><td class="summary"> - <a href="x2go.printing.X2goPrintAction-class.html#name" class="summary-name">name</a><br /> - Return the X2go print action's name. - </td> - </tr> -<tr> - <td width="15%" align="right" valign="top" class="summary"> - <span class="summary-type"> </span> - </td><td class="summary"> - <a href="x2go.printing.X2goPrintAction-class.html#description" class="summary-name">description</a><br /> - Return the X2go print action's description text. - </td> - </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: @@ -218,19 +195,18 @@ object --+ <br /><em class="fname">(Constructor)</em> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction.__init__">source code</a></span> + ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction.__init__">source code</a></span> </td> </tr></table> - <p>This is a meta class has no functionality. It is used as parent class - by »real« X2go print actions.</p> + <p>STILL UNDOCUMENTED</p> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>logger</code></strong> (<code>instance</code>) - you can pass an <a href="x2go.log.X2goLogger-class.html" class="link">X2goLogger</a> object to the <a - href="x2go.printing.X2goPrintAction-class.html" - class="link">X2goPrintAction</a> constructor</li> + href="x2go.mimetypes.X2goMIMETypeAction-class.html" + class="link">X2goMIMETypeAction</a> constructor</li> <li><strong class="pname"><code>loglevel</code></strong> (<code>int</code>) - if no <a href="x2go.log.X2goLogger-class.html" class="link">X2goLogger</a> object has been supplied a new one will be constructed with the given loglevel</li> @@ -241,20 +217,19 @@ object --+ </dl> </td></tr></table> </div> -<a name="do_print"></a> +<a name="do_execute"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> - <h3 class="epydoc"><span class="sig"><span class="sig-name">do_print</span>(<span class="sig-arg">self</span>, - <span class="sig-arg">pdf_file</span>, - <span class="sig-arg">job_title</span>, - <span class="sig-arg">spool_dir</span>)</span> + <h3 class="epydoc"><span class="sig"><span class="sig-name">do_execute</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">mime_file</span>, + <span class="sig-arg">mime_type_dir</span>)</span> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintAction.do_print">source code</a></span> + ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeAction.do_execute">source code</a></span> </td> </tr></table> @@ -264,50 +239,38 @@ object --+ <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> - <li><strong class="pname"><code>pdf_file</code></strong> (<code>str</code>) - PDF file name as placed in to the X2go spool directory</li> - <li><strong class="pname"><code>job_title</code></strong> (<code>str</code>) - human readable print job title</li> - <li><strong class="pname"><code>spool_dir</code></strong> (<code>str</code>) - location of the X2go client's spool directory</li> + <li><strong class="pname"><code>mime_file</code></strong> (<code>str</code>) - name of the incoming file</li> + <li><strong class="pname"><code>mime_type_dir</code></strong> (<code>str</code>) - location of the X2go client's spool directory for incoming MIME + files</li> </ul></dd> </dl> </td></tr></table> </div> <br /> -<!-- ==================== PROPERTY DETAILS ==================== --> -<a name="section-PropertyDetails"></a> +<!-- ==================== CLASS VARIABLE DETAILS ==================== --> +<a name="section-ClassVariableDetails"></a> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td align="left" colspan="2" class="table-header"> - <span class="table-header">Property Details</span></td> + <span class="table-header">Class Variable Details</span></td> </tr> </table> -<a name="name"></a> +<a name="__description__"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> - <h3 class="epydoc">name</h3> - <p>Return the X2go print action's name.</p> + <h3 class="epydoc">__description__</h3> + <dl class="fields"> - <dt>Get Method:</dt> - <dd class="value"><span class="summary-sig"><i>unreachable</i>.name()</span> - - Return the X2go print action's name. - </dd> </dl> -</td></tr></table> -</div> -<a name="description"></a> -<div> -<table class="details" border="1" cellpadding="3" - cellspacing="0" width="100%" bgcolor="white"> -<tr><td> - <h3 class="epydoc">description</h3> - <p>Return the X2go print action's description text.</p> <dl class="fields"> - <dt>Get Method:</dt> - <dd class="value"><span class="summary-sig"><i>unreachable</i>.description()</span> - - Return the X2go print action's description text. - </dd> + <dt>Value:</dt> + <dd><table><tr><td><pre class="variable"> +<code class="variable-quote">'</code><code class="variable-string">Execute a command depending on an incoming file\'s MIME type</code><code class="variable-quote">'</code> +</pre></td></tr></table> +</dd> </dl> </td></tr></table> </div> diff --git a/doc/html/x2go.printing.X2goPrintQueue-class.html b/doc/html/x2go.mimetypes.X2goMIMETypeQueue-class.html similarity index 74% copy from doc/html/x2go.printing.X2goPrintQueue-class.html copy to doc/html/x2go.mimetypes.X2goMIMETypeQueue-class.html index 8d87b83..26ab93a 100644 --- a/doc/html/x2go.printing.X2goPrintQueue-class.html +++ b/doc/html/x2go.mimetypes.X2goMIMETypeQueue-class.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.printing.X2goPrintQueue</title> + <title>x2go.mimetypes.X2goMIMETypeQueue</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,8 +43,8 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - <a href="x2go.printing-module.html">Module printing</a> :: - Class X2goPrintQueue + <a href="x2go.mimetypes-module.html">Module mimetypes</a> :: + Class X2goMIMETypeQueue </span> </td> <td> @@ -52,14 +52,14 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.printing.X2goPrintQueue-class.html" + >] | <a href="x2go.mimetypes.X2goMIMETypeQueue-class.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> -<h1 class="epydoc">Class X2goPrintQueue</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue">source code</a></span></p> +<h1 class="epydoc">Class X2goMIMETypeQueue</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue">source code</a></span></p> <pre class="base-tree"> object --+ | @@ -67,14 +67,11 @@ threading._Verbose --+ | threading.Thread --+ | - <strong class="uidshort">X2goPrintQueue</strong> + <strong class="uidshort">X2goMIMETypeQueue</strong> </pre> <hr /> -<p>If X2go printing is supported in a particaluar <a - href="x2go.session.X2goSession-class.html" class="link">X2goSession</a> - instance this class provides a sub-thread for handling incoming X2go - print jobs.</p> +<p>STILL UNDOCUMENTED</p> <!-- ==================== INSTANCE METHODS ==================== --> <a name="section-InstanceMethods"></a> @@ -90,15 +87,12 @@ threading._Verbose --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing.X2goPrintQueue-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, - <span class="summary-sig-arg">spool_dir</span>=<span class="summary-sig-default">None</span>, - <span class="summary-sig-arg">print_action</span>=<span class="summary-sig-default">None</span>, - <span class="summary-sig-arg">print_action_args</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>, + <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">logger</span>=<span class="summary-sig-default">None</span>, <span class="summary-sig-arg">loglevel</span>=<span class="summary-sig-default">56</span>)</span><br /> - x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + STILL UNDOCUMENTED</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.__init__">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.__init__">source code</a></span> </td> </tr> @@ -114,7 +108,7 @@ threading._Verbose --+ <tr> <td><span class="summary-sig"><a name="__del__"></a><span class="summary-sig-name">__del__</span>(<span class="summary-sig-arg">self</span>)</span></td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.__del__">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.__del__">source code</a></span> </td> </tr> @@ -128,10 +122,10 @@ threading._Verbose --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing.X2goPrintQueue-class.html#pause" class="summary-sig-name">pause</a>(<span class="summary-sig-arg">self</span>)</span><br /> - Prevent acceptance of new incoming print jobs.</td> + <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeQueue-class.html#pause" class="summary-sig-name">pause</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Prevent acceptance of new incoming MIME type files.</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.pause">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.pause">source code</a></span> </td> </tr> @@ -146,10 +140,10 @@ threading._Verbose --+ <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="resume"></a><span class="summary-sig-name">resume</span>(<span class="summary-sig-arg">self</span>)</span><br /> - Resume operation of the X2go print spooler and continue accepting new - incoming print jobs.</td> + Resume operation of the X2go MIME type thread and continue accepting + new incoming MIME type files.</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.resume">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.resume">source code</a></span> </td> </tr> @@ -164,10 +158,10 @@ threading._Verbose --+ <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="stop_thread"></a><span class="summary-sig-name">stop_thread</span>(<span class="summary-sig-arg">self</span>)</span><br /> - Stops this <a href="x2go.printing.X2goPrintQueue-class.html" - class="link">X2goPrintQueue</a> thread completely.</td> + Stops this <a href="x2go.mimetypes.X2goMIMETypeQueue-class.html" + class="link">X2goMIMETypeQueue</a> thread completely.</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.stop_thread">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.stop_thread">source code</a></span> </td> </tr> @@ -181,14 +175,14 @@ threading._Verbose --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing.X2goPrintQueue-class.html#set_print_action" class="summary-sig-name">set_print_action</a>(<span class="summary-sig-arg">self</span>, + <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeQueue-class.html#set_print_action" class="summary-sig-name">set_print_action</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">print_action</span>, <span class="summary-sig-arg">**kwargs</span>)</span><br /> Modify the print action of this <a href="x2go.printing.X2goPrintQueue-class.html" class="link">X2goPrintQueue</a> thread during runtime.</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.set_print_action">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.set_print_action">source code</a></span> </td> </tr> @@ -202,11 +196,11 @@ threading._Verbose --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing.X2goPrintQueue-class.html#run" class="summary-sig-name">run</a>(<span class="summary-sig-arg">self</span>)</span><br /> + <td><span class="summary-sig"><a href="x2go.mimetypes.X2goMIMETypeQueue-class.html#run" class="summary-sig-name">run</a>(<span class="summary-sig-arg">self</span>)</span><br /> Start this <a href="x2go.printing.X2goPrintQueue-class.html" class="link">X2goPrintQueue</a> thread...</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.run">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.run">source code</a></span> </td> </tr> @@ -318,34 +312,19 @@ threading._Verbose --+ <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, - <span class="sig-arg">spool_dir</span>=<span class="sig-default">None</span>, - <span class="sig-arg">print_action</span>=<span class="sig-default">None</span>, - <span class="sig-arg">print_action_args</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>, <span class="sig-arg">logger</span>=<span class="sig-default">None</span>, <span class="sig-arg">loglevel</span>=<span class="sig-default">56</span>)</span> <br /><em class="fname">(Constructor)</em> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.__init__">source code</a></span> + ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.__init__">source code</a></span> </td> </tr></table> - <p>x.__init__(...) initializes x; see x.__class__.__doc__ for - signature</p> + <p>STILL UNDOCUMENTED</p> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> - <li><strong class="pname"><code>spool_dir</code></strong> (<code>str</code>) - local spool directory for incoming print job files</li> - <li><strong class="pname"><code>print_action</code></strong> (<code>str</code> or instance) - name or instance of either of the possible X2go print action - classes</li> - <li><strong class="pname"><code>print_action_args</code></strong> - depending of the chosen <code>print_action</code> this dictionary - may contain different values; the <code>print_action_args</code> - will be passed on to the X2go print action instance constructor, - so refer to either of these: <a - href="x2go.printing.X2goPrintActionPDFVIEW-class.html#__init__" - class="link">X2goPrintActionPDFVIEW.__init__()</a>, <a - href="x2go.printing.X2goPrintActionPRINT-class.html#__init__" - class="link">X2goPrintActionPRINT.__init__()</a> et al.</li> <li><strong class="pname"><code>logger</code></strong> (<code>instance</code>) - you can pass an <a href="x2go.log.X2goLogger-class.html" class="link">X2goLogger</a> object to the <a href="x2go.proxy.X2goProxy-class.html" class="link">X2goProxy</a> @@ -370,12 +349,13 @@ threading._Verbose --+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pause</span>(<span class="sig-arg">self</span>)</span> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.pause">source code</a></span> + ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.pause">source code</a></span> </td> </tr></table> - <p>Prevent acceptance of new incoming print jobs. The processing of print - jobs that are currently still active will be completed, though.</p> + <p>Prevent acceptance of new incoming MIME type files. The processing of + MIME type files that are currently still active will be completed, + though.</p> <dl class="fields"> </dl> </td></tr></table> @@ -392,7 +372,7 @@ threading._Verbose --+ <span class="sig-arg">**kwargs</span>)</span> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.set_print_action">source code</a></span> + ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.set_print_action">source code</a></span> </td> </tr></table> @@ -414,7 +394,7 @@ threading._Verbose --+ <h3 class="epydoc"><span class="sig"><span class="sig-name">run</span>(<span class="sig-arg">self</span>)</span> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintQueue.run">source code</a></span> + ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goMIMETypeQueue.run">source code</a></span> </td> </tr></table> diff --git a/doc/html/x2go.printing.X2goPrintJob-class.html b/doc/html/x2go.mimetypes.X2goPrintJob-class.html similarity index 91% copy from doc/html/x2go.printing.X2goPrintJob-class.html copy to doc/html/x2go.mimetypes.X2goPrintJob-class.html index ff38e3c..2c85866 100644 --- a/doc/html/x2go.printing.X2goPrintJob-class.html +++ b/doc/html/x2go.mimetypes.X2goPrintJob-class.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.printing.X2goPrintJob</title> + <title>x2go.mimetypes.X2goPrintJob</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,7 +43,7 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - <a href="x2go.printing-module.html">Module printing</a> :: + <a href="x2go.mimetypes-module.html">Module mimetypes</a> :: Class X2goPrintJob </span> </td> @@ -52,14 +52,14 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.printing.X2goPrintJob-class.html" + >] | <a href="x2go.mimetypes.X2goPrintJob-class.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> -<h1 class="epydoc">Class X2goPrintJob</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob">source code</a></span></p> +<h1 class="epydoc">Class X2goPrintJob</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goPrintJob">source code</a></span></p> <pre class="base-tree"> object --+ | @@ -74,7 +74,7 @@ threading._Verbose --+ <p>For each X2go print job we create a sub-thread that let's the print job be processed in the background.</p> <p>As a handler for this class the function <a - href="x2go.printing-module.html#x2go_printjob_handler" + href="x2go.mimetypes-module.html#x2go_printjob_handler" class="link">x2go_printjob_handler()</a> is used.</p> <!-- ==================== INSTANCE METHODS ==================== --> @@ -91,11 +91,11 @@ threading._Verbose --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing.X2goPrintJob-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <td><span class="summary-sig"><a href="x2go.mimetypes.X2goPrintJob-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">**kwargs</span>)</span><br /> Construct the X2go print job thread...</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob.__init__">source code</a></span> + <span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goPrintJob.__init__">source code</a></span> </td> </tr> @@ -175,7 +175,7 @@ threading._Verbose --+ <br /><em class="fname">(Constructor)</em> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob.__init__">source code</a></span> + ><span class="codelink"><a href="x2go.mimetypes-pysrc.html#X2goPrintJob.__init__">source code</a></span> </td> </tr></table> diff --git a/doc/html/x2go.registry-module.html b/doc/html/x2go.xserver-module.html similarity index 86% copy from doc/html/x2go.registry-module.html copy to doc/html/x2go.xserver-module.html index 1a70a24..3d0f914 100644 --- a/doc/html/x2go.registry-module.html +++ b/doc/html/x2go.xserver-module.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.registry</title> + <title>x2go.xserver</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,7 +43,7 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - Module registry + Module xserver </span> </td> <td> @@ -51,17 +51,14 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.registry-module.html" + >] | <a href="x2go.xserver-module.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== MODULE DESCRIPTION ==================== --> -<h1 class="epydoc">Module registry</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.registry-pysrc.html">source code</a></span></p> -<p>X2goSessionRegistry class - the X2goClient's session registry - backend</p> - +<h1 class="epydoc">Module xserver</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.xserver-pysrc.html">source code</a></span></p> <!-- ==================== CLASSES ==================== --> <a name="section-Classes"></a> <table class="summary" border="1" cellpadding="3" @@ -74,15 +71,17 @@ <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a href="x2go.registry.X2goRegisteredSession-class.html" class="summary-name">X2goRegisteredSession</a> + <a href="x2go.xserver.X2goClientXConfig-class.html" class="summary-name">X2goClientXConfig</a><br /> + Configuration file based XServer startup settings for X2goClient + instances. </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a href="x2go.registry.X2goSessionRegistry-class.html" class="summary-name">X2goSessionRegistry</a><br /> - STILL UNDOCUMENTED + <a href="x2go.xserver.X2goXServer-class.html" class="summary-name">X2goXServer</a><br /> + This routine will start an XServer if it is not running already </td> </tr> </table> @@ -98,7 +97,7 @@ <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2gosessregistry-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2gosessregistry-pylib</code><code class="variable-quote">'</code></code> + <a name="__NAME__"></a><span class="summary-name">__NAME__</span> = <code title="'x2gosettings-pylib'"><code class="variable-quote">'</code><code class="variable-string">x2gosettings-pylib</code><code class="variable-quote">'</code></code> </td> </tr> <tr> diff --git a/doc/html/x2go.settings-pysrc.html b/doc/html/x2go.xserver-pysrc.html similarity index 56% copy from doc/html/x2go.settings-pysrc.html copy to doc/html/x2go.xserver-pysrc.html index 844ab58..5d774b9 100644 --- a/doc/html/x2go.settings-pysrc.html +++ b/doc/html/x2go.xserver-pysrc.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.settings</title> + <title>x2go.xserver</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,7 +43,7 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - Module settings + Module xserver </span> </td> <td> @@ -51,43 +51,45 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.settings-pysrc.html" + >] | <a href="x2go.xserver-pysrc.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> -<h1 class="epydoc">Source Code for <a href="x2go.settings-module.html">Module x2go.settings</a></h1> +<h1 class="epydoc">Source Code for <a href="x2go.xserver-module.html">Module x2go.xserver</a></h1> <pre class="py-src"> <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt> <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"> </tt> -<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Copyright (C) 2010 by Mike Gabriel <m.gabriel@das-netzwerkteam.de></tt> </tt> -<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> -<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># Python X2go is free software; you can redistribute it and/or modify</tt> </tt> -<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"># it under the terms of the GNU General Public License as published by</tt> </tt> -<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># the Free Software Foundation; either version 3 of the License, or</tt> </tt> -<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># (at your option) any later version.</tt> </tt> -<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> -<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-comment"># Python X2go is distributed in the hope that it will be useful,</tt> </tt> -<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt> -<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt> -<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt> -<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> -<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU General Public License</tt> </tt> -<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the</tt> </tt> -<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-comment"># Free Software Foundation, Inc.,</tt> </tt> -<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-comment"># 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</tt> </tt> -<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"> </tt> -<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-docstring">"""\</tt> </tt> -<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-docstring">X2goClientSettings class - managing x2goclient settings file (incl. LDAP-Support).</tt> </tt> -<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> -<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt class="py-docstring">The L{X2goClientSettings} class one of Python X2go's a public API classes.</tt> </tt> -<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"><tt class="py-docstring">Use this class (indirectly by retrieving it from an L{X2goClient} instance)</tt> </tt> -<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"><tt class="py-docstring">in your Python X2go based applications to access the</tt> </tt> -<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"><tt class="py-docstring">»settings« configuration file of your X2go client application.</tt> </tt> -<a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> -<a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt> -<a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable x2go.__NAME__=x2go-module.html#__NAME__,Variable x2go.client.__NAME__=x2go.client-module.html#__NAME__,Variable x2go.defaults.__NAME__=x2go.defaults-module.html#__NAME__,Variable x2go.forward.__NAME__=x2go.forward-module.html#__NAME__,Variable x2go.guardian.__NAME__=x2go.guardian-module.html#__NAME__,Variable x2go.inifiles.__NAME__=x2go.inifiles-module.html#__NAME__,Variable x2go.log.__NAME__=x2go.log-module.html#__NAME__,Variable x2go.mimetypes.__NAME__=x2go.mimetypes-module.html#__NAME__,Variable x2go.printing.__NAME__=x2go.printing-module.html#__NAME__,Variable x2go.profiles.__NAME__=x2go.profiles-module.html#__NAME__,Variable x2go.proxy.__NAME__=x2go.proxy-module.html#__NAME__,Variable x2go.registry.__NAME__=x2go.registry-module.html#__NAME__,Variable x2go.rforward.__NAME__=x2go.rforward-module.html#__NAME__,Variable x2go.session.__NAME__=x2go.session-mo dule.htm l#__NAME__,Variable x2go.settings.__NAME__=x2go.settings-module.html#__NAME__,Variable x2go.sftpserver.__NAME__=x2go.sftpserver-module.html#__NAME__,Variable x2go.utils.__NAME__=x2go.utils-module.html#__NAME__,Variable x2go.x2go_exceptions.__NAME__=x2go.x2go_exceptions-module.html#__NAME__,Variable x2go.xserver.__NAME__=x2go.xserver-module.html#__NAME__"><a title="x2go.__NAME__ +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># -*- coding: utf-8 -*-</tt> </tt> +<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"> </tt> +<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># Copyright (C) 2010 by Mike Gabriel <m.gabriel@das-netzwerkteam.de></tt> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># Python X2go is free software; you can redistribute it and/or modify</tt> </tt> +<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># it under the terms of the GNU General Public License as published by</tt> </tt> +<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># the Free Software Foundation; either version 3 of the License, or</tt> </tt> +<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-comment"># (at your option) any later version.</tt> </tt> +<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-comment"># Python X2go is distributed in the hope that it will be useful,</tt> </tt> +<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt> +<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt> +<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment"># GNU General Public License for more details.</tt> </tt> +<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-comment"># You should have received a copy of the GNU General Public License</tt> </tt> +<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-comment"># along with this program; if not, write to the</tt> </tt> +<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-comment"># Free Software Foundation, Inc.,</tt> </tt> +<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-comment"># 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</tt> </tt> +<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt class="py-comment"># This code was initially written by:</tt> </tt> +<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt class="py-comment"># 2010 Dick Kniep <dick.kniep@lindix.nl></tt> </tt> +<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt> +<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"><tt class="py-comment"># Other contributors:</tt> </tt> +<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"><tt class="py-comment"># none so far</tt> </tt> +<a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"> </tt> +<a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt> +<a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module x2go.gevent_subprocess=x2go.gevent_subprocess-module.html"><a title="x2go.gevent_subprocess" class="py-name" href="#" onclick="return doclink('link-0', 'gevent_subprocess', 'link-0');">gevent_subprocess</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">subprocess</tt> </tt> +<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"> </tt> +<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable x2go.__NAME__=x2go-module.html#__NAME__,Variable x2go.client.__NAME__=x2go.client-module.html#__NAME__,Variable x2go.defaults.__NAME__=x2go.defaults-module.html#__NAME__,Variable x2go.forward.__NAME__=x2go.forward-module.html#__NAME__,Variable x2go.guardian.__NAME__=x2go.guardian-module.html#__NAME__,Variable x2go.inifiles.__NAME__=x2go.inifiles-module.html#__NAME__,Variable x2go.log.__NAME__=x2go.log-module.html#__NAME__,Variable x2go.mimetypes.__NAME__=x2go.mimetypes-module.html#__NAME__,Variable x2go.printing.__NAME__=x2go.printing-module.html#__NAME__,Variable x2go.profiles.__NAME__=x2go.profiles-module.html#__NAME__,Variable x2go.proxy.__NAME__=x2go.proxy-module.html#__NAME__,Variable x2go.registry.__NAME__=x2go.registry-module.html#__NAME__,Variable x2go.rforward.__NAME__=x2go.rforward-module.html#__NAME__,Variable x2go.session.__NAME__=x2go.session-mo dule.htm l#__NAME__,Variable x2go.settings.__NAME__=x2go.settings-module.html#__NAME__,Variable x2go.sftpserver.__NAME__=x2go.sftpserver-module.html#__NAME__,Variable x2go.utils.__NAME__=x2go.utils-module.html#__NAME__,Variable x2go.x2go_exceptions.__NAME__=x2go.x2go_exceptions-module.html#__NAME__,Variable x2go.xserver.__NAME__=x2go.xserver-module.html#__NAME__"><a title="x2go.__NAME__ x2go.client.__NAME__ x2go.defaults.__NAME__ x2go.forward.__NAME__ @@ -105,46 +107,49 @@ x2go.settings.__NAME__ x2go.sftpserver.__NAME__ x2go.utils.__NAME__ x2go.x2go_exceptions.__NAME__ -x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-0', '__NAME__', 'link-0');">__NAME__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'x2gosettings-pylib'</tt> </tt> -<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"> </tt> -<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt class="py-comment"># modules</tt> </tt> -<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt> -<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"> </tt> -<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"><tt class="py-comment"># Python X2go modules</tt> </tt> -<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Module x2go.log=x2go.log-module.html"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-1', 'log', 'link-1');">log</a></tt> </tt> -<a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Module x2go.defaults=x2go.defaults-module.html"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-2', 'defaults', 'link-2');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Variable x2go.defaults.X2GO_SETTINGS_CONFIGFILES=x2go.defaults-module.html#X2GO_SETTINGS_CONFIGFILES"><a title="x2go.defaults.X2GO_SETTINGS_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-3', 'X2GO_SETTINGS_CONFIGFILES', 'link-3');">X2GO_SETTINGS_CONFIGFILES</a></tt> </tt> -<a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-4', 'defaults', 'link-2');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Variable x2go.defaults.X2GO_CLIENTSETTINGS_DEFAULTS=x2go.defaults-module.html#X2GO_CLIENTSETTINGS_DEFAULTS"><a title="x2go.defaults.X2GO_CLIENTSETTINGS_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-5', 'X2GO_CLIENTSETTINGS_DEFAULTS', 'link-5');">X2GO_CLIENTSETTINGS_DEFAULTS</a></tt> </tt> -<a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Module x2go.inifiles=x2go.inifiles-module.html"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-6', 'inifiles', 'link-6');">inifiles</a></tt> </tt> -<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"> </tt> -<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"> </tt> -<a name="X2goClientSettings"></a><div id="X2goClientSettings-def"><a name="L41"></a><tt class="py-lineno">41</tt> <a class="py-toggle" href="#" id="X2goClientSettings-toggle" onclick="return toggle('X2goClientSettings');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.settings.X2goClientSettings-class.html">X2goClientSettings</a><tt class="py-op">(</tt><tt class="py-base-class">inifiles</tt><tt class="py-op">.</tt><tt class="py-base-class">X2goIniFile</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> -</div><div id="X2goClientSettings-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="X2goClientSettings-expanded"><a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> -<a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"><tt class="py-docstring"> Configuration file based settings for X2goClient instances.</tt> </tt> -<a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> -<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> -<a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"> <tt id="link-7" class="py-name" targets="Variable x2go.inifiles.X2goIniFile.defaultValues=x2go.inifiles.X2goIniFile-class.html#defaultValues,Variable x2go.printing.X2goClientPrinting.defaultValues=x2go.printing.X2goClientPrinting-class.html#defaultValues,Variable x2go.profiles.X2goSessionProfiles.defaultValues=x2go.profiles.X2goSessionProfiles-class.html#defaultValues,Variable x2go.settings.X2goClientSettings.defaultValues=x2go.settings.X2goClientSettings-class.html#defaultValues,Variable x2go.xserver.X2goClientXConfig.defaultValues=x2go.xserver.X2goClientXConfig-class.html#defaultValues"><a title="x2go.inifiles.X2goIniFile.defaultValues +x2go.xserver.__NAME__" class="py-name" href="#" onclick="return doclink('link-1', '__NAME__', 'link-1');">__NAME__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'x2gosettings-pylib'</tt> </tt> +<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"> </tt> +<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"><tt class="py-comment"># modules</tt> </tt> +<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt> +<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">threading</tt> </tt> +<a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"> </tt> +<a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"><tt class="py-comment"># Python X2go modules</tt> </tt> +<a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Module x2go.log=x2go.log-module.html"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-2', 'log', 'link-2');">log</a></tt> </tt> +<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name" targets="Module x2go.defaults=x2go.defaults-module.html"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-3', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-4" class="py-name" targets="Variable x2go.defaults.X2GO_XCONFIG_CONFIGFILES=x2go.defaults-module.html#X2GO_XCONFIG_CONFIGFILES"><a title="x2go.defaults.X2GO_XCONFIG_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-4', 'X2GO_XCONFIG_CONFIGFILES', 'link-4');">X2GO_XCONFIG_CONFIGFILES</a></tt> </tt> +<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-5" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-5', 'defaults', 'link-3');">defaults</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Variable x2go.defaults.X2GO_CLIENTXCONFIG_DEFAULTS=x2go.defaults-module.html#X2GO_CLIENTXCONFIG_DEFAULTS"><a title="x2go.defaults.X2GO_CLIENTXCONFIG_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-6', 'X2GO_CLIENTXCONFIG_DEFAULTS', 'link-6');">X2GO_CLIENTXCONFIG_DEFAULTS</a></tt> </tt> +<a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Module x2go.inifiles=x2go.inifiles-module.html"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-7', 'inifiles', 'link-7');">inifiles</a></tt> </tt> +<a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"> </tt> +<a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"> </tt> +<a name="X2goClientXConfig"></a><div id="X2goClientXConfig-def"><a name="L44"></a><tt class="py-lineno">44</tt> <a class="py-toggle" href="#" id="X2goClientXConfig-toggle" onclick="return toggle('X2goClientXConfig');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.xserver.X2goClientXConfig-class.html">X2goClientXConfig</a><tt class="py-op">(</tt><tt class="py-base-class">inifiles</tt><tt class="py-op">.</tt><tt class="py-base-class">X2goIniFile</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goClientXConfig-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="X2goClientXConfig-expanded"><a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"><tt class="py-docstring"> Configuration file based XServer startup settings for X2goClient instances.</tt> </tt> +<a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"><tt class="py-docstring"> This class is needed for Windows systems and (maybe soon) for Unix desktops using Wayland.</tt> </tt> +<a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"> <tt id="link-8" class="py-name" targets="Variable x2go.inifiles.X2goIniFile.defaultValues=x2go.inifiles.X2goIniFile-class.html#defaultValues,Variable x2go.printing.X2goClientPrinting.defaultValues=x2go.printing.X2goClientPrinting-class.html#defaultValues,Variable x2go.profiles.X2goSessionProfiles.defaultValues=x2go.profiles.X2goSessionProfiles-class.html#defaultValues,Variable x2go.settings.X2goClientSettings.defaultValues=x2go.settings.X2goClientSettings-class.html#defaultValues,Variable x2go.xserver.X2goClientXConfig.defaultValues=x2go.xserver.X2goClientXConfig-class.html#defaultValues"><a title="x2go.inifiles.X2goIniFile.defaultValues x2go.printing.X2goClientPrinting.defaultValues x2go.profiles.X2goSessionProfiles.defaultValues x2go.settings.X2goClientSettings.defaultValues -x2go.xserver.X2goClientXConfig.defaultValues" class="py-name" href="#" onclick="return doclink('link-7', 'defaultValues', 'link-7');">defaultValues</a></tt> <tt class="py-op">=</tt> <tt id="link-8" class="py-name"><a title="x2go.defaults.X2GO_CLIENTSETTINGS_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-8', 'X2GO_CLIENTSETTINGS_DEFAULTS', 'link-5');">X2GO_CLIENTSETTINGS_DEFAULTS</a></tt> </tt> -<a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"> </tt> -<a name="X2goClientSettings.__init__"></a><div id="X2goClientSettings.__init__-def"><a name="L48"></a><tt class="py-lineno">48</tt> <a class="py-toggle" href="#" id="X2goClientSettings.__init__-toggle" onclick="return toggle('X2goClientSettings.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.settings.X2goClientSettings-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">config_files</tt><tt class="py-op">=</tt><tt id="link-9" class="py-name"><a title="x2go.defaults.X2GO_SETTINGS_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-9', 'X2GO_SETTINGS_CONFIGFILES', 'link-3');">X2GO_SETTINGS_CONFIGFILES</a></tt><tt class="py-op">,</tt> <tt class="py-param">defaults</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-name">None </tt><tt class="py-op">,</tt> <tt class="py-param">loglevel</tt><tt class="py-op">=</tt><tt id="link-10" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-10', 'log', 'link-1');">log</a></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Variable x2go.log.loglevel_DEFAULT=x2go.log-module.html#loglevel_DEFAULT"><a title="x2go.log.loglevel_DEFAULT" class="py-name" href="#" onclick="return doclink('link-11', 'loglevel_DEFAULT', 'link-11');">loglevel_DEFAULT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> -</div><div id="X2goClientSettings.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="X2goClientSettings.__init__-expanded"><a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> -<a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"><tt class="py-docstring"> Constructs an L{X2goClientSettings} instance. This is normally done by an L{X2goClient} instance.</tt> </tt> -<a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"><tt class="py-docstring"> You can retrieve this L{X2goClientSettings} instance with the L{X2goClient.get_client_settings()} </tt> </tt> -<a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"><tt class="py-docstring"> method.</tt> </tt> -<a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> -<a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"><tt class="py-docstring"> On construction the L{X2goClientSettings} object is filled with values from the configuration files::</tt> </tt> -<a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> -<a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"><tt class="py-docstring"> /etc/x2goclient/settings</tt> </tt> -<a name="L57"></a><tt class="py-lineno">57</tt> <tt class="py-line"><tt class="py-docstring"> ~/.x2goclient/settings</tt> </tt> +x2go.xserver.X2goClientXConfig.defaultValues" class="py-name" href="#" onclick="return doclink('link-8', 'defaultValues', 'link-8');">defaultValues</a></tt> <tt class="py-op">=</tt> <tt id="link-9" class="py-name"><a title="x2go.defaults.X2GO_CLIENTXCONFIG_DEFAULTS" class="py-name" href="#" onclick="return doclink('link-9', 'X2GO_CLIENTXCONFIG_DEFAULTS', 'link-6');">X2GO_CLIENTXCONFIG_DEFAULTS</a></tt> </tt> +<a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"> </tt> +<a name="X2goClientXConfig.__init__"></a><div id="X2goClientXConfig.__init__-def"><a name="L53"></a><tt class="py-lineno">53</tt> <a class="py-toggle" href="#" id="X2goClientXConfig.__init__-toggle" onclick="return toggle('X2goClientXConfig.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.xserver.X2goClientXConfig-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">config_files</tt><tt class="py-op">=</tt><tt id="link-10" class="py-name"><a title="x2go.defaults.X2GO_XCONFIG_CONFIGFILES" class="py-name" href="#" onclick="return doclink('link-10', 'X2GO_XCONFIG_CONFIGFILES', 'link-4');">X2GO_XCONFIG_CONFIGFILES</a></tt><tt class="py-op">,</tt> <tt class="py-param">defaults</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">logger</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><t t class= "py-op">,</tt> <tt class="py-param">loglevel</tt><tt class="py-op">=</tt><tt id="link-11" class="py-name"><a title="x2go.log" class="py-name" href="#" onclick="return doclink('link-11', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Variable x2go.log.loglevel_DEFAULT=x2go.log-module.html#loglevel_DEFAULT"><a title="x2go.log.loglevel_DEFAULT" class="py-name" href="#" onclick="return doclink('link-12', 'loglevel_DEFAULT', 'link-12');">loglevel_DEFAULT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goClientXConfig.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="X2goClientXConfig.__init__-expanded"><a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"> <tt class="py-docstring">"""\</tt> </tt> +<a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"><tt class="py-docstring"> Constructs an L{X2goClientXConfig} instance. This is normally done by an L{X2goClient} instance.</tt> </tt> +<a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"><tt class="py-docstring"> You can retrieve this L{X2goClientXConfig} instance with the C{X2goClient.get_client_xconfig()} </tt> </tt> +<a name="L57"></a><tt class="py-lineno">57</tt> <tt class="py-line"><tt class="py-docstring"> method.</tt> </tt> <a name="L58"></a><tt class="py-lineno">58</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> -<a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"><tt class="py-docstring"> The files are read in the specified order and config options of both files are merged. Options </tt> </tt> -<a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"><tt class="py-docstring"> set in the user configuration file (C{~/.x2goclient/settings}) override global options set in</tt> </tt> -<a name="L61"></a><tt class="py-lineno">61</tt> <tt class="py-line"><tt class="py-docstring"> C{/etc/x2goclient/settings}.</tt> </tt> -<a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> -<a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> -<a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"> <tt id="link-12" class="py-name"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-12', 'inifiles', 'link-6');">inifiles</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Class x2go.inifiles.X2goIniFile=x2go.inifiles.X2goIniFile-class.html"><a title="x2go.inifiles.X2goIniFile" class="py-name" href="#" onclick="return doclink('link-13', 'X2goIniFile', 'link-13');">X2goIniFile</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method x2go.client.X2goClient.__init__()=x2go.client.X2goClient-class.html#__init__,Method x2go.forward.X2goFwServer.__init__()=x2go.forward.X2goFwServer-class.html#__init__,Method x2go.gevent_subprocess.Popen.__init__()=x2go.gevent_subprocess.Popen-class.html#__init__,Method x2go.guardian.X2goSessionGuardian.__init__()=x2go.guardian.X2goSessionGuardian-class.html#__init__,Method x2go.inifiles.X2goIniFi le.__ini t__()=x2go.inifiles.X2goIniFile-class.html#__init__,Method x2go.log.X2goLogger.__init__()=x2go.log.X2goLogger-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeAction.__init__()=x2go.mimetypes.X2goMIMETypeAction-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeQueue.__init__()=x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__,Method x2go.mimetypes.X2goPrintJob.__init__()=x2go.mimetypes.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goClientPrinting.__init__()=x2go.printing.X2goClientPrinting-class.html#__init__,Method x2go.printing.X2goPrintAction.__init__()=x2go.printing.X2goPrintAction-class.html#__init__,Method x2go.printing.X2goPrintActionPDFSAVE.__init__()=x2go.printing.X2goPrintActionPDFSAVE-class.html#__init__,Method x2go.printing.X2goPrintActionPDFVIEW.__init__()=x2go.printing.X2goPrintActionPDFVIEW-class.html#__init__,Method x2go.printing.X2goPrintActionPRINT.__init__()=x2go.printing.X2goPrintActionPRINT-class.html#__init__,Method x2go.printing. X2goPrin tActionPRINTCMD.__init__()=x2go.printing.X2goPrintActionPRINTCMD-class.html#__init__,Method x2go.printing.X2goPrintJob.__init__()=x2go.printing.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goPrintQueue.__init__()=x2go.printing.X2goPrintQueue-class.html#__init__,Method x2go.profiles.X2goSessionProfiles.__init__()=x2go.profiles.X2goSessionProfiles-class.html#__init__,Method x2go.proxy.X2goNX3Proxy.__init__()=x2go.proxy.X2goNX3Proxy-class.html#__init__,Method x2go.proxy.X2goProxy.__init__()=x2go.proxy.X2goProxy-class.html#__init__,Method x2go.registry.X2goRegisteredSession.__init__()=x2go.registry.X2goRegisteredSession-class.html#__init__,Method x2go.registry.X2goSessionRegistry.__init__()=x2go.registry.X2goSessionRegistry-class.html#__init__,Method x2go.rforward.X2goRevFwChannelThread.__init__()=x2go.rforward.X2goRevFwChannelThread-class.html#__init__,Method x2go.rforward.X2goRevFwTunnel.__init__()=x2go.rforward.X2goRevFwTunnel-class.html#__init__,Method x2go.sessio n.X2goSe rverSessionList.__init__()=x2go.session.X2goServerSessionList-class.html#__init__,Method x2go.session.X2goSession.__init__()=x2go.session.X2goSession-class.html#__init__,Method x2go.settings.X2goClientSettings.__init__()=x2go.settings.X2goClientSettings-class.html#__init__,Method x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__()=x2go.sftpserver.X2goRevFwTunnelToSFTP-class.html#__init__,Method x2go.xserver.X2goClientXConfig.__init__()=x2go.xserver.X2goClientXConfig-class.html#__init__,Method x2go.xserver.X2goXServer.__init__()=x2go.xserver.X2goXServer-class.html#__init__"><a title="x2go.client.X2goClient.__init__ +<a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"><tt class="py-docstring"> On construction the L{X2goClientXConfig} instance is filled with values from the configuration files::</tt> </tt> +<a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L61"></a><tt class="py-lineno">61</tt> <tt class="py-line"><tt class="py-docstring"> /etc/x2goclient/xconfig</tt> </tt> +<a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"><tt class="py-docstring"> ~/.x2goclient/xconfig</tt> </tt> +<a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"><tt class="py-docstring"> The files are read in the specified order and config options of both files are merged. Options </tt> </tt> +<a name="L65"></a><tt class="py-lineno">65</tt> <tt class="py-line"><tt class="py-docstring"> set in the user configuration file (C{~/.x2goclient/xconfig}) override global options set in</tt> </tt> +<a name="L66"></a><tt class="py-lineno">66</tt> <tt class="py-line"><tt class="py-docstring"> C{/etc/x2goclient/xconfig}.</tt> </tt> +<a name="L67"></a><tt class="py-lineno">67</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L68"></a><tt class="py-lineno">68</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L69"></a><tt class="py-lineno">69</tt> <tt class="py-line"> <tt id="link-13" class="py-name"><a title="x2go.inifiles" class="py-name" href="#" onclick="return doclink('link-13', 'inifiles', 'link-7');">inifiles</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Class x2go.inifiles.X2goIniFile=x2go.inifiles.X2goIniFile-class.html"><a title="x2go.inifiles.X2goIniFile" class="py-name" href="#" onclick="return doclink('link-14', 'X2goIniFile', 'link-14');">X2goIniFile</a></tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Method x2go.client.X2goClient.__init__()=x2go.client.X2goClient-class.html#__init__,Method x2go.forward.X2goFwServer.__init__()=x2go.forward.X2goFwServer-class.html#__init__,Method x2go.gevent_subprocess.Popen.__init__()=x2go.gevent_subprocess.Popen-class.html#__init__,Method x2go.guardian.X2goSessionGuardian.__init__()=x2go.guardian.X2goSessionGuardian-class.html#__init__,Method x2go.inifiles.X2goIniFi le.__ini t__()=x2go.inifiles.X2goIniFile-class.html#__init__,Method x2go.log.X2goLogger.__init__()=x2go.log.X2goLogger-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeAction.__init__()=x2go.mimetypes.X2goMIMETypeAction-class.html#__init__,Method x2go.mimetypes.X2goMIMETypeQueue.__init__()=x2go.mimetypes.X2goMIMETypeQueue-class.html#__init__,Method x2go.mimetypes.X2goPrintJob.__init__()=x2go.mimetypes.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goClientPrinting.__init__()=x2go.printing.X2goClientPrinting-class.html#__init__,Method x2go.printing.X2goPrintAction.__init__()=x2go.printing.X2goPrintAction-class.html#__init__,Method x2go.printing.X2goPrintActionPDFSAVE.__init__()=x2go.printing.X2goPrintActionPDFSAVE-class.html#__init__,Method x2go.printing.X2goPrintActionPDFVIEW.__init__()=x2go.printing.X2goPrintActionPDFVIEW-class.html#__init__,Method x2go.printing.X2goPrintActionPRINT.__init__()=x2go.printing.X2goPrintActionPRINT-class.html#__init__,Method x2go.printing. X2goPrin tActionPRINTCMD.__init__()=x2go.printing.X2goPrintActionPRINTCMD-class.html#__init__,Method x2go.printing.X2goPrintJob.__init__()=x2go.printing.X2goPrintJob-class.html#__init__,Method x2go.printing.X2goPrintQueue.__init__()=x2go.printing.X2goPrintQueue-class.html#__init__,Method x2go.profiles.X2goSessionProfiles.__init__()=x2go.profiles.X2goSessionProfiles-class.html#__init__,Method x2go.proxy.X2goNX3Proxy.__init__()=x2go.proxy.X2goNX3Proxy-class.html#__init__,Method x2go.proxy.X2goProxy.__init__()=x2go.proxy.X2goProxy-class.html#__init__,Method x2go.registry.X2goRegisteredSession.__init__()=x2go.registry.X2goRegisteredSession-class.html#__init__,Method x2go.registry.X2goSessionRegistry.__init__()=x2go.registry.X2goSessionRegistry-class.html#__init__,Method x2go.rforward.X2goRevFwChannelThread.__init__()=x2go.rforward.X2goRevFwChannelThread-class.html#__init__,Method x2go.rforward.X2goRevFwTunnel.__init__()=x2go.rforward.X2goRevFwTunnel-class.html#__init__,Method x2go.sessio n.X2goSe rverSessionList.__init__()=x2go.session.X2goServerSessionList-class.html#__init__,Method x2go.session.X2goSession.__init__()=x2go.session.X2goSession-class.html#__init__,Method x2go.settings.X2goClientSettings.__init__()=x2go.settings.X2goClientSettings-class.html#__init__,Method x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__()=x2go.sftpserver.X2goRevFwTunnelToSFTP-class.html#__init__,Method x2go.xserver.X2goClientXConfig.__init__()=x2go.xserver.X2goClientXConfig-class.html#__init__,Method x2go.xserver.X2goXServer.__init__()=x2go.xserver.X2goXServer-class.html#__init__"><a title="x2go.client.X2goClient.__init__ x2go.forward.X2goFwServer.__init__ x2go.gevent_subprocess.Popen.__init__ x2go.guardian.X2goSessionGuardian.__init__ @@ -173,8 +178,30 @@ x2go.session.X2goSession.__init__ x2go.settings.X2goClientSettings.__init__ x2go.sftpserver.X2goRevFwTunnelToSFTP.__init__ x2go.xserver.X2goClientXConfig.__init__ -x2go.xserver.X2goXServer.__init__" class="py-name" href="#" onclick="return doclink('link-14', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-15" class="py-name" targets="Variable x2go.printing.X2goClientPrinting.config_files=x2go.printing.X2goClientPrinting-class.html#config_files"><a title="x2go.printing.X2goClientPrinting.config_files" class="py-name" href="#" onclick="return doclink('link-15', 'config_files', 'link-15');">config_files</a></tt><tt class="py-op">,</tt> <tt id="link-16" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-16', 'defaults', 'link-2');">defaults</a></tt><tt class="py-op">=</tt><tt id="link-17" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-17', 'defaults', 'link-2');">defaults</a></tt><tt class="py-op">,</tt> <tt class="py-name">logger</tt><tt class="py-op">=</tt><tt c lass="py -name">logger</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt class="py-name">loglevel</tt><tt class="py-op">)</tt> </tt> -</div></div><a name="L65"></a><tt class="py-lineno">65</tt> <tt class="py-line"> </tt><script type="text/javascript"> +x2go.xserver.X2goXServer.__init__" class="py-name" href="#" onclick="return doclink('link-15', '__init__', 'link-15');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-16" class="py-name" targets="Variable x2go.printing.X2goClientPrinting.config_files=x2go.printing.X2goClientPrinting-class.html#config_files"><a title="x2go.printing.X2goClientPrinting.config_files" class="py-name" href="#" onclick="return doclink('link-16', 'config_files', 'link-16');">config_files</a></tt><tt class="py-op">,</tt> <tt id="link-17" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-17', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">=</tt><tt id="link-18" class="py-name"><a title="x2go.defaults" class="py-name" href="#" onclick="return doclink('link-18', 'defaults', 'link-3');">defaults</a></tt><tt class="py-op">,</tt> <tt class="py-name">logger</tt><tt class="py-op">=</tt><tt c lass="py -name">logger</tt><tt class="py-op">,</tt> <tt class="py-name">loglevel</tt><tt class="py-op">=</tt><tt class="py-name">loglevel</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L70"></a><tt class="py-lineno">70</tt> <tt class="py-line"> </tt> +<a name="L71"></a><tt class="py-lineno">71</tt> <tt class="py-line"> </tt> +<a name="X2goXServer"></a><div id="X2goXServer-def"><a name="L72"></a><tt class="py-lineno">72</tt> <a class="py-toggle" href="#" id="X2goXServer-toggle" onclick="return toggle('X2goXServer');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="x2go.xserver.X2goXServer-class.html">X2goXServer</a><tt class="py-op">(</tt><tt class="py-base-class">threading</tt><tt class="py-op">.</tt><tt class="py-base-class">Thread</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goXServer-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="X2goXServer-expanded"><a name="L73"></a><tt class="py-lineno">73</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt> +<a name="L74"></a><tt class="py-lineno">74</tt> <tt class="py-line"><tt class="py-docstring"> This routine will start an XServer if it is not running </tt> </tt> +<a name="L75"></a><tt class="py-lineno">75</tt> <tt class="py-line"><tt class="py-docstring"> already</tt> </tt> +<a name="L76"></a><tt class="py-lineno">76</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="L77"></a><tt class="py-lineno">77</tt> <tt class="py-line"> </tt> +<a name="X2goXServer.__init__"></a><div id="X2goXServer.__init__-def"><a name="L78"></a><tt class="py-lineno">78</tt> <a class="py-toggle" href="#" id="X2goXServer.__init__-toggle" onclick="return toggle('X2goXServer.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="x2go.xserver.X2goXServer-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">XServerParms</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="X2goXServer.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="X2goXServer.__init__-expanded"><a name="L79"></a><tt class="py-lineno">79</tt> <tt class="py-line"> </tt> +<a name="L80"></a><tt class="py-lineno">80</tt> <tt class="py-line"> <tt class="py-name">processname</tt> <tt class="py-op">=</tt> <tt class="py-name">XServerParms</tt><tt class="py-op">.</tt><tt class="py-name">binary</tt> </tt> +<a name="L81"></a><tt class="py-lineno">81</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">(</tt><tt class="py-string">"ps xa"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L82"></a><tt class="py-lineno">82</tt> <tt class="py-line"> <tt class="py-name">fields</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L83"></a><tt class="py-lineno">83</tt> <tt class="py-line"> <tt class="py-name">pid</tt> <tt class="py-op">=</tt> <tt class="py-name">fields</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt> +<a name="L84"></a><tt class="py-lineno">84</tt> <tt class="py-line"> <tt class="py-name">process</tt> <tt class="py-op">=</tt> <tt class="py-name">fields</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> </tt> +<a name="L85"></a><tt class="py-lineno">85</tt> <tt class="py-line"> </tt> +<a name="L86"></a><tt class="py-lineno">86</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">process</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-name">XServerParms</tt><tt class="py-op">.</tt><tt class="py-name">binary</tt><tt class="py-op">)</tt> <tt class="py-op">></tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L87"></a><tt class="py-lineno">87</tt> <tt class="py-line"> <tt class="py-comment"># XServer is already running</tt> </tt> +<a name="L88"></a><tt class="py-lineno">88</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt> +<a name="L89"></a><tt class="py-lineno">89</tt> <tt class="py-line"> </tt> +<a name="L90"></a><tt class="py-lineno">90</tt> <tt class="py-line"> <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-name">subprocess</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Class x2go.gevent_subprocess.Popen=x2go.gevent_subprocess.Popen-class.html"><a title="x2go.gevent_subprocess.Popen" class="py-name" href="#" onclick="return doclink('link-19', 'Popen', 'link-19');">Popen</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">XServerParms</tt><tt class="py-op">.</tt><tt class="py-name">binary</tt><tt class="py-op">,</tt><tt class="py-name">XServerParms</tt><tt class="py-op">.</tt><tt class="py-name">parameters</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">shell</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt> +<a name="L91"></a><tt class="py-lineno">91</tt> <tt class="py-line"> <tt class="py-name">sts</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">waitpid</tt><tt class="py-op">(</tt><tt class="py-name">p</tt><tt class="py-op">.</tt><tt class="py-name">pid</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt> +</div></div><a name="L92"></a><tt class="py-lineno">92</tt> <tt class="py-line"> </tt><script type="text/javascript"> <!-- expandto(location.href); // --> @@ -212,7 +239,7 @@ expandto(location.href); <table border="0" cellpadding="0" cellspacing="0" width="100%%"> <tr> <td align="left" class="footer"> - Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:58 2010 + Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:59 2010 </td> <td align="right" class="footer"> <a target="mainFrame" href="http://epydoc.sourceforge.net" diff --git a/doc/html/x2go.settings.X2goClientSettings-class.html b/doc/html/x2go.xserver.X2goClientXConfig-class.html similarity index 67% copy from doc/html/x2go.settings.X2goClientSettings-class.html copy to doc/html/x2go.xserver.X2goClientXConfig-class.html index 29b43da..71e153e 100644 --- a/doc/html/x2go.settings.X2goClientSettings-class.html +++ b/doc/html/x2go.xserver.X2goClientXConfig-class.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.settings.X2goClientSettings</title> + <title>x2go.xserver.X2goClientXConfig</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,8 +43,8 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - <a href="x2go.settings-module.html">Module settings</a> :: - Class X2goClientSettings + <a href="x2go.xserver-module.html">Module xserver</a> :: + Class X2goClientXConfig </span> </td> <td> @@ -52,24 +52,27 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.settings.X2goClientSettings-class.html" + >] | <a href="x2go.xserver.X2goClientXConfig-class.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> -<h1 class="epydoc">Class X2goClientSettings</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.settings-pysrc.html#X2goClientSettings">source code</a></span></p> +<h1 class="epydoc">Class X2goClientXConfig</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.xserver-pysrc.html#X2goClientXConfig">source code</a></span></p> <pre class="base-tree"> object --+ | <a href="x2go.inifiles.X2goIniFile-class.html">inifiles.X2goIniFile</a> --+ | - <strong class="uidshort">X2goClientSettings</strong> + <strong class="uidshort">X2goClientXConfig</strong> </pre> <hr /> -<p>Configuration file based settings for X2goClient instances.</p> +<p>Configuration file based XServer startup settings for X2goClient + instances.</p> + <p>This class is needed for Windows systems and (maybe soon) for Unix + desktops using Wayland.</p> <!-- ==================== INSTANCE METHODS ==================== --> <a name="section-InstanceMethods"></a> @@ -85,15 +88,15 @@ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.settings.X2goClientSettings-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, - <span class="summary-sig-arg">config_files</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">/etc/x2goclient/settings</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">/home/mike/.x2goclient/settings</code><code class="variable-quote">'</code><code class="variable-group">]</code></span>, + <td><span class="summary-sig"><a href="x2go.xserver.X2goClientXConfig-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">config_files</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">/etc/x2goclient/xconfig</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">/home/mike/.x2goclient/xconfig</code><code class="variable-quote">'</code><code class="variable-group">]</code></span>, <span class="summary-sig-arg">defaults</span>=<span class="summary-sig-default">None</span>, <span class="summary-sig-arg">logger</span>=<span class="summary-sig-default">None</span>, <span class="summary-sig-arg">loglevel</span>=<span class="summary-sig-default">56</span>)</span><br /> - Constructs an <a href="x2go.settings.X2goClientSettings-class.html" - class="link">X2goClientSettings</a> instance.</td> + Constructs an <a href="x2go.xserver.X2goClientXConfig-class.html" + class="link">X2goClientXConfig</a> instance.</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.settings-pysrc.html#X2goClientSettings.__init__">source code</a></span> + <span class="codelink"><a href="x2go.xserver-pysrc.html#X2goClientXConfig.__init__">source code</a></span> </td> </tr> @@ -140,15 +143,7 @@ <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> - <a href="x2go.settings.X2goClientSettings-class.html#defaultValues" class="summary-name">defaultValues</a> = <code title="{'Authorization': {'editprofile': True, - 'newprofile': True, - 'resume': True, - 'suspend': True}, - 'General': {'autoresume': True, 'clientport': 22}, - 'LDAP': {'port': 389, - 'port1': 0, - 'port2': 0, -..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">Authorization</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">editprofile</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">newpr</code><code class="variable-ellipsis">...</code></code> + <a href="x2go.xserver.X2goClientXConfig-class.html#defaultValues" class="summary-name">defaultValues</a> = <code title="{'XServer': {'binary': 'XMing', 'parameters': '', 'stopcommand': ''}}"><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">XServer</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">binary</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">XMing</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">parameters</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-ellipsis">...</code></code> </td> </tr> <tr> @@ -196,37 +191,36 @@ <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, - <span class="sig-arg">config_files</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">/etc/x2goclient/settings</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">/home/mike/.x2goclient/settings</code><code class="variable-quote">'</code><code class="variable-group">]</code></span>, + <span class="sig-arg">config_files</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">/etc/x2goclient/xconfig</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">/home/mike/.x2goclient/xconfig</code><code class="variable-quote">'</code><code class="variable-group">]</code></span>, <span class="sig-arg">defaults</span>=<span class="sig-default">None</span>, <span class="sig-arg">logger</span>=<span class="sig-default">None</span>, <span class="sig-arg">loglevel</span>=<span class="sig-default">56</span>)</span> <br /><em class="fname">(Constructor)</em> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.settings-pysrc.html#X2goClientSettings.__init__">source code</a></span> + ><span class="codelink"><a href="x2go.xserver-pysrc.html#X2goClientXConfig.__init__">source code</a></span> </td> </tr></table> - <p>Constructs an <a href="x2go.settings.X2goClientSettings-class.html" - class="link">X2goClientSettings</a> instance. This is normally done by an + <p>Constructs an <a href="x2go.xserver.X2goClientXConfig-class.html" + class="link">X2goClientXConfig</a> instance. This is normally done by an <a href="x2go.client.X2goClient-class.html" class="link">X2goClient</a> instance. You can retrieve this <a - href="x2go.settings.X2goClientSettings-class.html" - class="link">X2goClientSettings</a> instance with the <a - href="x2go.client.X2goClient-class.html#get_client_settings" - class="link">X2goClient.get_client_settings()</a> method.</p> + href="x2go.xserver.X2goClientXConfig-class.html" + class="link">X2goClientXConfig</a> instance with the + <code>X2goClient.get_client_xconfig()</code> method.</p> <p>On construction the <a - href="x2go.settings.X2goClientSettings-class.html" - class="link">X2goClientSettings</a> object is filled with values from the - configuration files:</p> + href="x2go.xserver.X2goClientXConfig-class.html" + class="link">X2goClientXConfig</a> instance is filled with values from + the configuration files:</p> <pre class="literalblock"> - /etc/x2goclient/settings - ~/.x2goclient/settings + /etc/x2goclient/xconfig + ~/.x2goclient/xconfig </pre> <p>The files are read in the specified order and config options of both files are merged. Options set in the user configuration file - (<code>~/.x2goclient/settings</code>) override global options set in - <code>/etc/x2goclient/settings</code>.</p> + (<code>~/.x2goclient/xconfig</code>) override global options set in + <code>/etc/x2goclient/xconfig</code>.</p> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> @@ -271,15 +265,7 @@ <dl class="fields"> <dt>Value:</dt> <dd><table><tr><td><pre class="variable"> -<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">Authorization</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">editprofile</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">,</code> - <code class="variable-quote">'</code><code class="variable-string">newprofile</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">,</code> - <code class="variable-quote">'</code><code class="variable-string">resume</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">,</code> - <code class="variable-quote">'</code><code class="variable-string">suspend</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-group">}</code><code class="variable-op">,</code> - <code class="variable-quote">'</code><code class="variable-string">General</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">autoresume</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">clientport</code><code class="variable-quote">'</code><code class="variable-op">: </code>22<code class="variable-group">}</code><code class="variable-op">,</code> - <code class="variable-quote">'</code><code class="variable-string">LDAP</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">port</code><code class="variable-quote">'</code><code class="variable-op">: </code>389<code class="variable-op">,</code> - <code class="variable-quote">'</code><code class="variable-string">port1</code><code class="variable-quote">'</code><code class="variable-op">: </code>0<code class="variable-op">,</code> - <code class="variable-quote">'</code><code class="variable-string">port2</code><code class="variable-quote">'</code><code class="variable-op">: </code>0<code class="variable-op">,</code> -<code class="variable-ellipsis">...</code> +<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">XServer</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">binary</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">XMing</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">parameters</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">stopcommand</code><code class="variable-quote">'</code><code class="variable-op">: </code> <code cl ass="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-group">}</code><code class="variable-group">}</code> </pre></td></tr></table> </dd> </dl> diff --git a/doc/html/x2go.printing.X2goPrintJob-class.html b/doc/html/x2go.xserver.X2goXServer-class.html similarity index 82% copy from doc/html/x2go.printing.X2goPrintJob-class.html copy to doc/html/x2go.xserver.X2goXServer-class.html index ff38e3c..d9e5774 100644 --- a/doc/html/x2go.printing.X2goPrintJob-class.html +++ b/doc/html/x2go.xserver.X2goXServer-class.html @@ -3,7 +3,7 @@ "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <title>x2go.printing.X2goPrintJob</title> + <title>x2go.xserver.X2goXServer</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> @@ -43,8 +43,8 @@ <td width="100%"> <span class="breadcrumbs"> <a href="x2go-module.html">Package x2go</a> :: - <a href="x2go.printing-module.html">Module printing</a> :: - Class X2goPrintJob + <a href="x2go.xserver-module.html">Module xserver</a> :: + Class X2goXServer </span> </td> <td> @@ -52,14 +52,14 @@ <!-- hide/show private --> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a - >] | <a href="x2go.printing.X2goPrintJob-class.html" + >] | <a href="x2go.xserver.X2goXServer-class.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> -<h1 class="epydoc">Class X2goPrintJob</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob">source code</a></span></p> +<h1 class="epydoc">Class X2goXServer</h1><p class="nomargin-top"><span class="codelink"><a href="x2go.xserver-pysrc.html#X2goXServer">source code</a></span></p> <pre class="base-tree"> object --+ | @@ -67,15 +67,11 @@ threading._Verbose --+ | threading.Thread --+ | - <strong class="uidshort">X2goPrintJob</strong> + <strong class="uidshort">X2goXServer</strong> </pre> <hr /> -<p>For each X2go print job we create a sub-thread that let's the print - job be processed in the background.</p> - <p>As a handler for this class the function <a - href="x2go.printing-module.html#x2go_printjob_handler" - class="link">x2go_printjob_handler()</a> is used.</p> +<p>This routine will start an XServer if it is not running already</p> <!-- ==================== INSTANCE METHODS ==================== --> <a name="section-InstanceMethods"></a> @@ -91,11 +87,11 @@ threading._Verbose --+ </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> - <td><span class="summary-sig"><a href="x2go.printing.X2goPrintJob-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, - <span class="summary-sig-arg">**kwargs</span>)</span><br /> - Construct the X2go print job thread...</td> + <td><span class="summary-sig"><a href="x2go.xserver.X2goXServer-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">XServerParms</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> <td align="right" valign="top"> - <span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob.__init__">source code</a></span> + <span class="codelink"><a href="x2go.xserver-pysrc.html#X2goXServer.__init__">source code</a></span> </td> </tr> @@ -171,20 +167,20 @@ threading._Verbose --+ <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, - <span class="sig-arg">**kwargs</span>)</span> + <span class="sig-arg">XServerParms</span>)</span> <br /><em class="fname">(Constructor)</em> </h3> </td><td align="right" valign="top" - ><span class="codelink"><a href="x2go.printing-pysrc.html#X2goPrintJob.__init__">source code</a></span> + ><span class="codelink"><a href="x2go.xserver-pysrc.html#X2goXServer.__init__">source code</a></span> </td> </tr></table> - <p>Construct the X2go print job thread...</p> - <p>All parameters (**kwargs) are passed through to the constructor of - <code>threading.Thread()</code>.</p> + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> <dl class="fields"> <dt>Overrides: object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> </dt> </dl> </td></tr></table> @@ -221,7 +217,7 @@ threading._Verbose --+ <table border="0" cellpadding="0" cellspacing="0" width="100%%"> <tr> <td align="left" class="footer"> - Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:56 2010 + Generated by Epydoc 3.0.1 on Fri Nov 19 21:33:57 2010 </td> <td align="right" class="footer"> <a target="mainFrame" href="http://epydoc.sourceforge.net" diff --git a/x2go/gevent_subprocess.py b/x2go/gevent_subprocess.py new file mode 100644 index 0000000..79ed23e --- /dev/null +++ b/x2go/gevent_subprocess.py @@ -0,0 +1,197 @@ +# -*- coding: utf-8 -*- + +# Copyright (C) 2010 by Mike Gabriel <m.gabriel@das-netzwerkteam.de> +# +# Python X2go is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Python X2go is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +# found here: http://groups.google.com/group/gevent/browse_thread/thread/dba1a5d29e0a60ff +# Mark Visser <mjmvisser@gmail.com> + +"""Implementation of the standard :mod:`subprocess` module that spawns greenlets""" +import errno +import sys +import fcntl, os + +_subprocess = __import__('subprocess') + +from gevent import socket, select, hub + +# identical to original +CalledProcessError = _subprocess.CalledProcessError +MAXFD = _subprocess.MAXFD +PIPE = _subprocess.PIPE +STDOUT = _subprocess.STDOUT +call = _subprocess.call +check_call = _subprocess.check_call +list2cmdline = _subprocess.list2cmdline + + +class Popen(object): + def __init__(self, *args, **kwargs): + # delegate to an actual Popen object + self.__p = _subprocess.Popen(*args, **kwargs) + # make the file handles nonblocking + if self.stdin is not None: + fcntl.fcntl(self.stdin, fcntl.F_SETFL, os.O_NONBLOCK) + if self.stdout is not None: + fcntl.fcntl(self.stdout, fcntl.F_SETFL, os.O_NONBLOCK) + if self.stderr is not None: + fcntl.fcntl(self.stderr, fcntl.F_SETFL, os.O_NONBLOCK) + + def __getattr__(self, name): + # delegate attribute lookup to the real Popen object + return getattr(self.__p, name) + + def _write_pipe(self, f, input): + # writes the given input to f without blocking + if input: + bytes_total = len(input) + bytes_written = 0 + while bytes_written < bytes_total: + try: + # f.write() doesn't return anything, so use os.write. + bytes_written += os.write(f.fileno(), input[bytes_written:]) + except IOError, ex: + if ex[0] != errno.EAGAIN: + raise + sys.exc_clear() + socket.wait_write(f.fileno()) + f.close() + + def _read_pipe(self, f): + # reads output from f without blocking + # returns output + chunks = [] + while True: + try: + chunk = f.read(4096) + if not chunk: + break + chunks.append(chunk) + except IOError, ex: + if ex[0] != errno.EAGAIN: + raise + sys.exc_clear() + socket.wait_read(f.fileno()) + f.close() + return ''.join(chunks) + + def communicate(self, input=None): + # Optimization: If we are only using one pipe, or no pipe at + # all, using select() is unnecessary. + if [self.stdin, self.stdout, self.stderr].count(None) >= 2: + stdout = None + stderr = None + if self.stdin: + self._write_pipe(self.stdin, input) + elif self.stdout: + stdout = self._read_pipe(self.stdout) + elif self.stderr: + stderr = self._read_pipe(self.stderr) + self.wait() + return (stdout, stderr) + else: + return self._communicate(input) + + def _communicate(self, input): + # identical to original... all the heavy lifting is done + # in gevent.select.select + read_set = [] + write_set = [] + stdout = None # Return + stderr = None # Return + + if self.stdin: + # Flush stdin buffer. + self.stdin.flush() + if input: + write_set.append(self.stdin) + else: + self.stdin.close() + if self.stdout: + read_set.append(self.stdout) + stdout = [] + if self.stderr: + read_set.append(self.stderr) + stderr = [] + + input_offset = 0 + while read_set or write_set: + try: + rlist, wlist, xlist = select.select(read_set, write_set, []) + except select.error, e: + if e.args[0] == errno.EINTR: + continue + raise + + if self.stdin in wlist: + # When select has indicated that the file is writable, + # we can write up to PIPE_BUF bytes without risk + # blocking. POSIX defines PIPE_BUF >= 512 + bytes_written = os.write(self.stdin.fileno(), buffer(input, input_offset, 512)) + input_offset += bytes_written + if input_offset >= len(input): + self.stdin.close() + write_set.remove(self.stdin) + + if self.stdout in rlist: + data = os.read(self.stdout.fileno(), 1024) + if data == "": + self.stdout.close() + read_set.remove(self.stdout) + stdout.append(data) + + if self.stderr in rlist: + data = os.read(self.stderr.fileno(), 1024) + if data == "": + self.stderr.close() + read_set.remove(self.stderr) + stderr.append(data) + + # All data exchanged. Translate lists into strings. + if stdout is not None: + stdout = ''.join(stdout) + if stderr is not None: + stderr = ''.join(stderr) + + # Translate newlines, if requested. We cannot let the file + # object do the translation: It is based on stdio, which is + # impossible to combine with select (unless forcing no + # buffering). + if self.universal_newlines and hasattr(file, 'newlines'): + if stdout: + stdout = self._translate_newlines(stdout) + if stderr: + stderr = self._translate_newlines(stderr) + + self.wait() + return (stdout, stderr) + + def wait(self, check_interval=0.01): + # non-blocking, use hub.sleep + try: + while True: + status = self.poll() + if status >= 0: + return status + hub.sleep(check_interval) + except OSError, e: + if e.errno == errno.ECHILD: + # no child process, this happens if the child process + # already died and has been cleaned up + return -1 + else: + raise \ No newline at end of file diff --git a/x2go/mimetypes.py b/x2go/mimetypes.py new file mode 100644 index 0000000..f46e6ee --- /dev/null +++ b/x2go/mimetypes.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (C) 2010 by Mike Gabriel <m.gabriel@das-netzwerkteam.de> +# +# Python X2go is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Python X2go is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +"""\ +STILL UNDOCUMENTED + +""" +__NAME__ = 'x2gomimetypes-pylib' + +# modules +import sys, os, shutil, copy +import subprocess +import types +import threading +import gevent +import inifiles +import cStringIO +import ConfigParser + +if sys.platform == 'win32': + import win32api + + +# Python X2go modules +import log +import defaults +# we hide the default values from epydoc (that's why we transform them to _UNDERSCORE variables) +from defaults import LOCAL_HOME as _LOCAL_HOME +from defaults import X2GO_CLIENT_ROOTDIR as _X2GO_CLIENT_ROOTDIR +from defaults import X2GO_CLIENTPRINTING_DEFAULTS as _X2GO_CLIENTPRINTING_DEFAULTS +from defaults import X2GO_PRINTING_CONFIGFILES as _X2GO_PRINTING_CONFIGFILES +import utils +import inifiles + +class X2goMIMETypeAction(object): + + __name__ = 'MIME' + __description__ = 'Execute a command depending on an incoming file\'s MIME type' + + def __init__(self, logger=None, loglevel=log.loglevel_DEFAULT): + """\ + STILL UNDOCUMENTED + + @param logger: you can pass an L{X2goLogger} object to the + L{X2goMIMETypeAction} constructor + @type logger: C{instance} + @param loglevel: if no L{X2goLogger} object has been supplied a new one will be + constructed with the given loglevel + @type loglevel: C{int} + + """ + if logger is None: + self.logger = log.X2goLogger(loglevel=loglevel) + else: + self.logger = copy.deepcopy(logger) + self.logger.tag = __NAME__ + + def do_execute(self, mime_file, mime_type_dir, ): + """\ + Perform the defined print action (doing nothing in L{X2goPrintAction} parent class). + + @param mime_file: name of the incoming file + @type mime_file: C{str} + @param mime_type_dir: location of the X2go client's spool directory for incoming MIME files + @type mime_type_dir: C{str} + + """ + if sys.platform == "win32": + self.logger('processing an incoming MIME file with Python\'s os.startfile(): %s' % mime_file, loglevel=log.loglevel_DEBUG) + os.startfile(mime_file) + else: + cmd_line = [ 'xdg-open', mime_file, ] + self.logger('processing an incoming MIME file with command: %s' % ' '.join(cmd_line), loglevel=log.loglevel_DEBUG) + p = subprocess.Popen(cmd_line, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=_PRINT_ENV) + # this is nasty!!!! + self.logger('giving PDF viewer 20s to get the PDF file %s loaded' % _hr_filename, loglevel=log.loglevel_DEBUG) + gevent.sleep(20) + os.remove(mime_file) + + +class X2goMIMETypeQueue(threading.Thread): + """\ + STILL UNDOCUMENTED + + """ + print_action = None + + spooldir = None + active_jobs = {} + job_history = [] + + def __init__(self, logger=None, loglevel=log.loglevel_DEFAULT): + """\ + STILL UNDOCUMENTED + + @param logger: you can pass an L{X2goLogger} object to the + L{X2goProxy} constructor + @type logger: C{instance} + @param loglevel: if no L{X2goLogger} object has been supplied a new one will be + constructed with the given loglevel + @type loglevel: C{int} + + """ + if logger is None: + self.logger = log.X2goLogger(loglevel=loglevel) + else: + self.logger = copy.deepcopy(logger) + self.logger.tag = __NAME__ + + threading.Thread.__init__(self) + self.daemon = True + self._accept_jobs = True + + def __del__(self): + self.stop_thread() + + def pause(self): + """\ + Prevent acceptance of new incoming MIME type files. The processing of MIME type files + that are currently still active will be completed, though. + + """ + if self._accept_jobs == True: + self._accept_jobs = False + self.logger('paused thread: %s' % repr(self), loglevel=log.loglevel_DEBUG) + + def resume(self): + """\ + Resume operation of the X2go MIME type thread and continue accepting new incoming + MIME type files. + + """ + if self._accept_jobs == False: + self._accept_jobs = True + self.logger('resumed thread: %s' % repr(self), loglevel=log.loglevel_DEBUG) + + def stop_thread(self): + """\ + Stops this L{X2goMIMETypeQueue} thread completely. + + """ + self.pause() + self._keepalive = False + self.logger('stopping thread: %s' % repr(self), loglevel=log.loglevel_DEBUG) + + @property + def _incoming_mime_files(self): + + l = os.listdir(self.mime_type_dir) + mime_files = [] + for _job_file in job_files: + j = open(os.path.join(self.spool_dir, _job_file), 'r') + content = j.read() + (pdf_filename, job_title) = content.split('\n')[0:2] + j.close() + jobs.append((_job_file, pdf_filename, job_title)) + return [ j for j in jobs if j[1] not in self.active_jobs.keys() ] + + def set_print_action(self, print_action, **kwargs): + """\ + Modify the print action of this L{X2goPrintQueue} thread during runtime. The + change of print action will be valid for the next incoming print job. + + """ + if print_action in defaults.X2GO_PRINT_ACTIONS.keys(): + print_action = defaults.X2GO_PRINT_ACTIONS[print_action] + + if print_action in defaults.X2GO_PRINT_ACTIONS.values(): + self.print_action = print_action(**kwargs) + + def run(self): + """\ + Start this L{X2goPrintQueue} thread... + + """ + self.logger('starting print queue thread: %s' % repr(self), loglevel=log.loglevel_DEBUG) + + self._keepalive = True + while self._keepalive: + + while self._accept_jobs: + + if self._incoming_print_jobs: + + for _job in self._incoming_print_jobs: + self.logger('incoming print job: %s' % _job[1], loglevel=log.loglevel_DEBUG) + _new_printjob_thread = X2goPrintJob(target=x2go_printjob_handler, + kwargs={ + 'job_file': _job[0], + 'pdf_file': _job[1], + 'job_title': _job[2], + 'print_action': self.print_action, + 'parent_thread': self, + 'logger': self.logger, + } + ) + self.active_jobs['%s' % _job[1]] = _new_printjob_thread + _new_printjob_thread.start() + + gevent.sleep(3) + + gevent.sleep(1) + + +def x2go_printjob_handler(job_file=None, pdf_file=None, job_title=None, print_action=None, parent_thread=None, logger=None, ): + """\ + This function is called as a handler function for each incoming X2go print job + represented by the class L{X2goPrintJob}. + + The handler function will (re-)read the »printing« configuration file (if no + explicit C{print_action} is passed to this function...). It then will + execute the C{<print_action>.do_print()} command. + + @param pdf_file: PDF file name as placed in to the X2go spool directory + @type pdf_file: C{str} + @param job_title: human readable print job title + @type job_title: C{str} + @param print_action: an instance of either of the possible C{X2goPrintActionXXX} classes + @type print_action: C{X2goPrintActionXXX} nstance + @param parent_thread: the L{X2goPrintQueue} thread that actually created this handler's L{X2goPrintJob} instance + @type parent_thread: C{instance} + @param logger: the L{X2goPrintQueue}'s logging instance + @type logger: C{instance} + + """ + if print_action is None: + _printing = X2goClientPrinting(logger=logger) + print_action = _printing.print_action + + logger('action for printing is: %s' % print_action, loglevel=log.loglevel_DEBUG) + print_action.do_print(pdf_file=os.path.join(parent_thread.spool_dir, pdf_file), + job_title=job_title, + spool_dir=parent_thread.spool_dir, + ) + + logger('removing print job files for %s' % pdf_file, loglevel=log.loglevel_DEBUG) + os.remove(os.path.join(parent_thread.spool_dir, job_file)) + os.remove(os.path.join(parent_thread.spool_dir, pdf_file)) + + del parent_thread.active_jobs['%s' % pdf_file] + parent_thread.job_history.append(pdf_file) + + +class X2goPrintJob(threading.Thread): + """\ + For each X2go print job we create a sub-thread that let's + the print job be processed in the background. + + As a handler for this class the function L{x2go_printjob_handler()} + is used. + + """ + def __init__(self, **kwargs): + """\ + Construct the X2go print job thread... + + All parameters (**kwargs) are passed through to the constructor + of C{threading.Thread()}. + + """ + threading.Thread.__init__(self, **kwargs) + self.daemon = True + + diff --git a/x2go/xserver.py b/x2go/xserver.py new file mode 100644 index 0000000..e72a0bf --- /dev/null +++ b/x2go/xserver.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- + +# -*- coding: utf-8 -*- + +# Copyright (C) 2010 by Mike Gabriel <m.gabriel@das-netzwerkteam.de> +# +# Python X2go is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Python X2go is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +# +# This code was initially written by: +# 2010 Dick Kniep <dick.kniep@lindix.nl> +# +# Other contributors: +# none so far + +import os +import gevent_subprocess as subprocess + +__NAME__ = 'x2gosettings-pylib' + +# modules +import os +import threading + +# Python X2go modules +import log +from defaults import X2GO_XCONFIG_CONFIGFILES +from defaults import X2GO_CLIENTXCONFIG_DEFAULTS +import inifiles + + +class X2goClientXConfig(inifiles.X2goIniFile): + """\ + Configuration file based XServer startup settings for X2goClient instances. + + This class is needed for Windows systems and (maybe soon) for Unix desktops using Wayland. + + """ + defaultValues = X2GO_CLIENTXCONFIG_DEFAULTS + + def __init__(self, config_files=X2GO_XCONFIG_CONFIGFILES, defaults=None, logger=None, loglevel=log.loglevel_DEFAULT): + """\ + Constructs an L{X2goClientXConfig} instance. This is normally done by an L{X2goClient} instance. + You can retrieve this L{X2goClientXConfig} instance with the C{X2goClient.get_client_xconfig()} + method. + + On construction the L{X2goClientXConfig} instance is filled with values from the configuration files:: + + /etc/x2goclient/xconfig + ~/.x2goclient/xconfig + + The files are read in the specified order and config options of both files are merged. Options + set in the user configuration file (C{~/.x2goclient/xconfig}) override global options set in + C{/etc/x2goclient/xconfig}. + + """ + inifiles.X2goIniFile.__init__(self, config_files, defaults=defaults, logger=logger, loglevel=loglevel) + + +class X2goXServer(threading.Thread): + """ + This routine will start an XServer if it is not running + already + """ + + def __init__(self, XServerParms): + + processname = XServerParms.binary + for line in os.popen("ps xa"): + fields = line.split() + pid = fields[0] + process = fields[4] + + if process.find(XServerParms.binary) > 0: + # XServer is already running + return + + p = subprocess.Popen([XServerParms.binary,XServerParms.parameters], shell=True) + sts = os.waitpid(p.pid, 0)[1] + hooks/post-receive -- python-x2go.git (Python X2Go Client API) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "python-x2go.git" (Python X2Go Client API).