Codebase list clustershell / 3512cc2
Imported Upstream version 1.3.3 SVN-Git Migration 6 years ago
277 changed file(s) with 826 addition(s) and 54528 deletion(s). Raw diff Collapse all Expand all
0 2010-10-20 S. Thiell <stephane.thiell@cea.fr>
1
2 * Version 1.3.3 released.
3
4 * Task.py: Docstring improvements (trac tickets #120, #122).
5
6 * scripts/clush.py: Backport 1.4 minor bugfix on clush -b progress
7 counter, ie. do not display it when the command is fast -- not always seen
8 as the prompt could hide that minor problem.
9
10 2010-10-19 S. Thiell <stephane.thiell@cea.fr>
11
12 * Worker/Popen.py: Fix stderr pipe leak (trac ticket #121).
13 * Worker/Ssh.py: Fix stderr pipe leak (trac ticket #121).
14 * Worker/Pdsh.py: Fix stderr pipe leak (trac ticket #121).
15
16 * tests/TaskRLimitsTest.py: New test.
17
18 2010-09-10 S. Thiell <stephane.thiell@cea.fr>
19
20 * Version 1.3.2 released.
21
22 * clustershell.spec.in: Last fixes (Fedora approved).
23
24 * scripts/clush.py: Removed duplicate add_option_group() (Output behaviour
25 option group was displayed twice in clush -h).
26
27 2010-09-03 S. Thiell <stephane.thiell@cea.fr>
28
29 * Version 1.3.1 released.
30
31 * Worker/Ssh.py: Fix issue with clush -l USER by separating underlying ssh
32 "-l USER" in two shell arguments (trac ticket #113).
33
34 2010-08-31 S. Thiell <stephane.thiell@cea.fr>
35
36 * scripts/clush.py: Live per-line gathering (-bL mode) improvements.
37
38 * Task.py: Fixed Task.timer() when called from another thread - it used to
39 return None (trac ticket #112).
40
41 2010-08-29 S. Thiell <stephane.thiell@cea.fr>
42
43 * Task.py: Add docstring for timer's autoclose feature (trac ticket #109).
44
45 * Worker/Worker.py: Attribute 'last_errmsg' not properly initialized (trac
46 ticket #107).
47
48 * setup.py: Switch to setuptools.
49
50 * clustershell.spec.in: Fix issue on el5 with if condition when defining
51 python_sitelib.
52
53 2010-08-26 S. Thiell <stephane.thiell@cea.fr>
54
55 * Packaging automation engineering and improved specfile.
56
57 * License files converted to UTF-8.
58
059 2010-07-27 S. Thiell <stephane.thiell@cea.fr>
160
261 * Version 1.3 released.
1818 The authors of the CeCILL-C (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
1919 license are:
2020
21 Commissariat à l'Energie Atomique - CEA, a public scientific, technical
21 Commissariat à l'Energie Atomique - CEA, a public scientific, technical
2222 and industrial research establishment, having its principal place of
2323 business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France.
2424
337337
338338 The Licensee undertakes not to directly or indirectly infringe the
339339 intellectual property rights of the Holder and/or Contributors on the
340 Software and to take, where applicable, vis-à-vis its staff, any and all
340 Software and to take, where applicable, vis-à-vis its staff, any and all
341341 measures required to ensure respect of said intellectual property rights
342342 of the Holder and/or Contributors.
343343
44 Avertissement
55
66 Ce contrat est une licence de logiciel libre issue d'une concertation
7 entre ses auteurs afin que le respect de deux grands principes préside à
8 sa rédaction:
7 entre ses auteurs afin que le respect de deux grands principes préside à
8 sa rédaction:
99
1010 * d'une part, le respect des principes de diffusion des logiciels
11 libres: accès au code source, droits étendus conférés aux
11 libres: accès au code source, droits étendus conférés aux
1212 utilisateurs,
13 * d'autre part, la désignation d'un droit applicable, le droit
14 français, auquel elle est conforme, tant au regard du droit de la
15 responsabilité civile que du droit de la propriété intellectuelle
13 * d'autre part, la désignation d'un droit applicable, le droit
14 français, auquel elle est conforme, tant au regard du droit de la
15 responsabilité civile que du droit de la propriété intellectuelle
1616 et de la protection qu'il offre aux auteurs et titulaires des
1717 droits patrimoniaux sur un logiciel.
1818
1919 Les auteurs de la licence CeCILL-C (pour Ce[a] C[nrs] I[nria] L[ogiciel]
2020 L[ibre]) sont:
2121
22 Commissariat à l'Energie Atomique - CEA, établissement public de
23 recherche à caractère scientifique, technique et industriel, dont le
24 siège est situé 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris.
25
26 Centre National de la Recherche Scientifique - CNRS, établissement
27 public à caractère scientifique et technologique, dont le siège est
28 situé 3 rue Michel-Ange, 75794 Paris cedex 16.
22 Commissariat à l'Energie Atomique - CEA, établissement public de
23 recherche à caractère scientifique, technique et industriel, dont le
24 siège est situé 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris.
25
26 Centre National de la Recherche Scientifique - CNRS, établissement
27 public à caractère scientifique et technologique, dont le siège est
28 situé 3 rue Michel-Ange, 75794 Paris cedex 16.
2929
3030 Institut National de Recherche en Informatique et en Automatique -
31 INRIA, établissement public à caractère scientifique et technologique,
32 dont le siège est situé Domaine de Voluceau, Rocquencourt, BP 105, 78153
31 INRIA, établissement public à caractère scientifique et technologique,
32 dont le siège est situé Domaine de Voluceau, Rocquencourt, BP 105, 78153
3333 Le Chesnay cedex.
3434
3535
36 Préambule
36 Préambule
3737
3838 Ce contrat est une licence de logiciel libre dont l'objectif est de
39 conférer aux utilisateurs la liberté de modifier et de réutiliser le
40 logiciel régi par cette licence.
41
42 L'exercice de cette liberté est assorti d'une obligation de remettre à
43 la disposition de la communauté les modifications apportées au code
44 source du logiciel afin de contribuer à son évolution.
45
46 L'accessibilité au code source et les droits de copie, de modification
47 et de redistribution qui découlent de ce contrat ont pour contrepartie
48 de n'offrir aux utilisateurs qu'une garantie limitée et de ne faire
39 conférer aux utilisateurs la liberté de modifier et de réutiliser le
40 logiciel régi par cette licence.
41
42 L'exercice de cette liberté est assorti d'une obligation de remettre à
43 la disposition de la communauté les modifications apportées au code
44 source du logiciel afin de contribuer à son évolution.
45
46 L'accessibilité au code source et les droits de copie, de modification
47 et de redistribution qui découlent de ce contrat ont pour contrepartie
48 de n'offrir aux utilisateurs qu'une garantie limitée et de ne faire
4949 peser sur l'auteur du logiciel, le titulaire des droits patrimoniaux et
50 les concédants successifs qu'une responsabilité restreinte.
51
52 A cet égard l'attention de l'utilisateur est attirée sur les risques
53 associés au chargement, à l'utilisation, à la modification et/ou au
54 développement et à la reproduction du logiciel par l'utilisateur étant
55 donné sa spécificité de logiciel libre, qui peut le rendre complexe à
56 manipuler et qui le réserve donc à des développeurs ou des
57 professionnels avertis possédant des connaissances informatiques
58 approfondies. Les utilisateurs sont donc invités à charger et tester
59 l'adéquation du logiciel à leurs besoins dans des conditions permettant
60 d'assurer la sécurité de leurs systèmes et/ou de leurs données et, plus
61 généralement, à l'utiliser et l'exploiter dans les mêmes conditions de
62 sécurité. Ce contrat peut être reproduit et diffusé librement, sous
63 réserve de le conserver en l'état, sans ajout ni suppression de clauses.
64
65 Ce contrat est susceptible de s'appliquer à tout logiciel dont le
66 titulaire des droits patrimoniaux décide de soumettre l'exploitation aux
50 les concédants successifs qu'une responsabilité restreinte.
51
52 A cet égard l'attention de l'utilisateur est attirée sur les risques
53 associés au chargement, à l'utilisation, à la modification et/ou au
54 développement et à la reproduction du logiciel par l'utilisateur étant
55 donné sa spécificité de logiciel libre, qui peut le rendre complexe à
56 manipuler et qui le réserve donc à des développeurs ou des
57 professionnels avertis possédant des connaissances informatiques
58 approfondies. Les utilisateurs sont donc invités à charger et tester
59 l'adéquation du logiciel à leurs besoins dans des conditions permettant
60 d'assurer la sécurité de leurs systèmes et/ou de leurs données et, plus
61 généralement, à l'utiliser et l'exploiter dans les mêmes conditions de
62 sécurité. Ce contrat peut être reproduit et diffusé librement, sous
63 réserve de le conserver en l'état, sans ajout ni suppression de clauses.
64
65 Ce contrat est susceptible de s'appliquer à tout logiciel dont le
66 titulaire des droits patrimoniaux décide de soumettre l'exploitation aux
6767 dispositions qu'il contient.
6868
6969
7070 Article 1 - DEFINITIONS
7171
72 Dans ce contrat, les termes suivants, lorsqu'ils seront écrits avec une
72 Dans ce contrat, les termes suivants, lorsqu'ils seront écrits avec une
7373 lettre capitale, auront la signification suivante:
7474
75 Contrat: désigne le présent contrat de licence, ses éventuelles versions
76 postérieures et annexes.
77
78 Logiciel: désigne le logiciel sous sa forme de Code Objet et/ou de Code
79 Source et le cas échéant sa documentation, dans leur état au moment de
80 l'acceptation du Contrat par le Licencié.
81
82 Logiciel Initial: désigne le Logiciel sous sa forme de Code Source et
83 éventuellement de Code Objet et le cas échéant sa documentation, dans
84 leur état au moment de leur première diffusion sous les termes du Contrat.
85
86 Logiciel Modifié: désigne le Logiciel modifié par au moins une
87 Contribution Intégrée.
88
89 Code Source: désigne l'ensemble des instructions et des lignes de
90 programme du Logiciel et auquel l'accès est nécessaire en vue de
75 Contrat: désigne le présent contrat de licence, ses éventuelles versions
76 postérieures et annexes.
77
78 Logiciel: désigne le logiciel sous sa forme de Code Objet et/ou de Code
79 Source et le cas échéant sa documentation, dans leur état au moment de
80 l'acceptation du Contrat par le Licencié.
81
82 Logiciel Initial: désigne le Logiciel sous sa forme de Code Source et
83 éventuellement de Code Objet et le cas échéant sa documentation, dans
84 leur état au moment de leur première diffusion sous les termes du Contrat.
85
86 Logiciel Modifié: désigne le Logiciel modifié par au moins une
87 Contribution Intégrée.
88
89 Code Source: désigne l'ensemble des instructions et des lignes de
90 programme du Logiciel et auquel l'accès est nécessaire en vue de
9191 modifier le Logiciel.
9292
93 Code Objet: désigne les fichiers binaires issus de la compilation du
93 Code Objet: désigne les fichiers binaires issus de la compilation du
9494 Code Source.
9595
96 Titulaire: désigne le ou les détenteurs des droits patrimoniaux d'auteur
96 Titulaire: désigne le ou les détenteurs des droits patrimoniaux d'auteur
9797 sur le Logiciel Initial.
9898
99 Licencié: désigne le ou les utilisateurs du Logiciel ayant accepté le
99 Licencié: désigne le ou les utilisateurs du Logiciel ayant accepté le
100100 Contrat.
101101
102 Contributeur: désigne le Licencié auteur d'au moins une Contribution
103 Intégrée.
104
105 Concédant: désigne le Titulaire ou toute personne physique ou morale
102 Contributeur: désigne le Licencié auteur d'au moins une Contribution
103 Intégrée.
104
105 Concédant: désigne le Titulaire ou toute personne physique ou morale
106106 distribuant le Logiciel sous le Contrat.
107107
108 Contribution Intégrée: désigne l'ensemble des modifications,
109 corrections, traductions, adaptations et/ou nouvelles fonctionnalités
110 intégrées dans le Code Source par tout Contributeur.
111
112 Module Lié: désigne un ensemble de fichiers sources y compris leur
113 documentation qui, sans modification du Code Source, permet de réaliser
114 des fonctionnalités ou services supplémentaires à ceux fournis par le
108 Contribution Intégrée: désigne l'ensemble des modifications,
109 corrections, traductions, adaptations et/ou nouvelles fonctionnalités
110 intégrées dans le Code Source par tout Contributeur.
111
112 Module Lié: désigne un ensemble de fichiers sources y compris leur
113 documentation qui, sans modification du Code Source, permet de réaliser
114 des fonctionnalités ou services supplémentaires à ceux fournis par le
115115 Logiciel.
116116
117 Logiciel Dérivé: désigne toute combinaison du Logiciel, modifié ou non,
118 et d'un Module Lié.
119
120 Parties: désigne collectivement le Licencié et le Concédant.
117 Logiciel Dérivé: désigne toute combinaison du Logiciel, modifié ou non,
118 et d'un Module Lié.
119
120 Parties: désigne collectivement le Licencié et le Concédant.
121121
122122 Ces termes s'entendent au singulier comme au pluriel.
123123
124124
125125 Article 2 - OBJET
126126
127 Le Contrat a pour objet la concession par le Concédant au Licencié d'une
127 Le Contrat a pour objet la concession par le Concédant au Licencié d'une
128128 licence non exclusive, cessible et mondiale du Logiciel telle que
129 définie ci-après à l'article 5 pour toute la durée de protection des droits
129 définie ci-après à l'article 5 pour toute la durée de protection des droits
130130 portant sur ce Logiciel.
131131
132132
133133 Article 3 - ACCEPTATION
134134
135 3.1 L'acceptation par le Licencié des termes du Contrat est réputée
135 3.1 L'acceptation par le Licencié des termes du Contrat est réputée
136136 acquise du fait du premier des faits suivants:
137137
138138 * (i) le chargement du Logiciel par tout moyen notamment par
139 téléchargement à partir d'un serveur distant ou par chargement à
139 téléchargement à partir d'un serveur distant ou par chargement à
140140 partir d'un support physique;
141 * (ii) le premier exercice par le Licencié de l'un quelconque des
142 droits concédés par le Contrat.
141 * (ii) le premier exercice par le Licencié de l'un quelconque des
142 droits concédés par le Contrat.
143143
144144 3.2 Un exemplaire du Contrat, contenant notamment un avertissement
145 relatif aux spécificités du Logiciel, à la restriction de garantie et à
146 la limitation à un usage par des utilisateurs expérimentés a été mis à
147 disposition du Licencié préalablement à son acceptation telle que
148 définie à l'article 3.1 ci dessus et le Licencié reconnaît en avoir pris
145 relatif aux spécificités du Logiciel, à la restriction de garantie et à
146 la limitation à un usage par des utilisateurs expérimentés a été mis à
147 disposition du Licencié préalablement à son acceptation telle que
148 définie à l'article 3.1 ci dessus et le Licencié reconnaît en avoir pris
149149 connaissance.
150150
151151
154154
155155 4.1 ENTREE EN VIGUEUR
156156
157 Le Contrat entre en vigueur à la date de son acceptation par le Licencié
158 telle que définie en 3.1.
157 Le Contrat entre en vigueur à la date de son acceptation par le Licencié
158 telle que définie en 3.1.
159159
160160
161161 4.2 DUREE
162162
163 Le Contrat produira ses effets pendant toute la durée légale de
163 Le Contrat produira ses effets pendant toute la durée légale de
164164 protection des droits patrimoniaux portant sur le Logiciel.
165165
166166
167167 Article 5 - ETENDUE DES DROITS CONCEDES
168168
169 Le Concédant concède au Licencié, qui accepte, les droits suivants sur
170 le Logiciel pour toutes destinations et pour la durée du Contrat dans
171 les conditions ci-après détaillées.
172
173 Par ailleurs, si le Concédant détient ou venait à détenir un ou
174 plusieurs brevets d'invention protégeant tout ou partie des
175 fonctionnalités du Logiciel ou de ses composants, il s'engage à ne pas
176 opposer les éventuels droits conférés par ces brevets aux Licenciés
169 Le Concédant concède au Licencié, qui accepte, les droits suivants sur
170 le Logiciel pour toutes destinations et pour la durée du Contrat dans
171 les conditions ci-après détaillées.
172
173 Par ailleurs, si le Concédant détient ou venait à détenir un ou
174 plusieurs brevets d'invention protégeant tout ou partie des
175 fonctionnalités du Logiciel ou de ses composants, il s'engage à ne pas
176 opposer les éventuels droits conférés par ces brevets aux Licenciés
177177 successifs qui utiliseraient, exploiteraient ou modifieraient le
178 Logiciel. En cas de cession de ces brevets, le Concédant s'engage à
179 faire reprendre les obligations du présent alinéa aux cessionnaires.
178 Logiciel. En cas de cession de ces brevets, le Concédant s'engage à
179 faire reprendre les obligations du présent alinéa aux cessionnaires.
180180
181181
182182 5.1 DROIT D'UTILISATION
183183
184 Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant
185 aux domaines d'application, étant ci-après précisé que cela comporte:
184 Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant
185 aux domaines d'application, étant ci-après précisé que cela comporte:
186186
187187 1. la reproduction permanente ou provisoire du Logiciel en tout ou
188188 partie par tout moyen et sous toute forme.
189189
190 2. le chargement, l'affichage, l'exécution, ou le stockage du
190 2. le chargement, l'affichage, l'exécution, ou le stockage du
191191 Logiciel sur tout support.
192192
193 3. la possibilité d'en observer, d'en étudier, ou d'en tester le
194 fonctionnement afin de déterminer les idées et principes qui sont
195 à la base de n'importe quel élément de ce Logiciel; et ceci,
196 lorsque le Licencié effectue toute opération de chargement,
197 d'affichage, d'exécution, de transmission ou de stockage du
193 3. la possibilité d'en observer, d'en étudier, ou d'en tester le
194 fonctionnement afin de déterminer les idées et principes qui sont
195 à la base de n'importe quel élément de ce Logiciel; et ceci,
196 lorsque le Licencié effectue toute opération de chargement,
197 d'affichage, d'exécution, de transmission ou de stockage du
198198 Logiciel qu'il est en droit d'effectuer en vertu du Contrat.
199199
200200
202202
203203 Le droit de modification comporte le droit de traduire, d'adapter,
204204 d'arranger ou d'apporter toute autre modification au Logiciel et le
205 droit de reproduire le logiciel en résultant. Il comprend en particulier
206 le droit de créer un Logiciel Dérivé.
207
208 Le Licencié est autorisé à apporter toute modification au Logiciel sous
209 réserve de mentionner, de façon explicite, son nom en tant qu'auteur de
210 cette modification et la date de création de celle-ci.
205 droit de reproduire le logiciel en résultant. Il comprend en particulier
206 le droit de créer un Logiciel Dérivé.
207
208 Le Licencié est autorisé à apporter toute modification au Logiciel sous
209 réserve de mentionner, de façon explicite, son nom en tant qu'auteur de
210 cette modification et la date de création de celle-ci.
211211
212212
213213 5.3 DROIT DE DISTRIBUTION
214214
215215 Le droit de distribution comporte notamment le droit de diffuser, de
216216 transmettre et de communiquer le Logiciel au public sur tout support et
217 par tout moyen ainsi que le droit de mettre sur le marché à titre
218 onéreux ou gratuit, un ou des exemplaires du Logiciel par tout procédé.
219
220 Le Licencié est autorisé à distribuer des copies du Logiciel, modifié ou
221 non, à des tiers dans les conditions ci-après détaillées.
217 par tout moyen ainsi que le droit de mettre sur le marché à titre
218 onéreux ou gratuit, un ou des exemplaires du Logiciel par tout procédé.
219
220 Le Licencié est autorisé à distribuer des copies du Logiciel, modifié ou
221 non, à des tiers dans les conditions ci-après détaillées.
222222
223223
224224 5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION
225225
226 Le Licencié est autorisé à distribuer des copies conformes du Logiciel,
227 sous forme de Code Source ou de Code Objet, à condition que cette
228 distribution respecte les dispositions du Contrat dans leur totalité et
229 soit accompagnée:
226 Le Licencié est autorisé à distribuer des copies conformes du Logiciel,
227 sous forme de Code Source ou de Code Objet, à condition que cette
228 distribution respecte les dispositions du Contrat dans leur totalité et
229 soit accompagnée:
230230
231231 1. d'un exemplaire du Contrat,
232232
233 2. d'un avertissement relatif à la restriction de garantie et de
234 responsabilité du Concédant telle que prévue aux articles 8
233 2. d'un avertissement relatif à la restriction de garantie et de
234 responsabilité du Concédant telle que prévue aux articles 8
235235 et 9,
236236
237 et que, dans le cas où seul le Code Objet du Logiciel est redistribué,
238 le Licencié permette un accès effectif au Code Source complet du
239 Logiciel pendant au moins toute la durée de sa distribution du Logiciel,
240 étant entendu que le coût additionnel d'acquisition du Code Source ne
241 devra pas excéder le simple coût de transfert des données.
237 et que, dans le cas où seul le Code Objet du Logiciel est redistribué,
238 le Licencié permette un accès effectif au Code Source complet du
239 Logiciel pendant au moins toute la durée de sa distribution du Logiciel,
240 étant entendu que le coût additionnel d'acquisition du Code Source ne
241 devra pas excéder le simple coût de transfert des données.
242242
243243
244244 5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE
245245
246 Lorsque le Licencié apporte une Contribution Intégrée au Logiciel, les
247 conditions de distribution du Logiciel Modifié en résultant sont alors
248 soumises à l'intégralité des dispositions du Contrat.
249
250 Le Licencié est autorisé à distribuer le Logiciel Modifié sous forme de
251 code source ou de code objet, à condition que cette distribution
252 respecte les dispositions du Contrat dans leur totalité et soit
253 accompagnée:
246 Lorsque le Licencié apporte une Contribution Intégrée au Logiciel, les
247 conditions de distribution du Logiciel Modifié en résultant sont alors
248 soumises à l'intégralité des dispositions du Contrat.
249
250 Le Licencié est autorisé à distribuer le Logiciel Modifié sous forme de
251 code source ou de code objet, à condition que cette distribution
252 respecte les dispositions du Contrat dans leur totalité et soit
253 accompagnée:
254254
255255 1. d'un exemplaire du Contrat,
256256
257 2. d'un avertissement relatif à la restriction de garantie et de
258 responsabilité du Concédant telle que prévue aux articles 8
257 2. d'un avertissement relatif à la restriction de garantie et de
258 responsabilité du Concédant telle que prévue aux articles 8
259259 et 9,
260260
261 et que, dans le cas où seul le code objet du Logiciel Modifié est
262 redistribué, le Licencié permette un accès effectif à son code source
263 complet pendant au moins toute la durée de sa distribution du Logiciel
264 Modifié, étant entendu que le coût additionnel d'acquisition du code
265 source ne devra pas excéder le simple coût de transfert des données.
261 et que, dans le cas où seul le code objet du Logiciel Modifié est
262 redistribué, le Licencié permette un accès effectif à son code source
263 complet pendant au moins toute la durée de sa distribution du Logiciel
264 Modifié, étant entendu que le coût additionnel d'acquisition du code
265 source ne devra pas excéder le simple coût de transfert des données.
266266
267267
268268 5.3.3 DISTRIBUTION DU LOGICIEL DERIVE
269269
270 Lorsque le Licencié crée un Logiciel Dérivé, ce Logiciel Dérivé peut
271 être distribué sous un contrat de licence autre que le présent Contrat à
270 Lorsque le Licencié crée un Logiciel Dérivé, ce Logiciel Dérivé peut
271 être distribué sous un contrat de licence autre que le présent Contrat à
272272 condition de respecter les obligations de mention des droits sur le
273 Logiciel telles que définies à l'article 6.4. Dans le cas où la création du
274 Logiciel Dérivé a nécessité une modification du Code Source le licencié
275 s'engage à ce que:
276
277 1. le Logiciel Modifié correspondant à cette modification soit régi
278 par le présent Contrat,
279 2. les Contributions Intégrées dont le Logiciel Modifié résulte
280 soient clairement identifiées et documentées,
281 3. le Licencié permette un accès effectif au code source du Logiciel
282 Modifié, pendant au moins toute la durée de la distribution du
283 Logiciel Dérivé, de telle sorte que ces modifications puissent
284 être reprises dans une version ultérieure du Logiciel, étant
285 entendu que le coût additionnel d'acquisition du code source du
286 Logiciel Modifié ne devra pas excéder le simple coût du transfert
287 des données.
273 Logiciel telles que définies à l'article 6.4. Dans le cas où la création du
274 Logiciel Dérivé a nécessité une modification du Code Source le licencié
275 s'engage à ce que:
276
277 1. le Logiciel Modifié correspondant à cette modification soit régi
278 par le présent Contrat,
279 2. les Contributions Intégrées dont le Logiciel Modifié résulte
280 soient clairement identifiées et documentées,
281 3. le Licencié permette un accès effectif au code source du Logiciel
282 Modifié, pendant au moins toute la durée de la distribution du
283 Logiciel Dérivé, de telle sorte que ces modifications puissent
284 être reprises dans une version ultérieure du Logiciel, étant
285 entendu que le coût additionnel d'acquisition du code source du
286 Logiciel Modifié ne devra pas excéder le simple coût du transfert
287 des données.
288288
289289
290290 5.3.4 COMPATIBILITE AVEC LA LICENCE CeCILL
291291
292 Lorsqu'un Logiciel Modifié contient une Contribution Intégrée soumise au
293 contrat de licence CeCILL, ou lorsqu'un Logiciel Dérivé contient un
294 Module Lié soumis au contrat de licence CeCILL, les stipulations prévues
295 au troisième item de l'article 6.4 sont facultatives.
292 Lorsqu'un Logiciel Modifié contient une Contribution Intégrée soumise au
293 contrat de licence CeCILL, ou lorsqu'un Logiciel Dérivé contient un
294 Module Lié soumis au contrat de licence CeCILL, les stipulations prévues
295 au troisième item de l'article 6.4 sont facultatives.
296296
297297
298298 Article 6 - PROPRIETE INTELLECTUELLE
300300
301301 6.1 SUR LE LOGICIEL INITIAL
302302
303 Le Titulaire est détenteur des droits patrimoniaux sur le Logiciel
303 Le Titulaire est détenteur des droits patrimoniaux sur le Logiciel
304304 Initial. Toute utilisation du Logiciel Initial est soumise au respect
305305 des conditions dans lesquelles le Titulaire a choisi de diffuser son
306 oeuvre et nul autre n'a la faculté de modifier les conditions de
306 oeuvre et nul autre n'a la faculté de modifier les conditions de
307307 diffusion de ce Logiciel Initial.
308308
309 Le Titulaire s'engage à ce que le Logiciel Initial reste au moins régi
310 par le Contrat et ce, pour la durée visée à l'article 4.2.
309 Le Titulaire s'engage à ce que le Logiciel Initial reste au moins régi
310 par le Contrat et ce, pour la durée visée à l'article 4.2.
311311
312312
313313 6.2 SUR LES CONTRIBUTIONS INTEGREES
314314
315 Le Licencié qui a développé une Contribution Intégrée est titulaire sur
316 celle-ci des droits de propriété intellectuelle dans les conditions
317 définies par la législation applicable.
315 Le Licencié qui a développé une Contribution Intégrée est titulaire sur
316 celle-ci des droits de propriété intellectuelle dans les conditions
317 définies par la législation applicable.
318318
319319
320320 6.3 SUR LES MODULES LIES
321321
322 Le Licencié qui a développé un Module Lié est titulaire sur celui-ci des
323 droits de propriété intellectuelle dans les conditions définies par la
324 législation applicable et reste libre du choix du contrat régissant sa
325 diffusion dans les conditions définies à l'article 5.3.3.
322 Le Licencié qui a développé un Module Lié est titulaire sur celui-ci des
323 droits de propriété intellectuelle dans les conditions définies par la
324 législation applicable et reste libre du choix du contrat régissant sa
325 diffusion dans les conditions définies à l'article 5.3.3.
326326
327327
328328 6.4 MENTIONS DES DROITS
329329
330 Le Licencié s'engage expressément:
331
332 1. à ne pas supprimer ou modifier de quelque manière que ce soit les
333 mentions de propriété intellectuelle apposées sur le Logiciel;
334
335 2. à reproduire à l'identique lesdites mentions de propriété
336 intellectuelle sur les copies du Logiciel modifié ou non;
337
338 3. à faire en sorte que l'utilisation du Logiciel, ses mentions de
339 propriété intellectuelle et le fait qu'il est régi par le Contrat
340 soient indiqués dans un texte facilement accessible notamment
341 depuis l'interface de tout Logiciel Dérivé.
342
343 Le Licencié s'engage à ne pas porter atteinte, directement ou
344 indirectement, aux droits de propriété intellectuelle du Titulaire et/ou
345 des Contributeurs sur le Logiciel et à prendre, le cas échéant, à
346 l'égard de son personnel toutes les mesures nécessaires pour assurer le
347 respect des dits droits de propriété intellectuelle du Titulaire et/ou
330 Le Licencié s'engage expressément:
331
332 1. à ne pas supprimer ou modifier de quelque manière que ce soit les
333 mentions de propriété intellectuelle apposées sur le Logiciel;
334
335 2. à reproduire à l'identique lesdites mentions de propriété
336 intellectuelle sur les copies du Logiciel modifié ou non;
337
338 3. à faire en sorte que l'utilisation du Logiciel, ses mentions de
339 propriété intellectuelle et le fait qu'il est régi par le Contrat
340 soient indiqués dans un texte facilement accessible notamment
341 depuis l'interface de tout Logiciel Dérivé.
342
343 Le Licencié s'engage à ne pas porter atteinte, directement ou
344 indirectement, aux droits de propriété intellectuelle du Titulaire et/ou
345 des Contributeurs sur le Logiciel et à prendre, le cas échéant, à
346 l'égard de son personnel toutes les mesures nécessaires pour assurer le
347 respect des dits droits de propriété intellectuelle du Titulaire et/ou
348348 des Contributeurs.
349349
350350
351351 Article 7 - SERVICES ASSOCIES
352352
353 7.1 Le Contrat n'oblige en aucun cas le Concédant à la réalisation de
353 7.1 Le Contrat n'oblige en aucun cas le Concédant à la réalisation de
354354 prestations d'assistance technique ou de maintenance du Logiciel.
355355
356 Cependant le Concédant reste libre de proposer ce type de services. Les
356 Cependant le Concédant reste libre de proposer ce type de services. Les
357357 termes et conditions d'une telle assistance technique et/ou d'une telle
358 maintenance seront alors déterminés dans un acte séparé. Ces actes de
358 maintenance seront alors déterminés dans un acte séparé. Ces actes de
359359 maintenance et/ou assistance technique n'engageront que la seule
360 responsabilité du Concédant qui les propose.
361
362 7.2 De même, tout Concédant est libre de proposer, sous sa seule
363 responsabilité, à ses licenciés une garantie, qui n'engagera que lui,
364 lors de la redistribution du Logiciel et/ou du Logiciel Modifié et ce,
365 dans les conditions qu'il souhaite. Cette garantie et les modalités
366 financières de son application feront l'objet d'un acte séparé entre le
367 Concédant et le Licencié.
360 responsabilité du Concédant qui les propose.
361
362 7.2 De même, tout Concédant est libre de proposer, sous sa seule
363 responsabilité, à ses licenciés une garantie, qui n'engagera que lui,
364 lors de la redistribution du Logiciel et/ou du Logiciel Modifié et ce,
365 dans les conditions qu'il souhaite. Cette garantie et les modalités
366 financières de son application feront l'objet d'un acte séparé entre le
367 Concédant et le Licencié.
368368
369369
370370 Article 8 - RESPONSABILITE
371371
372 8.1 Sous réserve des dispositions de l'article 8.2, le Licencié a la
373 faculté, sous réserve de prouver la faute du Concédant concerné, de
374 solliciter la réparation du préjudice direct qu'il subirait du fait du
372 8.1 Sous réserve des dispositions de l'article 8.2, le Licencié a la
373 faculté, sous réserve de prouver la faute du Concédant concerné, de
374 solliciter la réparation du préjudice direct qu'il subirait du fait du
375375 Logiciel et dont il apportera la preuve.
376376
377 8.2 La responsabilité du Concédant est limitée aux engagements pris en
378 application du Contrat et ne saurait être engagée en raison notamment:
379 (i) des dommages dus à l'inexécution, totale ou partielle, de ses
380 obligations par le Licencié, (ii) des dommages directs ou indirects
381 découlant de l'utilisation ou des performances du Logiciel subis par le
382 Licencié et (iii) plus généralement d'un quelconque dommage indirect. En
383 particulier, les Parties conviennent expressément que tout préjudice
384 financier ou commercial (par exemple perte de données, perte de
385 bénéfices, perte d'exploitation, perte de clientèle ou de commandes,
386 manque à gagner, trouble commercial quelconque) ou toute action dirigée
387 contre le Licencié par un tiers, constitue un dommage indirect et
388 n'ouvre pas droit à réparation par le Concédant.
377 8.2 La responsabilité du Concédant est limitée aux engagements pris en
378 application du Contrat et ne saurait être engagée en raison notamment:
379 (i) des dommages dus à l'inexécution, totale ou partielle, de ses
380 obligations par le Licencié, (ii) des dommages directs ou indirects
381 découlant de l'utilisation ou des performances du Logiciel subis par le
382 Licencié et (iii) plus généralement d'un quelconque dommage indirect. En
383 particulier, les Parties conviennent expressément que tout préjudice
384 financier ou commercial (par exemple perte de données, perte de
385 bénéfices, perte d'exploitation, perte de clientèle ou de commandes,
386 manque à gagner, trouble commercial quelconque) ou toute action dirigée
387 contre le Licencié par un tiers, constitue un dommage indirect et
388 n'ouvre pas droit à réparation par le Concédant.
389389
390390
391391 Article 9 - GARANTIE
392392
393 9.1 Le Licencié reconnaît que l'état actuel des connaissances
393 9.1 Le Licencié reconnaît que l'état actuel des connaissances
394394 scientifiques et techniques au moment de la mise en circulation du
395 Logiciel ne permet pas d'en tester et d'en vérifier toutes les
396 utilisations ni de détecter l'existence d'éventuels défauts. L'attention
397 du Licencié a été attirée sur ce point sur les risques associés au
398 chargement, à l'utilisation, la modification et/ou au développement et à
399 la reproduction du Logiciel qui sont réservés à des utilisateurs avertis.
400
401 Il relève de la responsabilité du Licencié de contrôler, par tous
402 moyens, l'adéquation du produit à ses besoins, son bon fonctionnement et
395 Logiciel ne permet pas d'en tester et d'en vérifier toutes les
396 utilisations ni de détecter l'existence d'éventuels défauts. L'attention
397 du Licencié a été attirée sur ce point sur les risques associés au
398 chargement, à l'utilisation, la modification et/ou au développement et à
399 la reproduction du Logiciel qui sont réservés à des utilisateurs avertis.
400
401 Il relève de la responsabilité du Licencié de contrôler, par tous
402 moyens, l'adéquation du produit à ses besoins, son bon fonctionnement et
403403 de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens.
404404
405 9.2 Le Concédant déclare de bonne foi être en droit de concéder
406 l'ensemble des droits attachés au Logiciel (comprenant notamment les
407 droits visés à l'article 5).
408
409 9.3 Le Licencié reconnaît que le Logiciel est fourni "en l'état" par le
410 Concédant sans autre garantie, expresse ou tacite, que celle prévue à
405 9.2 Le Concédant déclare de bonne foi être en droit de concéder
406 l'ensemble des droits attachés au Logiciel (comprenant notamment les
407 droits visés à l'article 5).
408
409 9.3 Le Licencié reconnaît que le Logiciel est fourni "en l'état" par le
410 Concédant sans autre garantie, expresse ou tacite, que celle prévue à
411411 l'article 9.2 et notamment sans aucune garantie sur sa valeur commerciale,
412 son caractère sécurisé, innovant ou pertinent.
413
414 En particulier, le Concédant ne garantit pas que le Logiciel est exempt
412 son caractère sécurisé, innovant ou pertinent.
413
414 En particulier, le Concédant ne garantit pas que le Logiciel est exempt
415415 d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible
416 avec l'équipement du Licencié et sa configuration logicielle ni qu'il
417 remplira les besoins du Licencié.
418
419 9.4 Le Concédant ne garantit pas, de manière expresse ou tacite, que le
420 Logiciel ne porte pas atteinte à un quelconque droit de propriété
416 avec l'équipement du Licencié et sa configuration logicielle ni qu'il
417 remplira les besoins du Licencié.
418
419 9.4 Le Concédant ne garantit pas, de manière expresse ou tacite, que le
420 Logiciel ne porte pas atteinte à un quelconque droit de propriété
421421 intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout
422 autre droit de propriété. Ainsi, le Concédant exclut toute garantie au
423 profit du Licencié contre les actions en contrefaçon qui pourraient être
424 diligentées au titre de l'utilisation, de la modification, et de la
425 redistribution du Logiciel. Néanmoins, si de telles actions sont
426 exercées contre le Licencié, le Concédant lui apportera son aide
427 technique et juridique pour sa défense. Cette aide technique et
428 juridique est déterminée au cas par cas entre le Concédant concerné et
429 le Licencié dans le cadre d'un protocole d'accord. Le Concédant dégage
430 toute responsabilité quant à l'utilisation de la dénomination du
431 Logiciel par le Licencié. Aucune garantie n'est apportée quant à
432 l'existence de droits antérieurs sur le nom du Logiciel et sur
422 autre droit de propriété. Ainsi, le Concédant exclut toute garantie au
423 profit du Licencié contre les actions en contrefaçon qui pourraient être
424 diligentées au titre de l'utilisation, de la modification, et de la
425 redistribution du Logiciel. Néanmoins, si de telles actions sont
426 exercées contre le Licencié, le Concédant lui apportera son aide
427 technique et juridique pour sa défense. Cette aide technique et
428 juridique est déterminée au cas par cas entre le Concédant concerné et
429 le Licencié dans le cadre d'un protocole d'accord. Le Concédant dégage
430 toute responsabilité quant à l'utilisation de la dénomination du
431 Logiciel par le Licencié. Aucune garantie n'est apportée quant à
432 l'existence de droits antérieurs sur le nom du Logiciel et sur
433433 l'existence d'une marque.
434434
435435
436436 Article 10 - RESILIATION
437437
438 10.1 En cas de manquement par le Licencié aux obligations mises à sa
439 charge par le Contrat, le Concédant pourra résilier de plein droit le
440 Contrat trente (30) jours après notification adressée au Licencié et
441 restée sans effet.
442
443 10.2 Le Licencié dont le Contrat est résilié n'est plus autorisé à
438 10.1 En cas de manquement par le Licencié aux obligations mises à sa
439 charge par le Contrat, le Concédant pourra résilier de plein droit le
440 Contrat trente (30) jours après notification adressée au Licencié et
441 restée sans effet.
442
443 10.2 Le Licencié dont le Contrat est résilié n'est plus autorisé à
444444 utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les
445 licences qu'il aura concédées antérieurement à la résiliation du Contrat
446 resteront valides sous réserve qu'elles aient été effectuées en
447 conformité avec le Contrat.
445 licences qu'il aura concédées antérieurement à la résiliation du Contrat
446 resteront valides sous réserve qu'elles aient été effectuées en
447 conformité avec le Contrat.
448448
449449
450450 Article 11 - DISPOSITIONS DIVERSES
452452
453453 11.1 CAUSE EXTERIEURE
454454
455 Aucune des Parties ne sera responsable d'un retard ou d'une défaillance
456 d'exécution du Contrat qui serait dû à un cas de force majeure, un cas
457 fortuit ou une cause extérieure, telle que, notamment, le mauvais
458 fonctionnement ou les interruptions du réseau électrique ou de
459 télécommunication, la paralysie du réseau liée à une attaque
460 informatique, l'intervention des autorités gouvernementales, les
461 catastrophes naturelles, les dégâts des eaux, les tremblements de terre,
462 le feu, les explosions, les grèves et les conflits sociaux, l'état de
455 Aucune des Parties ne sera responsable d'un retard ou d'une défaillance
456 d'exécution du Contrat qui serait dû à un cas de force majeure, un cas
457 fortuit ou une cause extérieure, telle que, notamment, le mauvais
458 fonctionnement ou les interruptions du réseau électrique ou de
459 télécommunication, la paralysie du réseau liée à une attaque
460 informatique, l'intervention des autorités gouvernementales, les
461 catastrophes naturelles, les dégâts des eaux, les tremblements de terre,
462 le feu, les explosions, les grèves et les conflits sociaux, l'état de
463463 guerre...
464464
465465 11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou
466 plusieurs occasions de se prévaloir d'une ou plusieurs dispositions du
466 plusieurs occasions de se prévaloir d'une ou plusieurs dispositions du
467467 Contrat, ne pourra en aucun cas impliquer renonciation par la Partie
468 intéressée à s'en prévaloir ultérieurement.
469
470 11.3 Le Contrat annule et remplace toute convention antérieure, écrite
471 ou orale, entre les Parties sur le même objet et constitue l'accord
468 intéressée à s'en prévaloir ultérieurement.
469
470 11.3 Le Contrat annule et remplace toute convention antérieure, écrite
471 ou orale, entre les Parties sur le même objet et constitue l'accord
472472 entier entre les Parties sur cet objet. Aucune addition ou modification
473 aux termes du Contrat n'aura d'effet à l'égard des Parties à moins
474 d'être faite par écrit et signée par leurs représentants dûment habilités.
475
476 11.4 Dans l'hypothèse où une ou plusieurs des dispositions du Contrat
477 s'avèrerait contraire à une loi ou à un texte applicable, existants ou
478 futurs, cette loi ou ce texte prévaudrait, et les Parties feraient les
479 amendements nécessaires pour se conformer à cette loi ou à ce texte.
480 Toutes les autres dispositions resteront en vigueur. De même, la
481 nullité, pour quelque raison que ce soit, d'une des dispositions du
482 Contrat ne saurait entraîner la nullité de l'ensemble du Contrat.
473 aux termes du Contrat n'aura d'effet à l'égard des Parties à moins
474 d'être faite par écrit et signée par leurs représentants dûment habilités.
475
476 11.4 Dans l'hypothèse où une ou plusieurs des dispositions du Contrat
477 s'avèrerait contraire à une loi ou à un texte applicable, existants ou
478 futurs, cette loi ou ce texte prévaudrait, et les Parties feraient les
479 amendements nécessaires pour se conformer à cette loi ou à ce texte.
480 Toutes les autres dispositions resteront en vigueur. De même, la
481 nullité, pour quelque raison que ce soit, d'une des dispositions du
482 Contrat ne saurait entraîner la nullité de l'ensemble du Contrat.
483483
484484
485485 11.5 LANGUE
486486
487 Le Contrat est rédigé en langue française et en langue anglaise, ces
488 deux versions faisant également foi.
487 Le Contrat est rédigé en langue française et en langue anglaise, ces
488 deux versions faisant également foi.
489489
490490
491491 Article 12 - NOUVELLES VERSIONS DU CONTRAT
492492
493 12.1 Toute personne est autorisée à copier et distribuer des copies de
493 12.1 Toute personne est autorisée à copier et distribuer des copies de
494494 ce Contrat.
495495
496 12.2 Afin d'en préserver la cohérence, le texte du Contrat est protégé
497 et ne peut être modifié que par les auteurs de la licence, lesquels se
498 réservent le droit de publier périodiquement des mises à jour ou de
499 nouvelles versions du Contrat, qui posséderont chacune un numéro
500 distinct. Ces versions ultérieures seront susceptibles de prendre en
501 compte de nouvelles problématiques rencontrées par les logiciels libres.
502
503 12.3 Tout Logiciel diffusé sous une version donnée du Contrat ne pourra
504 faire l'objet d'une diffusion ultérieure que sous la même version du
505 Contrat ou une version postérieure.
496 12.2 Afin d'en préserver la cohérence, le texte du Contrat est protégé
497 et ne peut être modifié que par les auteurs de la licence, lesquels se
498 réservent le droit de publier périodiquement des mises à jour ou de
499 nouvelles versions du Contrat, qui posséderont chacune un numéro
500 distinct. Ces versions ultérieures seront susceptibles de prendre en
501 compte de nouvelles problématiques rencontrées par les logiciels libres.
502
503 12.3 Tout Logiciel diffusé sous une version donnée du Contrat ne pourra
504 faire l'objet d'une diffusion ultérieure que sous la même version du
505 Contrat ou une version postérieure.
506506
507507
508508 Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE
509509
510 13.1 Le Contrat est régi par la loi française. Les Parties conviennent
511 de tenter de régler à l'amiable les différends ou litiges qui
512 viendraient à se produire par suite ou à l'occasion du Contrat.
513
514 13.2 A défaut d'accord amiable dans un délai de deux (2) mois à compter
515 de leur survenance et sauf situation relevant d'une procédure d'urgence,
516 les différends ou litiges seront portés par la Partie la plus diligente
517 devant les Tribunaux compétents de Paris.
510 13.1 Le Contrat est régi par la loi française. Les Parties conviennent
511 de tenter de régler à l'amiable les différends ou litiges qui
512 viendraient à se produire par suite ou à l'occasion du Contrat.
513
514 13.2 A défaut d'accord amiable dans un délai de deux (2) mois à compter
515 de leur survenance et sauf situation relevant d'une procédure d'urgence,
516 les différends ou litiges seront portés par la Partie la plus diligente
517 devant les Tribunaux compétents de Paris.
518518
519519
520520 Version 1.0 du 2006-09-05.
0 -------------------------------
1 ClusterShell 1.3 Python Library
2 -------------------------------
0 -----------------------------------------
1 ClusterShell 1.3 Python Library and Tools
2 -----------------------------------------
33
44 ClusterShell is an event-based python library to execute commands on local or
55 distant cluster nodes in parallel depending on the selected engine and worker
6 mechanisms.
7
8 This is the source tarball. When possible, please use the RPM distribution.
6 mechanisms. Also, clush, clubak and nodeset, three convenient command-line
7 tools using the library are included.
98
109 -------------------
1110 Requirements (v1.3)
3635 Installation from source
3736 ------------------------
3837
39 In the source directory, please type :
38 When possible, please use the RPM/deb distribution.
39
40 Otherwise in the source directory, use:
4041
4142 # python setup.py install
4243
0 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
1
2 Name: clustershell
3 Version: 1.3.3
4 Release: 1%{?dist}
5 Summary: Python framework for efficient cluster administration
6
7 Group: System Environment/Base
8 License: CeCILL-C
9 URL: http://clustershell.sourceforge.net/
10 Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz
11 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
12 BuildArch: noarch
13 BuildRequires: python-devel python-setuptools
14
15 %description
16 Tools and event-based Python library to execute commands on cluster nodes in
17 parallel depending on selected engine and worker mechanisms. The library
18 provides also advanced NodeSet and NodeGroups handling methods to ease and
19 improve administration of large compute clusters or server farms. Three
20 convenient command line utilities, clush, clubak and nodeset, allow traditional
21 shell scripts to benefit some useful features offered by the library.
22
23 %package -n vim-%{name}
24 Summary: VIM files for ClusterShell
25 Group: System Environment/Base
26 Requires: clustershell = %{version}-%{release}, vim-common
27
28 %description -n vim-%{name}
29 Syntax highlighting in the VIM editor for ClusterShell configuration files.
30
31
32 %prep
33 %setup -q
34
35 %build
36 %{__python} setup.py build
37
38 %install
39 rm -rf %{buildroot}
40 %{__python} setup.py install -O1 --skip-build --root %{buildroot}
41
42 # config files
43 install -d %{buildroot}/%{_sysconfdir}/clustershell
44 install -p -m 0644 conf/*.conf %{buildroot}/%{_sysconfdir}/clustershell/
45
46 # man pages
47 install -d %{buildroot}/%{_mandir}/{man1,man5}
48 install -p -m 0644 doc/man/man1/clubak.1 %{buildroot}/%{_mandir}/man1/
49 install -p -m 0644 doc/man/man1/clush.1 %{buildroot}/%{_mandir}/man1/
50 install -p -m 0644 doc/man/man1/nodeset.1 %{buildroot}/%{_mandir}/man1/
51 install -p -m 0644 doc/man/man5/clush.conf.5 %{buildroot}/%{_mandir}/man5/
52 install -p -m 0644 doc/man/man5/groups.conf.5 %{buildroot}/%{_mandir}/man5/
53
54 # vim addons
55 %define vimdatadir %{_datadir}/vim/vimfiles
56 install -d %{buildroot}/%{vimdatadir}/{ftdetect,syntax}
57 install -p -m 0644 doc/extras/vim/ftdetect/clustershell.vim %{buildroot}/%{vimdatadir}/ftdetect/
58 install -p -m 0644 doc/extras/vim/syntax/clushconf.vim %{buildroot}/%{vimdatadir}/syntax/
59 install -p -m 0644 doc/extras/vim/syntax/groupsconf.vim %{buildroot}/%{vimdatadir}/syntax/
60
61
62 %clean
63 rm -rf %{buildroot}
64
65 %files
66 %defattr(-,root,root,-)
67 %doc README ChangeLog Licence_CeCILL-C_V1-en.txt Licence_CeCILL-C_V1-fr.txt
68 %{_mandir}/man1/clubak.1*
69 %{_mandir}/man1/clush.1*
70 %{_mandir}/man1/nodeset.1*
71 %{_mandir}/man5/clush.conf.5*
72 %{_mandir}/man5/groups.conf.5*
73 %dir %{_sysconfdir}/clustershell
74 %config(noreplace) %{_sysconfdir}/clustershell/clush.conf
75 %config(noreplace) %{_sysconfdir}/clustershell/groups.conf
76 %{python_sitelib}/ClusterShell/
77 %{python_sitelib}/ClusterShell-*-py?.?.egg-info
78 %{_bindir}/clubak
79 %{_bindir}/clush
80 %{_bindir}/nodeset
81
82 %files -n vim-%{name}
83 %defattr(-,root,root,-)
84 %{vimdatadir}/ftdetect/clustershell.vim
85 %{vimdatadir}/syntax/clushconf.vim
86 %{vimdatadir}/syntax/groupsconf.vim
87
88 %changelog
89 * Wed Oct 20 2010 Stephane Thiell <stephane.thiell@cea.fr> 1.3.3-1
90 - update to 1.3.3
91
92 * Fri Sep 10 2010 Stephane Thiell <stephane.thiell@cea.fr> 1.3.2-1
93 - renamed Vim subpackage to vim-clustershell
94 - update to 1.3.2
95
96 * Sun Sep 05 2010 Stephane Thiell <stephane.thiell@cea.fr> 1.3.1-2
97 - added -vim subpackage for .vim files
98
99 * Fri Sep 03 2010 Stephane Thiell <stephane.thiell@cea.fr> 1.3.1-1
100 - removed -n from setup line
101 - own clustershell config directory for proper uninstall
102 - install vim syntax addons in vimfiles, thus avoiding vim version detection
103 - update to 1.3.1
104
105 * Sun Aug 22 2010 Stephane Thiell <stephane.thiell@cea.fr> 1.3-4
106 - fixed BuildRoot tag in accordance with EPEL guidelines
107 - python_sitelib definition: prefer global vs define
108 - preserve timestamps and fix permissions when installing files
109
110 * Sat Aug 21 2010 Stephane Thiell <stephane.thiell@cea.fr> 1.3-3
111 - use a full URL to the package in Source0
112
113 * Fri Aug 20 2010 Stephane Thiell <stephane.thiell@cea.fr> 1.3-2
114 - various improvements per first review request
115
116 * Thu Aug 19 2010 Stephane Thiell <stephane.thiell@cea.fr> 1.3-1
117 - initial build candidate for Fedora
+0
-74
clustershell.spec.in less more
0 # $Id: clustershell.spec.in 270 2010-06-08 00:16:23Z st-cea $
1
2 %define name clustershell
3 %define release 1%{?dist}
4
5 Summary: ClusterShell Python framework
6 Name: %{name}
7 Version: %{version}
8 Release: %{release}
9 Source0: %{name}-%{version}.tar.gz
10 License: CeCILL-C
11 Group: Development/Libraries
12 BuildRoot: %{_tmppath}/%{name}-buildroot
13 Prefix: %{_prefix}
14 BuildArchitectures: noarch
15 Vendor: Stephane Thiell <stephane.thiell@cea.fr>
16 Url: http://clustershell.sourceforge.net/
17
18 %description
19 ClusterShell is an event-based Python library to execute commands on local
20 or distant cluster nodes in parallel depending on the selected engine and
21 worker mechanisms. The library provides also advanced nodeset handling
22 methods. Finally, clush, clubak and nodeset, three convenient command-line
23 tools using the library are included.
24
25 %prep
26 %setup
27
28 %build
29 python setup.py build
30
31 %install
32 python setup.py install --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES
33 mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/clustershell
34
35 # detecting vim version
36 VIMDATADIR=`ls /usr/share/vim/vim[0-9]* -1d | tail -1`
37 if [ ! -d "$VIMDATADIR" ]; then
38 VIMDATADIR=%{_datadir}/%{name}/vim
39 fi
40
41 # man pages
42 mkdir -p $RPM_BUILD_ROOT/%{_mandir}/{man1,man5}
43 gzip -c doc/man/man1/clubak.1 >$RPM_BUILD_ROOT/%{_mandir}/man1/clubak.1.gz
44 gzip -c doc/man/man1/clush.1 >$RPM_BUILD_ROOT/%{_mandir}/man1/clush.1.gz
45 gzip -c doc/man/man1/nodeset.1 >$RPM_BUILD_ROOT/%{_mandir}/man1/nodeset.1.gz
46 gzip -c doc/man/man5/clush.conf.5 >$RPM_BUILD_ROOT/%{_mandir}/man5/clush.conf.5.gz
47 gzip -c doc/man/man5/groups.conf.5 >$RPM_BUILD_ROOT/%{_mandir}/man5/groups.conf.5.gz
48
49 # vim addons
50 cp conf/clush.conf conf/groups.conf $RPM_BUILD_ROOT/%{_sysconfdir}/clustershell
51 mkdir -p $RPM_BUILD_ROOT/$VIMDATADIR/ftdetect
52 cp doc/extras/vim/ftdetect/clustershell.vim $RPM_BUILD_ROOT/$VIMDATADIR/ftdetect
53 mkdir -p $RPM_BUILD_ROOT/$VIMDATADIR/syntax
54 cp doc/extras/vim/syntax/clushconf.vim $RPM_BUILD_ROOT/$VIMDATADIR/syntax
55 cp doc/extras/vim/syntax/groupsconf.vim $RPM_BUILD_ROOT/$VIMDATADIR/syntax
56 echo $VIMDATADIR/ftdetect/clustershell.vim >>INSTALLED_FILES
57 echo $VIMDATADIR/syntax/clushconf.vim >>INSTALLED_FILES
58 echo $VIMDATADIR/syntax/groupsconf.vim >>INSTALLED_FILES
59
60 %clean
61 rm -rf $RPM_BUILD_ROOT
62
63 %files -f INSTALLED_FILES
64 %defattr(-,root,root)
65 %doc README ChangeLog Licence_CeCILL-C_V1-en.txt Licence_CeCILL-C_V1-fr.txt
66 %doc doc/epydoc
67 %doc %{_mandir}/man1/clubak.1.gz
68 %doc %{_mandir}/man1/clush.1.gz
69 %doc %{_mandir}/man1/nodeset.1.gz
70 %doc %{_mandir}/man5/clush.conf.5.gz
71 %doc %{_mandir}/man5/groups.conf.5.gz
72 %config(noreplace) %{_sysconfdir}/clustershell/clush.conf
73 %config(noreplace) %{_sysconfdir}/clustershell/groups.conf
+0
-5
conf/groups less more
0 oss: example4 example5
1 mds: example6
2 io: example[4-6]
3 compute: example[32-159]
4 gpu: example[156-159]
+0
-224
doc/epydoc/html/ClusterShell-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 Package&nbsp;ClusterShell
42 </span>
43 </td>
44 <td>
45 <table cellpadding="0" cellspacing="0">
46 <!-- hide/show private -->
47 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49 <tr><td align="right"><span class="options"
50 >[<a href="frames.html" target="_top">frames</a
51 >]&nbsp;|&nbsp;<a href="ClusterShell-module.html"
52 target="_top">no&nbsp;frames</a>]</span></td></tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 <!-- ==================== PACKAGE DESCRIPTION ==================== -->
58 <h1 class="epydoc">Package ClusterShell</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell-pysrc.html">source&nbsp;code</a></span></p>
59 <p>ClusterShell Python Library</p>
60 <p>ClusterShell is a python event-based python library to execute
61 commands on local or distant cluster nodes in parallel depending on the
62 selected engine and worker mechanisms.</p>
63 <p>Please see first:</p>
64 <ul>
65 <li>
66 ClusterShell.NodeSet
67 </li>
68 <li>
69 ClusterShell.Task
70 </li>
71 </ul>
72
73 <hr />
74 <div class="fields"> <p><strong>Version:</strong>
75 1.3
76 </p>
77 <p><strong>Date:</strong>
78 2010/07/27
79 </p>
80 <p><strong>Author:</strong>
81 Stephane Thiell &lt;stephane.thiell@cea.fr&gt;
82 </p>
83 </div><!-- ==================== SUBMODULES ==================== -->
84 <a name="section-Submodules"></a>
85 <table class="summary" border="1" cellpadding="3"
86 cellspacing="0" width="100%" bgcolor="white">
87 <tr bgcolor="#70b0f0" class="table-header">
88 <td colspan="2" class="table-header">
89 <table border="0" cellpadding="0" cellspacing="0" width="100%">
90 <tr valign="top">
91 <td align="left"><span class="table-header">Submodules</span></td>
92 <td align="right" valign="top"
93 ><span class="options">[<a href="#section-Submodules"
94 class="privatelink" onclick="toggle_private();"
95 >hide private</a>]</span></td>
96 </tr>
97 </table>
98 </td>
99 </tr>
100 <tr><td class="summary">
101 <ul class="nomargin">
102 <li> <strong class="uidlink"><a href="ClusterShell.Engine-module.html">ClusterShell.Engine</a></strong>
103 <ul>
104 <li> <strong class="uidlink"><a href="ClusterShell.Engine.EPoll-module.html">ClusterShell.Engine.EPoll</a></strong>: <em class="summary">A ClusterShell Engine using epoll, an I/O event notification
105 facility.</em> </li>
106 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a></strong>: <em class="summary">Interface of underlying Task's Engine.</em> </li>
107 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Factory-module.html">ClusterShell.Engine.Factory</a></strong>: <em class="summary">Engine Factory to select the best working event engine for the
108 current version of Python and Operating System.</em> </li>
109 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Poll-module.html">ClusterShell.Engine.Poll</a></strong>: <em class="summary">A poll() based ClusterShell Engine.</em> </li>
110 </ul>
111 </li>
112 <li> <strong class="uidlink"><a href="ClusterShell.Event-module.html">ClusterShell.Event</a></strong>: <em class="summary">Event handler support</em> </li>
113 <li> <strong class="uidlink"><a href="ClusterShell.MsgTree-module.html">ClusterShell.MsgTree</a></strong>: <em class="summary">MsgTree</em> </li>
114 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a></strong>: <em class="summary">Cluster node set module.</em> </li>
115 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a></strong>: <em class="summary">Cluster nodes utility module</em> </li>
116 <li> <strong class="uidlink"><a href="ClusterShell.Task-module.html">ClusterShell.Task</a></strong>: <em class="summary">ClusterShell Task module.</em> </li>
117 <li> <strong class="uidlink"><a href="ClusterShell.Worker-module.html">ClusterShell.Worker</a></strong>
118 <ul>
119 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a></strong>: <em class="summary">EngineClient</em> </li>
120 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Pdsh-module.html">ClusterShell.Worker.Pdsh</a></strong>: <em class="summary">WorkerPdsh</em> </li>
121 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Popen-module.html">ClusterShell.Worker.Popen</a></strong>: <em class="summary">WorkerPopen</em> </li>
122 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Ssh-module.html">ClusterShell.Worker.Ssh</a></strong>: <em class="summary">ClusterShell Ssh/Scp support</em> </li>
123 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a></strong>: <em class="summary">ClusterShell worker interface.</em> </li>
124 </ul>
125 </li>
126 </ul></td></tr>
127 </table>
128
129 <br />
130 <!-- ==================== VARIABLES ==================== -->
131 <a name="section-Variables"></a>
132 <table class="summary" border="1" cellpadding="3"
133 cellspacing="0" width="100%" bgcolor="white">
134 <tr bgcolor="#70b0f0" class="table-header">
135 <td colspan="2" class="table-header">
136 <table border="0" cellpadding="0" cellspacing="0" width="100%">
137 <tr valign="top">
138 <td align="left"><span class="table-header">Variables</span></td>
139 <td align="right" valign="top"
140 ><span class="options">[<a href="#section-Variables"
141 class="privatelink" onclick="toggle_private();"
142 >hide private</a>]</span></td>
143 </tr>
144 </table>
145 </td>
146 </tr>
147 <tr>
148 <td width="15%" align="right" valign="top" class="summary">
149 <span class="summary-type">&nbsp;</span>
150 </td><td class="summary">
151 <a name="__version_info__"></a><span class="summary-name">__version_info__</span> = <code title="(1, 3)"><code class="variable-group">(</code>1<code class="variable-op">, </code>3<code class="variable-group">)</code></code>
152 </td>
153 </tr>
154 <tr>
155 <td width="15%" align="right" valign="top" class="summary">
156 <span class="summary-type">&nbsp;</span>
157 </td><td class="summary">
158 <a name="__url__"></a><span class="summary-name">__url__</span> = <code title="'http://clustershell.sourceforge.net/'"><code class="variable-quote">'</code><code class="variable-string">http://clustershell.sourceforge.net/</code><code class="variable-quote">'</code></code>
159 </td>
160 </tr>
161 <tr>
162 <td width="15%" align="right" valign="top" class="summary">
163 <span class="summary-type">&nbsp;</span>
164 </td><td class="summary">
165 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
166 </td>
167 </tr>
168 <tr class="private">
169 <td width="15%" align="right" valign="top" class="summary">
170 <span class="summary-type">&nbsp;</span>
171 </td><td class="summary">
172 <a name="_n"></a><span class="summary-name">_n</span> = <code title="'3'"><code class="variable-quote">'</code><code class="variable-string">3</code><code class="variable-quote">'</code></code>
173 </td>
174 </tr>
175 </table>
176 <!-- ==================== NAVIGATION BAR ==================== -->
177 <table class="navbar" border="0" width="100%" cellpadding="0"
178 bgcolor="#a0c0ff" cellspacing="0">
179 <tr valign="middle">
180
181 <!-- Tree link -->
182 <th>&nbsp;&nbsp;&nbsp;<a
183 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
184
185 <!-- Index link -->
186 <th>&nbsp;&nbsp;&nbsp;<a
187 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
188
189 <!-- Help link -->
190 <th>&nbsp;&nbsp;&nbsp;<a
191 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
192
193 <!-- Project homepage -->
194 <th class="navbar" align="right" width="100%">
195 <table border="0" cellpadding="0" cellspacing="0">
196 <tr><th class="navbar" align="center"
197 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
198 </tr></table></th>
199 </tr>
200 </table>
201 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
202 <tr>
203 <td align="left" class="footer">
204 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
205 </td>
206 <td align="right" class="footer">
207 <a target="mainFrame" href="http://epydoc.sourceforge.net"
208 >http://epydoc.sourceforge.net</a>
209 </td>
210 </tr>
211 </table>
212
213 <script type="text/javascript">
214 <!--
215 // Private objects are initially displayed (because if
216 // javascript is turned off then we want them to be
217 // visible); but by default, we want to hide them. So hide
218 // them unless we have a cookie that says to show them.
219 checkCookie();
220 // -->
221 </script>
222 </body>
223 </html>
+0
-166
doc/epydoc/html/ClusterShell-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 Package&nbsp;ClusterShell
42 </span>
43 </td>
44 <td>
45 <table cellpadding="0" cellspacing="0">
46 <!-- hide/show private -->
47 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49 <tr><td align="right"><span class="options"
50 >[<a href="frames.html" target="_top">frames</a
51 >]&nbsp;|&nbsp;<a href="ClusterShell-pysrc.html"
52 target="_top">no&nbsp;frames</a>]</span></td></tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 <h1 class="epydoc">Source Code for <a href="ClusterShell-module.html">Package ClusterShell</a></h1>
58 <pre class="py-src">
59 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
60 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009, 2010)</tt> </tt>
61 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
62 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
63 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
64 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
66 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
67 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
68 <a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
69 <a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
70 <a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
71 <a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
72 <a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
73 <a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
74 <a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
75 <a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
76 <a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
77 <a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
78 <a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
79 <a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
80 <a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
81 <a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
82 <a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
83 <a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
84 <a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
85 <a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
86 <a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
87 <a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
88 <a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
89 <a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
90 <a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
91 <a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"><tt class="py-comment"># $Id: __init__.py 304 2010-07-27 19:47:09Z st-cea $</tt> </tt>
92 <a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"> </tt>
93 <a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"> </tt>
94 <a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"><tt class="py-docstring">"""ClusterShell Python Library</tt> </tt>
95 <a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
96 <a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"><tt class="py-docstring">ClusterShell is a python event-based python library to execute commands</tt> </tt>
97 <a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"><tt class="py-docstring">on local or distant cluster nodes in parallel depending on the selected</tt> </tt>
98 <a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"><tt class="py-docstring">engine and worker mechanisms.</tt> </tt>
99 <a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
100 <a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"><tt class="py-docstring">Please see first:</tt> </tt>
101 <a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"><tt class="py-docstring"> - ClusterShell.NodeSet</tt> </tt>
102 <a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"><tt class="py-docstring"> - ClusterShell.Task</tt> </tt>
103 <a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
104 <a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"> </tt>
105 <a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-string">'1.3'</tt> </tt>
106 <a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable ClusterShell.__version_info__=ClusterShell-module.html#__version_info__"><a title="ClusterShell.__version_info__" class="py-name" href="#" onclick="return doclink('link-0', '__version_info__', 'link-0');">__version_info__</a></tt> <tt class="py-op">=</tt> <tt class="py-name">tuple</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-1" class="py-name" targets="Variable ClusterShell._n=ClusterShell-module.html#_n"><a title="ClusterShell._n" class="py-name" href="#" onclick="return doclink('link-1', '_n', 'link-1');">_n</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt id="link-2" class="py-name"><a title="ClusterShell._n" class="py-name" href="#" onclick="return doclink('link-2', '_n', 'link-1');">_n</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">__version__</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.split()=ClusterShell.NodeSet.NodeSet-class.html#split,Method ClusterShell.NodeSet.RangeSet.split()=ClusterShell.NodeSet.RangeSet-class.html#split"><a title="ClusterShell.NodeSet.NodeSet.split
107 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-3', 'split', 'link-3');">split</a></tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
108 <a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"><tt class="py-name">__date__</tt> <tt class="py-op">=</tt> <tt class="py-string">'2010/07/27'</tt> </tt>
109 <a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"><tt class="py-name">__author__</tt> <tt class="py-op">=</tt> <tt class="py-string">'Stephane Thiell &lt;stephane.thiell@cea.fr&gt;'</tt> </tt>
110 <a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable ClusterShell.__url__=ClusterShell-module.html#__url__"><a title="ClusterShell.__url__" class="py-name" href="#" onclick="return doclink('link-4', '__url__', 'link-4');">__url__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://clustershell.sourceforge.net/'</tt> </tt>
111 <a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"> </tt><script type="text/javascript">
112 <!--
113 expandto(location.href);
114 // -->
115 </script>
116 </pre>
117 <br />
118 <!-- ==================== NAVIGATION BAR ==================== -->
119 <table class="navbar" border="0" width="100%" cellpadding="0"
120 bgcolor="#a0c0ff" cellspacing="0">
121 <tr valign="middle">
122
123 <!-- Tree link -->
124 <th>&nbsp;&nbsp;&nbsp;<a
125 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
126
127 <!-- Index link -->
128 <th>&nbsp;&nbsp;&nbsp;<a
129 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
130
131 <!-- Help link -->
132 <th>&nbsp;&nbsp;&nbsp;<a
133 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
134
135 <!-- Project homepage -->
136 <th class="navbar" align="right" width="100%">
137 <table border="0" cellpadding="0" cellspacing="0">
138 <tr><th class="navbar" align="center"
139 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
140 </tr></table></th>
141 </tr>
142 </table>
143 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
144 <tr>
145 <td align="left" class="footer">
146 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
147 </td>
148 <td align="right" class="footer">
149 <a target="mainFrame" href="http://epydoc.sourceforge.net"
150 >http://epydoc.sourceforge.net</a>
151 </td>
152 </tr>
153 </table>
154
155 <script type="text/javascript">
156 <!--
157 // Private objects are initially displayed (because if
158 // javascript is turned off then we want them to be
159 // visible); but by default, we want to hide them. So hide
160 // them unless we have a cookie that says to show them.
161 checkCookie();
162 // -->
163 </script>
164 </body>
165 </html>
+0
-162
doc/epydoc/html/ClusterShell.Engine-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Package&nbsp;Engine
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine-module.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== PACKAGE DESCRIPTION ==================== -->
59 <h1 class="epydoc">Package Engine</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine-pysrc.html">source&nbsp;code</a></span></p>
60 <!-- ==================== SUBMODULES ==================== -->
61 <a name="section-Submodules"></a>
62 <table class="summary" border="1" cellpadding="3"
63 cellspacing="0" width="100%" bgcolor="white">
64 <tr bgcolor="#70b0f0" class="table-header">
65 <td colspan="2" class="table-header">
66 <table border="0" cellpadding="0" cellspacing="0" width="100%">
67 <tr valign="top">
68 <td align="left"><span class="table-header">Submodules</span></td>
69 <td align="right" valign="top"
70 ><span class="options">[<a href="#section-Submodules"
71 class="privatelink" onclick="toggle_private();"
72 >hide private</a>]</span></td>
73 </tr>
74 </table>
75 </td>
76 </tr>
77 <tr><td class="summary">
78 <ul class="nomargin">
79 <li> <strong class="uidlink"><a href="ClusterShell.Engine.EPoll-module.html">ClusterShell.Engine.EPoll</a></strong>: <em class="summary">A ClusterShell Engine using epoll, an I/O event notification
80 facility.</em> </li>
81 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a></strong>: <em class="summary">Interface of underlying Task's Engine.</em> </li>
82 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Factory-module.html">ClusterShell.Engine.Factory</a></strong>: <em class="summary">Engine Factory to select the best working event engine for the
83 current version of Python and Operating System.</em> </li>
84 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Poll-module.html">ClusterShell.Engine.Poll</a></strong>: <em class="summary">A poll() based ClusterShell Engine.</em> </li>
85 </ul></td></tr>
86 </table>
87
88 <br />
89 <!-- ==================== VARIABLES ==================== -->
90 <a name="section-Variables"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Variables</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-Variables"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
111 </td>
112 </tr>
113 </table>
114 <!-- ==================== NAVIGATION BAR ==================== -->
115 <table class="navbar" border="0" width="100%" cellpadding="0"
116 bgcolor="#a0c0ff" cellspacing="0">
117 <tr valign="middle">
118
119 <!-- Tree link -->
120 <th>&nbsp;&nbsp;&nbsp;<a
121 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
122
123 <!-- Index link -->
124 <th>&nbsp;&nbsp;&nbsp;<a
125 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
126
127 <!-- Help link -->
128 <th>&nbsp;&nbsp;&nbsp;<a
129 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
130
131 <!-- Project homepage -->
132 <th class="navbar" align="right" width="100%">
133 <table border="0" cellpadding="0" cellspacing="0">
134 <tr><th class="navbar" align="center"
135 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
136 </tr></table></th>
137 </tr>
138 </table>
139 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
140 <tr>
141 <td align="left" class="footer">
142 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
143 </td>
144 <td align="right" class="footer">
145 <a target="mainFrame" href="http://epydoc.sourceforge.net"
146 >http://epydoc.sourceforge.net</a>
147 </td>
148 </tr>
149 </table>
150
151 <script type="text/javascript">
152 <!--
153 // Private objects are initially displayed (because if
154 // javascript is turned off then we want them to be
155 // visible); but by default, we want to hide them. So hide
156 // them unless we have a cookie that says to show them.
157 checkCookie();
158 // -->
159 </script>
160 </body>
161 </html>
+0
-116
doc/epydoc/html/ClusterShell.Engine-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Package&nbsp;Engine
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine-pysrc.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <h1 class="epydoc">Source Code for <a href="ClusterShell.Engine-module.html">Package ClusterShell.Engine</a></h1>
59 <pre class="py-src">
60 <a name="L1"></a><tt class="py-lineno">1</tt> <tt class="py-line"> </tt>
61 <a name="L2"></a><tt class="py-lineno">2</tt> <tt class="py-line"> </tt><script type="text/javascript">
62 <!--
63 expandto(location.href);
64 // -->
65 </script>
66 </pre>
67 <br />
68 <!-- ==================== NAVIGATION BAR ==================== -->
69 <table class="navbar" border="0" width="100%" cellpadding="0"
70 bgcolor="#a0c0ff" cellspacing="0">
71 <tr valign="middle">
72
73 <!-- Tree link -->
74 <th>&nbsp;&nbsp;&nbsp;<a
75 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
76
77 <!-- Index link -->
78 <th>&nbsp;&nbsp;&nbsp;<a
79 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
80
81 <!-- Help link -->
82 <th>&nbsp;&nbsp;&nbsp;<a
83 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
84
85 <!-- Project homepage -->
86 <th class="navbar" align="right" width="100%">
87 <table border="0" cellpadding="0" cellspacing="0">
88 <tr><th class="navbar" align="center"
89 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
90 </tr></table></th>
91 </tr>
92 </table>
93 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
94 <tr>
95 <td align="left" class="footer">
96 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
97 </td>
98 <td align="right" class="footer">
99 <a target="mainFrame" href="http://epydoc.sourceforge.net"
100 >http://epydoc.sourceforge.net</a>
101 </td>
102 </tr>
103 </table>
104
105 <script type="text/javascript">
106 <!--
107 // Private objects are initially displayed (because if
108 // javascript is turned off then we want them to be
109 // visible); but by default, we want to hide them. So hide
110 // them unless we have a cookie that says to show them.
111 checkCookie();
112 // -->
113 </script>
114 </body>
115 </html>
+0
-165
doc/epydoc/html/ClusterShell.Engine.EPoll-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.EPoll</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 Module&nbsp;EPoll
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.EPoll-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module EPoll</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html">source&nbsp;code</a></span></p>
61 <p>A ClusterShell Engine using epoll, an I/O event notification
62 facility.</p>
63 <p>The epoll event distribution interface is available on Linux 2.6, and
64 has been included in Python 2.6.</p>
65
66 <!-- ==================== CLASSES ==================== -->
67 <a name="section-Classes"></a>
68 <table class="summary" border="1" cellpadding="3"
69 cellspacing="0" width="100%" bgcolor="white">
70 <tr bgcolor="#70b0f0" class="table-header">
71 <td colspan="2" class="table-header">
72 <table border="0" cellpadding="0" cellspacing="0" width="100%">
73 <tr valign="top">
74 <td align="left"><span class="table-header">Classes</span></td>
75 <td align="right" valign="top"
76 ><span class="options">[<a href="#section-Classes"
77 class="privatelink" onclick="toggle_private();"
78 >hide private</a>]</span></td>
79 </tr>
80 </table>
81 </td>
82 </tr>
83 <tr>
84 <td width="15%" align="right" valign="top" class="summary">
85 <span class="summary-type">&nbsp;</span>
86 </td><td class="summary">
87 <a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html" class="summary-name">EngineEPoll</a><br />
88 EPoll Engine
89 </td>
90 </tr>
91 </table>
92 <!-- ==================== VARIABLES ==================== -->
93 <a name="section-Variables"></a>
94 <table class="summary" border="1" cellpadding="3"
95 cellspacing="0" width="100%" bgcolor="white">
96 <tr bgcolor="#70b0f0" class="table-header">
97 <td colspan="2" class="table-header">
98 <table border="0" cellpadding="0" cellspacing="0" width="100%">
99 <tr valign="top">
100 <td align="left"><span class="table-header">Variables</span></td>
101 <td align="right" valign="top"
102 ><span class="options">[<a href="#section-Variables"
103 class="privatelink" onclick="toggle_private();"
104 >hide private</a>]</span></td>
105 </tr>
106 </table>
107 </td>
108 </tr>
109 <tr>
110 <td width="15%" align="right" valign="top" class="summary">
111 <span class="summary-type">&nbsp;</span>
112 </td><td class="summary">
113 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Engine'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Engine</code><code class="variable-quote">'</code></code>
114 </td>
115 </tr>
116 </table>
117 <!-- ==================== NAVIGATION BAR ==================== -->
118 <table class="navbar" border="0" width="100%" cellpadding="0"
119 bgcolor="#a0c0ff" cellspacing="0">
120 <tr valign="middle">
121
122 <!-- Tree link -->
123 <th>&nbsp;&nbsp;&nbsp;<a
124 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
125
126 <!-- Index link -->
127 <th>&nbsp;&nbsp;&nbsp;<a
128 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
129
130 <!-- Help link -->
131 <th>&nbsp;&nbsp;&nbsp;<a
132 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
133
134 <!-- Project homepage -->
135 <th class="navbar" align="right" width="100%">
136 <table border="0" cellpadding="0" cellspacing="0">
137 <tr><th class="navbar" align="center"
138 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
139 </tr></table></th>
140 </tr>
141 </table>
142 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
143 <tr>
144 <td align="left" class="footer">
145 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
146 </td>
147 <td align="right" class="footer">
148 <a target="mainFrame" href="http://epydoc.sourceforge.net"
149 >http://epydoc.sourceforge.net</a>
150 </td>
151 </tr>
152 </table>
153
154 <script type="text/javascript">
155 <!--
156 // Private objects are initially displayed (because if
157 // javascript is turned off then we want them to be
158 // visible); but by default, we want to hide them. So hide
159 // them unless we have a cookie that says to show them.
160 checkCookie();
161 // -->
162 </script>
163 </body>
164 </html>
+0
-454
doc/epydoc/html/ClusterShell.Engine.EPoll-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.EPoll</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 Module&nbsp;EPoll
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.EPoll-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Engine.EPoll-module.html">Module ClusterShell.Engine.EPoll</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2009, 2010)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: EPoll.py 238 2010-02-25 22:30:31Z st-cea $</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">A ClusterShell Engine using epoll, an I/O event notification facility.</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">The epoll event distribution interface is available on Linux 2.6, and</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">has been included in Python 2.6.</tt> </tt>
100 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
101 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> </tt>
102 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">errno</tt> </tt>
103 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">select</tt> </tt>
104 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
105 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> </tt>
106 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package ClusterShell.Engine=ClusterShell.Engine-module.html,Module ClusterShell.Engine.Engine=ClusterShell.Engine.Engine-module.html,Class ClusterShell.Engine.Engine.Engine=ClusterShell.Engine.Engine.Engine-class.html"><a title="ClusterShell.Engine
107 ClusterShell.Engine.Engine
108 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-1', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name"><a title="ClusterShell.Engine
109 ClusterShell.Engine.Engine
110 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-2', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name"><a title="ClusterShell.Engine
111 ClusterShell.Engine.Engine
112 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-3', 'Engine', 'link-1');">Engine</a></tt> </tt>
113 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-4', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="ClusterShell.Engine
114 ClusterShell.Engine.Engine
115 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-5', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name"><a title="ClusterShell.Engine
116 ClusterShell.Engine.Engine
117 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-6', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineNotSupportedError=ClusterShell.Engine.Engine.EngineNotSupportedError-class.html"><a title="ClusterShell.Engine.Engine.EngineNotSupportedError" class="py-name" href="#" onclick="return doclink('link-7', 'EngineNotSupportedError', 'link-7');">EngineNotSupportedError</a></tt> </tt>
118 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-8', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="ClusterShell.Engine
119 ClusterShell.Engine.Engine
120 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-9', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.Engine
121 ClusterShell.Engine.Engine
122 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-10', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineTimeoutException=ClusterShell.Engine.Engine.EngineTimeoutException-class.html"><a title="ClusterShell.Engine.Engine.EngineTimeoutException" class="py-name" href="#" onclick="return doclink('link-11', 'EngineTimeoutException', 'link-11');">EngineTimeoutException</a></tt> </tt>
123 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-12" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-12', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Package ClusterShell.Worker=ClusterShell.Worker-module.html,Module ClusterShell.Worker.Worker=ClusterShell.Worker.Worker-module.html,Class ClusterShell.Worker.Worker.Worker=ClusterShell.Worker.Worker.Worker-class.html"><a title="ClusterShell.Worker
124 ClusterShell.Worker.Worker
125 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-13', 'Worker', 'link-13');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Module ClusterShell.Worker.EngineClient=ClusterShell.Worker.EngineClient-module.html,Class ClusterShell.Worker.EngineClient.EngineClient=ClusterShell.Worker.EngineClient.EngineClient-class.html"><a title="ClusterShell.Worker.EngineClient
126 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-14', 'EngineClient', 'link-14');">EngineClient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-15" class="py-name" targets="Class ClusterShell.Worker.EngineClient.EngineClientEOF=ClusterShell.Worker.EngineClient.EngineClientEOF-class.html"><a title="ClusterShell.Worker.EngineClient.EngineClientEOF" class="py-name" href="#" onclick="return doclink('link-15', 'EngineClientEOF', 'link-15');">EngineClientEOF</a></tt> </tt>
127 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> </tt>
128 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
129 <a name="EngineEPoll"></a><div id="EngineEPoll-def"><a name="L52"></a><tt class="py-lineno"> 52</tt> <a class="py-toggle" href="#" id="EngineEPoll-toggle" onclick="return toggle('EngineEPoll');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">EngineEPoll</a><tt class="py-op">(</tt><tt class="py-base-class">Engine</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
130 </div><div id="EngineEPoll-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineEPoll-expanded"><a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
131 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-docstring"> EPoll Engine</tt> </tt>
132 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
133 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> ClusterShell Engine class using the select.epoll mechanism.</tt> </tt>
134 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
135 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> </tt>
136 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt id="link-16" class="py-name" targets="Variable ClusterShell.Engine.EPoll.EngineEPoll.identifier=ClusterShell.Engine.EPoll.EngineEPoll-class.html#identifier,Variable ClusterShell.Engine.Engine.Engine.identifier=ClusterShell.Engine.Engine.Engine-class.html#identifier,Variable ClusterShell.Engine.Poll.EnginePoll.identifier=ClusterShell.Engine.Poll.EnginePoll-class.html#identifier"><a title="ClusterShell.Engine.EPoll.EngineEPoll.identifier
137 ClusterShell.Engine.Engine.Engine.identifier
138 ClusterShell.Engine.Poll.EnginePoll.identifier" class="py-name" href="#" onclick="return doclink('link-16', 'identifier', 'link-16');">identifier</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"epoll"</tt> </tt>
139 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> </tt>
140 <a name="EngineEPoll.__init__"></a><div id="EngineEPoll.__init__-def"><a name="L61"></a><tt class="py-lineno"> 61</tt> <a class="py-toggle" href="#" id="EngineEPoll.__init__-toggle" onclick="return toggle('EngineEPoll.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.EPoll.EngineEPoll-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">info</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
141 </div><div id="EngineEPoll.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineEPoll.__init__-expanded"><a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
142 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> Initialize Engine.</tt> </tt>
143 <a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
144 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt id="link-17" class="py-name"><a title="ClusterShell.Engine
145 ClusterShell.Engine.Engine
146 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-17', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
147 ClusterShell.Engine.Engine.Engine.__init__
148 ClusterShell.Engine.Engine.EngineAbortException.__init__
149 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
150 ClusterShell.Engine.Engine.EngineTimer.__init__
151 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
152 ClusterShell.Engine.Engine._EngineTimerQ.__init__
153 ClusterShell.Engine.Poll.EnginePoll.__init__
154 ClusterShell.MsgTree.MsgTree.__init__
155 ClusterShell.MsgTree.MsgTreeElem.__init__
156 ClusterShell.NodeSet.NodeSet.__init__
157 ClusterShell.NodeSet.NodeSetBase.__init__
158 ClusterShell.NodeSet.NodeSetParseError.__init__
159 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
160 ClusterShell.NodeSet.ParsingEngine.__init__
161 ClusterShell.NodeSet.RangeSet.__init__
162 ClusterShell.NodeSet.RangeSetPaddingError.__init__
163 ClusterShell.NodeSet.RangeSetParseError.__init__
164 ClusterShell.NodeUtils.GroupResolver.__init__
165 ClusterShell.NodeUtils.GroupResolverConfig.__init__
166 ClusterShell.NodeUtils.GroupSource.__init__
167 ClusterShell.NodeUtils.GroupSourceException.__init__
168 ClusterShell.Task.Task._SuspendCondition.__init__
169 ClusterShell.Task.Task.__init__
170 ClusterShell.Task._TaskMsgTree.__init__
171 ClusterShell.Worker.EngineClient.EngineClient.__init__
172 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
173 ClusterShell.Worker.EngineClient.EnginePort.__init__
174 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
175 ClusterShell.Worker.Popen.WorkerPopen.__init__
176 ClusterShell.Worker.Ssh.Scp.__init__
177 ClusterShell.Worker.Ssh.Ssh.__init__
178 ClusterShell.Worker.Ssh.WorkerSsh.__init__
179 ClusterShell.Worker.Worker.DistantWorker.__init__
180 ClusterShell.Worker.Worker.Worker.__init__
181 ClusterShell.Worker.Worker.WorkerSimple.__init__
182 clubak.Display.__init__
183 clush.ClushConfig.__init__
184 clush.ClushConfigError.__init__
185 clush.DirectOutputHandler.__init__
186 clush.Display.__init__
187 clush.GatherOutputHandler.__init__
188 clush.RunTimer.__init__
189 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-18', '__init__', 'link-18');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-19" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-19', 'info', 'link-19');">info</a></tt><tt class="py-op">)</tt> </tt>
190 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
191 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-comment"># get an epoll object</tt> </tt>
192 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">epolling</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">epoll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
193 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
194 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-20" class="py-name"><a title="ClusterShell.Engine.Engine.EngineNotSupportedError" class="py-name" href="#" onclick="return doclink('link-20', 'EngineNotSupportedError', 'link-7');">EngineNotSupportedError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
195 </div><a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> </tt>
196 <a name="EngineEPoll._register_specific"></a><div id="EngineEPoll._register_specific-def"><a name="L72"></a><tt class="py-lineno"> 72</tt> <a class="py-toggle" href="#" id="EngineEPoll._register_specific-toggle" onclick="return toggle('EngineEPoll._register_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_register_specific">_register_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">event</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
197 </div><div id="EngineEPoll._register_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineEPoll._register_specific-expanded"><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
198 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-docstring"> Engine-specific fd registering. Called by Engine register.</tt> </tt>
199 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
200 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt id="link-21" class="py-name"><a title="ClusterShell.Engine
201 ClusterShell.Engine.Engine
202 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-21', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_READ=ClusterShell.Engine.Engine.Engine-class.html#E_READ"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-22', 'E_READ', 'link-22');">E_READ</a></tt> <tt class="py-op">|</tt> <tt id="link-23" class="py-name"><a title="ClusterShell.Engine
203 ClusterShell.Engine.Engine
204 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-23', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_ERROR=ClusterShell.Engine.Engine.Engine-class.html#E_ERROR"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-24', 'E_ERROR', 'link-24');">E_ERROR</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
205 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">EPOLLIN</tt> </tt>
206 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">event</tt> <tt class="py-op">==</tt> <tt id="link-25" class="py-name"><a title="ClusterShell.Engine
207 ClusterShell.Engine.Engine
208 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-25', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_WRITE=ClusterShell.Engine.Engine.Engine-class.html#E_WRITE"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-26', 'E_WRITE', 'link-26');">E_WRITE</a></tt><tt class="py-op">:</tt> </tt>
209 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">EPOLLOUT</tt> </tt>
210 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> </tt>
211 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">epolling</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.register()=ClusterShell.Engine.Engine.Engine-class.html#register"><a title="ClusterShell.Engine.Engine.Engine.register" class="py-name" href="#" onclick="return doclink('link-27', 'register', 'link-27');">register</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">eventmask</tt><tt class="py-op">)</tt> </tt>
212 </div><a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> </tt>
213 <a name="EngineEPoll._unregister_specific"></a><div id="EngineEPoll._unregister_specific-def"><a name="L83"></a><tt class="py-lineno"> 83</tt> <a class="py-toggle" href="#" id="EngineEPoll._unregister_specific-toggle" onclick="return toggle('EngineEPoll._unregister_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_unregister_specific">_unregister_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">ev_is_set</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
214 </div><div id="EngineEPoll._unregister_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineEPoll._unregister_specific-expanded"><a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
215 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-docstring"> Engine-specific fd unregistering. Called by Engine unregister.</tt> </tt>
216 <a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
217 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">epolling</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.unregister()=ClusterShell.Engine.Engine.Engine-class.html#unregister"><a title="ClusterShell.Engine.Engine.Engine.unregister" class="py-name" href="#" onclick="return doclink('link-28', 'unregister', 'link-28');">unregister</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
218 </div><a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> </tt>
219 <a name="EngineEPoll._modify_specific"></a><div id="EngineEPoll._modify_specific-def"><a name="L89"></a><tt class="py-lineno"> 89</tt> <a class="py-toggle" href="#" id="EngineEPoll._modify_specific-toggle" onclick="return toggle('EngineEPoll._modify_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_modify_specific">_modify_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">event</tt><tt class="py-op">,</tt> <tt class="py-param">setvalue</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
220 </div><div id="EngineEPoll._modify_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineEPoll._modify_specific-expanded"><a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
221 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-docstring"> Engine-specific modifications after a interesting event change for</tt> </tt>
222 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt class="py-docstring"> a file descriptor. Called automatically by Engine set_events().</tt> </tt>
223 <a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt class="py-docstring"> For the epoll engine, it modifies the event mask associated to a file</tt> </tt>
224 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt class="py-docstring"> descriptor.</tt> </tt>
225 <a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
226 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine._debug()=ClusterShell.Engine.Engine.Engine-class.html#_debug"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-29', '_debug', 'link-29');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"MODSPEC fd=%d event=%x setvalue=%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">event</tt><tt class="py-op">,</tt> </tt>
227 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">setvalue</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
228 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
229 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">setvalue</tt><tt class="py-op">:</tt> </tt>
230 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt id="link-30" class="py-name"><a title="ClusterShell.Engine
231 ClusterShell.Engine.Engine
232 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-30', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-31', 'E_READ', 'link-22');">E_READ</a></tt> <tt class="py-op">|</tt> <tt id="link-32" class="py-name"><a title="ClusterShell.Engine
233 ClusterShell.Engine.Engine
234 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-32', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-33', 'E_ERROR', 'link-24');">E_ERROR</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
235 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">EPOLLIN</tt> </tt>
236 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">event</tt> <tt class="py-op">==</tt> <tt id="link-34" class="py-name"><a title="ClusterShell.Engine
237 ClusterShell.Engine.Engine
238 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-34', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-35', 'E_WRITE', 'link-26');">E_WRITE</a></tt><tt class="py-op">:</tt> </tt>
239 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">EPOLLOUT</tt> </tt>
240 <a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> </tt>
241 <a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">epolling</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.modify()=ClusterShell.Engine.Engine.Engine-class.html#modify"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-36', 'modify', 'link-36');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">eventmask</tt><tt class="py-op">)</tt> </tt>
242 </div><a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> </tt>
243 <a name="EngineEPoll.runloop"></a><div id="EngineEPoll.runloop-def"><a name="L107"></a><tt class="py-lineno">107</tt> <a class="py-toggle" href="#" id="EngineEPoll.runloop-toggle" onclick="return toggle('EngineEPoll.runloop');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#runloop">runloop</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
244 </div><div id="EngineEPoll.runloop-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineEPoll.runloop-expanded"><a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
245 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"><tt class="py-docstring"> Run epoll main loop.</tt> </tt>
246 <a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
247 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
248 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">timeout</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
249 <a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> </tt>
250 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">start_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
251 <a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> </tt>
252 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-comment"># run main event loop...</tt> </tt>
253 <a name="L117"></a><tt class="py-lineno">117</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">evlooprefcnt</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
254 <a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-37', '_debug', 'link-29');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"LOOP evlooprefcnt=%d (reg_clifds=%s) (timers=%d)"</tt> <tt class="py-op">%</tt> \ </tt>
255 <a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.keys()=ClusterShell.MsgTree.MsgTree-class.html#keys"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-38', 'keys', 'link-38');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
256 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
257 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
258 <a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-name">timeo</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.nextfire_delay()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#nextfire_delay"><a title="ClusterShell.Engine.Engine._EngineTimerQ.nextfire_delay" class="py-name" href="#" onclick="return doclink('link-39', 'nextfire_delay', 'link-39');">nextfire_delay</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
259 <a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">timeo</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
260 <a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-comment"># task timeout may invalidate clients timeout</tt> </tt>
261 <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">timerq</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clear()=ClusterShell.Engine.Engine.Engine-class.html#clear,Method ClusterShell.Engine.Engine._EngineTimerQ.clear()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear,Method ClusterShell.MsgTree.MsgTree.clear()=ClusterShell.MsgTree.MsgTree-class.html#clear,Method ClusterShell.NodeSet.NodeSetBase.clear()=ClusterShell.NodeSet.NodeSetBase-class.html#clear,Method ClusterShell.NodeSet.RangeSet.clear()=ClusterShell.NodeSet.RangeSet-class.html#clear"><a title="ClusterShell.Engine.Engine.Engine.clear
262 ClusterShell.Engine.Engine._EngineTimerQ.clear
263 ClusterShell.MsgTree.MsgTree.clear
264 ClusterShell.NodeSet.NodeSetBase.clear
265 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-40', 'clear', 'link-40');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
266 <a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-name">timeo</tt> <tt class="py-op">=</tt> <tt class="py-name">timeout</tt> </tt>
267 <a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">timeo</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
268 <a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-name">timeo</tt> <tt class="py-op">=</tt> <tt class="py-name">timeout</tt> </tt>
269 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> </tt>
270 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
271 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">evlist</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">epolling</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-name">timeo</tt> <tt class="py-op">+</tt> <tt class="py-number">0.001</tt><tt class="py-op">)</tt> </tt>
272 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> </tt>
273 <a name="L133"></a><tt class="py-lineno">133</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">e</tt><tt class="py-op">:</tt> </tt>
274 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-comment"># might get interrupted by a signal</tt> </tt>
275 <a name="L135"></a><tt class="py-lineno">135</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">EINTR</tt><tt class="py-op">:</tt> </tt>
276 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
277 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> </tt>
278 <a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">event</tt> <tt class="py-keyword">in</tt> <tt class="py-name">evlist</tt><tt class="py-op">:</tt> </tt>
279 <a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> </tt>
280 <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">reg_clifds_changed</tt><tt class="py-op">:</tt> </tt>
281 <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 id="link-41" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-41', '_debug', 'link-29');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"REG CLIENTS CHANGED - Aborting current evlist"</tt><tt class="py-op">)</tt> </tt>
282 <a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-comment"># Oops, reconsider evlist by calling poll() again.</tt> </tt>
283 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
284 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> </tt>
285 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-comment"># get client instance</tt> </tt>
286 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine._fd2client()=ClusterShell.Engine.Engine.Engine-class.html#_fd2client"><a title="ClusterShell.Engine.Engine.Engine._fd2client" class="py-name" href="#" onclick="return doclink('link-42', '_fd2client', 'link-42');">_fd2client</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
287 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt> <tt class="py-keyword">or</tt> <tt class="py-name">fdev</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
288 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
289 <a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> </tt>
290 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-comment"># process this client</tt> </tt>
291 <a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
292 <a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> </tt>
293 <a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-comment"># check for poll error condition of some sort</tt> </tt>
294 <a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">EPOLLERR</tt><tt class="py-op">:</tt> </tt>
295 <a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-43', '_debug', 'link-29');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"EPOLLERR %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
296 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.unregister_writer()=ClusterShell.Engine.Engine.Engine-class.html#unregister_writer"><a title="ClusterShell.Engine.Engine.Engine.unregister_writer" class="py-name" href="#" onclick="return doclink('link-44', 'unregister_writer', 'link-44');">unregister_writer</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
297 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
298 <a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
299 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
300 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> </tt>
301 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-comment"># check for data to read</tt> </tt>
302 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">EPOLLIN</tt><tt class="py-op">:</tt> </tt>
303 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">fdev</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt id="link-45" class="py-name"><a title="ClusterShell.Engine
304 ClusterShell.Engine.Engine
305 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-45', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-46', 'E_READ', 'link-22');">E_READ</a></tt> <tt class="py-op">|</tt> <tt id="link-47" class="py-name"><a title="ClusterShell.Engine
306 ClusterShell.Engine.Engine
307 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-47', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-48', 'E_ERROR', 'link-24');">E_ERROR</a></tt><tt class="py-op">)</tt> </tt>
308 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">fdev</tt> </tt>
309 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-49', 'modify', 'link-36');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
310 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
311 <a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fdev</tt> <tt class="py-op">&amp;</tt> <tt id="link-50" class="py-name"><a title="ClusterShell.Engine
312 ClusterShell.Engine.Engine
313 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-50', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-51', 'E_READ', 'link-22');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
314 <a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._handle_read()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read,Method ClusterShell.Worker.EngineClient.EnginePort._handle_read()=ClusterShell.Worker.EngineClient.EnginePort-class.html#_handle_read,Method ClusterShell.Worker.Pdsh.WorkerPdsh._handle_read()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_read,Method ClusterShell.Worker.Ssh.Ssh._handle_read()=ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read,Method ClusterShell.Worker.Worker.WorkerSimple._handle_read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read"><a title="ClusterShell.Worker.EngineClient.EngineClient._handle_read
315 ClusterShell.Worker.EngineClient.EnginePort._handle_read
316 ClusterShell.Worker.Pdsh.WorkerPdsh._handle_read
317 ClusterShell.Worker.Ssh.Ssh._handle_read
318 ClusterShell.Worker.Worker.WorkerSimple._handle_read" class="py-name" href="#" onclick="return doclink('link-52', '_handle_read', 'link-52');">_handle_read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
319 <a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
320 <a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._handle_error()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error,Method ClusterShell.Worker.Pdsh.WorkerPdsh._handle_error()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_error,Method ClusterShell.Worker.Ssh.Ssh._handle_error()=ClusterShell.Worker.Ssh.Ssh-class.html#_handle_error,Method ClusterShell.Worker.Worker.WorkerSimple._handle_error()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_error"><a title="ClusterShell.Worker.EngineClient.EngineClient._handle_error
321 ClusterShell.Worker.Pdsh.WorkerPdsh._handle_error
322 ClusterShell.Worker.Ssh.Ssh._handle_error
323 ClusterShell.Worker.Worker.WorkerSimple._handle_error" class="py-name" href="#" onclick="return doclink('link-53', '_handle_error', 'link-53');">_handle_error</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
324 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-54" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClientEOF" class="py-name" href="#" onclick="return doclink('link-54', 'EngineClientEOF', 'link-15');">EngineClientEOF</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
325 <a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-55', '_debug', 'link-29');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"EngineClientEOF %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
326 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fdev</tt> <tt class="py-op">&amp;</tt> <tt id="link-56" class="py-name"><a title="ClusterShell.Engine
327 ClusterShell.Engine.Engine
328 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-56', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-57', 'E_READ', 'link-22');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
329 <a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.remove()=ClusterShell.Engine.Engine.Engine-class.html#remove,Method ClusterShell.MsgTree.MsgTree.remove()=ClusterShell.MsgTree.MsgTree-class.html#remove,Method ClusterShell.NodeSet.NodeSetBase.remove()=ClusterShell.NodeSet.NodeSetBase-class.html#remove,Method ClusterShell.NodeSet.RangeSet.remove()=ClusterShell.NodeSet.RangeSet-class.html#remove"><a title="ClusterShell.Engine.Engine.Engine.remove
330 ClusterShell.MsgTree.MsgTree.remove
331 ClusterShell.NodeSet.NodeSetBase.remove
332 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-58', 'remove', 'link-58');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
333 <a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
334 <a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> </tt>
335 <a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-comment"># or check for end of stream (do not handle both at the same</tt> </tt>
336 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-comment"># time because handle_read() may perform a partial read)</tt> </tt>
337 <a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">EPOLLHUP</tt><tt class="py-op">:</tt> </tt>
338 <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-59" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-59', '_debug', 'link-29');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"EPOLLHUP fd=%d %s (r%s,w%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> </tt>
339 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.reader_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.reader_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
340 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-60', 'reader_fileno', 'link-60');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
341 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.writer_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.writer_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
342 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-61', 'writer_fileno', 'link-61');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
343 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
344 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> </tt>
345 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fdev</tt> <tt class="py-op">&amp;</tt> <tt id="link-62" class="py-name"><a title="ClusterShell.Engine
346 ClusterShell.Engine.Engine
347 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-62', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-63', 'E_READ', 'link-22');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
348 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-64" class="py-name"><a title="ClusterShell.Engine
349 ClusterShell.Engine.Engine
350 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-64', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-65', 'E_ERROR', 'link-24');">E_ERROR</a></tt><tt class="py-op">:</tt> </tt>
351 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-66', 'modify', 'link-36');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
352 <a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
353 <a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.remove
354 ClusterShell.MsgTree.MsgTree.remove
355 ClusterShell.NodeSet.NodeSetBase.remove
356 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-67', 'remove', 'link-58');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
357 <a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
358 <a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-68" class="py-name"><a title="ClusterShell.Engine
359 ClusterShell.Engine.Engine
360 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-68', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-69', 'E_READ', 'link-22');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
361 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-70', 'modify', 'link-36');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
362 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
363 <a name="L194"></a><tt class="py-lineno">194</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="ClusterShell.Engine.Engine.Engine.remove
364 ClusterShell.MsgTree.MsgTree.remove
365 ClusterShell.NodeSet.NodeSetBase.remove
366 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-71', 'remove', 'link-58');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
367 <a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
368 <a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> </tt>
369 <a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-comment"># check for writing</tt> </tt>
370 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">EPOLLOUT</tt><tt class="py-op">:</tt> </tt>
371 <a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-72', '_debug', 'link-29');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"EPOLLOUT fd=%d %s (r%s,w%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> </tt>
372 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
373 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-73', 'reader_fileno', 'link-60');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
374 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
375 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-74', 'writer_fileno', 'link-61');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
376 <a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">fdev</tt> <tt class="py-op">==</tt> <tt id="link-75" class="py-name"><a title="ClusterShell.Engine
377 ClusterShell.Engine.Engine
378 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-75', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-76', 'E_WRITE', 'link-26');">E_WRITE</a></tt> </tt>
379 <a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">fdev</tt> </tt>
380 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-77', 'modify', 'link-36');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
381 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._handle_write()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write"><a title="ClusterShell.Worker.EngineClient.EngineClient._handle_write" class="py-name" href="#" onclick="return doclink('link-78', '_handle_write', 'link-78');">_handle_write</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
382 <a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> </tt>
383 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-comment"># post processing</tt> </tt>
384 <a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
385 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> </tt>
386 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-comment"># apply any changes occured during processing</tt> </tt>
387 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt><tt class="py-op">:</tt> </tt>
388 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.set_events()=ClusterShell.Engine.Engine.Engine-class.html#set_events"><a title="ClusterShell.Engine.Engine.Engine.set_events" class="py-name" href="#" onclick="return doclink('link-79', 'set_events', 'link-79');">set_events</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt><tt class="py-op">)</tt> </tt>
389 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> </tt>
390 <a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-comment"># check for task runloop timeout</tt> </tt>
391 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">start_time</tt> <tt class="py-op">+</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
392 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-80" class="py-name"><a title="ClusterShell.Engine.Engine.EngineTimeoutException" class="py-name" href="#" onclick="return doclink('link-80', 'EngineTimeoutException', 'link-11');">EngineTimeoutException</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
393 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> </tt>
394 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-comment"># process clients timeout</tt> </tt>
395 <a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.fire_timers()=ClusterShell.Engine.Engine.Engine-class.html#fire_timers"><a title="ClusterShell.Engine.Engine.Engine.fire_timers" class="py-name" href="#" onclick="return doclink('link-81', 'fire_timers', 'link-81');">fire_timers</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
396 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> </tt>
397 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-82', '_debug', 'link-29');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"LOOP EXIT evlooprefcnt=%d (reg_clifds=%s) (timers=%d)"</tt> <tt class="py-op">%</tt> \ </tt>
398 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
399 </div></div><a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> </tt><script type="text/javascript">
400 <!--
401 expandto(location.href);
402 // -->
403 </script>
404 </pre>
405 <br />
406 <!-- ==================== NAVIGATION BAR ==================== -->
407 <table class="navbar" border="0" width="100%" cellpadding="0"
408 bgcolor="#a0c0ff" cellspacing="0">
409 <tr valign="middle">
410
411 <!-- Tree link -->
412 <th>&nbsp;&nbsp;&nbsp;<a
413 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
414
415 <!-- Index link -->
416 <th>&nbsp;&nbsp;&nbsp;<a
417 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
418
419 <!-- Help link -->
420 <th>&nbsp;&nbsp;&nbsp;<a
421 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
422
423 <!-- Project homepage -->
424 <th class="navbar" align="right" width="100%">
425 <table border="0" cellpadding="0" cellspacing="0">
426 <tr><th class="navbar" align="center"
427 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
428 </tr></table></th>
429 </tr>
430 </table>
431 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
432 <tr>
433 <td align="left" class="footer">
434 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:24 2010
435 </td>
436 <td align="right" class="footer">
437 <a target="mainFrame" href="http://epydoc.sourceforge.net"
438 >http://epydoc.sourceforge.net</a>
439 </td>
440 </tr>
441 </table>
442
443 <script type="text/javascript">
444 <!--
445 // Private objects are initially displayed (because if
446 // javascript is turned off then we want them to be
447 // visible); but by default, we want to hide them. So hide
448 // them unless we have a cookie that says to show them.
449 checkCookie();
450 // -->
451 </script>
452 </body>
453 </html>
+0
-466
doc/epydoc/html/ClusterShell.Engine.EPoll.EngineEPoll-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.EPoll.EngineEPoll</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.EPoll-module.html">Module&nbsp;EPoll</a> ::
44 Class&nbsp;EngineEPoll
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineEPoll</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters" name="uml_class_diagram_for_clusters">
64 <area shape="rect" id="node0" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#identifier" title="ClusterShell.Engine.EPoll.EngineEPoll.identifier" alt="" coords="99,439,228,457"/>
65 <area shape="rect" id="node0" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__" title="Initialize Engine." alt="" coords="99,460,228,479"/>
66 <area shape="rect" id="node0" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#runloop" title="Run epoll main loop." alt="" coords="99,479,228,497"/>
67 <area shape="rect" id="node1" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html" title="EPoll Engine" alt="" coords="87,414,239,503"/>
68 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#E_READ" title="ClusterShell.Engine.Engine.Engine.E_READ" alt="" coords="17,31,309,49"/>
69 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#E_ERROR" title="ClusterShell.Engine.Engine.Engine.E_ERROR" alt="" coords="17,49,309,68"/>
70 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#E_WRITE" title="ClusterShell.Engine.Engine.Engine.E_WRITE" alt="" coords="17,68,309,87"/>
71 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#E_ANY" title="ClusterShell.Engine.Engine.Engine.E_ANY" alt="" coords="17,87,309,105"/>
72 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#clients" title="Get a copy of clients set." alt="" coords="17,108,309,127"/>
73 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#ports" title="Get a copy of ports set." alt="" coords="17,127,309,145"/>
74 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#add" title="Add a client to engine." alt="" coords="17,145,309,164"/>
75 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#remove" title="Remove a client from engine." alt="" coords="17,164,309,183"/>
76 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#clear" title="Remove all clients." alt="" coords="17,183,309,201"/>
77 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#register" title="Register an engine client." alt="" coords="17,201,309,220"/>
78 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#unregister_writer" title="ClusterShell.Engine.Engine.Engine.unregister_writer" alt="" coords="17,220,309,239"/>
79 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#unregister" title="Unregister a client." alt="" coords="17,239,309,257"/>
80 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#modify" title="Modify the next loop interest events bitset for a client." alt="" coords="17,257,309,276"/>
81 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#set_events" title="Set the active interest events bitset for a client." alt="" coords="17,276,309,295"/>
82 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#set_reading" title="Set client reading state." alt="" coords="17,295,309,313"/>
83 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#set_reading_error" title="Set client reading error state." alt="" coords="17,313,309,332"/>
84 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#set_writing" title="Set client writing state." alt="" coords="17,332,309,351"/>
85 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html#exited" title="Returns True if the engine has exited the runloop once." alt="" coords="17,369,309,388"/>
86 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html" title="Interface for ClusterShell engine." alt="" coords="5,6,320,394"/>
87 </map>
88 <img src="uml_class_diagram_for_clusters.png" alt='' usemap="#uml_class_diagram_for_clusters" ismap="ismap" class="graph-without-title" />
89 </center>
90 </center>
91 <hr />
92 <p>EPoll Engine</p>
93 <p>ClusterShell Engine class using the select.epoll mechanism.</p>
94
95 <!-- ==================== INSTANCE METHODS ==================== -->
96 <a name="section-InstanceMethods"></a>
97 <table class="summary" border="1" cellpadding="3"
98 cellspacing="0" width="100%" bgcolor="white">
99 <tr bgcolor="#70b0f0" class="table-header">
100 <td colspan="2" class="table-header">
101 <table border="0" cellpadding="0" cellspacing="0" width="100%">
102 <tr valign="top">
103 <td align="left"><span class="table-header">Instance Methods</span></td>
104 <td align="right" valign="top"
105 ><span class="options">[<a href="#section-InstanceMethods"
106 class="privatelink" onclick="toggle_private();"
107 >hide private</a>]</span></td>
108 </tr>
109 </table>
110 </td>
111 </tr>
112 <tr>
113 <td width="15%" align="right" valign="top" class="summary">
114 <span class="summary-type">&nbsp;</span>
115 </td><td class="summary">
116 <table width="100%" cellpadding="0" cellspacing="0" border="0">
117 <tr>
118 <td><span class="summary-sig"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
119 <span class="summary-sig-arg">info</span>)</span><br />
120 Initialize Engine.</td>
121 <td align="right" valign="top">
122 <span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll.__init__">source&nbsp;code</a></span>
123
124 </td>
125 </tr>
126 </table>
127
128 </td>
129 </tr>
130 <tr class="private">
131 <td width="15%" align="right" valign="top" class="summary">
132 <span class="summary-type">&nbsp;</span>
133 </td><td class="summary">
134 <table width="100%" cellpadding="0" cellspacing="0" border="0">
135 <tr>
136 <td><span class="summary-sig"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_register_specific" class="summary-sig-name" onclick="show_private();">_register_specific</a>(<span class="summary-sig-arg">self</span>,
137 <span class="summary-sig-arg">fd</span>,
138 <span class="summary-sig-arg">event</span>)</span><br />
139 Engine-specific fd registering.</td>
140 <td align="right" valign="top">
141 <span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll._register_specific">source&nbsp;code</a></span>
142
143 </td>
144 </tr>
145 </table>
146
147 </td>
148 </tr>
149 <tr class="private">
150 <td width="15%" align="right" valign="top" class="summary">
151 <span class="summary-type">&nbsp;</span>
152 </td><td class="summary">
153 <table width="100%" cellpadding="0" cellspacing="0" border="0">
154 <tr>
155 <td><span class="summary-sig"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_unregister_specific" class="summary-sig-name" onclick="show_private();">_unregister_specific</a>(<span class="summary-sig-arg">self</span>,
156 <span class="summary-sig-arg">fd</span>,
157 <span class="summary-sig-arg">ev_is_set</span>)</span><br />
158 Engine-specific fd unregistering.</td>
159 <td align="right" valign="top">
160 <span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll._unregister_specific">source&nbsp;code</a></span>
161
162 </td>
163 </tr>
164 </table>
165
166 </td>
167 </tr>
168 <tr class="private">
169 <td width="15%" align="right" valign="top" class="summary">
170 <span class="summary-type">&nbsp;</span>
171 </td><td class="summary">
172 <table width="100%" cellpadding="0" cellspacing="0" border="0">
173 <tr>
174 <td><span class="summary-sig"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_modify_specific" class="summary-sig-name" onclick="show_private();">_modify_specific</a>(<span class="summary-sig-arg">self</span>,
175 <span class="summary-sig-arg">fd</span>,
176 <span class="summary-sig-arg">event</span>,
177 <span class="summary-sig-arg">setvalue</span>)</span><br />
178 Engine-specific modifications after a interesting event change for a
179 file descriptor.</td>
180 <td align="right" valign="top">
181 <span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll._modify_specific">source&nbsp;code</a></span>
182
183 </td>
184 </tr>
185 </table>
186
187 </td>
188 </tr>
189 <tr>
190 <td width="15%" align="right" valign="top" class="summary">
191 <span class="summary-type">&nbsp;</span>
192 </td><td class="summary">
193 <table width="100%" cellpadding="0" cellspacing="0" border="0">
194 <tr>
195 <td><span class="summary-sig"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#runloop" class="summary-sig-name">runloop</a>(<span class="summary-sig-arg">self</span>,
196 <span class="summary-sig-arg">timeout</span>)</span><br />
197 Run epoll main loop.</td>
198 <td align="right" valign="top">
199 <span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll.runloop">source&nbsp;code</a></span>
200
201 </td>
202 </tr>
203 </table>
204
205 </td>
206 </tr>
207 <tr>
208 <td colspan="2" class="summary">
209 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.Engine-class.html">Engine.Engine</a></code></b>:
210 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#abort">abort</a></code>,
211 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#add">add</a></code>,
212 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#add_timer">add_timer</a></code>,
213 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#clear">clear</a></code>,
214 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#clients">clients</a></code>,
215 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#exited">exited</a></code>,
216 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#fire_timers">fire_timers</a></code>,
217 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#modify">modify</a></code>,
218 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#ports">ports</a></code>,
219 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#register">register</a></code>,
220 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#remove">remove</a></code>,
221 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#remove_timer">remove_timer</a></code>,
222 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#run">run</a></code>,
223 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#set_events">set_events</a></code>,
224 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#set_reading">set_reading</a></code>,
225 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#set_reading_error">set_reading_error</a></code>,
226 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#set_writing">set_writing</a></code>,
227 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#snoop_ports">snoop_ports</a></code>,
228 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#start_all">start_all</a></code>,
229 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#start_ports">start_ports</a></code>,
230 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#unregister">unregister</a></code>,
231 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#unregister_writer">unregister_writer</a></code>
232 </p>
233 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.Engine-class.html">Engine.Engine</a></code></b> (private):
234 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#_debug" onclick="show_private();">_debug</a></code>,
235 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#_fd2client" onclick="show_private();">_fd2client</a></code>,
236 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#_remove" onclick="show_private();">_remove</a></code>
237 </p></div>
238 </td>
239 </tr>
240 </table>
241 <!-- ==================== CLASS VARIABLES ==================== -->
242 <a name="section-ClassVariables"></a>
243 <table class="summary" border="1" cellpadding="3"
244 cellspacing="0" width="100%" bgcolor="white">
245 <tr bgcolor="#70b0f0" class="table-header">
246 <td colspan="2" class="table-header">
247 <table border="0" cellpadding="0" cellspacing="0" width="100%">
248 <tr valign="top">
249 <td align="left"><span class="table-header">Class Variables</span></td>
250 <td align="right" valign="top"
251 ><span class="options">[<a href="#section-ClassVariables"
252 class="privatelink" onclick="toggle_private();"
253 >hide private</a>]</span></td>
254 </tr>
255 </table>
256 </td>
257 </tr>
258 <tr>
259 <td width="15%" align="right" valign="top" class="summary">
260 <span class="summary-type">&nbsp;</span>
261 </td><td class="summary">
262 <a name="identifier"></a><span class="summary-name">identifier</span> = <code title="'epoll'"><code class="variable-quote">'</code><code class="variable-string">epoll</code><code class="variable-quote">'</code></code>
263 </td>
264 </tr>
265 <tr>
266 <td colspan="2" class="summary">
267 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.Engine-class.html">Engine.Engine</a></code></b>:
268 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#E_ANY">E_ANY</a></code>,
269 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#E_ERROR">E_ERROR</a></code>,
270 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#E_READ">E_READ</a></code>,
271 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#E_WRITE">E_WRITE</a></code>
272 </p>
273 </td>
274 </tr>
275 </table>
276 <!-- ==================== METHOD DETAILS ==================== -->
277 <a name="section-MethodDetails"></a>
278 <table class="details" border="1" cellpadding="3"
279 cellspacing="0" width="100%" bgcolor="white">
280 <tr bgcolor="#70b0f0" class="table-header">
281 <td colspan="2" class="table-header">
282 <table border="0" cellpadding="0" cellspacing="0" width="100%">
283 <tr valign="top">
284 <td align="left"><span class="table-header">Method Details</span></td>
285 <td align="right" valign="top"
286 ><span class="options">[<a href="#section-MethodDetails"
287 class="privatelink" onclick="toggle_private();"
288 >hide private</a>]</span></td>
289 </tr>
290 </table>
291 </td>
292 </tr>
293 </table>
294 <a name="__init__"></a>
295 <div>
296 <table class="details" border="1" cellpadding="3"
297 cellspacing="0" width="100%" bgcolor="white">
298 <tr><td>
299 <table width="100%" cellpadding="0" cellspacing="0" border="0">
300 <tr valign="top"><td>
301 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
302 <span class="sig-arg">info</span>)</span>
303 <br /><em class="fname">(Constructor)</em>
304 </h3>
305 </td><td align="right" valign="top"
306 ><span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll.__init__">source&nbsp;code</a></span>&nbsp;
307 </td>
308 </tr></table>
309
310 <p>Initialize Engine.</p>
311 <dl class="fields">
312 <dt>Overrides:
313 <a href="ClusterShell.Engine.Engine.Engine-class.html#__init__">Engine.Engine.__init__</a>
314 </dt>
315 </dl>
316 </td></tr></table>
317 </div>
318 <a name="_register_specific"></a>
319 <div class="private">
320 <table class="details" border="1" cellpadding="3"
321 cellspacing="0" width="100%" bgcolor="white">
322 <tr><td>
323 <table width="100%" cellpadding="0" cellspacing="0" border="0">
324 <tr valign="top"><td>
325 <h3 class="epydoc"><span class="sig"><span class="sig-name">_register_specific</span>(<span class="sig-arg">self</span>,
326 <span class="sig-arg">fd</span>,
327 <span class="sig-arg">event</span>)</span>
328 </h3>
329 </td><td align="right" valign="top"
330 ><span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll._register_specific">source&nbsp;code</a></span>&nbsp;
331 </td>
332 </tr></table>
333
334 <p>Engine-specific fd registering. Called by Engine register.</p>
335 <dl class="fields">
336 <dt>Overrides:
337 <a href="ClusterShell.Engine.Engine.Engine-class.html#_register_specific" onclick="show_private();">Engine.Engine._register_specific</a>
338 </dt>
339 </dl>
340 </td></tr></table>
341 </div>
342 <a name="_unregister_specific"></a>
343 <div class="private">
344 <table class="details" border="1" cellpadding="3"
345 cellspacing="0" width="100%" bgcolor="white">
346 <tr><td>
347 <table width="100%" cellpadding="0" cellspacing="0" border="0">
348 <tr valign="top"><td>
349 <h3 class="epydoc"><span class="sig"><span class="sig-name">_unregister_specific</span>(<span class="sig-arg">self</span>,
350 <span class="sig-arg">fd</span>,
351 <span class="sig-arg">ev_is_set</span>)</span>
352 </h3>
353 </td><td align="right" valign="top"
354 ><span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll._unregister_specific">source&nbsp;code</a></span>&nbsp;
355 </td>
356 </tr></table>
357
358 <p>Engine-specific fd unregistering. Called by Engine unregister.</p>
359 <dl class="fields">
360 <dt>Overrides:
361 <a href="ClusterShell.Engine.Engine.Engine-class.html#_unregister_specific" onclick="show_private();">Engine.Engine._unregister_specific</a>
362 </dt>
363 </dl>
364 </td></tr></table>
365 </div>
366 <a name="_modify_specific"></a>
367 <div class="private">
368 <table class="details" border="1" cellpadding="3"
369 cellspacing="0" width="100%" bgcolor="white">
370 <tr><td>
371 <table width="100%" cellpadding="0" cellspacing="0" border="0">
372 <tr valign="top"><td>
373 <h3 class="epydoc"><span class="sig"><span class="sig-name">_modify_specific</span>(<span class="sig-arg">self</span>,
374 <span class="sig-arg">fd</span>,
375 <span class="sig-arg">event</span>,
376 <span class="sig-arg">setvalue</span>)</span>
377 </h3>
378 </td><td align="right" valign="top"
379 ><span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll._modify_specific">source&nbsp;code</a></span>&nbsp;
380 </td>
381 </tr></table>
382
383 <p>Engine-specific modifications after a interesting event change for a
384 file descriptor. Called automatically by Engine set_events(). For the
385 epoll engine, it modifies the event mask associated to a file
386 descriptor.</p>
387 <dl class="fields">
388 <dt>Overrides:
389 <a href="ClusterShell.Engine.Engine.Engine-class.html#_modify_specific" onclick="show_private();">Engine.Engine._modify_specific</a>
390 </dt>
391 </dl>
392 </td></tr></table>
393 </div>
394 <a name="runloop"></a>
395 <div>
396 <table class="details" border="1" cellpadding="3"
397 cellspacing="0" width="100%" bgcolor="white">
398 <tr><td>
399 <table width="100%" cellpadding="0" cellspacing="0" border="0">
400 <tr valign="top"><td>
401 <h3 class="epydoc"><span class="sig"><span class="sig-name">runloop</span>(<span class="sig-arg">self</span>,
402 <span class="sig-arg">timeout</span>)</span>
403 </h3>
404 </td><td align="right" valign="top"
405 ><span class="codelink"><a href="ClusterShell.Engine.EPoll-pysrc.html#EngineEPoll.runloop">source&nbsp;code</a></span>&nbsp;
406 </td>
407 </tr></table>
408
409 <p>Run epoll main loop.</p>
410 <dl class="fields">
411 <dt>Overrides:
412 <a href="ClusterShell.Engine.Engine.Engine-class.html#runloop">Engine.Engine.runloop</a>
413 </dt>
414 </dl>
415 </td></tr></table>
416 </div>
417 <br />
418 <!-- ==================== NAVIGATION BAR ==================== -->
419 <table class="navbar" border="0" width="100%" cellpadding="0"
420 bgcolor="#a0c0ff" cellspacing="0">
421 <tr valign="middle">
422
423 <!-- Tree link -->
424 <th>&nbsp;&nbsp;&nbsp;<a
425 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
426
427 <!-- Index link -->
428 <th>&nbsp;&nbsp;&nbsp;<a
429 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
430
431 <!-- Help link -->
432 <th>&nbsp;&nbsp;&nbsp;<a
433 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
434
435 <!-- Project homepage -->
436 <th class="navbar" align="right" width="100%">
437 <table border="0" cellpadding="0" cellspacing="0">
438 <tr><th class="navbar" align="center"
439 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
440 </tr></table></th>
441 </tr>
442 </table>
443 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
444 <tr>
445 <td align="left" class="footer">
446 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:17 2010
447 </td>
448 <td align="right" class="footer">
449 <a target="mainFrame" href="http://epydoc.sourceforge.net"
450 >http://epydoc.sourceforge.net</a>
451 </td>
452 </tr>
453 </table>
454
455 <script type="text/javascript">
456 <!--
457 // Private objects are initially displayed (because if
458 // javascript is turned off then we want them to be
459 // visible); but by default, we want to hide them. So hide
460 // them unless we have a cookie that says to show them.
461 checkCookie();
462 // -->
463 </script>
464 </body>
465 </html>
+0
-235
doc/epydoc/html/ClusterShell.Engine.Engine-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 Module&nbsp;Engine
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module Engine</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html">source&nbsp;code</a></span></p>
61 <p>Interface of underlying Task's Engine.</p>
62 <p>An Engine implements a loop your thread enters and uses to call event
63 handlers in response to incoming events (from workers, timers, etc.).</p>
64
65 <!-- ==================== CLASSES ==================== -->
66 <a name="section-Classes"></a>
67 <table class="summary" border="1" cellpadding="3"
68 cellspacing="0" width="100%" bgcolor="white">
69 <tr bgcolor="#70b0f0" class="table-header">
70 <td colspan="2" class="table-header">
71 <table border="0" cellpadding="0" cellspacing="0" width="100%">
72 <tr valign="top">
73 <td align="left"><span class="table-header">Classes</span></td>
74 <td align="right" valign="top"
75 ><span class="options">[<a href="#section-Classes"
76 class="privatelink" onclick="toggle_private();"
77 >hide private</a>]</span></td>
78 </tr>
79 </table>
80 </td>
81 </tr>
82 <tr>
83 <td width="15%" align="right" valign="top" class="summary">
84 <span class="summary-type">&nbsp;</span>
85 </td><td class="summary">
86 <a href="ClusterShell.Engine.Engine.EngineException-class.html" class="summary-name">EngineException</a><br />
87 Base engine exception.
88 </td>
89 </tr>
90 <tr>
91 <td width="15%" align="right" valign="top" class="summary">
92 <span class="summary-type">&nbsp;</span>
93 </td><td class="summary">
94 <a href="ClusterShell.Engine.Engine.EngineAbortException-class.html" class="summary-name">EngineAbortException</a><br />
95 Raised on user abort.
96 </td>
97 </tr>
98 <tr>
99 <td width="15%" align="right" valign="top" class="summary">
100 <span class="summary-type">&nbsp;</span>
101 </td><td class="summary">
102 <a href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html" class="summary-name">EngineTimeoutException</a><br />
103 Raised when a timeout is encountered.
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <a href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html" class="summary-name">EngineIllegalOperationError</a><br />
111 Error raised when an illegal operation has been performed.
112 </td>
113 </tr>
114 <tr>
115 <td width="15%" align="right" valign="top" class="summary">
116 <span class="summary-type">&nbsp;</span>
117 </td><td class="summary">
118 <a href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html" class="summary-name">EngineAlreadyRunningError</a><br />
119 Error raised when the engine is already running.
120 </td>
121 </tr>
122 <tr>
123 <td width="15%" align="right" valign="top" class="summary">
124 <span class="summary-type">&nbsp;</span>
125 </td><td class="summary">
126 <a href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html" class="summary-name">EngineNotSupportedError</a><br />
127 Error raised when the engine mechanism is not supported.
128 </td>
129 </tr>
130 <tr>
131 <td width="15%" align="right" valign="top" class="summary">
132 <span class="summary-type">&nbsp;</span>
133 </td><td class="summary">
134 <a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" class="summary-name">EngineBaseTimer</a><br />
135 Abstract class for ClusterShell's engine timer.
136 </td>
137 </tr>
138 <tr>
139 <td width="15%" align="right" valign="top" class="summary">
140 <span class="summary-type">&nbsp;</span>
141 </td><td class="summary">
142 <a href="ClusterShell.Engine.Engine.EngineTimer-class.html" class="summary-name">EngineTimer</a><br />
143 Concrete class EngineTimer
144 </td>
145 </tr>
146 <tr class="private">
147 <td width="15%" align="right" valign="top" class="summary">
148 <span class="summary-type">&nbsp;</span>
149 </td><td class="summary">
150 <a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" class="summary-name" onclick="show_private();">_EngineTimerQ</a>
151 </td>
152 </tr>
153 <tr>
154 <td width="15%" align="right" valign="top" class="summary">
155 <span class="summary-type">&nbsp;</span>
156 </td><td class="summary">
157 <a href="ClusterShell.Engine.Engine.Engine-class.html" class="summary-name">Engine</a><br />
158 Interface for ClusterShell engine.
159 </td>
160 </tr>
161 </table>
162 <!-- ==================== VARIABLES ==================== -->
163 <a name="section-Variables"></a>
164 <table class="summary" border="1" cellpadding="3"
165 cellspacing="0" width="100%" bgcolor="white">
166 <tr bgcolor="#70b0f0" class="table-header">
167 <td colspan="2" class="table-header">
168 <table border="0" cellpadding="0" cellspacing="0" width="100%">
169 <tr valign="top">
170 <td align="left"><span class="table-header">Variables</span></td>
171 <td align="right" valign="top"
172 ><span class="options">[<a href="#section-Variables"
173 class="privatelink" onclick="toggle_private();"
174 >hide private</a>]</span></td>
175 </tr>
176 </table>
177 </td>
178 </tr>
179 <tr>
180 <td width="15%" align="right" valign="top" class="summary">
181 <span class="summary-type">&nbsp;</span>
182 </td><td class="summary">
183 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Engine'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Engine</code><code class="variable-quote">'</code></code>
184 </td>
185 </tr>
186 </table>
187 <!-- ==================== NAVIGATION BAR ==================== -->
188 <table class="navbar" border="0" width="100%" cellpadding="0"
189 bgcolor="#a0c0ff" cellspacing="0">
190 <tr valign="middle">
191
192 <!-- Tree link -->
193 <th>&nbsp;&nbsp;&nbsp;<a
194 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
195
196 <!-- Index link -->
197 <th>&nbsp;&nbsp;&nbsp;<a
198 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
199
200 <!-- Help link -->
201 <th>&nbsp;&nbsp;&nbsp;<a
202 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
203
204 <!-- Project homepage -->
205 <th class="navbar" align="right" width="100%">
206 <table border="0" cellpadding="0" cellspacing="0">
207 <tr><th class="navbar" align="center"
208 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
209 </tr></table></th>
210 </tr>
211 </table>
212 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
213 <tr>
214 <td align="left" class="footer">
215 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
216 </td>
217 <td align="right" class="footer">
218 <a target="mainFrame" href="http://epydoc.sourceforge.net"
219 >http://epydoc.sourceforge.net</a>
220 </td>
221 </tr>
222 </table>
223
224 <script type="text/javascript">
225 <!--
226 // Private objects are initially displayed (because if
227 // javascript is turned off then we want them to be
228 // visible); but by default, we want to hide them. So hide
229 // them unless we have a cookie that says to show them.
230 checkCookie();
231 // -->
232 </script>
233 </body>
234 </html>
+0
-1138
doc/epydoc/html/ClusterShell.Engine.Engine-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 Module&nbsp;Engine
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Engine.Engine-module.html">Module ClusterShell.Engine.Engine</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009, 2010)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Engine.py 295 2010-07-21 19:55:15Z st-cea $</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">Interface of underlying Task's Engine.</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">An Engine implements a loop your thread enters and uses to call event handlers</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">in response to incoming events (from workers, timers, etc.).</tt> </tt>
100 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
101 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> </tt>
102 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">errno</tt> </tt>
103 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">heapq</tt> </tt>
104 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
105 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> </tt>
106 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> </tt>
107 <a name="EngineException"></a><div id="EngineException-def"><a name="L47"></a><tt class="py-lineno"> 47</tt> <a class="py-toggle" href="#" id="EngineException-toggle" onclick="return toggle('EngineException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineException-class.html">EngineException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
108 </div><div id="EngineException-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineException-expanded"><a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
109 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring"> Base engine exception.</tt> </tt>
110 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
111 </div><a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
112 <a name="EngineAbortException"></a><div id="EngineAbortException-def"><a name="L52"></a><tt class="py-lineno"> 52</tt> <a class="py-toggle" href="#" id="EngineAbortException-toggle" onclick="return toggle('EngineAbortException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineAbortException-class.html">EngineAbortException</a><tt class="py-op">(</tt><tt class="py-base-class">EngineException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
113 </div><div id="EngineAbortException-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineAbortException-expanded"><a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
114 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-docstring"> Raised on user abort.</tt> </tt>
115 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
116 <a name="EngineAbortException.__init__"></a><div id="EngineAbortException.__init__-def"><a name="L56"></a><tt class="py-lineno"> 56</tt> <a class="py-toggle" href="#" id="EngineAbortException.__init__-toggle" onclick="return toggle('EngineAbortException.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineAbortException-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">kill</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
117 </div><div id="EngineAbortException.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineAbortException.__init__-expanded"><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kill</tt> <tt class="py-op">=</tt> <tt class="py-name">kill</tt> </tt>
118 </div></div><a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> </tt>
119 <a name="EngineTimeoutException"></a><div id="EngineTimeoutException-def"><a name="L59"></a><tt class="py-lineno"> 59</tt> <a class="py-toggle" href="#" id="EngineTimeoutException-toggle" onclick="return toggle('EngineTimeoutException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html">EngineTimeoutException</a><tt class="py-op">(</tt><tt class="py-base-class">EngineException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
120 </div><div id="EngineTimeoutException-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineTimeoutException-expanded"><a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
121 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"> Raised when a timeout is encountered.</tt> </tt>
122 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
123 </div><a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> </tt>
124 <a name="EngineIllegalOperationError"></a><div id="EngineIllegalOperationError-def"><a name="L64"></a><tt class="py-lineno"> 64</tt> <a class="py-toggle" href="#" id="EngineIllegalOperationError-toggle" onclick="return toggle('EngineIllegalOperationError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html">EngineIllegalOperationError</a><tt class="py-op">(</tt><tt class="py-base-class">EngineException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
125 </div><div id="EngineIllegalOperationError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineIllegalOperationError-expanded"><a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
126 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> Error raised when an illegal operation has been performed.</tt> </tt>
127 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
128 </div><a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> </tt>
129 <a name="EngineAlreadyRunningError"></a><div id="EngineAlreadyRunningError-def"><a name="L69"></a><tt class="py-lineno"> 69</tt> <a class="py-toggle" href="#" id="EngineAlreadyRunningError-toggle" onclick="return toggle('EngineAlreadyRunningError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html">EngineAlreadyRunningError</a><tt class="py-op">(</tt><tt class="py-base-class">EngineIllegalOperationError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
130 </div><div id="EngineAlreadyRunningError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineAlreadyRunningError-expanded"><a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
131 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-docstring"> Error raised when the engine is already running.</tt> </tt>
132 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
133 </div><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
134 <a name="EngineNotSupportedError"></a><div id="EngineNotSupportedError-def"><a name="L74"></a><tt class="py-lineno"> 74</tt> <a class="py-toggle" href="#" id="EngineNotSupportedError-toggle" onclick="return toggle('EngineNotSupportedError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html">EngineNotSupportedError</a><tt class="py-op">(</tt><tt class="py-base-class">EngineException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
135 </div><div id="EngineNotSupportedError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineNotSupportedError-expanded"><a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
136 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt class="py-docstring"> Error raised when the engine mechanism is not supported.</tt> </tt>
137 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
138 </div><a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> </tt>
139 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> </tt>
140 <a name="EngineBaseTimer"></a><div id="EngineBaseTimer-def"><a name="L80"></a><tt class="py-lineno"> 80</tt> <a class="py-toggle" href="#" id="EngineBaseTimer-toggle" onclick="return toggle('EngineBaseTimer');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a><tt class="py-op">:</tt> </tt>
141 </div><div id="EngineBaseTimer-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineBaseTimer-expanded"><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
142 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> Abstract class for ClusterShell's engine timer. Such a timer</tt> </tt>
143 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt class="py-docstring"> requires a relative fire time (delay) in seconds (as float), and</tt> </tt>
144 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt class="py-docstring"> supports an optional repeating interval in seconds (as float too).</tt> </tt>
145 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
146 <a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-docstring"> See EngineTimer for more information about ClusterShell timers.</tt> </tt>
147 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
148 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> </tt>
149 <a name="EngineBaseTimer.__init__"></a><div id="EngineBaseTimer.__init__-def"><a name="L89"></a><tt class="py-lineno"> 89</tt> <a class="py-toggle" href="#" id="EngineBaseTimer.__init__-toggle" onclick="return toggle('EngineBaseTimer.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineBaseTimer-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">fire_delay</tt><tt class="py-op">,</tt> <tt class="py-param">interval</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1.0</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
150 </div><div id="EngineBaseTimer.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineBaseTimer.__init__-expanded"><a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
151 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-docstring"> Create a base timer.</tt> </tt>
152 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
153 <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">fire_delay</tt> <tt class="py-op">=</tt> <tt class="py-name">fire_delay</tt> </tt>
154 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">interval</tt> <tt class="py-op">=</tt> <tt class="py-name">interval</tt> </tt>
155 <a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">autoclose</tt> <tt class="py-op">=</tt> <tt class="py-name">autoclose</tt> </tt>
156 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
157 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_timercase</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
158 </div><a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> </tt>
159 <a name="EngineBaseTimer._set_engine"></a><div id="EngineBaseTimer._set_engine-def"><a name="L99"></a><tt class="py-lineno"> 99</tt> <a class="py-toggle" href="#" id="EngineBaseTimer._set_engine-toggle" onclick="return toggle('EngineBaseTimer._set_engine');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine">_set_engine</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">engine</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
160 </div><div id="EngineBaseTimer._set_engine-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineBaseTimer._set_engine-expanded"><a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
161 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"><tt class="py-docstring"> Bind to engine, called by Engine.</tt> </tt>
162 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
163 <a name="L103"></a><tt class="py-lineno">103</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">_engine</tt><tt class="py-op">:</tt> </tt>
164 <a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-comment"># A timer can be registered to only one engine at a time.</tt> </tt>
165 <a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-0" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineIllegalOperationError=ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html"><a title="ClusterShell.Engine.Engine.EngineIllegalOperationError" class="py-name" href="#" onclick="return doclink('link-0', 'EngineIllegalOperationError', 'link-0');">EngineIllegalOperationError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Already bound to engine."</tt><tt class="py-op">)</tt> </tt>
166 <a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> </tt>
167 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt> <tt class="py-op">=</tt> <tt class="py-name">engine</tt> </tt>
168 </div><a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> </tt>
169 <a name="EngineBaseTimer.invalidate"></a><div id="EngineBaseTimer.invalidate-def"><a name="L109"></a><tt class="py-lineno">109</tt> <a class="py-toggle" href="#" id="EngineBaseTimer.invalidate-toggle" onclick="return toggle('EngineBaseTimer.invalidate');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
170 </div><div id="EngineBaseTimer.invalidate-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineBaseTimer.invalidate-expanded"><a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
171 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"><tt class="py-docstring"> Invalidates a timer object, stopping it from ever firing again.</tt> </tt>
172 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
173 <a name="L113"></a><tt class="py-lineno">113</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">_engine</tt><tt class="py-op">:</tt> </tt>
174 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Method ClusterShell.Engine.Engine.EngineBaseTimer.invalidate()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate,Method ClusterShell.Engine.Engine._EngineTimerQ.invalidate()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#invalidate"><a title="ClusterShell.Engine.Engine.EngineBaseTimer.invalidate
175 ClusterShell.Engine.Engine._EngineTimerQ.invalidate" class="py-name" href="#" onclick="return doclink('link-1', 'invalidate', 'link-1');">invalidate</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
176 <a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
177 </div><a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> </tt>
178 <a name="EngineBaseTimer.is_valid"></a><div id="EngineBaseTimer.is_valid-def"><a name="L117"></a><tt class="py-lineno">117</tt> <a class="py-toggle" href="#" id="EngineBaseTimer.is_valid-toggle" onclick="return toggle('EngineBaseTimer.is_valid');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
179 </div><div id="EngineBaseTimer.is_valid-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineBaseTimer.is_valid-expanded"><a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
180 <a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"><tt class="py-docstring"> Returns a boolean value that indicates whether an EngineTimer</tt> </tt>
181 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> object is valid and able to fire.</tt> </tt>
182 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
183 <a name="L122"></a><tt class="py-lineno">122</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">_engine</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
184 </div><a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> </tt>
185 <a name="EngineBaseTimer.set_nextfire"></a><div id="EngineBaseTimer.set_nextfire-def"><a name="L124"></a><tt class="py-lineno">124</tt> <a class="py-toggle" href="#" id="EngineBaseTimer.set_nextfire-toggle" onclick="return toggle('EngineBaseTimer.set_nextfire');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fire_delay</tt><tt class="py-op">,</tt> <tt class="py-param">interval</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
186 </div><div id="EngineBaseTimer.set_nextfire-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineBaseTimer.set_nextfire-expanded"><a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
187 <a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"><tt class="py-docstring"> Set the next firing delay in seconds for an EngineTimer object.</tt> </tt>
188 <a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
189 <a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"><tt class="py-docstring"> The optional paramater `interval' sets the firing interval</tt> </tt>
190 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> of the timer. If not specified, the timer fires once and then</tt> </tt>
191 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> is automatically invalidated.</tt> </tt>
192 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
193 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"> Time values are expressed in second using floating point</tt> </tt>
194 <a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"><tt class="py-docstring"> values. Precision is implementation (and system) dependent.</tt> </tt>
195 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
196 <a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"><tt class="py-docstring"> It is safe to call this method from the task owning this</tt> </tt>
197 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"><tt class="py-docstring"> timer object, in any event handlers, anywhere.</tt> </tt>
198 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
199 <a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"><tt class="py-docstring"> However, resetting a timer's next firing time may be a</tt> </tt>
200 <a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"><tt class="py-docstring"> relatively expensive operation. It is more efficient to let</tt> </tt>
201 <a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"><tt class="py-docstring"> timers autorepeat or to use this method from the timer's own</tt> </tt>
202 <a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"><tt class="py-docstring"> event handler callback (ie. from its ev_timer).</tt> </tt>
203 <a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
204 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Method ClusterShell.Engine.Engine.EngineBaseTimer.is_valid()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid"><a title="ClusterShell.Engine.Engine.EngineBaseTimer.is_valid" class="py-name" href="#" onclick="return doclink('link-2', 'is_valid', 'link-2');">is_valid</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
205 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-3" class="py-name"><a title="ClusterShell.Engine.Engine.EngineIllegalOperationError" class="py-name" href="#" onclick="return doclink('link-3', 'EngineIllegalOperationError', 'link-0');">EngineIllegalOperationError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Operation on invalid timer."</tt><tt class="py-op">)</tt> </tt>
206 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> </tt>
207 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">=</tt> <tt class="py-name">fire_delay</tt> </tt>
208 <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">interval</tt> <tt class="py-op">=</tt> <tt class="py-name">interval</tt> </tt>
209 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.reschedule()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#reschedule"><a title="ClusterShell.Engine.Engine._EngineTimerQ.reschedule" class="py-name" href="#" onclick="return doclink('link-4', 'reschedule', 'link-4');">reschedule</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
210 </div><a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> </tt>
211 <a name="EngineBaseTimer._fire"></a><div id="EngineBaseTimer._fire-def"><a name="L150"></a><tt class="py-lineno">150</tt> <a class="py-toggle" href="#" id="EngineBaseTimer._fire-toggle" onclick="return toggle('EngineBaseTimer._fire');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_fire">_fire</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
212 </div><div id="EngineBaseTimer._fire-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineBaseTimer._fire-expanded"><a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
213 </div></div><a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> </tt>
214 <a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> </tt>
215 <a name="EngineTimer"></a><div id="EngineTimer-def"><a name="L154"></a><tt class="py-lineno">154</tt> <a class="py-toggle" href="#" id="EngineTimer-toggle" onclick="return toggle('EngineTimer');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineTimer-class.html">EngineTimer</a><tt class="py-op">(</tt><tt class="py-base-class">EngineBaseTimer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
216 </div><div id="EngineTimer-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineTimer-expanded"><a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
217 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"> Concrete class EngineTimer</tt> </tt>
218 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
219 <a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-docstring"> An EngineTimer object represents a timer bound to an engine that</tt> </tt>
220 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"><tt class="py-docstring"> fires at a preset time in the future. Timers can fire either only</tt> </tt>
221 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"><tt class="py-docstring"> once or repeatedly at fixed time intervals. Repeating timers can</tt> </tt>
222 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"><tt class="py-docstring"> also have their next firing time manually adjusted.</tt> </tt>
223 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
224 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-docstring"> A timer is not a real-time mechanism; it fires when the task's</tt> </tt>
225 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"><tt class="py-docstring"> underlying engine to which the timer has been added is running and</tt> </tt>
226 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"><tt class="py-docstring"> able to check if the timer's firing time has passed.</tt> </tt>
227 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
228 <a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> </tt>
229 <a name="EngineTimer.__init__"></a><div id="EngineTimer.__init__-def"><a name="L168"></a><tt class="py-lineno">168</tt> <a class="py-toggle" href="#" id="EngineTimer.__init__-toggle" onclick="return toggle('EngineTimer.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineTimer-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">fire_delay</tt><tt class="py-op">,</tt> <tt class="py-param">interval</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
230 </div><div id="EngineTimer.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineTimer.__init__-expanded"><a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt id="link-5" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineBaseTimer=ClusterShell.Engine.Engine.EngineBaseTimer-class.html"><a title="ClusterShell.Engine.Engine.EngineBaseTimer" class="py-name" href="#" onclick="return doclink('link-5', 'EngineBaseTimer', 'link-5');">EngineBaseTimer</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
231 ClusterShell.Engine.Engine.Engine.__init__
232 ClusterShell.Engine.Engine.EngineAbortException.__init__
233 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
234 ClusterShell.Engine.Engine.EngineTimer.__init__
235 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
236 ClusterShell.Engine.Engine._EngineTimerQ.__init__
237 ClusterShell.Engine.Poll.EnginePoll.__init__
238 ClusterShell.MsgTree.MsgTree.__init__
239 ClusterShell.MsgTree.MsgTreeElem.__init__
240 ClusterShell.NodeSet.NodeSet.__init__
241 ClusterShell.NodeSet.NodeSetBase.__init__
242 ClusterShell.NodeSet.NodeSetParseError.__init__
243 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
244 ClusterShell.NodeSet.ParsingEngine.__init__
245 ClusterShell.NodeSet.RangeSet.__init__
246 ClusterShell.NodeSet.RangeSetPaddingError.__init__
247 ClusterShell.NodeSet.RangeSetParseError.__init__
248 ClusterShell.NodeUtils.GroupResolver.__init__
249 ClusterShell.NodeUtils.GroupResolverConfig.__init__
250 ClusterShell.NodeUtils.GroupSource.__init__
251 ClusterShell.NodeUtils.GroupSourceException.__init__
252 ClusterShell.Task.Task._SuspendCondition.__init__
253 ClusterShell.Task.Task.__init__
254 ClusterShell.Task._TaskMsgTree.__init__
255 ClusterShell.Worker.EngineClient.EngineClient.__init__
256 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
257 ClusterShell.Worker.EngineClient.EnginePort.__init__
258 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
259 ClusterShell.Worker.Popen.WorkerPopen.__init__
260 ClusterShell.Worker.Ssh.Scp.__init__
261 ClusterShell.Worker.Ssh.Ssh.__init__
262 ClusterShell.Worker.Ssh.WorkerSsh.__init__
263 ClusterShell.Worker.Worker.DistantWorker.__init__
264 ClusterShell.Worker.Worker.Worker.__init__
265 ClusterShell.Worker.Worker.WorkerSimple.__init__
266 clubak.Display.__init__
267 clush.ClushConfig.__init__
268 clush.ClushConfigError.__init__
269 clush.DirectOutputHandler.__init__
270 clush.Display.__init__
271 clush.GatherOutputHandler.__init__
272 clush.RunTimer.__init__
273 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-6', '__init__', 'link-6');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">fire_delay</tt><tt class="py-op">,</tt> <tt class="py-name">interval</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt> </tt>
274 <a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt> <tt class="py-op">=</tt> <tt class="py-name">handler</tt> </tt>
275 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-string">"An event handler is needed for timer."</tt> </tt>
276 </div><a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> </tt>
277 <a name="EngineTimer._fire"></a><div id="EngineTimer._fire-def"><a name="L173"></a><tt class="py-lineno">173</tt> <a class="py-toggle" href="#" id="EngineTimer._fire-toggle" onclick="return toggle('EngineTimer._fire');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.EngineTimer-class.html#_fire">_fire</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
278 </div><div id="EngineTimer._fire-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineTimer._fire-expanded"><a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Method ClusterShell.Event.EventHandler._invoke()=ClusterShell.Event.EventHandler-class.html#_invoke,Method ClusterShell.Worker.Worker.Worker._invoke()=ClusterShell.Worker.Worker.Worker-class.html#_invoke"><a title="ClusterShell.Event.EventHandler._invoke
279 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-7', '_invoke', 'link-7');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_timer"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
280 </div></div><a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> </tt>
281 <a name="_EngineTimerQ"></a><div id="_EngineTimerQ-def"><a name="L176"></a><tt class="py-lineno">176</tt> <a class="py-toggle" href="#" id="_EngineTimerQ-toggle" onclick="return toggle('_EngineTimerQ');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html">_EngineTimerQ</a><tt class="py-op">:</tt> </tt>
282 </div><div id="_EngineTimerQ-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_EngineTimerQ-expanded"><a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> </tt>
283 <a name="_EngineTimerQ._EngineTimerCase"></a><div id="_EngineTimerQ._EngineTimerCase-def"><a name="L178"></a><tt class="py-lineno">178</tt> <a class="py-toggle" href="#" id="_EngineTimerQ._EngineTimerCase-toggle" onclick="return toggle('_EngineTimerQ._EngineTimerCase');">-</a><tt class="py-line"> <tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html">_EngineTimerCase</a><tt class="py-op">:</tt> </tt>
284 </div><div id="_EngineTimerQ._EngineTimerCase-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ._EngineTimerCase-expanded"><a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
285 <a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"><tt class="py-docstring"> Helper class that allows comparisons of fire times, to be easily used</tt> </tt>
286 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"><tt class="py-docstring"> in an heapq.</tt> </tt>
287 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
288 <a name="_EngineTimerQ._EngineTimerCase.__init__"></a><div id="_EngineTimerQ._EngineTimerCase.__init__-def"><a name="L183"></a><tt class="py-lineno">183</tt> <a class="py-toggle" href="#" id="_EngineTimerQ._EngineTimerCase.__init__-toggle" onclick="return toggle('_EngineTimerQ._EngineTimerCase.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-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">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
289 </div><div id="_EngineTimerQ._EngineTimerCase.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="_EngineTimerQ._EngineTimerCase.__init__-expanded"><a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt> </tt>
290 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_timercase</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
291 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-comment"># arm timer (first time)</tt> </tt>
292 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> </tt>
293 <a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fire_date</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">+</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
294 </div><a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt>
295 <a name="_EngineTimerQ._EngineTimerCase.__cmp__"></a><div id="_EngineTimerQ._EngineTimerCase.__cmp__-def"><a name="L190"></a><tt class="py-lineno">190</tt> <a class="py-toggle" href="#" id="_EngineTimerQ._EngineTimerCase.__cmp__-toggle" onclick="return toggle('_EngineTimerQ._EngineTimerCase.__cmp__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__cmp__">__cmp__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
296 </div><div id="_EngineTimerQ._EngineTimerCase.__cmp__-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="_EngineTimerQ._EngineTimerCase.__cmp__-expanded"><a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cmp</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fire_date</tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">fire_date</tt><tt class="py-op">)</tt> </tt>
297 </div><a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> </tt>
298 <a name="_EngineTimerQ._EngineTimerCase.arm"></a><div id="_EngineTimerQ._EngineTimerCase.arm-def"><a name="L193"></a><tt class="py-lineno">193</tt> <a class="py-toggle" href="#" id="_EngineTimerQ._EngineTimerCase.arm-toggle" onclick="return toggle('_EngineTimerQ._EngineTimerCase.arm');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#arm">arm</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
299 </div><div id="_EngineTimerQ._EngineTimerCase.arm-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="_EngineTimerQ._EngineTimerCase.arm-expanded"><a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">client</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
300 <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">client</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt> </tt>
301 <a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_timercase</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
302 <a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-comment"># setup next firing date</tt> </tt>
303 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-name">time_current</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
304 <a name="L199"></a><tt class="py-lineno">199</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">client</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
305 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fire_date</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">+</tt> <tt class="py-name">time_current</tt> </tt>
306 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
307 <a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">interval</tt> <tt class="py-op">=</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">interval</tt><tt class="py-op">)</tt> </tt>
308 <a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">interval</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> </tt>
309 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fire_date</tt> <tt class="py-op">+=</tt> <tt class="py-name">interval</tt> </tt>
310 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-comment"># If the firing time is delayed so far that it passes one</tt> </tt>
311 <a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-comment"># or more of the scheduled firing times, reschedule the</tt> </tt>
312 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-comment"># timer for the next scheduled firing time in the future.</tt> </tt>
313 <a name="L208"></a><tt class="py-lineno">208</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">fire_date</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">time_current</tt><tt class="py-op">:</tt> </tt>
314 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fire_date</tt> <tt class="py-op">+=</tt> <tt class="py-name">interval</tt> </tt>
315 </div><a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> </tt>
316 <a name="_EngineTimerQ._EngineTimerCase.disarm"></a><div id="_EngineTimerQ._EngineTimerCase.disarm-def"><a name="L211"></a><tt class="py-lineno">211</tt> <a class="py-toggle" href="#" id="_EngineTimerQ._EngineTimerCase.disarm-toggle" onclick="return toggle('_EngineTimerQ._EngineTimerCase.disarm');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#disarm">disarm</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
317 </div><div id="_EngineTimerQ._EngineTimerCase.disarm-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="_EngineTimerQ._EngineTimerCase.disarm-expanded"><a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">client</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client</tt> </tt>
318 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_timercase</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
319 <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 class="py-name">client</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
320 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">client</tt> </tt>
321 </div><a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> </tt>
322 <a name="_EngineTimerQ._EngineTimerCase.armed"></a><div id="_EngineTimerQ._EngineTimerCase.armed-def"><a name="L217"></a><tt class="py-lineno">217</tt> <a class="py-toggle" href="#" id="_EngineTimerQ._EngineTimerCase.armed-toggle" onclick="return toggle('_EngineTimerQ._EngineTimerCase.armed');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#armed">armed</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
323 </div><div id="_EngineTimerQ._EngineTimerCase.armed-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="_EngineTimerQ._EngineTimerCase.armed-expanded"><a name="L218"></a><tt class="py-lineno">218</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">client</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
324 </div></div><a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> </tt>
325 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> </tt>
326 <a name="_EngineTimerQ.__init__"></a><div id="_EngineTimerQ.__init__-def"><a name="L221"></a><tt class="py-lineno">221</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.__init__-toggle" onclick="return toggle('_EngineTimerQ.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-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">engine</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
327 </div><div id="_EngineTimerQ.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.__init__-expanded"><a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
328 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"><tt class="py-docstring"> Initializer.</tt> </tt>
329 <a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
330 <a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt> <tt class="py-op">=</tt> <tt class="py-name">engine</tt> </tt>
331 <a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
332 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">armed_count</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
333 </div><a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> </tt>
334 <a name="_EngineTimerQ.__len__"></a><div id="_EngineTimerQ.__len__-def"><a name="L229"></a><tt class="py-lineno">229</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.__len__-toggle" onclick="return toggle('_EngineTimerQ.__len__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#__len__">__len__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
335 </div><div id="_EngineTimerQ.__len__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.__len__-expanded"><a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
336 <a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"><tt class="py-docstring"> Return the number of active timers.</tt> </tt>
337 <a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
338 <a name="L233"></a><tt class="py-lineno">233</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">armed_count</tt> </tt>
339 </div><a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> </tt>
340 <a name="_EngineTimerQ.schedule"></a><div id="_EngineTimerQ.schedule-def"><a name="L235"></a><tt class="py-lineno">235</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.schedule-toggle" onclick="return toggle('_EngineTimerQ.schedule');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#schedule">schedule</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
341 </div><div id="_EngineTimerQ.schedule-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.schedule-expanded"><a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
342 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"><tt class="py-docstring"> Insert and arm a client's timer.</tt> </tt>
343 <a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
344 <a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-comment"># arm only if fire is set</tt> </tt>
345 <a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
346 <a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-name">heapq</tt><tt class="py-op">.</tt><tt class="py-name">heappush</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">,</tt> <tt id="link-8" class="py-name" targets="Class ClusterShell.Engine.Engine._EngineTimerQ=ClusterShell.Engine.Engine._EngineTimerQ-class.html"><a title="ClusterShell.Engine.Engine._EngineTimerQ" class="py-name" href="#" onclick="return doclink('link-8', '_EngineTimerQ', 'link-8');">_EngineTimerQ</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Class ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html"><a title="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase" class="py-name" href="#" onclick="return doclink('link-9', '_EngineTimerCase', 'link-9');">_EngineTimerCase</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
347 <a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">armed_count</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
348 <a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">autoclose</tt><tt class="py-op">:</tt> </tt>
349 <a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
350 </div><a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> </tt>
351 <a name="_EngineTimerQ.reschedule"></a><div id="_EngineTimerQ.reschedule-def"><a name="L246"></a><tt class="py-lineno">246</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.reschedule-toggle" onclick="return toggle('_EngineTimerQ.reschedule');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#reschedule">reschedule</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
352 </div><div id="_EngineTimerQ.reschedule-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.reschedule-expanded"><a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
353 <a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"><tt class="py-docstring"> Re-insert client's timer.</tt> </tt>
354 <a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
355 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_timercase</tt><tt class="py-op">:</tt> </tt>
356 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.Engine.Engine.EngineBaseTimer.invalidate
357 ClusterShell.Engine.Engine._EngineTimerQ.invalidate" class="py-name" href="#" onclick="return doclink('link-10', 'invalidate', 'link-1');">invalidate</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
358 <a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ._dequeue_disarmed()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#_dequeue_disarmed"><a title="ClusterShell.Engine.Engine._EngineTimerQ._dequeue_disarmed" class="py-name" href="#" onclick="return doclink('link-11', '_dequeue_disarmed', 'link-11');">_dequeue_disarmed</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
359 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.schedule()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#schedule,Method ClusterShell.Task.Task.schedule()=ClusterShell.Task.Task-class.html#schedule"><a title="ClusterShell.Engine.Engine._EngineTimerQ.schedule
360 ClusterShell.Task.Task.schedule" class="py-name" href="#" onclick="return doclink('link-12', 'schedule', 'link-12');">schedule</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
361 </div><a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> </tt>
362 <a name="_EngineTimerQ.invalidate"></a><div id="_EngineTimerQ.invalidate-def"><a name="L255"></a><tt class="py-lineno">255</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.invalidate-toggle" onclick="return toggle('_EngineTimerQ.invalidate');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#invalidate">invalidate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
363 </div><div id="_EngineTimerQ.invalidate-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.invalidate-expanded"><a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
364 <a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"><tt class="py-docstring"> Invalidate client's timer. Current implementation doesn't really remove</tt> </tt>
365 <a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"><tt class="py-docstring"> the timer, but simply flags it as disarmed.</tt> </tt>
366 <a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
367 <a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_timercase</tt><tt class="py-op">:</tt> </tt>
368 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-comment"># if timer is being fire, invalidate its values</tt> </tt>
369 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
370 <a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">interval</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
371 <a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
372 <a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> </tt>
373 <a name="L266"></a><tt class="py-lineno">266</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">armed_count</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
374 <a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-string">"Engine client timer not found in timer queue"</tt> </tt>
375 <a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> </tt>
376 <a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_timercase</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.disarm()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#disarm"><a title="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.disarm" class="py-name" href="#" onclick="return doclink('link-13', 'disarm', 'link-13');">disarm</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
377 <a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">armed_count</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
378 <a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">autoclose</tt><tt class="py-op">:</tt> </tt>
379 <a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
380 </div><a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> </tt>
381 <a name="_EngineTimerQ._dequeue_disarmed"></a><div id="_EngineTimerQ._dequeue_disarmed-def"><a name="L274"></a><tt class="py-lineno">274</tt> <a class="py-toggle" href="#" id="_EngineTimerQ._dequeue_disarmed-toggle" onclick="return toggle('_EngineTimerQ._dequeue_disarmed');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#_dequeue_disarmed">_dequeue_disarmed</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
382 </div><div id="_EngineTimerQ._dequeue_disarmed-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ._dequeue_disarmed-expanded"><a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
383 <a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"><tt class="py-docstring"> Dequeue disarmed timers (sort of garbage collection).</tt> </tt>
384 <a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
385 <a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.armed()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#armed"><a title="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.armed" class="py-name" href="#" onclick="return doclink('link-14', 'armed', 'link-14');">armed</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
386 <a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-name">heapq</tt><tt class="py-op">.</tt><tt class="py-name">heappop</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">)</tt> </tt>
387 </div><a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> </tt>
388 <a name="_EngineTimerQ.fire"></a><div id="_EngineTimerQ.fire-def"><a name="L281"></a><tt class="py-lineno">281</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.fire-toggle" onclick="return toggle('_EngineTimerQ.fire');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#fire">fire</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
389 </div><div id="_EngineTimerQ.fire-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.fire-expanded"><a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
390 <a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"><tt class="py-docstring"> Remove the smallest timer from the queue and fire its associated client.</tt> </tt>
391 <a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"><tt class="py-docstring"> Raise IndexError if the queue is empty.</tt> </tt>
392 <a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
393 <a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ._dequeue_disarmed" class="py-name" href="#" onclick="return doclink('link-15', '_dequeue_disarmed', 'link-11');">_dequeue_disarmed</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
394 <a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> </tt>
395 <a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-name">timercase</tt> <tt class="py-op">=</tt> <tt class="py-name">heapq</tt><tt class="py-op">.</tt><tt class="py-name">heappop</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">)</tt> </tt>
396 <a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> <tt class="py-name">client</tt> <tt class="py-op">=</tt> <tt class="py-name">timercase</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.disarm" class="py-name" href="#" onclick="return doclink('link-16', 'disarm', 'link-13');">disarm</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
397 <a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> </tt>
398 <a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
399 <a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method ClusterShell.Engine.Engine.EngineBaseTimer._fire()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_fire,Method ClusterShell.Engine.Engine.EngineTimer._fire()=ClusterShell.Engine.Engine.EngineTimer-class.html#_fire,Method ClusterShell.Worker.EngineClient.EngineClient._fire()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire"><a title="ClusterShell.Engine.Engine.EngineBaseTimer._fire
400 ClusterShell.Engine.Engine.EngineTimer._fire
401 ClusterShell.Worker.EngineClient.EngineClient._fire" class="py-name" href="#" onclick="return doclink('link-17', '_fire', 'link-17');">_fire</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
402 <a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> </tt>
403 <a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">fire_delay</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">or</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">interval</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
404 <a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-name">timercase</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.arm()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#arm"><a title="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.arm" class="py-name" href="#" onclick="return doclink('link-18', 'arm', 'link-18');">arm</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
405 <a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-name">heapq</tt><tt class="py-op">.</tt><tt class="py-name">heappush</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">,</tt> <tt class="py-name">timercase</tt><tt class="py-op">)</tt> </tt>
406 <a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
407 <a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">armed_count</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
408 <a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">autoclose</tt><tt class="py-op">:</tt> </tt>
409 <a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
410 </div><a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> </tt>
411 <a name="_EngineTimerQ.nextfire_delay"></a><div id="_EngineTimerQ.nextfire_delay-def"><a name="L302"></a><tt class="py-lineno">302</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.nextfire_delay-toggle" onclick="return toggle('_EngineTimerQ.nextfire_delay');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#nextfire_delay">nextfire_delay</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
412 </div><div id="_EngineTimerQ.nextfire_delay-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.nextfire_delay-expanded"><a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
413 <a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"><tt class="py-docstring"> Return next timer fire delay (relative time).</tt> </tt>
414 <a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
415 <a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ._dequeue_disarmed" class="py-name" href="#" onclick="return doclink('link-19', '_dequeue_disarmed', 'link-11');">_dequeue_disarmed</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
416 <a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
417 <a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">max</tt><tt class="py-op">(</tt><tt class="py-number">0.</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</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">fire_date</tt> <tt class="py-op">-</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
418 <a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> </tt>
419 <a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
420 </div><a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> </tt>
421 <a name="_EngineTimerQ.expired"></a><div id="_EngineTimerQ.expired-def"><a name="L312"></a><tt class="py-lineno">312</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.expired-toggle" onclick="return toggle('_EngineTimerQ.expired');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#expired">expired</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
422 </div><div id="_EngineTimerQ.expired-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.expired-expanded"><a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
423 <a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"><tt class="py-docstring"> Has a timer expired?</tt> </tt>
424 <a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
425 <a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ._dequeue_disarmed" class="py-name" href="#" onclick="return doclink('link-20', '_dequeue_disarmed', 'link-11');">_dequeue_disarmed</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
426 <a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> \ </tt>
427 <a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</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">fire_date</tt> <tt class="py-op">-</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">1e-2</tt> </tt>
428 </div><a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> </tt>
429 <a name="_EngineTimerQ.clear"></a><div id="_EngineTimerQ.clear-def"><a name="L320"></a><tt class="py-lineno">320</tt> <a class="py-toggle" href="#" id="_EngineTimerQ.clear-toggle" onclick="return toggle('_EngineTimerQ.clear');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear">clear</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
430 </div><div id="_EngineTimerQ.clear-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_EngineTimerQ.clear-expanded"><a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
431 <a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"><tt class="py-docstring"> Stop and clear all timers.</tt> </tt>
432 <a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
433 <a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-21" class="py-name" targets="Method ClusterShell.Task.Task.timer()=ClusterShell.Task.Task-class.html#timer"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-21', 'timer', 'link-21');">timer</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt><tt class="py-op">:</tt> </tt>
434 <a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-22" class="py-name"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-22', 'timer', 'link-21');">timer</a></tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.armed" class="py-name" href="#" onclick="return doclink('link-23', 'armed', 'link-14');">armed</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
435 <a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt id="link-24" class="py-name"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-24', 'timer', 'link-21');">timer</a></tt><tt class="py-op">.</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="ClusterShell.Engine.Engine.EngineBaseTimer.invalidate
436 ClusterShell.Engine.Engine._EngineTimerQ.invalidate" class="py-name" href="#" onclick="return doclink('link-25', 'invalidate', 'link-1');">invalidate</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
437 <a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> </tt>
438 <a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timers</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
439 <a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">armed_count</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
440 </div></div><a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> </tt>
441 <a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> </tt>
442 <a name="Engine"></a><div id="Engine-def"><a name="L332"></a><tt class="py-lineno">332</tt> <a class="py-toggle" href="#" id="Engine-toggle" onclick="return toggle('Engine');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a><tt class="py-op">:</tt> </tt>
443 </div><div id="Engine-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Engine-expanded"><a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
444 <a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"><tt class="py-docstring"> Interface for ClusterShell engine. Subclasses have to implement a runloop</tt> </tt>
445 <a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"><tt class="py-docstring"> listening for client events.</tt> </tt>
446 <a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
447 <a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> </tt>
448 <a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-comment"># Engine client I/O event interest bits</tt> </tt>
449 <a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt id="link-26" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_READ=ClusterShell.Engine.Engine.Engine-class.html#E_READ"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-26', 'E_READ', 'link-26');">E_READ</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x1</tt> </tt>
450 <a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt id="link-27" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_ERROR=ClusterShell.Engine.Engine.Engine-class.html#E_ERROR"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-27', 'E_ERROR', 'link-27');">E_ERROR</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x2</tt> </tt>
451 <a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt id="link-28" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_WRITE=ClusterShell.Engine.Engine.Engine-class.html#E_WRITE"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-28', 'E_WRITE', 'link-28');">E_WRITE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x4</tt> </tt>
452 <a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt id="link-29" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_ANY=ClusterShell.Engine.Engine.Engine-class.html#E_ANY"><a title="ClusterShell.Engine.Engine.Engine.E_ANY" class="py-name" href="#" onclick="return doclink('link-29', 'E_ANY', 'link-29');">E_ANY</a></tt> <tt class="py-op">=</tt> <tt id="link-30" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-30', 'E_READ', 'link-26');">E_READ</a></tt> <tt class="py-op">|</tt> <tt id="link-31" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-31', 'E_ERROR', 'link-27');">E_ERROR</a></tt> <tt class="py-op">|</tt> <tt id="link-32" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-32', 'E_WRITE', 'link-28');">E_WRITE</a></tt> </tt>
453 <a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> </tt>
454 <a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt id="link-33" class="py-name" targets="Variable ClusterShell.Engine.EPoll.EngineEPoll.identifier=ClusterShell.Engine.EPoll.EngineEPoll-class.html#identifier,Variable ClusterShell.Engine.Engine.Engine.identifier=ClusterShell.Engine.Engine.Engine-class.html#identifier,Variable ClusterShell.Engine.Poll.EnginePoll.identifier=ClusterShell.Engine.Poll.EnginePoll-class.html#identifier"><a title="ClusterShell.Engine.EPoll.EngineEPoll.identifier
455 ClusterShell.Engine.Engine.Engine.identifier
456 ClusterShell.Engine.Poll.EnginePoll.identifier" class="py-name" href="#" onclick="return doclink('link-33', 'identifier', 'link-33');">identifier</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"(none)"</tt> </tt>
457 <a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> </tt>
458 <a name="Engine.__init__"></a><div id="Engine.__init__-def"><a name="L346"></a><tt class="py-lineno">346</tt> <a class="py-toggle" href="#" id="Engine.__init__-toggle" onclick="return toggle('Engine.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-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">info</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
459 </div><div id="Engine.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.__init__-expanded"><a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
460 <a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"><tt class="py-docstring"> Initialize base class.</tt> </tt>
461 <a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
462 <a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-comment"># take a reference on info dict</tt> </tt>
463 <a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-34', 'info', 'link-34');">info</a></tt> <tt class="py-op">=</tt> <tt id="link-35" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-35', 'info', 'link-34');">info</a></tt> </tt>
464 <a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> </tt>
465 <a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-comment"># and update engine id</tt> </tt>
466 <a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-36', 'info', 'link-34');">info</a></tt><tt class="py-op">[</tt><tt class="py-string">'engine'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.identifier
467 ClusterShell.Engine.Engine.Engine.identifier
468 ClusterShell.Engine.Poll.EnginePoll.identifier" class="py-name" href="#" onclick="return doclink('link-37', 'identifier', 'link-33');">identifier</a></tt> </tt>
469 <a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> </tt>
470 <a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-comment"># keep track of all clients</tt> </tt>
471 <a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_clients</tt> <tt class="py-op">=</tt> <tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
472 <a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ports</tt> <tt class="py-op">=</tt> <tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
473 <a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> </tt>
474 <a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt class="py-comment"># keep track of the number of registered clients (delayable only)</tt> </tt>
475 <a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clients</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
476 <a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> </tt>
477 <a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-comment"># keep track of registered file descriptors in a dict where keys</tt> </tt>
478 <a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-comment"># are fileno and values are clients</tt> </tt>
479 <a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
480 <a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> </tt>
481 <a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-comment"># A boolean that indicates when reg_clifds has changed, or when</tt> </tt>
482 <a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt class="py-comment"># some client interest event mask has changed. It is set by the</tt> </tt>
483 <a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-comment"># base class, and reset by each engine implementation.</tt> </tt>
484 <a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-comment"># Engines often deal with I/O events in chunk, and some event</tt> </tt>
485 <a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-comment"># may lead to change to some other "client interest event mask"</tt> </tt>
486 <a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt class="py-comment"># or could even register or close other clients. When such</tt> </tt>
487 <a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-comment"># changes are made, this boolean is set to True, allowing the</tt> </tt>
488 <a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-comment"># engine implementation to reconsider their events got by chunk.</tt> </tt>
489 <a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
490 <a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> </tt>
491 <a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt class="py-comment"># timer queue to handle both timers and clients timeout</tt> </tt>
492 <a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt> <tt class="py-op">=</tt> <tt id="link-38" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ" class="py-name" href="#" onclick="return doclink('link-38', '_EngineTimerQ', 'link-8');">_EngineTimerQ</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
493 <a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> </tt>
494 <a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt class="py-comment"># reference count to the event loop (must include registered</tt> </tt>
495 <a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-comment"># clients and timers configured WITHOUT autoclose)</tt> </tt>
496 <a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
497 <a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"> </tt>
498 <a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-comment"># running state</tt> </tt>
499 <a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method ClusterShell.Task.Task.running()=ClusterShell.Task.Task-class.html#running"><a title="ClusterShell.Task.Task.running" class="py-name" href="#" onclick="return doclink('link-39', 'running', 'link-39');">running</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
500 <a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"> <tt class="py-comment"># runloop-has-exited flag</tt> </tt>
501 <a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_exited</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
502 </div><a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> </tt>
503 <a name="Engine.clients"></a><div id="Engine.clients-def"><a name="L389"></a><tt class="py-lineno">389</tt> <a class="py-toggle" href="#" id="Engine.clients-toggle" onclick="return toggle('Engine.clients');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#clients">clients</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
504 </div><div id="Engine.clients-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.clients-expanded"><a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
505 <a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"><tt class="py-docstring"> Get a copy of clients set.</tt> </tt>
506 <a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
507 <a name="L393"></a><tt class="py-lineno">393</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">_clients</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name" targets="Method ClusterShell.Task.Task.copy()=ClusterShell.Task.Task-class.html#copy"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-40', 'copy', 'link-40');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
508 </div><a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> </tt>
509 <a name="Engine.ports"></a><div id="Engine.ports-def"><a name="L395"></a><tt class="py-lineno">395</tt> <a class="py-toggle" href="#" id="Engine.ports-toggle" onclick="return toggle('Engine.ports');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#ports">ports</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
510 </div><div id="Engine.ports-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.ports-expanded"><a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
511 <a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"><tt class="py-docstring"> Get a copy of ports set.</tt> </tt>
512 <a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
513 <a name="L399"></a><tt class="py-lineno">399</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">_ports</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-41', 'copy', 'link-40');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
514 </div><a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> </tt>
515 <a name="Engine._fd2client"></a><div id="Engine._fd2client-def"><a name="L401"></a><tt class="py-lineno">401</tt> <a class="py-toggle" href="#" id="Engine._fd2client-toggle" onclick="return toggle('Engine._fd2client');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#_fd2client">_fd2client</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
516 </div><div id="Engine._fd2client-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine._fd2client-expanded"><a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt class="py-name">fdev</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
517 <a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-name">client</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
518 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-42', 'get', 'link-42');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
519 <a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">:</tt> </tt>
520 <a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
521 <a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt> <tt class="py-op">==</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.reader_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.reader_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
522 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-43', 'reader_fileno', 'link-43');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
523 <a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-name">fdev</tt> <tt class="py-op">=</tt> <tt id="link-44" class="py-name" targets="Package ClusterShell.Engine=ClusterShell.Engine-module.html,Module ClusterShell.Engine.Engine=ClusterShell.Engine.Engine-module.html,Class ClusterShell.Engine.Engine.Engine=ClusterShell.Engine.Engine.Engine-class.html"><a title="ClusterShell.Engine
524 ClusterShell.Engine.Engine
525 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-44', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-45', 'E_READ', 'link-26');">E_READ</a></tt> </tt>
526 <a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">fd</tt> <tt class="py-op">==</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.error_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.error_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.error_fileno
527 ClusterShell.Worker.Worker.WorkerSimple.error_fileno" class="py-name" href="#" onclick="return doclink('link-46', 'error_fileno', 'link-46');">error_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
528 <a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-name">fdev</tt> <tt class="py-op">=</tt> <tt id="link-47" class="py-name"><a title="ClusterShell.Engine
529 ClusterShell.Engine.Engine
530 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-47', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-48', 'E_ERROR', 'link-27');">E_ERROR</a></tt> </tt>
531 <a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">fd</tt> <tt class="py-op">==</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.writer_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.writer_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
532 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-49', 'writer_fileno', 'link-49');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
533 <a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-name">fdev</tt> <tt class="py-op">=</tt> <tt id="link-50" class="py-name"><a title="ClusterShell.Engine
534 ClusterShell.Engine.Engine
535 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-50', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-51', 'E_WRITE', 'link-28');">E_WRITE</a></tt> </tt>
536 <a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
537 <a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt id="link-52" class="py-name"><a title="ClusterShell.Engine
538 ClusterShell.Engine.Engine
539 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-52', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-53', 'E_ERROR', 'link-27');">E_ERROR</a></tt><tt class="py-op">)</tt> </tt>
540 <a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
541 </div><a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> </tt>
542 <a name="Engine.add"></a><div id="Engine.add-def"><a name="L416"></a><tt class="py-lineno">416</tt> <a class="py-toggle" href="#" id="Engine.add-toggle" onclick="return toggle('Engine.add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#add">add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
543 </div><div id="Engine.add-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.add-expanded"><a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
544 <a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"><tt class="py-docstring"> Add a client to engine. Subclasses that override this method</tt> </tt>
545 <a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"><tt class="py-docstring"> should call base class method.</tt> </tt>
546 <a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
547 <a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-comment"># bind to engine</tt> </tt>
548 <a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Method ClusterShell.Engine.Engine.EngineBaseTimer._set_engine()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine"><a title="ClusterShell.Engine.Engine.EngineBaseTimer._set_engine" class="py-name" href="#" onclick="return doclink('link-54', '_set_engine', 'link-54');">_set_engine</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
549 <a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> </tt>
550 <a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">delayable</tt><tt class="py-op">:</tt> </tt>
551 <a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-comment"># add to regular client set</tt> </tt>
552 <a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_clients</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.add()=ClusterShell.Engine.Engine.Engine-class.html#add,Method ClusterShell.MsgTree.MsgTree.add()=ClusterShell.MsgTree.MsgTree-class.html#add,Method ClusterShell.NodeSet.NodeSetBase.add()=ClusterShell.NodeSet.NodeSetBase-class.html#add,Method ClusterShell.NodeSet.RangeSet.add()=ClusterShell.NodeSet.RangeSet-class.html#add"><a title="ClusterShell.Engine.Engine.Engine.add
553 ClusterShell.MsgTree.MsgTree.add
554 ClusterShell.NodeSet.NodeSetBase.add
555 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-55', 'add', 'link-55');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
556 <a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
557 <a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-comment"># add to port set (non-delayable)</tt> </tt>
558 <a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ports</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
559 ClusterShell.MsgTree.MsgTree.add
560 ClusterShell.NodeSet.NodeSetBase.add
561 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-56', 'add', 'link-55');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
562 <a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> </tt>
563 <a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="ClusterShell.Task.Task.running" class="py-name" href="#" onclick="return doclink('link-57', 'running', 'link-39');">running</a></tt><tt class="py-op">:</tt> </tt>
564 <a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> <tt class="py-comment"># in-fly add if running</tt> </tt>
565 <a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">delayable</tt><tt class="py-op">:</tt> </tt>
566 <a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.register()=ClusterShell.Engine.Engine.Engine-class.html#register"><a title="ClusterShell.Engine.Engine.Engine.register" class="py-name" href="#" onclick="return doclink('link-58', 'register', 'link-58');">register</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
567 <a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-59', 'info', 'link-34');">info</a></tt><tt class="py-op">[</tt><tt class="py-string">"fanout"</tt><tt class="py-op">]</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clients</tt><tt class="py-op">:</tt> </tt>
568 <a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.register" class="py-name" href="#" onclick="return doclink('link-60', 'register', 'link-58');">register</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._start()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_start,Method ClusterShell.Worker.EngineClient.EnginePort._start()=ClusterShell.Worker.EngineClient.EnginePort-class.html#_start,Method ClusterShell.Worker.Pdsh.WorkerPdsh._start()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_start,Method ClusterShell.Worker.Popen.WorkerPopen._start()=ClusterShell.Worker.Popen.WorkerPopen-class.html#_start,Method ClusterShell.Worker.Ssh.Scp._start()=ClusterShell.Worker.Ssh.Scp-class.html#_start,Method ClusterShell.Worker.Ssh.Ssh._start()=ClusterShell.Worker.Ssh.Ssh-class.html#_start,Method ClusterShell.Worker.Worker.WorkerSimple._start()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_start"><a title="ClusterShell.Worker.EngineClient.EngineClient._start
569 ClusterShell.Worker.EngineClient.EnginePort._start
570 ClusterShell.Worker.Pdsh.WorkerPdsh._start
571 ClusterShell.Worker.Popen.WorkerPopen._start
572 ClusterShell.Worker.Ssh.Scp._start
573 ClusterShell.Worker.Ssh.Ssh._start
574 ClusterShell.Worker.Worker.WorkerSimple._start" class="py-name" href="#" onclick="return doclink('link-61', '_start', 'link-61');">_start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
575 </div><a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> </tt>
576 <a name="Engine._remove"></a><div id="Engine._remove-def"><a name="L438"></a><tt class="py-lineno">438</tt> <a class="py-toggle" href="#" id="Engine._remove-toggle" onclick="return toggle('Engine._remove');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#_remove">_remove</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">,</tt> <tt class="py-param">did_timeout</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
577 </div><div id="Engine._remove-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine._remove-expanded"><a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
578 <a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"><tt class="py-docstring"> Remove a client from engine (subroutine).</tt> </tt>
579 <a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
580 <a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt><tt class="py-op">:</tt> </tt>
581 <a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.unregister()=ClusterShell.Engine.Engine.Engine-class.html#unregister"><a title="ClusterShell.Engine.Engine.Engine.unregister" class="py-name" href="#" onclick="return doclink('link-62', 'unregister', 'link-62');">unregister</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
582 <a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._close()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_close,Method ClusterShell.Worker.EngineClient.EnginePort._close()=ClusterShell.Worker.EngineClient.EnginePort-class.html#_close,Method ClusterShell.Worker.Pdsh.WorkerPdsh._close()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_close,Method ClusterShell.Worker.Popen.WorkerPopen._close()=ClusterShell.Worker.Popen.WorkerPopen-class.html#_close,Method ClusterShell.Worker.Ssh.Ssh._close()=ClusterShell.Worker.Ssh.Ssh-class.html#_close,Method ClusterShell.Worker.Worker.WorkerSimple._close()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_close"><a title="ClusterShell.Worker.EngineClient.EngineClient._close
583 ClusterShell.Worker.EngineClient.EnginePort._close
584 ClusterShell.Worker.Pdsh.WorkerPdsh._close
585 ClusterShell.Worker.Popen.WorkerPopen._close
586 ClusterShell.Worker.Ssh.Ssh._close
587 ClusterShell.Worker.Worker.WorkerSimple._close" class="py-name" href="#" onclick="return doclink('link-63', '_close', 'link-63');">_close</a></tt><tt class="py-op">(</tt><tt class="py-name">force</tt><tt class="py-op">=</tt><tt class="py-name">force</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt id="link-64" class="py-name" targets="Method ClusterShell.Worker.Worker.Worker.did_timeout()=ClusterShell.Worker.Worker.Worker-class.html#did_timeout"><a title="ClusterShell.Worker.Worker.Worker.did_timeout" class="py-name" href="#" onclick="return doclink('link-64', 'did_timeout', 'link-64');">did_timeout</a></tt><tt class="py-op">)</tt> </tt>
588 </div><a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> </tt>
589 <a name="Engine.remove"></a><div id="Engine.remove-def"><a name="L446"></a><tt class="py-lineno">446</tt> <a class="py-toggle" href="#" id="Engine.remove-toggle" onclick="return toggle('Engine.remove');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#remove">remove</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">,</tt> <tt class="py-param">did_timeout</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
590 </div><div id="Engine.remove-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.remove-expanded"><a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
591 <a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"><tt class="py-docstring"> Remove a client from engine. Subclasses that override this</tt> </tt>
592 <a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"><tt class="py-docstring"> method should call base class method.</tt> </tt>
593 <a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
594 <a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine._debug()=ClusterShell.Engine.Engine.Engine-class.html#_debug"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-65', '_debug', 'link-65');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"REMOVE %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
595 <a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">delayable</tt><tt class="py-op">:</tt> </tt>
596 <a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_clients</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.remove()=ClusterShell.Engine.Engine.Engine-class.html#remove,Method ClusterShell.MsgTree.MsgTree.remove()=ClusterShell.MsgTree.MsgTree-class.html#remove,Method ClusterShell.NodeSet.NodeSetBase.remove()=ClusterShell.NodeSet.NodeSetBase-class.html#remove,Method ClusterShell.NodeSet.RangeSet.remove()=ClusterShell.NodeSet.RangeSet-class.html#remove"><a title="ClusterShell.Engine.Engine.Engine.remove
597 ClusterShell.MsgTree.MsgTree.remove
598 ClusterShell.NodeSet.NodeSetBase.remove
599 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-66', 'remove', 'link-66');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
600 <a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
601 <a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ports</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.remove
602 ClusterShell.MsgTree.MsgTree.remove
603 ClusterShell.NodeSet.NodeSetBase.remove
604 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-67', 'remove', 'link-66');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
605 <a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine._remove()=ClusterShell.Engine.Engine.Engine-class.html#_remove"><a title="ClusterShell.Engine.Engine.Engine._remove" class="py-name" href="#" onclick="return doclink('link-68', '_remove', 'link-68');">_remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt id="link-69" class="py-name"><a title="ClusterShell.Worker.Worker.Worker.did_timeout" class="py-name" href="#" onclick="return doclink('link-69', 'did_timeout', 'link-64');">did_timeout</a></tt><tt class="py-op">,</tt> <tt class="py-name">force</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
606 <a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.start_all()=ClusterShell.Engine.Engine.Engine-class.html#start_all"><a title="ClusterShell.Engine.Engine.Engine.start_all" class="py-name" href="#" onclick="return doclink('link-70', 'start_all', 'link-70');">start_all</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
607 </div><a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> </tt>
608 <a name="Engine.clear"></a><div id="Engine.clear-def"><a name="L459"></a><tt class="py-lineno">459</tt> <a class="py-toggle" href="#" id="Engine.clear-toggle" onclick="return toggle('Engine.clear');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#clear">clear</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">did_timeout</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">clear_ports</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
609 </div><div id="Engine.clear-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.clear-expanded"><a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
610 <a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"><tt class="py-docstring"> Remove all clients. Subclasses that override this method should</tt> </tt>
611 <a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"><tt class="py-docstring"> call base class method.</tt> </tt>
612 <a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
613 <a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> <tt class="py-name">all_clients</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_clients</tt><tt class="py-op">]</tt> </tt>
614 <a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">clear_ports</tt><tt class="py-op">:</tt> </tt>
615 <a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> <tt class="py-name">all_clients</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.append()=ClusterShell.MsgTree.MsgTreeElem-class.html#append"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-71', 'append', 'link-71');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ports</tt><tt class="py-op">)</tt> </tt>
616 <a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> </tt>
617 <a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-72" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clients()=ClusterShell.Engine.Engine.Engine-class.html#clients"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-72', 'clients', 'link-72');">clients</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_clients</tt><tt class="py-op">:</tt> </tt>
618 <a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-73" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-73', 'clients', 'link-72');">clients</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
619 <a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-name">client</tt> <tt class="py-op">=</tt> <tt id="link-74" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-74', 'clients', 'link-72');">clients</a></tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
620 <a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._remove" class="py-name" href="#" onclick="return doclink('link-75', '_remove', 'link-68');">_remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt id="link-76" class="py-name"><a title="ClusterShell.Worker.Worker.Worker.did_timeout" class="py-name" href="#" onclick="return doclink('link-76', 'did_timeout', 'link-64');">did_timeout</a></tt><tt class="py-op">,</tt> <tt class="py-name">force</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
621 </div><a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> </tt>
622 <a name="Engine.register"></a><div id="Engine.register-def"><a name="L473"></a><tt class="py-lineno">473</tt> <a class="py-toggle" href="#" id="Engine.register-toggle" onclick="return toggle('Engine.register');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#register">register</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
623 </div><div id="Engine.register-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.register-expanded"><a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
624 <a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"><tt class="py-docstring"> Register an engine client. Subclasses that override this method</tt> </tt>
625 <a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"><tt class="py-docstring"> should call base class method.</tt> </tt>
626 <a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
627 <a name="L478"></a><tt class="py-lineno">478</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">client</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_clients</tt> <tt class="py-keyword">or</tt> <tt class="py-name">client</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ports</tt> </tt>
628 <a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt> </tt>
629 <a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> </tt>
630 <a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt class="py-name">efd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.error_fileno
631 ClusterShell.Worker.Worker.WorkerSimple.error_fileno" class="py-name" href="#" onclick="return doclink('link-77', 'error_fileno', 'link-46');">error_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
632 <a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-name">rfd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
633 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-78', 'reader_fileno', 'link-43');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
634 <a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> <tt class="py-name">wfd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
635 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-79', 'writer_fileno', 'link-49');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
636 <a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">rfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-name">wfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
637 <a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> </tt>
638 <a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-80', '_debug', 'link-65');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"REG %s(e%s,r%s,w%s)(autoclose=%s)"</tt> <tt class="py-op">%</tt> \ </tt>
639 <a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">efd</tt><tt class="py-op">,</tt> <tt class="py-name">rfd</tt><tt class="py-op">,</tt> <tt class="py-name">wfd</tt><tt class="py-op">,</tt> </tt>
640 <a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">autoclose</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
641 <a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"> </tt>
642 <a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
643 <a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
644 <a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"> </tt>
645 <a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">delayable</tt><tt class="py-op">:</tt> </tt>
646 <a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clients</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
647 <a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> </tt>
648 <a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">autoclose</tt><tt class="py-op">:</tt> </tt>
649 <a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> <tt class="py-name">refcnt_inc</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
650 <a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
651 <a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-name">refcnt_inc</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
652 <a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"> </tt>
653 <a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">efd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
654 <a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">[</tt><tt class="py-name">efd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt> </tt>
655 <a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
656 <a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">|=</tt> <tt id="link-81" class="py-name"><a title="ClusterShell.Engine
657 ClusterShell.Engine.Engine
658 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-81', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-82', 'E_ERROR', 'link-27');">E_ERROR</a></tt> </tt>
659 <a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">+=</tt> <tt class="py-name">refcnt_inc</tt> </tt>
660 <a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll._register_specific()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#_register_specific,Method ClusterShell.Engine.Engine.Engine._register_specific()=ClusterShell.Engine.Engine.Engine-class.html#_register_specific,Method ClusterShell.Engine.Poll.EnginePoll._register_specific()=ClusterShell.Engine.Poll.EnginePoll-class.html#_register_specific"><a title="ClusterShell.Engine.EPoll.EngineEPoll._register_specific
661 ClusterShell.Engine.Engine.Engine._register_specific
662 ClusterShell.Engine.Poll.EnginePoll._register_specific" class="py-name" href="#" onclick="return doclink('link-83', '_register_specific', 'link-83');">_register_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">efd</tt><tt class="py-op">,</tt> <tt id="link-84" class="py-name"><a title="ClusterShell.Engine
663 ClusterShell.Engine.Engine
664 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-84', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-85', 'E_ERROR', 'link-27');">E_ERROR</a></tt><tt class="py-op">)</tt> </tt>
665 <a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
666 <a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">[</tt><tt class="py-name">rfd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt> </tt>
667 <a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
668 <a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">|=</tt> <tt id="link-86" class="py-name"><a title="ClusterShell.Engine
669 ClusterShell.Engine.Engine
670 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-86', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-87', 'E_READ', 'link-26');">E_READ</a></tt> </tt>
671 <a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">+=</tt> <tt class="py-name">refcnt_inc</tt> </tt>
672 <a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll._register_specific
673 ClusterShell.Engine.Engine.Engine._register_specific
674 ClusterShell.Engine.Poll.EnginePoll._register_specific" class="py-name" href="#" onclick="return doclink('link-88', '_register_specific', 'link-83');">_register_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">rfd</tt><tt class="py-op">,</tt> <tt id="link-89" class="py-name"><a title="ClusterShell.Engine
675 ClusterShell.Engine.Engine
676 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-89', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-90', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">)</tt> </tt>
677 <a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">wfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
678 <a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">[</tt><tt class="py-name">wfd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt> </tt>
679 <a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
680 <a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">|=</tt> <tt id="link-91" class="py-name"><a title="ClusterShell.Engine
681 ClusterShell.Engine.Engine
682 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-91', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-92', 'E_WRITE', 'link-28');">E_WRITE</a></tt> </tt>
683 <a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">+=</tt> <tt class="py-name">refcnt_inc</tt> </tt>
684 <a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll._register_specific
685 ClusterShell.Engine.Engine.Engine._register_specific
686 ClusterShell.Engine.Poll.EnginePoll._register_specific" class="py-name" href="#" onclick="return doclink('link-93', '_register_specific', 'link-83');">_register_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">wfd</tt><tt class="py-op">,</tt> <tt id="link-94" class="py-name"><a title="ClusterShell.Engine
687 ClusterShell.Engine.Engine
688 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-94', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-95', 'E_WRITE', 'link-28');">E_WRITE</a></tt><tt class="py-op">)</tt> </tt>
689 <a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"> </tt>
690 <a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> </tt>
691 <a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"> </tt>
692 <a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"> <tt class="py-comment"># start timeout timer</tt> </tt>
693 <a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ.schedule
694 ClusterShell.Task.Task.schedule" class="py-name" href="#" onclick="return doclink('link-96', 'schedule', 'link-12');">schedule</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
695 </div><a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"> </tt>
696 <a name="Engine.unregister_writer"></a><div id="Engine.unregister_writer-def"><a name="L525"></a><tt class="py-lineno">525</tt> <a class="py-toggle" href="#" id="Engine.unregister_writer-toggle" onclick="return toggle('Engine.unregister_writer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#unregister_writer">unregister_writer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
697 </div><div id="Engine.unregister_writer-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.unregister_writer-expanded"><a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-97', '_debug', 'link-65');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"UNREG WRITER r%s,w%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
698 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-98', 'reader_fileno', 'link-43');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> \ </tt>
699 <a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
700 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-99', 'writer_fileno', 'link-49');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
701 <a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">autoclose</tt><tt class="py-op">:</tt> </tt>
702 <a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-name">refcnt_inc</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
703 <a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
704 <a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> <tt class="py-name">refcnt_inc</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
705 <a name="L532"></a><tt class="py-lineno">532</tt> <tt class="py-line"> </tt>
706 <a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> <tt class="py-name">wfd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
707 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-100', 'writer_fileno', 'link-49');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
708 <a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">wfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
709 <a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll._unregister_specific()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#_unregister_specific,Method ClusterShell.Engine.Engine.Engine._unregister_specific()=ClusterShell.Engine.Engine.Engine-class.html#_unregister_specific,Method ClusterShell.Engine.Poll.EnginePoll._unregister_specific()=ClusterShell.Engine.Poll.EnginePoll-class.html#_unregister_specific"><a title="ClusterShell.Engine.EPoll.EngineEPoll._unregister_specific
710 ClusterShell.Engine.Engine.Engine._unregister_specific
711 ClusterShell.Engine.Poll.EnginePoll._unregister_specific" class="py-name" href="#" onclick="return doclink('link-101', '_unregister_specific', 'link-101');">_unregister_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">wfd</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-102" class="py-name"><a title="ClusterShell.Engine
712 ClusterShell.Engine.Engine
713 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-102', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-103', 'E_WRITE', 'link-28');">E_WRITE</a></tt><tt class="py-op">)</tt> </tt>
714 <a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;=</tt> <tt class="py-op">~</tt><tt id="link-104" class="py-name"><a title="ClusterShell.Engine
715 ClusterShell.Engine.Engine
716 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-104', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-105', 'E_WRITE', 'link-28');">E_WRITE</a></tt> </tt>
717 <a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">[</tt><tt class="py-name">wfd</tt><tt class="py-op">]</tt> </tt>
718 <a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
719 <a name="L539"></a><tt class="py-lineno">539</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">-=</tt> <tt class="py-name">refcnt_inc</tt> </tt>
720 </div><a name="L540"></a><tt class="py-lineno">540</tt> <tt class="py-line"> </tt>
721 <a name="Engine.unregister"></a><div id="Engine.unregister-def"><a name="L541"></a><tt class="py-lineno">541</tt> <a class="py-toggle" href="#" id="Engine.unregister-toggle" onclick="return toggle('Engine.unregister');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#unregister">unregister</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
722 </div><div id="Engine.unregister-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.unregister-expanded"><a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
723 <a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"><tt class="py-docstring"> Unregister a client. Subclasses that override this method should</tt> </tt>
724 <a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"><tt class="py-docstring"> call base class method.</tt> </tt>
725 <a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
726 <a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"> <tt class="py-comment"># sanity check</tt> </tt>
727 <a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt> </tt>
728 <a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-106', '_debug', 'link-65');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"UNREG %s (r%s,e%s,w%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> </tt>
729 <a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
730 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-107', 'reader_fileno', 'link-43');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.error_fileno
731 ClusterShell.Worker.Worker.WorkerSimple.error_fileno" class="py-name" href="#" onclick="return doclink('link-108', 'error_fileno', 'link-46');">error_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
732 <a name="L550"></a><tt class="py-lineno">550</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
733 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-109', 'writer_fileno', 'link-49');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
734 <a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"> </tt>
735 <a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"> <tt class="py-comment"># remove timeout timer</tt> </tt>
736 <a name="L553"></a><tt class="py-lineno">553</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="ClusterShell.Engine.Engine.EngineBaseTimer.invalidate
737 ClusterShell.Engine.Engine._EngineTimerQ.invalidate" class="py-name" href="#" onclick="return doclink('link-110', 'invalidate', 'link-1');">invalidate</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
738 <a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"> </tt>
739 <a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">autoclose</tt><tt class="py-op">:</tt> </tt>
740 <a name="L556"></a><tt class="py-lineno">556</tt> <tt class="py-line"> <tt class="py-name">refcnt_inc</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
741 <a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
742 <a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"> <tt class="py-name">refcnt_inc</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
743 <a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"> </tt>
744 <a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"> <tt class="py-comment"># clear interest events</tt> </tt>
745 <a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"> <tt class="py-name">efd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.error_fileno
746 ClusterShell.Worker.Worker.WorkerSimple.error_fileno" class="py-name" href="#" onclick="return doclink('link-111', 'error_fileno', 'link-46');">error_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
747 <a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">efd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
748 <a name="L563"></a><tt class="py-lineno">563</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll._unregister_specific
749 ClusterShell.Engine.Engine.Engine._unregister_specific
750 ClusterShell.Engine.Poll.EnginePoll._unregister_specific" class="py-name" href="#" onclick="return doclink('link-112', '_unregister_specific', 'link-101');">_unregister_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">efd</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-113" class="py-name"><a title="ClusterShell.Engine
751 ClusterShell.Engine.Engine
752 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-113', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-114" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-114', 'E_ERROR', 'link-27');">E_ERROR</a></tt><tt class="py-op">)</tt> </tt>
753 <a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;=</tt> <tt class="py-op">~</tt><tt id="link-115" class="py-name"><a title="ClusterShell.Engine
754 ClusterShell.Engine.Engine
755 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-115', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-116', 'E_ERROR', 'link-27');">E_ERROR</a></tt> </tt>
756 <a name="L565"></a><tt class="py-lineno">565</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">[</tt><tt class="py-name">efd</tt><tt class="py-op">]</tt> </tt>
757 <a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
758 <a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">-=</tt> <tt class="py-name">refcnt_inc</tt> </tt>
759 <a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"> </tt>
760 <a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"> <tt class="py-name">rfd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
761 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-117', 'reader_fileno', 'link-43');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
762 <a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
763 <a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll._unregister_specific
764 ClusterShell.Engine.Engine.Engine._unregister_specific
765 ClusterShell.Engine.Poll.EnginePoll._unregister_specific" class="py-name" href="#" onclick="return doclink('link-118', '_unregister_specific', 'link-101');">_unregister_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">rfd</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-119" class="py-name"><a title="ClusterShell.Engine
766 ClusterShell.Engine.Engine
767 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-119', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-120', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">)</tt> </tt>
768 <a name="L572"></a><tt class="py-lineno">572</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;=</tt> <tt class="py-op">~</tt><tt id="link-121" class="py-name"><a title="ClusterShell.Engine
769 ClusterShell.Engine.Engine
770 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-121', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-122', 'E_READ', 'link-26');">E_READ</a></tt> </tt>
771 <a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">[</tt><tt class="py-name">rfd</tt><tt class="py-op">]</tt> </tt>
772 <a name="L574"></a><tt class="py-lineno">574</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
773 <a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">-=</tt> <tt class="py-name">refcnt_inc</tt> </tt>
774 <a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"> </tt>
775 <a name="L577"></a><tt class="py-lineno">577</tt> <tt class="py-line"> <tt class="py-name">wfd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
776 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-123', 'writer_fileno', 'link-49');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
777 <a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">wfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
778 <a name="L579"></a><tt class="py-lineno">579</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll._unregister_specific
779 ClusterShell.Engine.Engine.Engine._unregister_specific
780 ClusterShell.Engine.Poll.EnginePoll._unregister_specific" class="py-name" href="#" onclick="return doclink('link-124', '_unregister_specific', 'link-101');">_unregister_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">wfd</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-125" class="py-name"><a title="ClusterShell.Engine
781 ClusterShell.Engine.Engine
782 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-125', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-126" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-126', 'E_WRITE', 'link-28');">E_WRITE</a></tt><tt class="py-op">)</tt> </tt>
783 <a name="L580"></a><tt class="py-lineno">580</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;=</tt> <tt class="py-op">~</tt><tt id="link-127" class="py-name"><a title="ClusterShell.Engine
784 ClusterShell.Engine.Engine
785 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-127', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-128', 'E_WRITE', 'link-28');">E_WRITE</a></tt> </tt>
786 <a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">[</tt><tt class="py-name">wfd</tt><tt class="py-op">]</tt> </tt>
787 <a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
788 <a name="L583"></a><tt class="py-lineno">583</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt> <tt class="py-op">-=</tt> <tt class="py-name">refcnt_inc</tt> </tt>
789 <a name="L584"></a><tt class="py-lineno">584</tt> <tt class="py-line"> </tt>
790 <a name="L585"></a><tt class="py-lineno">585</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
791 <a name="L586"></a><tt class="py-lineno">586</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
792 <a name="L587"></a><tt class="py-lineno">587</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">delayable</tt><tt class="py-op">:</tt> </tt>
793 <a name="L588"></a><tt class="py-lineno">588</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clients</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
794 </div><a name="L589"></a><tt class="py-lineno">589</tt> <tt class="py-line"> </tt>
795 <a name="Engine.modify"></a><div id="Engine.modify-def"><a name="L590"></a><tt class="py-lineno">590</tt> <a class="py-toggle" href="#" id="Engine.modify-toggle" onclick="return toggle('Engine.modify');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#modify">modify</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">,</tt> <tt class="py-param">setmask</tt><tt class="py-op">,</tt> <tt class="py-param">clearmask</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
796 </div><div id="Engine.modify-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.modify-expanded"><a name="L591"></a><tt class="py-lineno">591</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
797 <a name="L592"></a><tt class="py-lineno">592</tt> <tt class="py-line"><tt class="py-docstring"> Modify the next loop interest events bitset for a client.</tt> </tt>
798 <a name="L593"></a><tt class="py-lineno">593</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
799 <a name="L594"></a><tt class="py-lineno">594</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-129" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-129', '_debug', 'link-65');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"MODEV set:0x%x clear:0x%x %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">setmask</tt><tt class="py-op">,</tt> <tt class="py-name">clearmask</tt><tt class="py-op">,</tt> </tt>
800 <a name="L595"></a><tt class="py-lineno">595</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
801 <a name="L596"></a><tt class="py-lineno">596</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt> <tt class="py-op">&amp;=</tt> <tt class="py-op">~</tt><tt class="py-name">clearmask</tt> </tt>
802 <a name="L597"></a><tt class="py-lineno">597</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt> <tt class="py-op">|=</tt> <tt class="py-name">setmask</tt> </tt>
803 <a name="L598"></a><tt class="py-lineno">598</tt> <tt class="py-line"> </tt>
804 <a name="L599"></a><tt class="py-lineno">599</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt><tt class="py-op">:</tt> </tt>
805 <a name="L600"></a><tt class="py-lineno">600</tt> <tt class="py-line"> <tt class="py-comment"># modifying a non processing client?</tt> </tt>
806 <a name="L601"></a><tt class="py-lineno">601</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
807 <a name="L602"></a><tt class="py-lineno">602</tt> <tt class="py-line"> <tt class="py-comment"># apply new_events now</tt> </tt>
808 <a name="L603"></a><tt class="py-lineno">603</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.set_events()=ClusterShell.Engine.Engine.Engine-class.html#set_events"><a title="ClusterShell.Engine.Engine.Engine.set_events" class="py-name" href="#" onclick="return doclink('link-130', 'set_events', 'link-130');">set_events</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt><tt class="py-op">)</tt> </tt>
809 </div><a name="L604"></a><tt class="py-lineno">604</tt> <tt class="py-line"> </tt>
810 <a name="Engine._register_specific"></a><div id="Engine._register_specific-def"><a name="L605"></a><tt class="py-lineno">605</tt> <a class="py-toggle" href="#" id="Engine._register_specific-toggle" onclick="return toggle('Engine._register_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#_register_specific">_register_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">event</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
811 </div><div id="Engine._register_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine._register_specific-expanded"><a name="L606"></a><tt class="py-lineno">606</tt> <tt class="py-line"> <tt class="py-docstring">"""Engine-specific register fd for event method."""</tt> </tt>
812 <a name="L607"></a><tt class="py-lineno">607</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
813 </div><a name="L608"></a><tt class="py-lineno">608</tt> <tt class="py-line"> </tt>
814 <a name="Engine._unregister_specific"></a><div id="Engine._unregister_specific-def"><a name="L609"></a><tt class="py-lineno">609</tt> <a class="py-toggle" href="#" id="Engine._unregister_specific-toggle" onclick="return toggle('Engine._unregister_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#_unregister_specific">_unregister_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">ev_is_set</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
815 </div><div id="Engine._unregister_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine._unregister_specific-expanded"><a name="L610"></a><tt class="py-lineno">610</tt> <tt class="py-line"> <tt class="py-docstring">"""Engine-specific unregister fd method."""</tt> </tt>
816 <a name="L611"></a><tt class="py-lineno">611</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
817 </div><a name="L612"></a><tt class="py-lineno">612</tt> <tt class="py-line"> </tt>
818 <a name="Engine._modify_specific"></a><div id="Engine._modify_specific-def"><a name="L613"></a><tt class="py-lineno">613</tt> <a class="py-toggle" href="#" id="Engine._modify_specific-toggle" onclick="return toggle('Engine._modify_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#_modify_specific">_modify_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">event</tt><tt class="py-op">,</tt> <tt class="py-param">setvalue</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
819 </div><div id="Engine._modify_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine._modify_specific-expanded"><a name="L614"></a><tt class="py-lineno">614</tt> <tt class="py-line"> <tt class="py-docstring">"""Engine-specific modify fd for event method."""</tt> </tt>
820 <a name="L615"></a><tt class="py-lineno">615</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
821 </div><a name="L616"></a><tt class="py-lineno">616</tt> <tt class="py-line"> </tt>
822 <a name="Engine.set_events"></a><div id="Engine.set_events-def"><a name="L617"></a><tt class="py-lineno">617</tt> <a class="py-toggle" href="#" id="Engine.set_events-toggle" onclick="return toggle('Engine.set_events');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#set_events">set_events</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">,</tt> <tt class="py-param">new_events</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
823 </div><div id="Engine.set_events-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.set_events-expanded"><a name="L618"></a><tt class="py-lineno">618</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
824 <a name="L619"></a><tt class="py-lineno">619</tt> <tt class="py-line"><tt class="py-docstring"> Set the active interest events bitset for a client.</tt> </tt>
825 <a name="L620"></a><tt class="py-lineno">620</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
826 <a name="L621"></a><tt class="py-lineno">621</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt> </tt>
827 <a name="L622"></a><tt class="py-lineno">622</tt> <tt class="py-line"> </tt>
828 <a name="L623"></a><tt class="py-lineno">623</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-131" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-131', '_debug', 'link-65');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"SETEV new_events:0x%x events:0x%x %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">new_events</tt><tt class="py-op">,</tt> </tt>
829 <a name="L624"></a><tt class="py-lineno">624</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
830 <a name="L625"></a><tt class="py-lineno">625</tt> <tt class="py-line"> </tt>
831 <a name="L626"></a><tt class="py-lineno">626</tt> <tt class="py-line"> <tt class="py-name">chgbits</tt> <tt class="py-op">=</tt> <tt class="py-name">new_events</tt> <tt class="py-op">^</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> </tt>
832 <a name="L627"></a><tt class="py-lineno">627</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">chgbits</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
833 <a name="L628"></a><tt class="py-lineno">628</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
834 <a name="L629"></a><tt class="py-lineno">629</tt> <tt class="py-line"> </tt>
835 <a name="L630"></a><tt class="py-lineno">630</tt> <tt class="py-line"> <tt class="py-comment"># configure interest events as appropriate</tt> </tt>
836 <a name="L631"></a><tt class="py-lineno">631</tt> <tt class="py-line"> <tt class="py-name">efd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.error_fileno
837 ClusterShell.Worker.Worker.WorkerSimple.error_fileno" class="py-name" href="#" onclick="return doclink('link-132', 'error_fileno', 'link-46');">error_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
838 <a name="L632"></a><tt class="py-lineno">632</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">efd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
839 <a name="L633"></a><tt class="py-lineno">633</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">chgbits</tt> <tt class="py-op">&amp;</tt> <tt id="link-133" class="py-name"><a title="ClusterShell.Engine
840 ClusterShell.Engine.Engine
841 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-133', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-134', 'E_ERROR', 'link-27');">E_ERROR</a></tt><tt class="py-op">:</tt> </tt>
842 <a name="L634"></a><tt class="py-lineno">634</tt> <tt class="py-line"> <tt class="py-name">status</tt> <tt class="py-op">=</tt> <tt class="py-name">new_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-135" class="py-name"><a title="ClusterShell.Engine
843 ClusterShell.Engine.Engine
844 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-135', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-136', 'E_ERROR', 'link-27');">E_ERROR</a></tt> </tt>
845 <a name="L635"></a><tt class="py-lineno">635</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll._modify_specific()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#_modify_specific,Method ClusterShell.Engine.Engine.Engine._modify_specific()=ClusterShell.Engine.Engine.Engine-class.html#_modify_specific,Method ClusterShell.Engine.Poll.EnginePoll._modify_specific()=ClusterShell.Engine.Poll.EnginePoll-class.html#_modify_specific"><a title="ClusterShell.Engine.EPoll.EngineEPoll._modify_specific
846 ClusterShell.Engine.Engine.Engine._modify_specific
847 ClusterShell.Engine.Poll.EnginePoll._modify_specific" class="py-name" href="#" onclick="return doclink('link-137', '_modify_specific', 'link-137');">_modify_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">efd</tt><tt class="py-op">,</tt> <tt id="link-138" class="py-name"><a title="ClusterShell.Engine
848 ClusterShell.Engine.Engine
849 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-138', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-139', 'E_ERROR', 'link-27');">E_ERROR</a></tt><tt class="py-op">,</tt> <tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
850 <a name="L636"></a><tt class="py-lineno">636</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">status</tt><tt class="py-op">:</tt> </tt>
851 <a name="L637"></a><tt class="py-lineno">637</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">|=</tt> <tt id="link-140" class="py-name"><a title="ClusterShell.Engine
852 ClusterShell.Engine.Engine
853 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-140', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-141', 'E_ERROR', 'link-27');">E_ERROR</a></tt> </tt>
854 <a name="L638"></a><tt class="py-lineno">638</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
855 <a name="L639"></a><tt class="py-lineno">639</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;=</tt> <tt class="py-op">~</tt><tt id="link-142" class="py-name"><a title="ClusterShell.Engine
856 ClusterShell.Engine.Engine
857 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-142', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-143', 'E_ERROR', 'link-27');">E_ERROR</a></tt> </tt>
858 <a name="L640"></a><tt class="py-lineno">640</tt> <tt class="py-line"> </tt>
859 <a name="L641"></a><tt class="py-lineno">641</tt> <tt class="py-line"> <tt class="py-name">rfd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
860 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-144', 'reader_fileno', 'link-43');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
861 <a name="L642"></a><tt class="py-lineno">642</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
862 <a name="L643"></a><tt class="py-lineno">643</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">chgbits</tt> <tt class="py-op">&amp;</tt> <tt id="link-145" class="py-name"><a title="ClusterShell.Engine
863 ClusterShell.Engine.Engine
864 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-145', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-146', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
865 <a name="L644"></a><tt class="py-lineno">644</tt> <tt class="py-line"> <tt class="py-name">status</tt> <tt class="py-op">=</tt> <tt class="py-name">new_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-147" class="py-name"><a title="ClusterShell.Engine
866 ClusterShell.Engine.Engine
867 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-147', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-148', 'E_READ', 'link-26');">E_READ</a></tt> </tt>
868 <a name="L645"></a><tt class="py-lineno">645</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll._modify_specific
869 ClusterShell.Engine.Engine.Engine._modify_specific
870 ClusterShell.Engine.Poll.EnginePoll._modify_specific" class="py-name" href="#" onclick="return doclink('link-149', '_modify_specific', 'link-137');">_modify_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">rfd</tt><tt class="py-op">,</tt> <tt id="link-150" class="py-name"><a title="ClusterShell.Engine
871 ClusterShell.Engine.Engine
872 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-150', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-151', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">,</tt> <tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
873 <a name="L646"></a><tt class="py-lineno">646</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">status</tt><tt class="py-op">:</tt> </tt>
874 <a name="L647"></a><tt class="py-lineno">647</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">|=</tt> <tt id="link-152" class="py-name"><a title="ClusterShell.Engine
875 ClusterShell.Engine.Engine
876 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-152', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-153', 'E_READ', 'link-26');">E_READ</a></tt> </tt>
877 <a name="L648"></a><tt class="py-lineno">648</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
878 <a name="L649"></a><tt class="py-lineno">649</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;=</tt> <tt class="py-op">~</tt><tt id="link-154" class="py-name"><a title="ClusterShell.Engine
879 ClusterShell.Engine.Engine
880 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-154', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-155', 'E_READ', 'link-26');">E_READ</a></tt> </tt>
881 <a name="L650"></a><tt class="py-lineno">650</tt> <tt class="py-line"> </tt>
882 <a name="L651"></a><tt class="py-lineno">651</tt> <tt class="py-line"> <tt class="py-name">wfd</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
883 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-156', 'writer_fileno', 'link-49');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
884 <a name="L652"></a><tt class="py-lineno">652</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">wfd</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
885 <a name="L653"></a><tt class="py-lineno">653</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">chgbits</tt> <tt class="py-op">&amp;</tt> <tt id="link-157" class="py-name"><a title="ClusterShell.Engine
886 ClusterShell.Engine.Engine
887 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-157', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-158" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-158', 'E_WRITE', 'link-28');">E_WRITE</a></tt><tt class="py-op">:</tt> </tt>
888 <a name="L654"></a><tt class="py-lineno">654</tt> <tt class="py-line"> <tt class="py-name">status</tt> <tt class="py-op">=</tt> <tt class="py-name">new_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-159" class="py-name"><a title="ClusterShell.Engine
889 ClusterShell.Engine.Engine
890 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-159', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-160', 'E_WRITE', 'link-28');">E_WRITE</a></tt> </tt>
891 <a name="L655"></a><tt class="py-lineno">655</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll._modify_specific
892 ClusterShell.Engine.Engine.Engine._modify_specific
893 ClusterShell.Engine.Poll.EnginePoll._modify_specific" class="py-name" href="#" onclick="return doclink('link-161', '_modify_specific', 'link-137');">_modify_specific</a></tt><tt class="py-op">(</tt><tt class="py-name">wfd</tt><tt class="py-op">,</tt> <tt id="link-162" class="py-name"><a title="ClusterShell.Engine
894 ClusterShell.Engine.Engine
895 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-162', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-163', 'E_WRITE', 'link-28');">E_WRITE</a></tt><tt class="py-op">,</tt> <tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
896 <a name="L656"></a><tt class="py-lineno">656</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">status</tt><tt class="py-op">:</tt> </tt>
897 <a name="L657"></a><tt class="py-lineno">657</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">|=</tt> <tt id="link-164" class="py-name"><a title="ClusterShell.Engine
898 ClusterShell.Engine.Engine
899 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-164', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-165', 'E_WRITE', 'link-28');">E_WRITE</a></tt> </tt>
900 <a name="L658"></a><tt class="py-lineno">658</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
901 <a name="L659"></a><tt class="py-lineno">659</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;=</tt> <tt class="py-op">~</tt><tt id="link-166" class="py-name"><a title="ClusterShell.Engine
902 ClusterShell.Engine.Engine
903 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-166', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-167" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-167', 'E_WRITE', 'link-28');">E_WRITE</a></tt> </tt>
904 <a name="L660"></a><tt class="py-lineno">660</tt> <tt class="py-line"> </tt>
905 <a name="L661"></a><tt class="py-lineno">661</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt> <tt class="py-op">=</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> </tt>
906 </div><a name="L662"></a><tt class="py-lineno">662</tt> <tt class="py-line"> </tt>
907 <a name="Engine.set_reading"></a><div id="Engine.set_reading-def"><a name="L663"></a><tt class="py-lineno">663</tt> <a class="py-toggle" href="#" id="Engine.set_reading-toggle" onclick="return toggle('Engine.set_reading');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#set_reading">set_reading</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
908 </div><div id="Engine.set_reading-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.set_reading-expanded"><a name="L664"></a><tt class="py-lineno">664</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
909 <a name="L665"></a><tt class="py-lineno">665</tt> <tt class="py-line"><tt class="py-docstring"> Set client reading state.</tt> </tt>
910 <a name="L666"></a><tt class="py-lineno">666</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
911 <a name="L667"></a><tt class="py-lineno">667</tt> <tt class="py-line"> <tt class="py-comment"># listen for readable events</tt> </tt>
912 <a name="L668"></a><tt class="py-lineno">668</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.modify()=ClusterShell.Engine.Engine.Engine-class.html#modify"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-168', 'modify', 'link-168');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt id="link-169" class="py-name"><a title="ClusterShell.Engine
913 ClusterShell.Engine.Engine
914 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-169', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-170', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
915 </div><a name="L669"></a><tt class="py-lineno">669</tt> <tt class="py-line"> </tt>
916 <a name="Engine.set_reading_error"></a><div id="Engine.set_reading_error-def"><a name="L670"></a><tt class="py-lineno">670</tt> <a class="py-toggle" href="#" id="Engine.set_reading_error-toggle" onclick="return toggle('Engine.set_reading_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#set_reading_error">set_reading_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
917 </div><div id="Engine.set_reading_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.set_reading_error-expanded"><a name="L671"></a><tt class="py-lineno">671</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
918 <a name="L672"></a><tt class="py-lineno">672</tt> <tt class="py-line"><tt class="py-docstring"> Set client reading error state.</tt> </tt>
919 <a name="L673"></a><tt class="py-lineno">673</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
920 <a name="L674"></a><tt class="py-lineno">674</tt> <tt class="py-line"> <tt class="py-comment"># listen for readable events</tt> </tt>
921 <a name="L675"></a><tt class="py-lineno">675</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-171', 'modify', 'link-168');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt id="link-172" class="py-name"><a title="ClusterShell.Engine
922 ClusterShell.Engine.Engine
923 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-172', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-173" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-173', 'E_ERROR', 'link-27');">E_ERROR</a></tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
924 </div><a name="L676"></a><tt class="py-lineno">676</tt> <tt class="py-line"> </tt>
925 <a name="Engine.set_writing"></a><div id="Engine.set_writing-def"><a name="L677"></a><tt class="py-lineno">677</tt> <a class="py-toggle" href="#" id="Engine.set_writing-toggle" onclick="return toggle('Engine.set_writing');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#set_writing">set_writing</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
926 </div><div id="Engine.set_writing-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.set_writing-expanded"><a name="L678"></a><tt class="py-lineno">678</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
927 <a name="L679"></a><tt class="py-lineno">679</tt> <tt class="py-line"><tt class="py-docstring"> Set client writing state.</tt> </tt>
928 <a name="L680"></a><tt class="py-lineno">680</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
929 <a name="L681"></a><tt class="py-lineno">681</tt> <tt class="py-line"> <tt class="py-comment"># listen for writable events</tt> </tt>
930 <a name="L682"></a><tt class="py-lineno">682</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-174', 'modify', 'link-168');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt id="link-175" class="py-name"><a title="ClusterShell.Engine
931 ClusterShell.Engine.Engine
932 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-175', 'Engine', 'link-44');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-176', 'E_WRITE', 'link-28');">E_WRITE</a></tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
933 </div><a name="L683"></a><tt class="py-lineno">683</tt> <tt class="py-line"> </tt>
934 <a name="Engine.add_timer"></a><div id="Engine.add_timer-def"><a name="L684"></a><tt class="py-lineno">684</tt> <a class="py-toggle" href="#" id="Engine.add_timer-toggle" onclick="return toggle('Engine.add_timer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#add_timer">add_timer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
935 </div><div id="Engine.add_timer-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.add_timer-expanded"><a name="L685"></a><tt class="py-lineno">685</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
936 <a name="L686"></a><tt class="py-lineno">686</tt> <tt class="py-line"><tt class="py-docstring"> Add engine timer.</tt> </tt>
937 <a name="L687"></a><tt class="py-lineno">687</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
938 <a name="L688"></a><tt class="py-lineno">688</tt> <tt class="py-line"> <tt id="link-177" class="py-name"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-177', 'timer', 'link-21');">timer</a></tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="ClusterShell.Engine.Engine.EngineBaseTimer._set_engine" class="py-name" href="#" onclick="return doclink('link-178', '_set_engine', 'link-54');">_set_engine</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
939 <a name="L689"></a><tt class="py-lineno">689</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ.schedule
940 ClusterShell.Task.Task.schedule" class="py-name" href="#" onclick="return doclink('link-179', 'schedule', 'link-12');">schedule</a></tt><tt class="py-op">(</tt><tt id="link-180" class="py-name"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-180', 'timer', 'link-21');">timer</a></tt><tt class="py-op">)</tt> </tt>
941 </div><a name="L690"></a><tt class="py-lineno">690</tt> <tt class="py-line"> </tt>
942 <a name="Engine.remove_timer"></a><div id="Engine.remove_timer-def"><a name="L691"></a><tt class="py-lineno">691</tt> <a class="py-toggle" href="#" id="Engine.remove_timer-toggle" onclick="return toggle('Engine.remove_timer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#remove_timer">remove_timer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
943 </div><div id="Engine.remove_timer-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.remove_timer-expanded"><a name="L692"></a><tt class="py-lineno">692</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
944 <a name="L693"></a><tt class="py-lineno">693</tt> <tt class="py-line"><tt class="py-docstring"> Remove engine timer.</tt> </tt>
945 <a name="L694"></a><tt class="py-lineno">694</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
946 <a name="L695"></a><tt class="py-lineno">695</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-181" class="py-name"><a title="ClusterShell.Engine.Engine.EngineBaseTimer.invalidate
947 ClusterShell.Engine.Engine._EngineTimerQ.invalidate" class="py-name" href="#" onclick="return doclink('link-181', 'invalidate', 'link-1');">invalidate</a></tt><tt class="py-op">(</tt><tt id="link-182" class="py-name"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-182', 'timer', 'link-21');">timer</a></tt><tt class="py-op">)</tt> </tt>
948 </div><a name="L696"></a><tt class="py-lineno">696</tt> <tt class="py-line"> </tt>
949 <a name="Engine.fire_timers"></a><div id="Engine.fire_timers-def"><a name="L697"></a><tt class="py-lineno">697</tt> <a class="py-toggle" href="#" id="Engine.fire_timers-toggle" onclick="return toggle('Engine.fire_timers');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#fire_timers">fire_timers</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
950 </div><div id="Engine.fire_timers-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.fire_timers-expanded"><a name="L698"></a><tt class="py-lineno">698</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
951 <a name="L699"></a><tt class="py-lineno">699</tt> <tt class="py-line"><tt class="py-docstring"> Fire expired timers for processing.</tt> </tt>
952 <a name="L700"></a><tt class="py-lineno">700</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
953 <a name="L701"></a><tt class="py-lineno">701</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">timerq</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.expired()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#expired"><a title="ClusterShell.Engine.Engine._EngineTimerQ.expired" class="py-name" href="#" onclick="return doclink('link-183', 'expired', 'link-183');">expired</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
954 <a name="L702"></a><tt class="py-lineno">702</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-184" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.fire()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#fire"><a title="ClusterShell.Engine.Engine._EngineTimerQ.fire" class="py-name" href="#" onclick="return doclink('link-184', 'fire', 'link-184');">fire</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
955 </div><a name="L703"></a><tt class="py-lineno">703</tt> <tt class="py-line"> </tt>
956 <a name="Engine.start_ports"></a><div id="Engine.start_ports-def"><a name="L704"></a><tt class="py-lineno">704</tt> <a class="py-toggle" href="#" id="Engine.start_ports-toggle" onclick="return toggle('Engine.start_ports');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#start_ports">start_ports</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
957 </div><div id="Engine.start_ports-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.start_ports-expanded"><a name="L705"></a><tt class="py-lineno">705</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
958 <a name="L706"></a><tt class="py-lineno">706</tt> <tt class="py-line"><tt class="py-docstring"> Start and register all port clients.</tt> </tt>
959 <a name="L707"></a><tt class="py-lineno">707</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
960 <a name="L708"></a><tt class="py-lineno">708</tt> <tt class="py-line"> <tt class="py-comment"># Ports are special, non-delayable engine clients</tt> </tt>
961 <a name="L709"></a><tt class="py-lineno">709</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-185" class="py-name" targets="Method ClusterShell.Task.Task.port()=ClusterShell.Task.Task-class.html#port"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-185', 'port', 'link-185');">port</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ports</tt><tt class="py-op">:</tt> </tt>
962 <a name="L710"></a><tt class="py-lineno">710</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-186" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-186', 'port', 'link-185');">port</a></tt><tt class="py-op">.</tt><tt class="py-name">registered</tt><tt class="py-op">:</tt> </tt>
963 <a name="L711"></a><tt class="py-lineno">711</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-187', '_debug', 'link-65');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"START PORT %s"</tt> <tt class="py-op">%</tt> <tt id="link-188" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-188', 'port', 'link-185');">port</a></tt><tt class="py-op">)</tt> </tt>
964 <a name="L712"></a><tt class="py-lineno">712</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.register" class="py-name" href="#" onclick="return doclink('link-189', 'register', 'link-58');">register</a></tt><tt class="py-op">(</tt><tt id="link-190" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-190', 'port', 'link-185');">port</a></tt><tt class="py-op">)</tt> </tt>
965 </div><a name="L713"></a><tt class="py-lineno">713</tt> <tt class="py-line"> </tt>
966 <a name="Engine.start_all"></a><div id="Engine.start_all-def"><a name="L714"></a><tt class="py-lineno">714</tt> <a class="py-toggle" href="#" id="Engine.start_all-toggle" onclick="return toggle('Engine.start_all');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#start_all">start_all</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
967 </div><div id="Engine.start_all-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.start_all-expanded"><a name="L715"></a><tt class="py-lineno">715</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
968 <a name="L716"></a><tt class="py-lineno">716</tt> <tt class="py-line"><tt class="py-docstring"> Start and register all other possible clients, in respect of task fanout.</tt> </tt>
969 <a name="L717"></a><tt class="py-lineno">717</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
970 <a name="L718"></a><tt class="py-lineno">718</tt> <tt class="py-line"> <tt class="py-comment"># Get current fanout value</tt> </tt>
971 <a name="L719"></a><tt class="py-lineno">719</tt> <tt class="py-line"> <tt class="py-name">fanout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-191" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-191', 'info', 'link-34');">info</a></tt><tt class="py-op">[</tt><tt class="py-string">"fanout"</tt><tt class="py-op">]</tt> </tt>
972 <a name="L720"></a><tt class="py-lineno">720</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">fanout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> </tt>
973 <a name="L721"></a><tt class="py-lineno">721</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fanout</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clients</tt><tt class="py-op">:</tt> </tt>
974 <a name="L722"></a><tt class="py-lineno">722</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
975 <a name="L723"></a><tt class="py-lineno">723</tt> <tt class="py-line"> </tt>
976 <a name="L724"></a><tt class="py-lineno">724</tt> <tt class="py-line"> <tt class="py-comment"># Register regular engine clients within the fanout limit</tt> </tt>
977 <a name="L725"></a><tt class="py-lineno">725</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">client</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_clients</tt><tt class="py-op">:</tt> </tt>
978 <a name="L726"></a><tt class="py-lineno">726</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt><tt class="py-op">:</tt> </tt>
979 <a name="L727"></a><tt class="py-lineno">727</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-192" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-192', '_debug', 'link-65');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"START CLIENT %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
980 <a name="L728"></a><tt class="py-lineno">728</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.register" class="py-name" href="#" onclick="return doclink('link-193', 'register', 'link-58');">register</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient._start
981 ClusterShell.Worker.EngineClient.EnginePort._start
982 ClusterShell.Worker.Pdsh.WorkerPdsh._start
983 ClusterShell.Worker.Popen.WorkerPopen._start
984 ClusterShell.Worker.Ssh.Scp._start
985 ClusterShell.Worker.Ssh.Ssh._start
986 ClusterShell.Worker.Worker.WorkerSimple._start" class="py-name" href="#" onclick="return doclink('link-194', '_start', 'link-61');">_start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
987 <a name="L729"></a><tt class="py-lineno">729</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fanout</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clients</tt><tt class="py-op">:</tt> </tt>
988 <a name="L730"></a><tt class="py-lineno">730</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
989 </div><a name="L731"></a><tt class="py-lineno">731</tt> <tt class="py-line"> </tt>
990 <a name="Engine.run"></a><div id="Engine.run-def"><a name="L732"></a><tt class="py-lineno">732</tt> <a class="py-toggle" href="#" id="Engine.run-toggle" onclick="return toggle('Engine.run');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#run">run</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
991 </div><div id="Engine.run-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.run-expanded"><a name="L733"></a><tt class="py-lineno">733</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
992 <a name="L734"></a><tt class="py-lineno">734</tt> <tt class="py-line"><tt class="py-docstring"> Run engine in calling thread.</tt> </tt>
993 <a name="L735"></a><tt class="py-lineno">735</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
994 <a name="L736"></a><tt class="py-lineno">736</tt> <tt class="py-line"> <tt class="py-comment"># change to running state</tt> </tt>
995 <a name="L737"></a><tt class="py-lineno">737</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-195" class="py-name"><a title="ClusterShell.Task.Task.running" class="py-name" href="#" onclick="return doclink('link-195', 'running', 'link-39');">running</a></tt><tt class="py-op">:</tt> </tt>
996 <a name="L738"></a><tt class="py-lineno">738</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-196" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineAlreadyRunningError=ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html"><a title="ClusterShell.Engine.Engine.EngineAlreadyRunningError" class="py-name" href="#" onclick="return doclink('link-196', 'EngineAlreadyRunningError', 'link-196');">EngineAlreadyRunningError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
997 <a name="L739"></a><tt class="py-lineno">739</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name"><a title="ClusterShell.Task.Task.running" class="py-name" href="#" onclick="return doclink('link-197', 'running', 'link-39');">running</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
998 <a name="L740"></a><tt class="py-lineno">740</tt> <tt class="py-line"> </tt>
999 <a name="L741"></a><tt class="py-lineno">741</tt> <tt class="py-line"> <tt class="py-comment"># start port clients</tt> </tt>
1000 <a name="L742"></a><tt class="py-lineno">742</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.start_ports()=ClusterShell.Engine.Engine.Engine-class.html#start_ports"><a title="ClusterShell.Engine.Engine.Engine.start_ports" class="py-name" href="#" onclick="return doclink('link-198', 'start_ports', 'link-198');">start_ports</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1001 <a name="L743"></a><tt class="py-lineno">743</tt> <tt class="py-line"> </tt>
1002 <a name="L744"></a><tt class="py-lineno">744</tt> <tt class="py-line"> <tt class="py-comment"># peek in ports for early pending messages</tt> </tt>
1003 <a name="L745"></a><tt class="py-lineno">745</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.snoop_ports()=ClusterShell.Engine.Engine.Engine-class.html#snoop_ports"><a title="ClusterShell.Engine.Engine.Engine.snoop_ports" class="py-name" href="#" onclick="return doclink('link-199', 'snoop_ports', 'link-199');">snoop_ports</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1004 <a name="L746"></a><tt class="py-lineno">746</tt> <tt class="py-line"> </tt>
1005 <a name="L747"></a><tt class="py-lineno">747</tt> <tt class="py-line"> <tt class="py-comment"># start all other clients</tt> </tt>
1006 <a name="L748"></a><tt class="py-lineno">748</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.start_all" class="py-name" href="#" onclick="return doclink('link-200', 'start_all', 'link-70');">start_all</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1007 <a name="L749"></a><tt class="py-lineno">749</tt> <tt class="py-line"> </tt>
1008 <a name="L750"></a><tt class="py-lineno">750</tt> <tt class="py-line"> <tt class="py-comment"># note: try-except-finally not supported before python 2.5</tt> </tt>
1009 <a name="L751"></a><tt class="py-lineno">751</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1010 <a name="L752"></a><tt class="py-lineno">752</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1011 <a name="L753"></a><tt class="py-lineno">753</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-201" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.runloop()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#runloop,Method ClusterShell.Engine.Engine.Engine.runloop()=ClusterShell.Engine.Engine.Engine-class.html#runloop,Method ClusterShell.Engine.Poll.EnginePoll.runloop()=ClusterShell.Engine.Poll.EnginePoll-class.html#runloop"><a title="ClusterShell.Engine.EPoll.EngineEPoll.runloop
1012 ClusterShell.Engine.Engine.Engine.runloop
1013 ClusterShell.Engine.Poll.EnginePoll.runloop" class="py-name" href="#" onclick="return doclink('link-201', 'runloop', 'link-201');">runloop</a></tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
1014 <a name="L754"></a><tt class="py-lineno">754</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
1015 <a name="L755"></a><tt class="py-lineno">755</tt> <tt class="py-line"> <tt class="py-comment"># any exceptions invalidate clients</tt> </tt>
1016 <a name="L756"></a><tt class="py-lineno">756</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-202" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clear()=ClusterShell.Engine.Engine.Engine-class.html#clear,Method ClusterShell.Engine.Engine._EngineTimerQ.clear()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear,Method ClusterShell.MsgTree.MsgTree.clear()=ClusterShell.MsgTree.MsgTree-class.html#clear,Method ClusterShell.NodeSet.NodeSetBase.clear()=ClusterShell.NodeSet.NodeSetBase-class.html#clear,Method ClusterShell.NodeSet.RangeSet.clear()=ClusterShell.NodeSet.RangeSet-class.html#clear"><a title="ClusterShell.Engine.Engine.Engine.clear
1017 ClusterShell.Engine.Engine._EngineTimerQ.clear
1018 ClusterShell.MsgTree.MsgTree.clear
1019 ClusterShell.NodeSet.NodeSetBase.clear
1020 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-202', 'clear', 'link-202');">clear</a></tt><tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt id="link-203" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineTimeoutException=ClusterShell.Engine.Engine.EngineTimeoutException-class.html"><a title="ClusterShell.Engine.Engine.EngineTimeoutException" class="py-name" href="#" onclick="return doclink('link-203', 'EngineTimeoutException', 'link-203');">EngineTimeoutException</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1021 <a name="L757"></a><tt class="py-lineno">757</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
1022 <a name="L758"></a><tt class="py-lineno">758</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
1023 <a name="L759"></a><tt class="py-lineno">759</tt> <tt class="py-line"> <tt class="py-comment"># cleanup</tt> </tt>
1024 <a name="L760"></a><tt class="py-lineno">760</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-204" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clear
1025 ClusterShell.Engine.Engine._EngineTimerQ.clear
1026 ClusterShell.MsgTree.MsgTree.clear
1027 ClusterShell.NodeSet.NodeSetBase.clear
1028 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-204', 'clear', 'link-202');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1029 <a name="L761"></a><tt class="py-lineno">761</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-205" class="py-name"><a title="ClusterShell.Task.Task.running" class="py-name" href="#" onclick="return doclink('link-205', 'running', 'link-39');">running</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
1030 </div><a name="L762"></a><tt class="py-lineno">762</tt> <tt class="py-line"> </tt>
1031 <a name="Engine.snoop_ports"></a><div id="Engine.snoop_ports-def"><a name="L763"></a><tt class="py-lineno">763</tt> <a class="py-toggle" href="#" id="Engine.snoop_ports-toggle" onclick="return toggle('Engine.snoop_ports');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#snoop_ports">snoop_ports</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1032 </div><div id="Engine.snoop_ports-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.snoop_ports-expanded"><a name="L764"></a><tt class="py-lineno">764</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1033 <a name="L765"></a><tt class="py-lineno">765</tt> <tt class="py-line"><tt class="py-docstring"> Peek in ports for possible early pending messages.</tt> </tt>
1034 <a name="L766"></a><tt class="py-lineno">766</tt> <tt class="py-line"><tt class="py-docstring"> This method simply tries to read port pipes in non-</tt> </tt>
1035 <a name="L767"></a><tt class="py-lineno">767</tt> <tt class="py-line"><tt class="py-docstring"> blocking mode.</tt> </tt>
1036 <a name="L768"></a><tt class="py-lineno">768</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1037 <a name="L769"></a><tt class="py-lineno">769</tt> <tt class="py-line"> <tt class="py-comment"># make a copy so that early messages on installed ports may</tt> </tt>
1038 <a name="L770"></a><tt class="py-lineno">770</tt> <tt class="py-line"> <tt class="py-comment"># lead to new ports</tt> </tt>
1039 <a name="L771"></a><tt class="py-lineno">771</tt> <tt class="py-line"> <tt id="link-206" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.ports()=ClusterShell.Engine.Engine.Engine-class.html#ports"><a title="ClusterShell.Engine.Engine.Engine.ports" class="py-name" href="#" onclick="return doclink('link-206', 'ports', 'link-206');">ports</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ports</tt><tt class="py-op">.</tt><tt id="link-207" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-207', 'copy', 'link-40');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1040 <a name="L772"></a><tt class="py-lineno">772</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-208" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-208', 'port', 'link-185');">port</a></tt> <tt class="py-keyword">in</tt> <tt id="link-209" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.ports" class="py-name" href="#" onclick="return doclink('link-209', 'ports', 'link-206');">ports</a></tt><tt class="py-op">:</tt> </tt>
1041 <a name="L773"></a><tt class="py-lineno">773</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1042 <a name="L774"></a><tt class="py-lineno">774</tt> <tt class="py-line"> <tt id="link-210" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-210', 'port', 'link-185');">port</a></tt><tt class="py-op">.</tt><tt id="link-211" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._handle_read()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read,Method ClusterShell.Worker.EngineClient.EnginePort._handle_read()=ClusterShell.Worker.EngineClient.EnginePort-class.html#_handle_read,Method ClusterShell.Worker.Pdsh.WorkerPdsh._handle_read()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_read,Method ClusterShell.Worker.Ssh.Ssh._handle_read()=ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read,Method ClusterShell.Worker.Worker.WorkerSimple._handle_read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read"><a title="ClusterShell.Worker.EngineClient.EngineClient._handle_read
1043 ClusterShell.Worker.EngineClient.EnginePort._handle_read
1044 ClusterShell.Worker.Pdsh.WorkerPdsh._handle_read
1045 ClusterShell.Worker.Ssh.Ssh._handle_read
1046 ClusterShell.Worker.Worker.WorkerSimple._handle_read" class="py-name" href="#" onclick="return doclink('link-211', '_handle_read', 'link-211');">_handle_read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1047 <a name="L775"></a><tt class="py-lineno">775</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">IOError</tt><tt class="py-op">,</tt> <tt class="py-name">OSError</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">err</tt><tt class="py-op">,</tt> <tt class="py-name">strerr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1048 <a name="L776"></a><tt class="py-lineno">776</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">err</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-keyword">or</tt> <tt class="py-name">err</tt> <tt class="py-op">==</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EWOULDBLOCK</tt><tt class="py-op">:</tt> </tt>
1049 <a name="L777"></a><tt class="py-lineno">777</tt> <tt class="py-line"> <tt class="py-comment"># no pending message</tt> </tt>
1050 <a name="L778"></a><tt class="py-lineno">778</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
1051 <a name="L779"></a><tt class="py-lineno">779</tt> <tt class="py-line"> <tt class="py-comment"># raise any other error</tt> </tt>
1052 <a name="L780"></a><tt class="py-lineno">780</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
1053 </div><a name="L781"></a><tt class="py-lineno">781</tt> <tt class="py-line"> </tt>
1054 <a name="Engine.runloop"></a><div id="Engine.runloop-def"><a name="L782"></a><tt class="py-lineno">782</tt> <a class="py-toggle" href="#" id="Engine.runloop-toggle" onclick="return toggle('Engine.runloop');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#runloop">runloop</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1055 </div><div id="Engine.runloop-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.runloop-expanded"><a name="L783"></a><tt class="py-lineno">783</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1056 <a name="L784"></a><tt class="py-lineno">784</tt> <tt class="py-line"><tt class="py-docstring"> Engine specific run loop. Derived classes must implement.</tt> </tt>
1057 <a name="L785"></a><tt class="py-lineno">785</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1058 <a name="L786"></a><tt class="py-lineno">786</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
1059 </div><a name="L787"></a><tt class="py-lineno">787</tt> <tt class="py-line"> </tt>
1060 <a name="Engine.abort"></a><div id="Engine.abort-def"><a name="L788"></a><tt class="py-lineno">788</tt> <a class="py-toggle" href="#" id="Engine.abort-toggle" onclick="return toggle('Engine.abort');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#abort">abort</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">kill</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1061 </div><div id="Engine.abort-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.abort-expanded"><a name="L789"></a><tt class="py-lineno">789</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1062 <a name="L790"></a><tt class="py-lineno">790</tt> <tt class="py-line"><tt class="py-docstring"> Abort runloop.</tt> </tt>
1063 <a name="L791"></a><tt class="py-lineno">791</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1064 <a name="L792"></a><tt class="py-lineno">792</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name"><a title="ClusterShell.Task.Task.running" class="py-name" href="#" onclick="return doclink('link-212', 'running', 'link-39');">running</a></tt><tt class="py-op">:</tt> </tt>
1065 <a name="L793"></a><tt class="py-lineno">793</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-213" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineAbortException=ClusterShell.Engine.Engine.EngineAbortException-class.html"><a title="ClusterShell.Engine.Engine.EngineAbortException" class="py-name" href="#" onclick="return doclink('link-213', 'EngineAbortException', 'link-213');">EngineAbortException</a></tt><tt class="py-op">(</tt><tt class="py-name">kill</tt><tt class="py-op">)</tt> </tt>
1066 <a name="L794"></a><tt class="py-lineno">794</tt> <tt class="py-line"> </tt>
1067 <a name="L795"></a><tt class="py-lineno">795</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-214" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clear
1068 ClusterShell.Engine.Engine._EngineTimerQ.clear
1069 ClusterShell.MsgTree.MsgTree.clear
1070 ClusterShell.NodeSet.NodeSetBase.clear
1071 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-214', 'clear', 'link-202');">clear</a></tt><tt class="py-op">(</tt><tt class="py-name">clear_ports</tt><tt class="py-op">=</tt><tt class="py-name">kill</tt><tt class="py-op">)</tt> </tt>
1072 </div><a name="L796"></a><tt class="py-lineno">796</tt> <tt class="py-line"> </tt>
1073 <a name="Engine.exited"></a><div id="Engine.exited-def"><a name="L797"></a><tt class="py-lineno">797</tt> <a class="py-toggle" href="#" id="Engine.exited-toggle" onclick="return toggle('Engine.exited');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#exited">exited</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1074 </div><div id="Engine.exited-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine.exited-expanded"><a name="L798"></a><tt class="py-lineno">798</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1075 <a name="L799"></a><tt class="py-lineno">799</tt> <tt class="py-line"><tt class="py-docstring"> Returns True if the engine has exited the runloop once.</tt> </tt>
1076 <a name="L800"></a><tt class="py-lineno">800</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1077 <a name="L801"></a><tt class="py-lineno">801</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name"><a title="ClusterShell.Task.Task.running" class="py-name" href="#" onclick="return doclink('link-215', 'running', 'link-39');">running</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_exited</tt> </tt>
1078 </div><a name="L802"></a><tt class="py-lineno">802</tt> <tt class="py-line"> </tt>
1079 <a name="Engine._debug"></a><div id="Engine._debug-def"><a name="L803"></a><tt class="py-lineno">803</tt> <a class="py-toggle" href="#" id="Engine._debug-toggle" onclick="return toggle('Engine._debug');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Engine.Engine-class.html#_debug">_debug</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1080 </div><div id="Engine._debug-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Engine._debug-expanded"><a name="L804"></a><tt class="py-lineno">804</tt> <tt class="py-line"> <tt class="py-comment"># library engine debugging hook</tt> </tt>
1081 <a name="L805"></a><tt class="py-lineno">805</tt> <tt class="py-line"> <tt class="py-comment">#print s</tt> </tt>
1082 <a name="L806"></a><tt class="py-lineno">806</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
1083 </div></div><a name="L807"></a><tt class="py-lineno">807</tt> <tt class="py-line"> </tt><script type="text/javascript">
1084 <!--
1085 expandto(location.href);
1086 // -->
1087 </script>
1088 </pre>
1089 <br />
1090 <!-- ==================== NAVIGATION BAR ==================== -->
1091 <table class="navbar" border="0" width="100%" cellpadding="0"
1092 bgcolor="#a0c0ff" cellspacing="0">
1093 <tr valign="middle">
1094
1095 <!-- Tree link -->
1096 <th>&nbsp;&nbsp;&nbsp;<a
1097 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
1098
1099 <!-- Index link -->
1100 <th>&nbsp;&nbsp;&nbsp;<a
1101 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
1102
1103 <!-- Help link -->
1104 <th>&nbsp;&nbsp;&nbsp;<a
1105 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
1106
1107 <!-- Project homepage -->
1108 <th class="navbar" align="right" width="100%">
1109 <table border="0" cellpadding="0" cellspacing="0">
1110 <tr><th class="navbar" align="center"
1111 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
1112 </tr></table></th>
1113 </tr>
1114 </table>
1115 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
1116 <tr>
1117 <td align="left" class="footer">
1118 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
1119 </td>
1120 <td align="right" class="footer">
1121 <a target="mainFrame" href="http://epydoc.sourceforge.net"
1122 >http://epydoc.sourceforge.net</a>
1123 </td>
1124 </tr>
1125 </table>
1126
1127 <script type="text/javascript">
1128 <!--
1129 // Private objects are initially displayed (because if
1130 // javascript is turned off then we want them to be
1131 // visible); but by default, we want to hide them. So hide
1132 // them unless we have a cookie that says to show them.
1133 checkCookie();
1134 // -->
1135 </script>
1136 </body>
1137 </html>
+0
-921
doc/epydoc/html/ClusterShell.Engine.Engine.Engine-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.Engine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;Engine
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class Engine</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_2" name="uml_class_diagram_for_clusters_2">
64 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#E_READ" title="ClusterShell.Engine.Engine.Engine.E_READ" alt="" coords="17,31,309,49"/>
65 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#E_ERROR" title="ClusterShell.Engine.Engine.Engine.E_ERROR" alt="" coords="17,49,309,68"/>
66 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#E_WRITE" title="ClusterShell.Engine.Engine.Engine.E_WRITE" alt="" coords="17,68,309,87"/>
67 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#E_ANY" title="ClusterShell.Engine.Engine.Engine.E_ANY" alt="" coords="17,87,309,105"/>
68 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#identifier" title="ClusterShell.Engine.Engine.Engine.identifier" alt="" coords="17,105,309,124"/>
69 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#__init__" title="Initialize base class." alt="" coords="17,127,309,145"/>
70 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#clients" title="Get a copy of clients set." alt="" coords="17,145,309,164"/>
71 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#ports" title="Get a copy of ports set." alt="" coords="17,164,309,183"/>
72 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#add" title="Add a client to engine." alt="" coords="17,183,309,201"/>
73 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#remove" title="Remove a client from engine." alt="" coords="17,201,309,220"/>
74 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#clear" title="Remove all clients." alt="" coords="17,220,309,239"/>
75 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#register" title="Register an engine client." alt="" coords="17,239,309,257"/>
76 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#unregister_writer" title="ClusterShell.Engine.Engine.Engine.unregister_writer" alt="" coords="17,257,309,276"/>
77 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#unregister" title="Unregister a client." alt="" coords="17,276,309,295"/>
78 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#modify" title="Modify the next loop interest events bitset for a client." alt="" coords="17,295,309,313"/>
79 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#set_events" title="Set the active interest events bitset for a client." alt="" coords="17,313,309,332"/>
80 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#set_reading" title="Set client reading state." alt="" coords="17,332,309,351"/>
81 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#set_reading_error" title="Set client reading error state." alt="" coords="17,351,309,369"/>
82 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html#exited" title="Returns True if the engine has exited the runloop once." alt="" coords="17,388,309,407"/>
83 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.Engine-class.html" title="Interface for ClusterShell engine." alt="" coords="5,6,320,413"/>
84 <area shape="rect" id="node2" href="ClusterShell.Engine.Poll.EnginePoll-class.html" title="Poll Engine" alt="" coords="20,433,145,471"/>
85 <area shape="rect" id="node3" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html" title="EPoll Engine" alt="" coords="175,433,316,471"/>
86 </map>
87 <img src="uml_class_diagram_for_clusters_2.png" alt='' usemap="#uml_class_diagram_for_clusters_2" ismap="ismap" class="graph-without-title" />
88 </center>
89 </center>
90 <hr />
91 <p>Interface for ClusterShell engine. Subclasses have to implement a
92 runloop listening for client events.</p>
93
94 <!-- ==================== INSTANCE METHODS ==================== -->
95 <a name="section-InstanceMethods"></a>
96 <table class="summary" border="1" cellpadding="3"
97 cellspacing="0" width="100%" bgcolor="white">
98 <tr bgcolor="#70b0f0" class="table-header">
99 <td colspan="2" class="table-header">
100 <table border="0" cellpadding="0" cellspacing="0" width="100%">
101 <tr valign="top">
102 <td align="left"><span class="table-header">Instance Methods</span></td>
103 <td align="right" valign="top"
104 ><span class="options">[<a href="#section-InstanceMethods"
105 class="privatelink" onclick="toggle_private();"
106 >hide private</a>]</span></td>
107 </tr>
108 </table>
109 </td>
110 </tr>
111 <tr>
112 <td width="15%" align="right" valign="top" class="summary">
113 <span class="summary-type">&nbsp;</span>
114 </td><td class="summary">
115 <table width="100%" cellpadding="0" cellspacing="0" border="0">
116 <tr>
117 <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
118 <span class="summary-sig-arg">info</span>)</span><br />
119 Initialize base class.</td>
120 <td align="right" valign="top">
121 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.__init__">source&nbsp;code</a></span>
122
123 </td>
124 </tr>
125 </table>
126
127 </td>
128 </tr>
129 <tr>
130 <td width="15%" align="right" valign="top" class="summary">
131 <span class="summary-type">&nbsp;</span>
132 </td><td class="summary">
133 <table width="100%" cellpadding="0" cellspacing="0" border="0">
134 <tr>
135 <td><span class="summary-sig"><a name="clients"></a><span class="summary-sig-name">clients</span>(<span class="summary-sig-arg">self</span>)</span><br />
136 Get a copy of clients set.</td>
137 <td align="right" valign="top">
138 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.clients">source&nbsp;code</a></span>
139
140 </td>
141 </tr>
142 </table>
143
144 </td>
145 </tr>
146 <tr>
147 <td width="15%" align="right" valign="top" class="summary">
148 <span class="summary-type">&nbsp;</span>
149 </td><td class="summary">
150 <table width="100%" cellpadding="0" cellspacing="0" border="0">
151 <tr>
152 <td><span class="summary-sig"><a name="ports"></a><span class="summary-sig-name">ports</span>(<span class="summary-sig-arg">self</span>)</span><br />
153 Get a copy of ports set.</td>
154 <td align="right" valign="top">
155 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.ports">source&nbsp;code</a></span>
156
157 </td>
158 </tr>
159 </table>
160
161 </td>
162 </tr>
163 <tr class="private">
164 <td width="15%" align="right" valign="top" class="summary">
165 <span class="summary-type">&nbsp;</span>
166 </td><td class="summary">
167 <table width="100%" cellpadding="0" cellspacing="0" border="0">
168 <tr>
169 <td><span class="summary-sig"><a name="_fd2client"></a><span class="summary-sig-name">_fd2client</span>(<span class="summary-sig-arg">self</span>,
170 <span class="summary-sig-arg">fd</span>)</span></td>
171 <td align="right" valign="top">
172 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine._fd2client">source&nbsp;code</a></span>
173
174 </td>
175 </tr>
176 </table>
177
178 </td>
179 </tr>
180 <tr>
181 <td width="15%" align="right" valign="top" class="summary">
182 <span class="summary-type">&nbsp;</span>
183 </td><td class="summary">
184 <table width="100%" cellpadding="0" cellspacing="0" border="0">
185 <tr>
186 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.Engine-class.html#add" class="summary-sig-name">add</a>(<span class="summary-sig-arg">self</span>,
187 <span class="summary-sig-arg">client</span>)</span><br />
188 Add a client to engine.</td>
189 <td align="right" valign="top">
190 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.add">source&nbsp;code</a></span>
191
192 </td>
193 </tr>
194 </table>
195
196 </td>
197 </tr>
198 <tr class="private">
199 <td width="15%" align="right" valign="top" class="summary">
200 <span class="summary-type">&nbsp;</span>
201 </td><td class="summary">
202 <table width="100%" cellpadding="0" cellspacing="0" border="0">
203 <tr>
204 <td><span class="summary-sig"><a name="_remove"></a><span class="summary-sig-name">_remove</span>(<span class="summary-sig-arg">self</span>,
205 <span class="summary-sig-arg">client</span>,
206 <span class="summary-sig-arg">did_timeout</span>=<span class="summary-sig-default">False</span>,
207 <span class="summary-sig-arg">force</span>=<span class="summary-sig-default">False</span>)</span><br />
208 Remove a client from engine (subroutine).</td>
209 <td align="right" valign="top">
210 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine._remove">source&nbsp;code</a></span>
211
212 </td>
213 </tr>
214 </table>
215
216 </td>
217 </tr>
218 <tr>
219 <td width="15%" align="right" valign="top" class="summary">
220 <span class="summary-type">&nbsp;</span>
221 </td><td class="summary">
222 <table width="100%" cellpadding="0" cellspacing="0" border="0">
223 <tr>
224 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.Engine-class.html#remove" class="summary-sig-name">remove</a>(<span class="summary-sig-arg">self</span>,
225 <span class="summary-sig-arg">client</span>,
226 <span class="summary-sig-arg">did_timeout</span>=<span class="summary-sig-default">False</span>)</span><br />
227 Remove a client from engine.</td>
228 <td align="right" valign="top">
229 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.remove">source&nbsp;code</a></span>
230
231 </td>
232 </tr>
233 </table>
234
235 </td>
236 </tr>
237 <tr>
238 <td width="15%" align="right" valign="top" class="summary">
239 <span class="summary-type">&nbsp;</span>
240 </td><td class="summary">
241 <table width="100%" cellpadding="0" cellspacing="0" border="0">
242 <tr>
243 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.Engine-class.html#clear" class="summary-sig-name">clear</a>(<span class="summary-sig-arg">self</span>,
244 <span class="summary-sig-arg">did_timeout</span>=<span class="summary-sig-default">False</span>,
245 <span class="summary-sig-arg">clear_ports</span>=<span class="summary-sig-default">False</span>)</span><br />
246 Remove all clients.</td>
247 <td align="right" valign="top">
248 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.clear">source&nbsp;code</a></span>
249
250 </td>
251 </tr>
252 </table>
253
254 </td>
255 </tr>
256 <tr>
257 <td width="15%" align="right" valign="top" class="summary">
258 <span class="summary-type">&nbsp;</span>
259 </td><td class="summary">
260 <table width="100%" cellpadding="0" cellspacing="0" border="0">
261 <tr>
262 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.Engine-class.html#register" class="summary-sig-name">register</a>(<span class="summary-sig-arg">self</span>,
263 <span class="summary-sig-arg">client</span>)</span><br />
264 Register an engine client.</td>
265 <td align="right" valign="top">
266 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.register">source&nbsp;code</a></span>
267
268 </td>
269 </tr>
270 </table>
271
272 </td>
273 </tr>
274 <tr>
275 <td width="15%" align="right" valign="top" class="summary">
276 <span class="summary-type">&nbsp;</span>
277 </td><td class="summary">
278 <table width="100%" cellpadding="0" cellspacing="0" border="0">
279 <tr>
280 <td><span class="summary-sig"><a name="unregister_writer"></a><span class="summary-sig-name">unregister_writer</span>(<span class="summary-sig-arg">self</span>,
281 <span class="summary-sig-arg">client</span>)</span></td>
282 <td align="right" valign="top">
283 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.unregister_writer">source&nbsp;code</a></span>
284
285 </td>
286 </tr>
287 </table>
288
289 </td>
290 </tr>
291 <tr>
292 <td width="15%" align="right" valign="top" class="summary">
293 <span class="summary-type">&nbsp;</span>
294 </td><td class="summary">
295 <table width="100%" cellpadding="0" cellspacing="0" border="0">
296 <tr>
297 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.Engine-class.html#unregister" class="summary-sig-name">unregister</a>(<span class="summary-sig-arg">self</span>,
298 <span class="summary-sig-arg">client</span>)</span><br />
299 Unregister a client.</td>
300 <td align="right" valign="top">
301 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.unregister">source&nbsp;code</a></span>
302
303 </td>
304 </tr>
305 </table>
306
307 </td>
308 </tr>
309 <tr>
310 <td width="15%" align="right" valign="top" class="summary">
311 <span class="summary-type">&nbsp;</span>
312 </td><td class="summary">
313 <table width="100%" cellpadding="0" cellspacing="0" border="0">
314 <tr>
315 <td><span class="summary-sig"><a name="modify"></a><span class="summary-sig-name">modify</span>(<span class="summary-sig-arg">self</span>,
316 <span class="summary-sig-arg">client</span>,
317 <span class="summary-sig-arg">setmask</span>,
318 <span class="summary-sig-arg">clearmask</span>)</span><br />
319 Modify the next loop interest events bitset for a client.</td>
320 <td align="right" valign="top">
321 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.modify">source&nbsp;code</a></span>
322
323 </td>
324 </tr>
325 </table>
326
327 </td>
328 </tr>
329 <tr class="private">
330 <td width="15%" align="right" valign="top" class="summary">
331 <span class="summary-type">&nbsp;</span>
332 </td><td class="summary">
333 <table width="100%" cellpadding="0" cellspacing="0" border="0">
334 <tr>
335 <td><span class="summary-sig"><a name="_register_specific"></a><span class="summary-sig-name">_register_specific</span>(<span class="summary-sig-arg">self</span>,
336 <span class="summary-sig-arg">fd</span>,
337 <span class="summary-sig-arg">event</span>)</span><br />
338 Engine-specific register fd for event method.</td>
339 <td align="right" valign="top">
340 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine._register_specific">source&nbsp;code</a></span>
341
342 </td>
343 </tr>
344 </table>
345
346 </td>
347 </tr>
348 <tr class="private">
349 <td width="15%" align="right" valign="top" class="summary">
350 <span class="summary-type">&nbsp;</span>
351 </td><td class="summary">
352 <table width="100%" cellpadding="0" cellspacing="0" border="0">
353 <tr>
354 <td><span class="summary-sig"><a name="_unregister_specific"></a><span class="summary-sig-name">_unregister_specific</span>(<span class="summary-sig-arg">self</span>,
355 <span class="summary-sig-arg">fd</span>,
356 <span class="summary-sig-arg">ev_is_set</span>)</span><br />
357 Engine-specific unregister fd method.</td>
358 <td align="right" valign="top">
359 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine._unregister_specific">source&nbsp;code</a></span>
360
361 </td>
362 </tr>
363 </table>
364
365 </td>
366 </tr>
367 <tr class="private">
368 <td width="15%" align="right" valign="top" class="summary">
369 <span class="summary-type">&nbsp;</span>
370 </td><td class="summary">
371 <table width="100%" cellpadding="0" cellspacing="0" border="0">
372 <tr>
373 <td><span class="summary-sig"><a name="_modify_specific"></a><span class="summary-sig-name">_modify_specific</span>(<span class="summary-sig-arg">self</span>,
374 <span class="summary-sig-arg">fd</span>,
375 <span class="summary-sig-arg">event</span>,
376 <span class="summary-sig-arg">setvalue</span>)</span><br />
377 Engine-specific modify fd for event method.</td>
378 <td align="right" valign="top">
379 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine._modify_specific">source&nbsp;code</a></span>
380
381 </td>
382 </tr>
383 </table>
384
385 </td>
386 </tr>
387 <tr>
388 <td width="15%" align="right" valign="top" class="summary">
389 <span class="summary-type">&nbsp;</span>
390 </td><td class="summary">
391 <table width="100%" cellpadding="0" cellspacing="0" border="0">
392 <tr>
393 <td><span class="summary-sig"><a name="set_events"></a><span class="summary-sig-name">set_events</span>(<span class="summary-sig-arg">self</span>,
394 <span class="summary-sig-arg">client</span>,
395 <span class="summary-sig-arg">new_events</span>)</span><br />
396 Set the active interest events bitset for a client.</td>
397 <td align="right" valign="top">
398 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.set_events">source&nbsp;code</a></span>
399
400 </td>
401 </tr>
402 </table>
403
404 </td>
405 </tr>
406 <tr>
407 <td width="15%" align="right" valign="top" class="summary">
408 <span class="summary-type">&nbsp;</span>
409 </td><td class="summary">
410 <table width="100%" cellpadding="0" cellspacing="0" border="0">
411 <tr>
412 <td><span class="summary-sig"><a name="set_reading"></a><span class="summary-sig-name">set_reading</span>(<span class="summary-sig-arg">self</span>,
413 <span class="summary-sig-arg">client</span>)</span><br />
414 Set client reading state.</td>
415 <td align="right" valign="top">
416 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.set_reading">source&nbsp;code</a></span>
417
418 </td>
419 </tr>
420 </table>
421
422 </td>
423 </tr>
424 <tr>
425 <td width="15%" align="right" valign="top" class="summary">
426 <span class="summary-type">&nbsp;</span>
427 </td><td class="summary">
428 <table width="100%" cellpadding="0" cellspacing="0" border="0">
429 <tr>
430 <td><span class="summary-sig"><a name="set_reading_error"></a><span class="summary-sig-name">set_reading_error</span>(<span class="summary-sig-arg">self</span>,
431 <span class="summary-sig-arg">client</span>)</span><br />
432 Set client reading error state.</td>
433 <td align="right" valign="top">
434 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.set_reading_error">source&nbsp;code</a></span>
435
436 </td>
437 </tr>
438 </table>
439
440 </td>
441 </tr>
442 <tr>
443 <td width="15%" align="right" valign="top" class="summary">
444 <span class="summary-type">&nbsp;</span>
445 </td><td class="summary">
446 <table width="100%" cellpadding="0" cellspacing="0" border="0">
447 <tr>
448 <td><span class="summary-sig"><a name="set_writing"></a><span class="summary-sig-name">set_writing</span>(<span class="summary-sig-arg">self</span>,
449 <span class="summary-sig-arg">client</span>)</span><br />
450 Set client writing state.</td>
451 <td align="right" valign="top">
452 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.set_writing">source&nbsp;code</a></span>
453
454 </td>
455 </tr>
456 </table>
457
458 </td>
459 </tr>
460 <tr>
461 <td width="15%" align="right" valign="top" class="summary">
462 <span class="summary-type">&nbsp;</span>
463 </td><td class="summary">
464 <table width="100%" cellpadding="0" cellspacing="0" border="0">
465 <tr>
466 <td><span class="summary-sig"><a name="add_timer"></a><span class="summary-sig-name">add_timer</span>(<span class="summary-sig-arg">self</span>,
467 <span class="summary-sig-arg">timer</span>)</span><br />
468 Add engine timer.</td>
469 <td align="right" valign="top">
470 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.add_timer">source&nbsp;code</a></span>
471
472 </td>
473 </tr>
474 </table>
475
476 </td>
477 </tr>
478 <tr>
479 <td width="15%" align="right" valign="top" class="summary">
480 <span class="summary-type">&nbsp;</span>
481 </td><td class="summary">
482 <table width="100%" cellpadding="0" cellspacing="0" border="0">
483 <tr>
484 <td><span class="summary-sig"><a name="remove_timer"></a><span class="summary-sig-name">remove_timer</span>(<span class="summary-sig-arg">self</span>,
485 <span class="summary-sig-arg">timer</span>)</span><br />
486 Remove engine timer.</td>
487 <td align="right" valign="top">
488 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.remove_timer">source&nbsp;code</a></span>
489
490 </td>
491 </tr>
492 </table>
493
494 </td>
495 </tr>
496 <tr>
497 <td width="15%" align="right" valign="top" class="summary">
498 <span class="summary-type">&nbsp;</span>
499 </td><td class="summary">
500 <table width="100%" cellpadding="0" cellspacing="0" border="0">
501 <tr>
502 <td><span class="summary-sig"><a name="fire_timers"></a><span class="summary-sig-name">fire_timers</span>(<span class="summary-sig-arg">self</span>)</span><br />
503 Fire expired timers for processing.</td>
504 <td align="right" valign="top">
505 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.fire_timers">source&nbsp;code</a></span>
506
507 </td>
508 </tr>
509 </table>
510
511 </td>
512 </tr>
513 <tr>
514 <td width="15%" align="right" valign="top" class="summary">
515 <span class="summary-type">&nbsp;</span>
516 </td><td class="summary">
517 <table width="100%" cellpadding="0" cellspacing="0" border="0">
518 <tr>
519 <td><span class="summary-sig"><a name="start_ports"></a><span class="summary-sig-name">start_ports</span>(<span class="summary-sig-arg">self</span>)</span><br />
520 Start and register all port clients.</td>
521 <td align="right" valign="top">
522 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.start_ports">source&nbsp;code</a></span>
523
524 </td>
525 </tr>
526 </table>
527
528 </td>
529 </tr>
530 <tr>
531 <td width="15%" align="right" valign="top" class="summary">
532 <span class="summary-type">&nbsp;</span>
533 </td><td class="summary">
534 <table width="100%" cellpadding="0" cellspacing="0" border="0">
535 <tr>
536 <td><span class="summary-sig"><a name="start_all"></a><span class="summary-sig-name">start_all</span>(<span class="summary-sig-arg">self</span>)</span><br />
537 Start and register all other possible clients, in respect of task
538 fanout.</td>
539 <td align="right" valign="top">
540 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.start_all">source&nbsp;code</a></span>
541
542 </td>
543 </tr>
544 </table>
545
546 </td>
547 </tr>
548 <tr>
549 <td width="15%" align="right" valign="top" class="summary">
550 <span class="summary-type">&nbsp;</span>
551 </td><td class="summary">
552 <table width="100%" cellpadding="0" cellspacing="0" border="0">
553 <tr>
554 <td><span class="summary-sig"><a name="run"></a><span class="summary-sig-name">run</span>(<span class="summary-sig-arg">self</span>,
555 <span class="summary-sig-arg">timeout</span>)</span><br />
556 Run engine in calling thread.</td>
557 <td align="right" valign="top">
558 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.run">source&nbsp;code</a></span>
559
560 </td>
561 </tr>
562 </table>
563
564 </td>
565 </tr>
566 <tr>
567 <td width="15%" align="right" valign="top" class="summary">
568 <span class="summary-type">&nbsp;</span>
569 </td><td class="summary">
570 <table width="100%" cellpadding="0" cellspacing="0" border="0">
571 <tr>
572 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.Engine-class.html#snoop_ports" class="summary-sig-name">snoop_ports</a>(<span class="summary-sig-arg">self</span>)</span><br />
573 Peek in ports for possible early pending messages.</td>
574 <td align="right" valign="top">
575 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.snoop_ports">source&nbsp;code</a></span>
576
577 </td>
578 </tr>
579 </table>
580
581 </td>
582 </tr>
583 <tr>
584 <td width="15%" align="right" valign="top" class="summary">
585 <span class="summary-type">&nbsp;</span>
586 </td><td class="summary">
587 <table width="100%" cellpadding="0" cellspacing="0" border="0">
588 <tr>
589 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.Engine-class.html#runloop" class="summary-sig-name">runloop</a>(<span class="summary-sig-arg">self</span>,
590 <span class="summary-sig-arg">timeout</span>)</span><br />
591 Engine specific run loop.</td>
592 <td align="right" valign="top">
593 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.runloop">source&nbsp;code</a></span>
594
595 </td>
596 </tr>
597 </table>
598
599 </td>
600 </tr>
601 <tr>
602 <td width="15%" align="right" valign="top" class="summary">
603 <span class="summary-type">&nbsp;</span>
604 </td><td class="summary">
605 <table width="100%" cellpadding="0" cellspacing="0" border="0">
606 <tr>
607 <td><span class="summary-sig"><a name="abort"></a><span class="summary-sig-name">abort</span>(<span class="summary-sig-arg">self</span>,
608 <span class="summary-sig-arg">kill</span>)</span><br />
609 Abort runloop.</td>
610 <td align="right" valign="top">
611 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.abort">source&nbsp;code</a></span>
612
613 </td>
614 </tr>
615 </table>
616
617 </td>
618 </tr>
619 <tr>
620 <td width="15%" align="right" valign="top" class="summary">
621 <span class="summary-type">&nbsp;</span>
622 </td><td class="summary">
623 <table width="100%" cellpadding="0" cellspacing="0" border="0">
624 <tr>
625 <td><span class="summary-sig"><a name="exited"></a><span class="summary-sig-name">exited</span>(<span class="summary-sig-arg">self</span>)</span><br />
626 Returns True if the engine has exited the runloop once.</td>
627 <td align="right" valign="top">
628 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.exited">source&nbsp;code</a></span>
629
630 </td>
631 </tr>
632 </table>
633
634 </td>
635 </tr>
636 <tr class="private">
637 <td width="15%" align="right" valign="top" class="summary">
638 <span class="summary-type">&nbsp;</span>
639 </td><td class="summary">
640 <table width="100%" cellpadding="0" cellspacing="0" border="0">
641 <tr>
642 <td><span class="summary-sig"><a name="_debug"></a><span class="summary-sig-name">_debug</span>(<span class="summary-sig-arg">self</span>,
643 <span class="summary-sig-arg">s</span>)</span></td>
644 <td align="right" valign="top">
645 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine._debug">source&nbsp;code</a></span>
646
647 </td>
648 </tr>
649 </table>
650
651 </td>
652 </tr>
653 </table>
654 <!-- ==================== CLASS VARIABLES ==================== -->
655 <a name="section-ClassVariables"></a>
656 <table class="summary" border="1" cellpadding="3"
657 cellspacing="0" width="100%" bgcolor="white">
658 <tr bgcolor="#70b0f0" class="table-header">
659 <td colspan="2" class="table-header">
660 <table border="0" cellpadding="0" cellspacing="0" width="100%">
661 <tr valign="top">
662 <td align="left"><span class="table-header">Class Variables</span></td>
663 <td align="right" valign="top"
664 ><span class="options">[<a href="#section-ClassVariables"
665 class="privatelink" onclick="toggle_private();"
666 >hide private</a>]</span></td>
667 </tr>
668 </table>
669 </td>
670 </tr>
671 <tr>
672 <td width="15%" align="right" valign="top" class="summary">
673 <span class="summary-type">&nbsp;</span>
674 </td><td class="summary">
675 <a name="E_READ"></a><span class="summary-name">E_READ</span> = <code title="1">1</code>
676 </td>
677 </tr>
678 <tr>
679 <td width="15%" align="right" valign="top" class="summary">
680 <span class="summary-type">&nbsp;</span>
681 </td><td class="summary">
682 <a name="E_ERROR"></a><span class="summary-name">E_ERROR</span> = <code title="2">2</code>
683 </td>
684 </tr>
685 <tr>
686 <td width="15%" align="right" valign="top" class="summary">
687 <span class="summary-type">&nbsp;</span>
688 </td><td class="summary">
689 <a name="E_WRITE"></a><span class="summary-name">E_WRITE</span> = <code title="4">4</code>
690 </td>
691 </tr>
692 <tr>
693 <td width="15%" align="right" valign="top" class="summary">
694 <span class="summary-type">&nbsp;</span>
695 </td><td class="summary">
696 <a name="E_ANY"></a><span class="summary-name">E_ANY</span> = <code title="7">7</code>
697 </td>
698 </tr>
699 <tr>
700 <td width="15%" align="right" valign="top" class="summary">
701 <span class="summary-type">&nbsp;</span>
702 </td><td class="summary">
703 <a name="identifier"></a><span class="summary-name">identifier</span> = <code title="'(none)'"><code class="variable-quote">'</code><code class="variable-string">(none)</code><code class="variable-quote">'</code></code>
704 </td>
705 </tr>
706 </table>
707 <!-- ==================== METHOD DETAILS ==================== -->
708 <a name="section-MethodDetails"></a>
709 <table class="details" border="1" cellpadding="3"
710 cellspacing="0" width="100%" bgcolor="white">
711 <tr bgcolor="#70b0f0" class="table-header">
712 <td colspan="2" class="table-header">
713 <table border="0" cellpadding="0" cellspacing="0" width="100%">
714 <tr valign="top">
715 <td align="left"><span class="table-header">Method Details</span></td>
716 <td align="right" valign="top"
717 ><span class="options">[<a href="#section-MethodDetails"
718 class="privatelink" onclick="toggle_private();"
719 >hide private</a>]</span></td>
720 </tr>
721 </table>
722 </td>
723 </tr>
724 </table>
725 <a name="add"></a>
726 <div>
727 <table class="details" border="1" cellpadding="3"
728 cellspacing="0" width="100%" bgcolor="white">
729 <tr><td>
730 <table width="100%" cellpadding="0" cellspacing="0" border="0">
731 <tr valign="top"><td>
732 <h3 class="epydoc"><span class="sig"><span class="sig-name">add</span>(<span class="sig-arg">self</span>,
733 <span class="sig-arg">client</span>)</span>
734 </h3>
735 </td><td align="right" valign="top"
736 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.add">source&nbsp;code</a></span>&nbsp;
737 </td>
738 </tr></table>
739
740 <p>Add a client to engine. Subclasses that override this method should
741 call base class method.</p>
742 <dl class="fields">
743 </dl>
744 </td></tr></table>
745 </div>
746 <a name="remove"></a>
747 <div>
748 <table class="details" border="1" cellpadding="3"
749 cellspacing="0" width="100%" bgcolor="white">
750 <tr><td>
751 <table width="100%" cellpadding="0" cellspacing="0" border="0">
752 <tr valign="top"><td>
753 <h3 class="epydoc"><span class="sig"><span class="sig-name">remove</span>(<span class="sig-arg">self</span>,
754 <span class="sig-arg">client</span>,
755 <span class="sig-arg">did_timeout</span>=<span class="sig-default">False</span>)</span>
756 </h3>
757 </td><td align="right" valign="top"
758 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.remove">source&nbsp;code</a></span>&nbsp;
759 </td>
760 </tr></table>
761
762 <p>Remove a client from engine. Subclasses that override this method
763 should call base class method.</p>
764 <dl class="fields">
765 </dl>
766 </td></tr></table>
767 </div>
768 <a name="clear"></a>
769 <div>
770 <table class="details" border="1" cellpadding="3"
771 cellspacing="0" width="100%" bgcolor="white">
772 <tr><td>
773 <table width="100%" cellpadding="0" cellspacing="0" border="0">
774 <tr valign="top"><td>
775 <h3 class="epydoc"><span class="sig"><span class="sig-name">clear</span>(<span class="sig-arg">self</span>,
776 <span class="sig-arg">did_timeout</span>=<span class="sig-default">False</span>,
777 <span class="sig-arg">clear_ports</span>=<span class="sig-default">False</span>)</span>
778 </h3>
779 </td><td align="right" valign="top"
780 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.clear">source&nbsp;code</a></span>&nbsp;
781 </td>
782 </tr></table>
783
784 <p>Remove all clients. Subclasses that override this method should call
785 base class method.</p>
786 <dl class="fields">
787 </dl>
788 </td></tr></table>
789 </div>
790 <a name="register"></a>
791 <div>
792 <table class="details" border="1" cellpadding="3"
793 cellspacing="0" width="100%" bgcolor="white">
794 <tr><td>
795 <table width="100%" cellpadding="0" cellspacing="0" border="0">
796 <tr valign="top"><td>
797 <h3 class="epydoc"><span class="sig"><span class="sig-name">register</span>(<span class="sig-arg">self</span>,
798 <span class="sig-arg">client</span>)</span>
799 </h3>
800 </td><td align="right" valign="top"
801 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.register">source&nbsp;code</a></span>&nbsp;
802 </td>
803 </tr></table>
804
805 <p>Register an engine client. Subclasses that override this method should
806 call base class method.</p>
807 <dl class="fields">
808 </dl>
809 </td></tr></table>
810 </div>
811 <a name="unregister"></a>
812 <div>
813 <table class="details" border="1" cellpadding="3"
814 cellspacing="0" width="100%" bgcolor="white">
815 <tr><td>
816 <table width="100%" cellpadding="0" cellspacing="0" border="0">
817 <tr valign="top"><td>
818 <h3 class="epydoc"><span class="sig"><span class="sig-name">unregister</span>(<span class="sig-arg">self</span>,
819 <span class="sig-arg">client</span>)</span>
820 </h3>
821 </td><td align="right" valign="top"
822 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.unregister">source&nbsp;code</a></span>&nbsp;
823 </td>
824 </tr></table>
825
826 <p>Unregister a client. Subclasses that override this method should call
827 base class method.</p>
828 <dl class="fields">
829 </dl>
830 </td></tr></table>
831 </div>
832 <a name="snoop_ports"></a>
833 <div>
834 <table class="details" border="1" cellpadding="3"
835 cellspacing="0" width="100%" bgcolor="white">
836 <tr><td>
837 <table width="100%" cellpadding="0" cellspacing="0" border="0">
838 <tr valign="top"><td>
839 <h3 class="epydoc"><span class="sig"><span class="sig-name">snoop_ports</span>(<span class="sig-arg">self</span>)</span>
840 </h3>
841 </td><td align="right" valign="top"
842 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.snoop_ports">source&nbsp;code</a></span>&nbsp;
843 </td>
844 </tr></table>
845
846 <p>Peek in ports for possible early pending messages. This method simply
847 tries to read port pipes in non- blocking mode.</p>
848 <dl class="fields">
849 </dl>
850 </td></tr></table>
851 </div>
852 <a name="runloop"></a>
853 <div>
854 <table class="details" border="1" cellpadding="3"
855 cellspacing="0" width="100%" bgcolor="white">
856 <tr><td>
857 <table width="100%" cellpadding="0" cellspacing="0" border="0">
858 <tr valign="top"><td>
859 <h3 class="epydoc"><span class="sig"><span class="sig-name">runloop</span>(<span class="sig-arg">self</span>,
860 <span class="sig-arg">timeout</span>)</span>
861 </h3>
862 </td><td align="right" valign="top"
863 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#Engine.runloop">source&nbsp;code</a></span>&nbsp;
864 </td>
865 </tr></table>
866
867 <p>Engine specific run loop. Derived classes must implement.</p>
868 <dl class="fields">
869 </dl>
870 </td></tr></table>
871 </div>
872 <br />
873 <!-- ==================== NAVIGATION BAR ==================== -->
874 <table class="navbar" border="0" width="100%" cellpadding="0"
875 bgcolor="#a0c0ff" cellspacing="0">
876 <tr valign="middle">
877
878 <!-- Tree link -->
879 <th>&nbsp;&nbsp;&nbsp;<a
880 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
881
882 <!-- Index link -->
883 <th>&nbsp;&nbsp;&nbsp;<a
884 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
885
886 <!-- Help link -->
887 <th>&nbsp;&nbsp;&nbsp;<a
888 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
889
890 <!-- Project homepage -->
891 <th class="navbar" align="right" width="100%">
892 <table border="0" cellpadding="0" cellspacing="0">
893 <tr><th class="navbar" align="center"
894 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
895 </tr></table></th>
896 </tr>
897 </table>
898 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
899 <tr>
900 <td align="left" class="footer">
901 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:17 2010
902 </td>
903 <td align="right" class="footer">
904 <a target="mainFrame" href="http://epydoc.sourceforge.net"
905 >http://epydoc.sourceforge.net</a>
906 </td>
907 </tr>
908 </table>
909
910 <script type="text/javascript">
911 <!--
912 // Private objects are initially displayed (because if
913 // javascript is turned off then we want them to be
914 // visible); but by default, we want to hide them. So hide
915 // them unless we have a cookie that says to show them.
916 checkCookie();
917 // -->
918 </script>
919 </body>
920 </html>
+0
-273
doc/epydoc/html/ClusterShell.Engine.Engine.EngineAbortException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.EngineAbortException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;EngineAbortException
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.EngineAbortException-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineAbortException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineAbortException">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_3" name="uml_class_diagram_for_clusters_3">
64 <area shape="rect" id="node5" href="ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="31,457,161,476"/>
65 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.EngineAbortException-class.html" title="Raised on user abort." alt="" coords="19,425,173,482"/>
66 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.EngineException-class.html" title="Base engine exception." alt="" coords="33,361,156,405"/>
67 <area shape="rect" id="node7" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,316,159,335"/>
68 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,341"/>
69 <area shape="rect" id="node8" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node8" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node8" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node8" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node8" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node8" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node8" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node8" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node8" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node8" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node8" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node8" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_3.png" alt='' usemap="#uml_class_diagram_for_clusters_3" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised on user abort.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <table width="100%" cellpadding="0" cellspacing="0" border="0">
111 <tr>
112 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
113 <span class="summary-sig-arg">kill</span>)</span><br />
114 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
115 <td align="right" valign="top">
116 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineAbortException.__init__">source&nbsp;code</a></span>
117
118 </td>
119 </tr>
120 </table>
121
122 </td>
123 </tr>
124 <tr>
125 <td colspan="2" class="summary">
126 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
127 <code>__new__</code>
128 </p>
129 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
130 <code>__delattr__</code>,
131 <code>__getattribute__</code>,
132 <code>__getitem__</code>,
133 <code>__getslice__</code>,
134 <code>__reduce__</code>,
135 <code>__repr__</code>,
136 <code>__setattr__</code>,
137 <code>__setstate__</code>,
138 <code>__str__</code>,
139 <code>__unicode__</code>
140 </p>
141 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
142 <code>__format__</code>,
143 <code>__hash__</code>,
144 <code>__reduce_ex__</code>,
145 <code>__sizeof__</code>,
146 <code>__subclasshook__</code>
147 </p>
148 </td>
149 </tr>
150 </table>
151 <!-- ==================== PROPERTIES ==================== -->
152 <a name="section-Properties"></a>
153 <table class="summary" border="1" cellpadding="3"
154 cellspacing="0" width="100%" bgcolor="white">
155 <tr bgcolor="#70b0f0" class="table-header">
156 <td colspan="2" class="table-header">
157 <table border="0" cellpadding="0" cellspacing="0" width="100%">
158 <tr valign="top">
159 <td align="left"><span class="table-header">Properties</span></td>
160 <td align="right" valign="top"
161 ><span class="options">[<a href="#section-Properties"
162 class="privatelink" onclick="toggle_private();"
163 >hide private</a>]</span></td>
164 </tr>
165 </table>
166 </td>
167 </tr>
168 <tr>
169 <td colspan="2" class="summary">
170 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
171 <code>args</code>,
172 <code>message</code>
173 </p>
174 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
175 <code>__class__</code>
176 </p>
177 </td>
178 </tr>
179 </table>
180 <!-- ==================== METHOD DETAILS ==================== -->
181 <a name="section-MethodDetails"></a>
182 <table class="details" border="1" cellpadding="3"
183 cellspacing="0" width="100%" bgcolor="white">
184 <tr bgcolor="#70b0f0" class="table-header">
185 <td colspan="2" class="table-header">
186 <table border="0" cellpadding="0" cellspacing="0" width="100%">
187 <tr valign="top">
188 <td align="left"><span class="table-header">Method Details</span></td>
189 <td align="right" valign="top"
190 ><span class="options">[<a href="#section-MethodDetails"
191 class="privatelink" onclick="toggle_private();"
192 >hide private</a>]</span></td>
193 </tr>
194 </table>
195 </td>
196 </tr>
197 </table>
198 <a name="__init__"></a>
199 <div>
200 <table class="details" border="1" cellpadding="3"
201 cellspacing="0" width="100%" bgcolor="white">
202 <tr><td>
203 <table width="100%" cellpadding="0" cellspacing="0" border="0">
204 <tr valign="top"><td>
205 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
206 <span class="sig-arg">kill</span>)</span>
207 <br /><em class="fname">(Constructor)</em>
208 </h3>
209 </td><td align="right" valign="top"
210 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineAbortException.__init__">source&nbsp;code</a></span>&nbsp;
211 </td>
212 </tr></table>
213
214 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
215 signature</p>
216 <dl class="fields">
217 <dt>Overrides:
218 object.__init__
219 <dd><em class="note">(inherited documentation)</em></dd>
220 </dt>
221 </dl>
222 </td></tr></table>
223 </div>
224 <br />
225 <!-- ==================== NAVIGATION BAR ==================== -->
226 <table class="navbar" border="0" width="100%" cellpadding="0"
227 bgcolor="#a0c0ff" cellspacing="0">
228 <tr valign="middle">
229
230 <!-- Tree link -->
231 <th>&nbsp;&nbsp;&nbsp;<a
232 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
233
234 <!-- Index link -->
235 <th>&nbsp;&nbsp;&nbsp;<a
236 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
237
238 <!-- Help link -->
239 <th>&nbsp;&nbsp;&nbsp;<a
240 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
241
242 <!-- Project homepage -->
243 <th class="navbar" align="right" width="100%">
244 <table border="0" cellpadding="0" cellspacing="0">
245 <tr><th class="navbar" align="center"
246 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
247 </tr></table></th>
248 </tr>
249 </table>
250 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
251 <tr>
252 <td align="left" class="footer">
253 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:17 2010
254 </td>
255 <td align="right" class="footer">
256 <a target="mainFrame" href="http://epydoc.sourceforge.net"
257 >http://epydoc.sourceforge.net</a>
258 </td>
259 </tr>
260 </table>
261
262 <script type="text/javascript">
263 <!--
264 // Private objects are initially displayed (because if
265 // javascript is turned off then we want them to be
266 // visible); but by default, we want to hide them. So hide
267 // them unless we have a cookie that says to show them.
268 checkCookie();
269 // -->
270 </script>
271 </body>
272 </html>
+0
-212
doc/epydoc/html/ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.EngineAlreadyRunningError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;EngineAlreadyRunningError
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineAlreadyRunningError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineAlreadyRunningError">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_4" name="uml_class_diagram_for_clusters_4">
64 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html" title="Error raised when the engine is already running." alt="" coords="5,507,192,551"/>
65 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html" title="Error raised when an illegal operation has been performed." alt="" coords="7,443,191,487"/>
66 <area shape="rect" id="node12" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="35,316,161,335"/>
67 <area shape="rect" id="node12" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="35,335,161,353"/>
68 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="23,283,172,359"/>
69 <area shape="rect" id="node4" href="ClusterShell.Engine.Engine.EngineException-class.html" title="Base engine exception." alt="" coords="36,379,159,423"/>
70 <area shape="rect" id="node13" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="20,31,177,49"/>
71 <area shape="rect" id="node13" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="20,49,177,68"/>
72 <area shape="rect" id="node13" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="20,71,177,89"/>
73 <area shape="rect" id="node13" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="20,89,177,108"/>
74 <area shape="rect" id="node13" href="javascript:void(0);" title="x[y]" alt="" coords="20,108,177,127"/>
75 <area shape="rect" id="node13" href="javascript:void(0);" title="x[i:j]" alt="" coords="20,127,177,145"/>
76 <area shape="rect" id="node13" href="javascript:void(0);" title="helper for pickle" alt="" coords="20,145,177,164"/>
77 <area shape="rect" id="node13" href="javascript:void(0);" title="repr(x)" alt="" coords="20,164,177,183"/>
78 <area shape="rect" id="node13" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="20,183,177,201"/>
79 <area shape="rect" id="node13" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="20,201,177,220"/>
80 <area shape="rect" id="node13" href="javascript:void(0);" title="str(x)" alt="" coords="20,220,177,239"/>
81 <area shape="rect" id="node13" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="20,239,177,257"/>
82 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="8,6,189,263"/>
83 </map>
84 <img src="uml_class_diagram_for_clusters_4.png" alt='' usemap="#uml_class_diagram_for_clusters_4" ismap="ismap" class="graph-without-title" />
85 </center>
86 </center>
87 <hr />
88 <p>Error raised when the engine is already running.</p>
89
90 <!-- ==================== INSTANCE METHODS ==================== -->
91 <a name="section-InstanceMethods"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Instance Methods</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-InstanceMethods"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td colspan="2" class="summary">
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
110 <code>__init__</code>,
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:17 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-312
doc/epydoc/html/ClusterShell.Engine.Engine.EngineBaseTimer-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.EngineBaseTimer</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;EngineBaseTimer
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineBaseTimer</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineBaseTimer">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_5" name="uml_class_diagram_for_clusters_5">
64 <area shape="rect" id="node14" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__" title="Create a base timer." alt="" coords="111,39,440,57"/>
65 <area shape="rect" id="node14" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="111,57,440,76"/>
66 <area shape="rect" id="node14" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="111,76,440,95"/>
67 <area shape="rect" id="node14" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="111,95,440,113"/>
68 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="99,6,451,119"/>
69 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.EngineTimer-class.html" title="Concrete class EngineTimer" alt="" coords="121,139,231,178"/>
70 <area shape="rect" id="node7" href="ClusterShell.Worker.EngineClient.EngineClient-class.html" title="Abstract class EngineClient." alt="" coords="260,139,495,178"/>
71 <area shape="rect" id="node3" href="ClusterShell.Worker.Ssh.Ssh-class.html" title="Ssh EngineClient." alt="" coords="5,198,139,237"/>
72 <area shape="rect" id="node6" href="ClusterShell.Worker.Ssh.Scp-class.html" title="Scp EngineClient." alt="" coords="5,257,139,295"/>
73 <area shape="rect" id="node4" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html" title="ClusterShell pdsh&#45;based worker Class." alt="" coords="168,198,357,237"/>
74 <area shape="rect" id="node5" href="ClusterShell.Worker.Popen.WorkerPopen-class.html" title="Implements the Popen Worker." alt="" coords="391,257,593,295"/>
75 <area shape="rect" id="node8" href="ClusterShell.Worker.Worker.WorkerSimple-class.html" title="Implements a simple Worker being itself an EngineClient." alt="" coords="387,198,597,237"/>
76 <area shape="rect" id="node9" href="ClusterShell.Worker.EngineClient.EnginePort-class.html" title="An EnginePort is an abstraction object to deliver messages reliably between tasks." alt="" coords="627,198,851,237"/>
77 </map>
78 <img src="uml_class_diagram_for_clusters_5.png" alt='' usemap="#uml_class_diagram_for_clusters_5" ismap="ismap" class="graph-without-title" />
79 </center>
80 </center>
81 <hr />
82 <p>Abstract class for ClusterShell's engine timer. Such a timer requires
83 a relative fire time (delay) in seconds (as float), and supports an
84 optional repeating interval in seconds (as float too).</p>
85 <p>See EngineTimer for more information about ClusterShell timers.</p>
86
87 <!-- ==================== INSTANCE METHODS ==================== -->
88 <a name="section-InstanceMethods"></a>
89 <table class="summary" border="1" cellpadding="3"
90 cellspacing="0" width="100%" bgcolor="white">
91 <tr bgcolor="#70b0f0" class="table-header">
92 <td colspan="2" class="table-header">
93 <table border="0" cellpadding="0" cellspacing="0" width="100%">
94 <tr valign="top">
95 <td align="left"><span class="table-header">Instance Methods</span></td>
96 <td align="right" valign="top"
97 ><span class="options">[<a href="#section-InstanceMethods"
98 class="privatelink" onclick="toggle_private();"
99 >hide private</a>]</span></td>
100 </tr>
101 </table>
102 </td>
103 </tr>
104 <tr>
105 <td width="15%" align="right" valign="top" class="summary">
106 <span class="summary-type">&nbsp;</span>
107 </td><td class="summary">
108 <table width="100%" cellpadding="0" cellspacing="0" border="0">
109 <tr>
110 <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
111 <span class="summary-sig-arg">fire_delay</span>,
112 <span class="summary-sig-arg">interval</span>=<span class="summary-sig-default">-1.0</span>,
113 <span class="summary-sig-arg">autoclose</span>=<span class="summary-sig-default">False</span>)</span><br />
114 Create a base timer.</td>
115 <td align="right" valign="top">
116 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineBaseTimer.__init__">source&nbsp;code</a></span>
117
118 </td>
119 </tr>
120 </table>
121
122 </td>
123 </tr>
124 <tr class="private">
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type">&nbsp;</span>
127 </td><td class="summary">
128 <table width="100%" cellpadding="0" cellspacing="0" border="0">
129 <tr>
130 <td><span class="summary-sig"><a name="_set_engine"></a><span class="summary-sig-name">_set_engine</span>(<span class="summary-sig-arg">self</span>,
131 <span class="summary-sig-arg">engine</span>)</span><br />
132 Bind to engine, called by Engine.</td>
133 <td align="right" valign="top">
134 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineBaseTimer._set_engine">source&nbsp;code</a></span>
135
136 </td>
137 </tr>
138 </table>
139
140 </td>
141 </tr>
142 <tr>
143 <td width="15%" align="right" valign="top" class="summary">
144 <span class="summary-type">&nbsp;</span>
145 </td><td class="summary">
146 <table width="100%" cellpadding="0" cellspacing="0" border="0">
147 <tr>
148 <td><span class="summary-sig"><a name="invalidate"></a><span class="summary-sig-name">invalidate</span>(<span class="summary-sig-arg">self</span>)</span><br />
149 Invalidates a timer object, stopping it from ever firing again.</td>
150 <td align="right" valign="top">
151 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineBaseTimer.invalidate">source&nbsp;code</a></span>
152
153 </td>
154 </tr>
155 </table>
156
157 </td>
158 </tr>
159 <tr>
160 <td width="15%" align="right" valign="top" class="summary">
161 <span class="summary-type">&nbsp;</span>
162 </td><td class="summary">
163 <table width="100%" cellpadding="0" cellspacing="0" border="0">
164 <tr>
165 <td><span class="summary-sig"><a name="is_valid"></a><span class="summary-sig-name">is_valid</span>(<span class="summary-sig-arg">self</span>)</span><br />
166 Returns a boolean value that indicates whether an EngineTimer object
167 is valid and able to fire.</td>
168 <td align="right" valign="top">
169 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineBaseTimer.is_valid">source&nbsp;code</a></span>
170
171 </td>
172 </tr>
173 </table>
174
175 </td>
176 </tr>
177 <tr>
178 <td width="15%" align="right" valign="top" class="summary">
179 <span class="summary-type">&nbsp;</span>
180 </td><td class="summary">
181 <table width="100%" cellpadding="0" cellspacing="0" border="0">
182 <tr>
183 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" class="summary-sig-name">set_nextfire</a>(<span class="summary-sig-arg">self</span>,
184 <span class="summary-sig-arg">fire_delay</span>,
185 <span class="summary-sig-arg">interval</span>=<span class="summary-sig-default">-1</span>)</span><br />
186 Set the next firing delay in seconds for an EngineTimer object.</td>
187 <td align="right" valign="top">
188 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineBaseTimer.set_nextfire">source&nbsp;code</a></span>
189
190 </td>
191 </tr>
192 </table>
193
194 </td>
195 </tr>
196 <tr class="private">
197 <td width="15%" align="right" valign="top" class="summary">
198 <span class="summary-type">&nbsp;</span>
199 </td><td class="summary">
200 <table width="100%" cellpadding="0" cellspacing="0" border="0">
201 <tr>
202 <td><span class="summary-sig"><a name="_fire"></a><span class="summary-sig-name">_fire</span>(<span class="summary-sig-arg">self</span>)</span></td>
203 <td align="right" valign="top">
204 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineBaseTimer._fire">source&nbsp;code</a></span>
205
206 </td>
207 </tr>
208 </table>
209
210 </td>
211 </tr>
212 </table>
213 <!-- ==================== METHOD DETAILS ==================== -->
214 <a name="section-MethodDetails"></a>
215 <table class="details" border="1" cellpadding="3"
216 cellspacing="0" width="100%" bgcolor="white">
217 <tr bgcolor="#70b0f0" class="table-header">
218 <td colspan="2" class="table-header">
219 <table border="0" cellpadding="0" cellspacing="0" width="100%">
220 <tr valign="top">
221 <td align="left"><span class="table-header">Method Details</span></td>
222 <td align="right" valign="top"
223 ><span class="options">[<a href="#section-MethodDetails"
224 class="privatelink" onclick="toggle_private();"
225 >hide private</a>]</span></td>
226 </tr>
227 </table>
228 </td>
229 </tr>
230 </table>
231 <a name="set_nextfire"></a>
232 <div>
233 <table class="details" border="1" cellpadding="3"
234 cellspacing="0" width="100%" bgcolor="white">
235 <tr><td>
236 <table width="100%" cellpadding="0" cellspacing="0" border="0">
237 <tr valign="top"><td>
238 <h3 class="epydoc"><span class="sig"><span class="sig-name">set_nextfire</span>(<span class="sig-arg">self</span>,
239 <span class="sig-arg">fire_delay</span>,
240 <span class="sig-arg">interval</span>=<span class="sig-default">-1</span>)</span>
241 </h3>
242 </td><td align="right" valign="top"
243 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineBaseTimer.set_nextfire">source&nbsp;code</a></span>&nbsp;
244 </td>
245 </tr></table>
246
247 <p>Set the next firing delay in seconds for an EngineTimer object.</p>
248 <p>The optional paramater `interval' sets the firing interval of the
249 timer. If not specified, the timer fires once and then is automatically
250 invalidated.</p>
251 <p>Time values are expressed in second using floating point values.
252 Precision is implementation (and system) dependent.</p>
253 <p>It is safe to call this method from the task owning this timer object,
254 in any event handlers, anywhere.</p>
255 <p>However, resetting a timer's next firing time may be a relatively
256 expensive operation. It is more efficient to let timers autorepeat or to
257 use this method from the timer's own event handler callback (ie. from its
258 ev_timer).</p>
259 <dl class="fields">
260 </dl>
261 </td></tr></table>
262 </div>
263 <br />
264 <!-- ==================== NAVIGATION BAR ==================== -->
265 <table class="navbar" border="0" width="100%" cellpadding="0"
266 bgcolor="#a0c0ff" cellspacing="0">
267 <tr valign="middle">
268
269 <!-- Tree link -->
270 <th>&nbsp;&nbsp;&nbsp;<a
271 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
272
273 <!-- Index link -->
274 <th>&nbsp;&nbsp;&nbsp;<a
275 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
276
277 <!-- Help link -->
278 <th>&nbsp;&nbsp;&nbsp;<a
279 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
280
281 <!-- Project homepage -->
282 <th class="navbar" align="right" width="100%">
283 <table border="0" cellpadding="0" cellspacing="0">
284 <tr><th class="navbar" align="center"
285 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
286 </tr></table></th>
287 </tr>
288 </table>
289 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
290 <tr>
291 <td align="left" class="footer">
292 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:17 2010
293 </td>
294 <td align="right" class="footer">
295 <a target="mainFrame" href="http://epydoc.sourceforge.net"
296 >http://epydoc.sourceforge.net</a>
297 </td>
298 </tr>
299 </table>
300
301 <script type="text/javascript">
302 <!--
303 // Private objects are initially displayed (because if
304 // javascript is turned off then we want them to be
305 // visible); but by default, we want to hide them. So hide
306 // them unless we have a cookie that says to show them.
307 checkCookie();
308 // -->
309 </script>
310 </body>
311 </html>
+0
-215
doc/epydoc/html/ClusterShell.Engine.Engine.EngineException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.EngineException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;EngineException
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.EngineException-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineException">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_6" name="uml_class_diagram_for_clusters_6">
64 <area shape="rect" id="node25" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="339,31,496,49"/>
65 <area shape="rect" id="node25" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="339,49,496,68"/>
66 <area shape="rect" id="node25" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="339,71,496,89"/>
67 <area shape="rect" id="node25" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="339,89,496,108"/>
68 <area shape="rect" id="node25" href="javascript:void(0);" title="x[y]" alt="" coords="339,108,496,127"/>
69 <area shape="rect" id="node25" href="javascript:void(0);" title="x[i:j]" alt="" coords="339,127,496,145"/>
70 <area shape="rect" id="node25" href="javascript:void(0);" title="helper for pickle" alt="" coords="339,145,496,164"/>
71 <area shape="rect" id="node25" href="javascript:void(0);" title="repr(x)" alt="" coords="339,164,496,183"/>
72 <area shape="rect" id="node25" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="339,183,496,201"/>
73 <area shape="rect" id="node25" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="339,201,496,220"/>
74 <area shape="rect" id="node25" href="javascript:void(0);" title="str(x)" alt="" coords="339,220,496,239"/>
75 <area shape="rect" id="node25" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="339,239,496,257"/>
76 <area shape="rect" id="node1" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="327,6,508,263"/>
77 <area shape="rect" id="node24" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="353,316,480,335"/>
78 <area shape="rect" id="node24" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="353,335,480,353"/>
79 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="341,283,491,359"/>
80 <area shape="rect" id="node5" href="ClusterShell.Engine.Engine.EngineException-class.html" title="Base engine exception." alt="" coords="355,379,477,423"/>
81 <area shape="rect" id="node3" href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html" title="Raised when a timeout is encountered." alt="" coords="5,443,187,482"/>
82 <area shape="rect" id="node4" href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html" title="Error raised when an illegal operation has been performed." alt="" coords="216,443,411,482"/>
83 <area shape="rect" id="node6" href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html" title="Error raised when the engine is already running." alt="" coords="215,502,412,541"/>
84 <area shape="rect" id="node7" href="ClusterShell.Engine.Engine.EngineAbortException-class.html" title="Raised on user abort." alt="" coords="440,443,605,482"/>
85 <area shape="rect" id="node8" href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html" title="Error raised when the engine mechanism is not supported." alt="" coords="635,443,819,482"/>
86 </map>
87 <img src="uml_class_diagram_for_clusters_6.png" alt='' usemap="#uml_class_diagram_for_clusters_6" ismap="ismap" class="graph-without-title" />
88 </center>
89 </center>
90 <hr />
91 <p>Base engine exception.</p>
92
93 <!-- ==================== INSTANCE METHODS ==================== -->
94 <a name="section-InstanceMethods"></a>
95 <table class="summary" border="1" cellpadding="3"
96 cellspacing="0" width="100%" bgcolor="white">
97 <tr bgcolor="#70b0f0" class="table-header">
98 <td colspan="2" class="table-header">
99 <table border="0" cellpadding="0" cellspacing="0" width="100%">
100 <tr valign="top">
101 <td align="left"><span class="table-header">Instance Methods</span></td>
102 <td align="right" valign="top"
103 ><span class="options">[<a href="#section-InstanceMethods"
104 class="privatelink" onclick="toggle_private();"
105 >hide private</a>]</span></td>
106 </tr>
107 </table>
108 </td>
109 </tr>
110 <tr>
111 <td colspan="2" class="summary">
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
113 <code>__init__</code>,
114 <code>__new__</code>
115 </p>
116 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
117 <code>__delattr__</code>,
118 <code>__getattribute__</code>,
119 <code>__getitem__</code>,
120 <code>__getslice__</code>,
121 <code>__reduce__</code>,
122 <code>__repr__</code>,
123 <code>__setattr__</code>,
124 <code>__setstate__</code>,
125 <code>__str__</code>,
126 <code>__unicode__</code>
127 </p>
128 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
129 <code>__format__</code>,
130 <code>__hash__</code>,
131 <code>__reduce_ex__</code>,
132 <code>__sizeof__</code>,
133 <code>__subclasshook__</code>
134 </p>
135 </td>
136 </tr>
137 </table>
138 <!-- ==================== PROPERTIES ==================== -->
139 <a name="section-Properties"></a>
140 <table class="summary" border="1" cellpadding="3"
141 cellspacing="0" width="100%" bgcolor="white">
142 <tr bgcolor="#70b0f0" class="table-header">
143 <td colspan="2" class="table-header">
144 <table border="0" cellpadding="0" cellspacing="0" width="100%">
145 <tr valign="top">
146 <td align="left"><span class="table-header">Properties</span></td>
147 <td align="right" valign="top"
148 ><span class="options">[<a href="#section-Properties"
149 class="privatelink" onclick="toggle_private();"
150 >hide private</a>]</span></td>
151 </tr>
152 </table>
153 </td>
154 </tr>
155 <tr>
156 <td colspan="2" class="summary">
157 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
158 <code>args</code>,
159 <code>message</code>
160 </p>
161 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
162 <code>__class__</code>
163 </p>
164 </td>
165 </tr>
166 </table>
167 <!-- ==================== NAVIGATION BAR ==================== -->
168 <table class="navbar" border="0" width="100%" cellpadding="0"
169 bgcolor="#a0c0ff" cellspacing="0">
170 <tr valign="middle">
171
172 <!-- Tree link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Index link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Help link -->
181 <th>&nbsp;&nbsp;&nbsp;<a
182 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
183
184 <!-- Project homepage -->
185 <th class="navbar" align="right" width="100%">
186 <table border="0" cellpadding="0" cellspacing="0">
187 <tr><th class="navbar" align="center"
188 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
189 </tr></table></th>
190 </tr>
191 </table>
192 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
193 <tr>
194 <td align="left" class="footer">
195 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
196 </td>
197 <td align="right" class="footer">
198 <a target="mainFrame" href="http://epydoc.sourceforge.net"
199 >http://epydoc.sourceforge.net</a>
200 </td>
201 </tr>
202 </table>
203
204 <script type="text/javascript">
205 <!--
206 // Private objects are initially displayed (because if
207 // javascript is turned off then we want them to be
208 // visible); but by default, we want to hide them. So hide
209 // them unless we have a cookie that says to show them.
210 checkCookie();
211 // -->
212 </script>
213 </body>
214 </html>
+0
-212
doc/epydoc/html/ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.EngineIllegalOperationError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;EngineIllegalOperationError
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineIllegalOperationError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineIllegalOperationError">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_7" name="uml_class_diagram_for_clusters_7">
64 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html" title="Error raised when an illegal operation has been performed." alt="" coords="12,443,196,487"/>
65 <area shape="rect" id="node3" href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html" title="Error raised when the engine is already running." alt="" coords="5,507,203,546"/>
66 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.EngineException-class.html" title="Base engine exception." alt="" coords="41,379,164,423"/>
67 <area shape="rect" id="node33" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="40,316,167,335"/>
68 <area shape="rect" id="node33" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="40,335,167,353"/>
69 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="28,283,177,359"/>
70 <area shape="rect" id="node34" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="25,31,183,49"/>
71 <area shape="rect" id="node34" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="25,49,183,68"/>
72 <area shape="rect" id="node34" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="25,71,183,89"/>
73 <area shape="rect" id="node34" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="25,89,183,108"/>
74 <area shape="rect" id="node34" href="javascript:void(0);" title="x[y]" alt="" coords="25,108,183,127"/>
75 <area shape="rect" id="node34" href="javascript:void(0);" title="x[i:j]" alt="" coords="25,127,183,145"/>
76 <area shape="rect" id="node34" href="javascript:void(0);" title="helper for pickle" alt="" coords="25,145,183,164"/>
77 <area shape="rect" id="node34" href="javascript:void(0);" title="repr(x)" alt="" coords="25,164,183,183"/>
78 <area shape="rect" id="node34" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="25,183,183,201"/>
79 <area shape="rect" id="node34" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="25,201,183,220"/>
80 <area shape="rect" id="node34" href="javascript:void(0);" title="str(x)" alt="" coords="25,220,183,239"/>
81 <area shape="rect" id="node34" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="25,239,183,257"/>
82 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="13,6,195,263"/>
83 </map>
84 <img src="uml_class_diagram_for_clusters_7.png" alt='' usemap="#uml_class_diagram_for_clusters_7" ismap="ismap" class="graph-without-title" />
85 </center>
86 </center>
87 <hr />
88 <p>Error raised when an illegal operation has been performed.</p>
89
90 <!-- ==================== INSTANCE METHODS ==================== -->
91 <a name="section-InstanceMethods"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Instance Methods</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-InstanceMethods"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td colspan="2" class="summary">
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
110 <code>__init__</code>,
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-211
doc/epydoc/html/ClusterShell.Engine.Engine.EngineNotSupportedError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.EngineNotSupportedError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;EngineNotSupportedError
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineNotSupportedError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineNotSupportedError">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_8" name="uml_class_diagram_for_clusters_8">
64 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html" title="Error raised when the engine mechanism is not supported." alt="" coords="8,443,181,487"/>
65 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.EngineException-class.html" title="Base engine exception." alt="" coords="33,379,156,423"/>
66 <area shape="rect" id="node38" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
67 <area shape="rect" id="node38" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
68 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
69 <area shape="rect" id="node39" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node39" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node39" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node39" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node39" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node39" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node39" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node39" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node39" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node39" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node39" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node39" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_8.png" alt='' usemap="#uml_class_diagram_for_clusters_8" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Error raised when the engine mechanism is not supported.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td colspan="2" class="summary">
108 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
109 <code>__init__</code>,
110 <code>__new__</code>
111 </p>
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
113 <code>__delattr__</code>,
114 <code>__getattribute__</code>,
115 <code>__getitem__</code>,
116 <code>__getslice__</code>,
117 <code>__reduce__</code>,
118 <code>__repr__</code>,
119 <code>__setattr__</code>,
120 <code>__setstate__</code>,
121 <code>__str__</code>,
122 <code>__unicode__</code>
123 </p>
124 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
125 <code>__format__</code>,
126 <code>__hash__</code>,
127 <code>__reduce_ex__</code>,
128 <code>__sizeof__</code>,
129 <code>__subclasshook__</code>
130 </p>
131 </td>
132 </tr>
133 </table>
134 <!-- ==================== PROPERTIES ==================== -->
135 <a name="section-Properties"></a>
136 <table class="summary" border="1" cellpadding="3"
137 cellspacing="0" width="100%" bgcolor="white">
138 <tr bgcolor="#70b0f0" class="table-header">
139 <td colspan="2" class="table-header">
140 <table border="0" cellpadding="0" cellspacing="0" width="100%">
141 <tr valign="top">
142 <td align="left"><span class="table-header">Properties</span></td>
143 <td align="right" valign="top"
144 ><span class="options">[<a href="#section-Properties"
145 class="privatelink" onclick="toggle_private();"
146 >hide private</a>]</span></td>
147 </tr>
148 </table>
149 </td>
150 </tr>
151 <tr>
152 <td colspan="2" class="summary">
153 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
154 <code>args</code>,
155 <code>message</code>
156 </p>
157 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
158 <code>__class__</code>
159 </p>
160 </td>
161 </tr>
162 </table>
163 <!-- ==================== NAVIGATION BAR ==================== -->
164 <table class="navbar" border="0" width="100%" cellpadding="0"
165 bgcolor="#a0c0ff" cellspacing="0">
166 <tr valign="middle">
167
168 <!-- Tree link -->
169 <th>&nbsp;&nbsp;&nbsp;<a
170 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
171
172 <!-- Index link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Help link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Project homepage -->
181 <th class="navbar" align="right" width="100%">
182 <table border="0" cellpadding="0" cellspacing="0">
183 <tr><th class="navbar" align="center"
184 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
185 </tr></table></th>
186 </tr>
187 </table>
188 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
189 <tr>
190 <td align="left" class="footer">
191 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
192 </td>
193 <td align="right" class="footer">
194 <a target="mainFrame" href="http://epydoc.sourceforge.net"
195 >http://epydoc.sourceforge.net</a>
196 </td>
197 </tr>
198 </table>
199
200 <script type="text/javascript">
201 <!--
202 // Private objects are initially displayed (because if
203 // javascript is turned off then we want them to be
204 // visible); but by default, we want to hide them. So hide
205 // them unless we have a cookie that says to show them.
206 checkCookie();
207 // -->
208 </script>
209 </body>
210 </html>
+0
-211
doc/epydoc/html/ClusterShell.Engine.Engine.EngineTimeoutException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.EngineTimeoutException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;EngineTimeoutException
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineTimeoutException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineTimeoutException">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_9" name="uml_class_diagram_for_clusters_9">
64 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html" title="Raised when a timeout is encountered." alt="" coords="11,443,181,487"/>
65 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.EngineException-class.html" title="Base engine exception." alt="" coords="33,379,156,423"/>
66 <area shape="rect" id="node42" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
67 <area shape="rect" id="node42" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
68 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
69 <area shape="rect" id="node43" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node43" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node43" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node43" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node43" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node43" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node43" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node43" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node43" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node43" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node43" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node43" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_9.png" alt='' usemap="#uml_class_diagram_for_clusters_9" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised when a timeout is encountered.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td colspan="2" class="summary">
108 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
109 <code>__init__</code>,
110 <code>__new__</code>
111 </p>
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
113 <code>__delattr__</code>,
114 <code>__getattribute__</code>,
115 <code>__getitem__</code>,
116 <code>__getslice__</code>,
117 <code>__reduce__</code>,
118 <code>__repr__</code>,
119 <code>__setattr__</code>,
120 <code>__setstate__</code>,
121 <code>__str__</code>,
122 <code>__unicode__</code>
123 </p>
124 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
125 <code>__format__</code>,
126 <code>__hash__</code>,
127 <code>__reduce_ex__</code>,
128 <code>__sizeof__</code>,
129 <code>__subclasshook__</code>
130 </p>
131 </td>
132 </tr>
133 </table>
134 <!-- ==================== PROPERTIES ==================== -->
135 <a name="section-Properties"></a>
136 <table class="summary" border="1" cellpadding="3"
137 cellspacing="0" width="100%" bgcolor="white">
138 <tr bgcolor="#70b0f0" class="table-header">
139 <td colspan="2" class="table-header">
140 <table border="0" cellpadding="0" cellspacing="0" width="100%">
141 <tr valign="top">
142 <td align="left"><span class="table-header">Properties</span></td>
143 <td align="right" valign="top"
144 ><span class="options">[<a href="#section-Properties"
145 class="privatelink" onclick="toggle_private();"
146 >hide private</a>]</span></td>
147 </tr>
148 </table>
149 </td>
150 </tr>
151 <tr>
152 <td colspan="2" class="summary">
153 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
154 <code>args</code>,
155 <code>message</code>
156 </p>
157 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
158 <code>__class__</code>
159 </p>
160 </td>
161 </tr>
162 </table>
163 <!-- ==================== NAVIGATION BAR ==================== -->
164 <table class="navbar" border="0" width="100%" cellpadding="0"
165 bgcolor="#a0c0ff" cellspacing="0">
166 <tr valign="middle">
167
168 <!-- Tree link -->
169 <th>&nbsp;&nbsp;&nbsp;<a
170 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
171
172 <!-- Index link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Help link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Project homepage -->
181 <th class="navbar" align="right" width="100%">
182 <table border="0" cellpadding="0" cellspacing="0">
183 <tr><th class="navbar" align="center"
184 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
185 </tr></table></th>
186 </tr>
187 </table>
188 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
189 <tr>
190 <td align="left" class="footer">
191 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
192 </td>
193 <td align="right" class="footer">
194 <a target="mainFrame" href="http://epydoc.sourceforge.net"
195 >http://epydoc.sourceforge.net</a>
196 </td>
197 </tr>
198 </table>
199
200 <script type="text/javascript">
201 <!--
202 // Private objects are initially displayed (because if
203 // javascript is turned off then we want them to be
204 // visible); but by default, we want to hide them. So hide
205 // them unless we have a cookie that says to show them.
206 checkCookie();
207 // -->
208 </script>
209 </body>
210 </html>
+0
-268
doc/epydoc/html/ClusterShell.Engine.Engine.EngineTimer-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine.EngineTimer</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;EngineTimer
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine.EngineTimer-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineTimer</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineTimer">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_10" name="uml_class_diagram_for_clusters_10">
64 <area shape="rect" id="node44" href="ClusterShell.Engine.Engine.EngineTimer-class.html#__init__" title="Create a base timer." alt="" coords="17,153,327,172"/>
65 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.EngineTimer-class.html" title="Concrete class EngineTimer" alt="" coords="5,121,339,178"/>
66 <area shape="rect" id="node45" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="53,39,291,57"/>
67 <area shape="rect" id="node45" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="53,57,291,76"/>
68 <area shape="rect" id="node45" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="53,76,291,95"/>
69 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="41,6,303,101"/>
70 </map>
71 <img src="uml_class_diagram_for_clusters_10.png" alt='' usemap="#uml_class_diagram_for_clusters_10" ismap="ismap" class="graph-without-title" />
72 </center>
73 </center>
74 <hr />
75 <p>Concrete class EngineTimer</p>
76 <p>An EngineTimer object represents a timer bound to an engine that fires
77 at a preset time in the future. Timers can fire either only once or
78 repeatedly at fixed time intervals. Repeating timers can also have their
79 next firing time manually adjusted.</p>
80 <p>A timer is not a real-time mechanism; it fires when the task's
81 underlying engine to which the timer has been added is running and able
82 to check if the timer's firing time has passed.</p>
83
84 <!-- ==================== INSTANCE METHODS ==================== -->
85 <a name="section-InstanceMethods"></a>
86 <table class="summary" border="1" cellpadding="3"
87 cellspacing="0" width="100%" bgcolor="white">
88 <tr bgcolor="#70b0f0" class="table-header">
89 <td colspan="2" class="table-header">
90 <table border="0" cellpadding="0" cellspacing="0" width="100%">
91 <tr valign="top">
92 <td align="left"><span class="table-header">Instance Methods</span></td>
93 <td align="right" valign="top"
94 ><span class="options">[<a href="#section-InstanceMethods"
95 class="privatelink" onclick="toggle_private();"
96 >hide private</a>]</span></td>
97 </tr>
98 </table>
99 </td>
100 </tr>
101 <tr>
102 <td width="15%" align="right" valign="top" class="summary">
103 <span class="summary-type">&nbsp;</span>
104 </td><td class="summary">
105 <table width="100%" cellpadding="0" cellspacing="0" border="0">
106 <tr>
107 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.EngineTimer-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
108 <span class="summary-sig-arg">fire_delay</span>,
109 <span class="summary-sig-arg">interval</span>,
110 <span class="summary-sig-arg">autoclose</span>,
111 <span class="summary-sig-arg">handler</span>)</span><br />
112 Create a base timer.</td>
113 <td align="right" valign="top">
114 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineTimer.__init__">source&nbsp;code</a></span>
115
116 </td>
117 </tr>
118 </table>
119
120 </td>
121 </tr>
122 <tr class="private">
123 <td width="15%" align="right" valign="top" class="summary">
124 <span class="summary-type">&nbsp;</span>
125 </td><td class="summary">
126 <table width="100%" cellpadding="0" cellspacing="0" border="0">
127 <tr>
128 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine.EngineTimer-class.html#_fire" class="summary-sig-name" onclick="show_private();">_fire</a>(<span class="summary-sig-arg">self</span>)</span></td>
129 <td align="right" valign="top">
130 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineTimer._fire">source&nbsp;code</a></span>
131
132 </td>
133 </tr>
134 </table>
135
136 </td>
137 </tr>
138 <tr>
139 <td colspan="2" class="summary">
140 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a></code></b>:
141 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a></code>,
142 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a></code>,
143 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a></code>
144 </p>
145 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a></code></b> (private):
146 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine" onclick="show_private();">_set_engine</a></code>
147 </p></div>
148 </td>
149 </tr>
150 </table>
151 <!-- ==================== METHOD DETAILS ==================== -->
152 <a name="section-MethodDetails"></a>
153 <table class="details" border="1" cellpadding="3"
154 cellspacing="0" width="100%" bgcolor="white">
155 <tr bgcolor="#70b0f0" class="table-header">
156 <td colspan="2" class="table-header">
157 <table border="0" cellpadding="0" cellspacing="0" width="100%">
158 <tr valign="top">
159 <td align="left"><span class="table-header">Method Details</span></td>
160 <td align="right" valign="top"
161 ><span class="options">[<a href="#section-MethodDetails"
162 class="privatelink" onclick="toggle_private();"
163 >hide private</a>]</span></td>
164 </tr>
165 </table>
166 </td>
167 </tr>
168 </table>
169 <a name="__init__"></a>
170 <div>
171 <table class="details" border="1" cellpadding="3"
172 cellspacing="0" width="100%" bgcolor="white">
173 <tr><td>
174 <table width="100%" cellpadding="0" cellspacing="0" border="0">
175 <tr valign="top"><td>
176 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
177 <span class="sig-arg">fire_delay</span>,
178 <span class="sig-arg">interval</span>,
179 <span class="sig-arg">autoclose</span>,
180 <span class="sig-arg">handler</span>)</span>
181 <br /><em class="fname">(Constructor)</em>
182 </h3>
183 </td><td align="right" valign="top"
184 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineTimer.__init__">source&nbsp;code</a></span>&nbsp;
185 </td>
186 </tr></table>
187
188 <p>Create a base timer.</p>
189 <dl class="fields">
190 <dt>Overrides:
191 <a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__">EngineBaseTimer.__init__</a>
192 <dd><em class="note">(inherited documentation)</em></dd>
193 </dt>
194 </dl>
195 </td></tr></table>
196 </div>
197 <a name="_fire"></a>
198 <div class="private">
199 <table class="details" border="1" cellpadding="3"
200 cellspacing="0" width="100%" bgcolor="white">
201 <tr><td>
202 <table width="100%" cellpadding="0" cellspacing="0" border="0">
203 <tr valign="top"><td>
204 <h3 class="epydoc"><span class="sig"><span class="sig-name">_fire</span>(<span class="sig-arg">self</span>)</span>
205 </h3>
206 </td><td align="right" valign="top"
207 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#EngineTimer._fire">source&nbsp;code</a></span>&nbsp;
208 </td>
209 </tr></table>
210
211
212 <dl class="fields">
213 <dt>Overrides:
214 <a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_fire" onclick="show_private();">EngineBaseTimer._fire</a>
215 </dt>
216 </dl>
217 </td></tr></table>
218 </div>
219 <br />
220 <!-- ==================== NAVIGATION BAR ==================== -->
221 <table class="navbar" border="0" width="100%" cellpadding="0"
222 bgcolor="#a0c0ff" cellspacing="0">
223 <tr valign="middle">
224
225 <!-- Tree link -->
226 <th>&nbsp;&nbsp;&nbsp;<a
227 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
228
229 <!-- Index link -->
230 <th>&nbsp;&nbsp;&nbsp;<a
231 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
232
233 <!-- Help link -->
234 <th>&nbsp;&nbsp;&nbsp;<a
235 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
236
237 <!-- Project homepage -->
238 <th class="navbar" align="right" width="100%">
239 <table border="0" cellpadding="0" cellspacing="0">
240 <tr><th class="navbar" align="center"
241 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
242 </tr></table></th>
243 </tr>
244 </table>
245 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
246 <tr>
247 <td align="left" class="footer">
248 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
249 </td>
250 <td align="right" class="footer">
251 <a target="mainFrame" href="http://epydoc.sourceforge.net"
252 >http://epydoc.sourceforge.net</a>
253 </td>
254 </tr>
255 </table>
256
257 <script type="text/javascript">
258 <!--
259 // Private objects are initially displayed (because if
260 // javascript is turned off then we want them to be
261 // visible); but by default, we want to hide them. So hide
262 // them unless we have a cookie that says to show them.
263 checkCookie();
264 // -->
265 </script>
266 </body>
267 </html>
+0
-390
doc/epydoc/html/ClusterShell.Engine.Engine._EngineTimerQ-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine._EngineTimerQ</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 Class&nbsp;_EngineTimerQ
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class _EngineTimerQ</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ">source&nbsp;code</a></span></p>
62 <!-- ==================== NESTED CLASSES ==================== -->
63 <a name="section-NestedClasses"></a>
64 <table class="summary" border="1" cellpadding="3"
65 cellspacing="0" width="100%" bgcolor="white">
66 <tr bgcolor="#70b0f0" class="table-header">
67 <td colspan="2" class="table-header">
68 <table border="0" cellpadding="0" cellspacing="0" width="100%">
69 <tr valign="top">
70 <td align="left"><span class="table-header">Nested Classes</span></td>
71 <td align="right" valign="top"
72 ><span class="options">[<a href="#section-NestedClasses"
73 class="privatelink" onclick="toggle_private();"
74 >hide private</a>]</span></td>
75 </tr>
76 </table>
77 </td>
78 </tr>
79 <tr class="private">
80 <td width="15%" align="right" valign="top" class="summary">
81 <span class="summary-type">&nbsp;</span>
82 </td><td class="summary">
83 <a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html" class="summary-name" onclick="show_private();">_EngineTimerCase</a><br />
84 Helper class that allows comparisons of fire times, to be easily
85 used in an heapq.
86 </td>
87 </tr>
88 </table>
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <table width="100%" cellpadding="0" cellspacing="0" border="0">
111 <tr>
112 <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
113 <span class="summary-sig-arg">engine</span>)</span><br />
114 Initializer.</td>
115 <td align="right" valign="top">
116 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.__init__">source&nbsp;code</a></span>
117
118 </td>
119 </tr>
120 </table>
121
122 </td>
123 </tr>
124 <tr>
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type">&nbsp;</span>
127 </td><td class="summary">
128 <table width="100%" cellpadding="0" cellspacing="0" border="0">
129 <tr>
130 <td><span class="summary-sig"><a name="__len__"></a><span class="summary-sig-name">__len__</span>(<span class="summary-sig-arg">self</span>)</span><br />
131 Return the number of active timers.</td>
132 <td align="right" valign="top">
133 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.__len__">source&nbsp;code</a></span>
134
135 </td>
136 </tr>
137 </table>
138
139 </td>
140 </tr>
141 <tr>
142 <td width="15%" align="right" valign="top" class="summary">
143 <span class="summary-type">&nbsp;</span>
144 </td><td class="summary">
145 <table width="100%" cellpadding="0" cellspacing="0" border="0">
146 <tr>
147 <td><span class="summary-sig"><a name="schedule"></a><span class="summary-sig-name">schedule</span>(<span class="summary-sig-arg">self</span>,
148 <span class="summary-sig-arg">client</span>)</span><br />
149 Insert and arm a client's timer.</td>
150 <td align="right" valign="top">
151 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.schedule">source&nbsp;code</a></span>
152
153 </td>
154 </tr>
155 </table>
156
157 </td>
158 </tr>
159 <tr>
160 <td width="15%" align="right" valign="top" class="summary">
161 <span class="summary-type">&nbsp;</span>
162 </td><td class="summary">
163 <table width="100%" cellpadding="0" cellspacing="0" border="0">
164 <tr>
165 <td><span class="summary-sig"><a name="reschedule"></a><span class="summary-sig-name">reschedule</span>(<span class="summary-sig-arg">self</span>,
166 <span class="summary-sig-arg">client</span>)</span><br />
167 Re-insert client's timer.</td>
168 <td align="right" valign="top">
169 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.reschedule">source&nbsp;code</a></span>
170
171 </td>
172 </tr>
173 </table>
174
175 </td>
176 </tr>
177 <tr>
178 <td width="15%" align="right" valign="top" class="summary">
179 <span class="summary-type">&nbsp;</span>
180 </td><td class="summary">
181 <table width="100%" cellpadding="0" cellspacing="0" border="0">
182 <tr>
183 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#invalidate" class="summary-sig-name">invalidate</a>(<span class="summary-sig-arg">self</span>,
184 <span class="summary-sig-arg">client</span>)</span><br />
185 Invalidate client's timer.</td>
186 <td align="right" valign="top">
187 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.invalidate">source&nbsp;code</a></span>
188
189 </td>
190 </tr>
191 </table>
192
193 </td>
194 </tr>
195 <tr class="private">
196 <td width="15%" align="right" valign="top" class="summary">
197 <span class="summary-type">&nbsp;</span>
198 </td><td class="summary">
199 <table width="100%" cellpadding="0" cellspacing="0" border="0">
200 <tr>
201 <td><span class="summary-sig"><a name="_dequeue_disarmed"></a><span class="summary-sig-name">_dequeue_disarmed</span>(<span class="summary-sig-arg">self</span>)</span><br />
202 Dequeue disarmed timers (sort of garbage collection).</td>
203 <td align="right" valign="top">
204 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ._dequeue_disarmed">source&nbsp;code</a></span>
205
206 </td>
207 </tr>
208 </table>
209
210 </td>
211 </tr>
212 <tr>
213 <td width="15%" align="right" valign="top" class="summary">
214 <span class="summary-type">&nbsp;</span>
215 </td><td class="summary">
216 <table width="100%" cellpadding="0" cellspacing="0" border="0">
217 <tr>
218 <td><span class="summary-sig"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#fire" class="summary-sig-name">fire</a>(<span class="summary-sig-arg">self</span>)</span><br />
219 Remove the smallest timer from the queue and fire its associated
220 client.</td>
221 <td align="right" valign="top">
222 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.fire">source&nbsp;code</a></span>
223
224 </td>
225 </tr>
226 </table>
227
228 </td>
229 </tr>
230 <tr>
231 <td width="15%" align="right" valign="top" class="summary">
232 <span class="summary-type">&nbsp;</span>
233 </td><td class="summary">
234 <table width="100%" cellpadding="0" cellspacing="0" border="0">
235 <tr>
236 <td><span class="summary-sig"><a name="nextfire_delay"></a><span class="summary-sig-name">nextfire_delay</span>(<span class="summary-sig-arg">self</span>)</span><br />
237 Return next timer fire delay (relative time).</td>
238 <td align="right" valign="top">
239 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.nextfire_delay">source&nbsp;code</a></span>
240
241 </td>
242 </tr>
243 </table>
244
245 </td>
246 </tr>
247 <tr>
248 <td width="15%" align="right" valign="top" class="summary">
249 <span class="summary-type">&nbsp;</span>
250 </td><td class="summary">
251 <table width="100%" cellpadding="0" cellspacing="0" border="0">
252 <tr>
253 <td><span class="summary-sig"><a name="expired"></a><span class="summary-sig-name">expired</span>(<span class="summary-sig-arg">self</span>)</span><br />
254 Has a timer expired?</td>
255 <td align="right" valign="top">
256 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.expired">source&nbsp;code</a></span>
257
258 </td>
259 </tr>
260 </table>
261
262 </td>
263 </tr>
264 <tr>
265 <td width="15%" align="right" valign="top" class="summary">
266 <span class="summary-type">&nbsp;</span>
267 </td><td class="summary">
268 <table width="100%" cellpadding="0" cellspacing="0" border="0">
269 <tr>
270 <td><span class="summary-sig"><a name="clear"></a><span class="summary-sig-name">clear</span>(<span class="summary-sig-arg">self</span>)</span><br />
271 Stop and clear all timers.</td>
272 <td align="right" valign="top">
273 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.clear">source&nbsp;code</a></span>
274
275 </td>
276 </tr>
277 </table>
278
279 </td>
280 </tr>
281 </table>
282 <!-- ==================== METHOD DETAILS ==================== -->
283 <a name="section-MethodDetails"></a>
284 <table class="details" border="1" cellpadding="3"
285 cellspacing="0" width="100%" bgcolor="white">
286 <tr bgcolor="#70b0f0" class="table-header">
287 <td colspan="2" class="table-header">
288 <table border="0" cellpadding="0" cellspacing="0" width="100%">
289 <tr valign="top">
290 <td align="left"><span class="table-header">Method Details</span></td>
291 <td align="right" valign="top"
292 ><span class="options">[<a href="#section-MethodDetails"
293 class="privatelink" onclick="toggle_private();"
294 >hide private</a>]</span></td>
295 </tr>
296 </table>
297 </td>
298 </tr>
299 </table>
300 <a name="invalidate"></a>
301 <div>
302 <table class="details" border="1" cellpadding="3"
303 cellspacing="0" width="100%" bgcolor="white">
304 <tr><td>
305 <table width="100%" cellpadding="0" cellspacing="0" border="0">
306 <tr valign="top"><td>
307 <h3 class="epydoc"><span class="sig"><span class="sig-name">invalidate</span>(<span class="sig-arg">self</span>,
308 <span class="sig-arg">client</span>)</span>
309 </h3>
310 </td><td align="right" valign="top"
311 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.invalidate">source&nbsp;code</a></span>&nbsp;
312 </td>
313 </tr></table>
314
315 <p>Invalidate client's timer. Current implementation doesn't really
316 remove the timer, but simply flags it as disarmed.</p>
317 <dl class="fields">
318 </dl>
319 </td></tr></table>
320 </div>
321 <a name="fire"></a>
322 <div>
323 <table class="details" border="1" cellpadding="3"
324 cellspacing="0" width="100%" bgcolor="white">
325 <tr><td>
326 <table width="100%" cellpadding="0" cellspacing="0" border="0">
327 <tr valign="top"><td>
328 <h3 class="epydoc"><span class="sig"><span class="sig-name">fire</span>(<span class="sig-arg">self</span>)</span>
329 </h3>
330 </td><td align="right" valign="top"
331 ><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ.fire">source&nbsp;code</a></span>&nbsp;
332 </td>
333 </tr></table>
334
335 <p>Remove the smallest timer from the queue and fire its associated
336 client. Raise IndexError if the queue is empty.</p>
337 <dl class="fields">
338 </dl>
339 </td></tr></table>
340 </div>
341 <br />
342 <!-- ==================== NAVIGATION BAR ==================== -->
343 <table class="navbar" border="0" width="100%" cellpadding="0"
344 bgcolor="#a0c0ff" cellspacing="0">
345 <tr valign="middle">
346
347 <!-- Tree link -->
348 <th>&nbsp;&nbsp;&nbsp;<a
349 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
350
351 <!-- Index link -->
352 <th>&nbsp;&nbsp;&nbsp;<a
353 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
354
355 <!-- Help link -->
356 <th>&nbsp;&nbsp;&nbsp;<a
357 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
358
359 <!-- Project homepage -->
360 <th class="navbar" align="right" width="100%">
361 <table border="0" cellpadding="0" cellspacing="0">
362 <tr><th class="navbar" align="center"
363 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
364 </tr></table></th>
365 </tr>
366 </table>
367 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
368 <tr>
369 <td align="left" class="footer">
370 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
371 </td>
372 <td align="right" class="footer">
373 <a target="mainFrame" href="http://epydoc.sourceforge.net"
374 >http://epydoc.sourceforge.net</a>
375 </td>
376 </tr>
377 </table>
378
379 <script type="text/javascript">
380 <!--
381 // Private objects are initially displayed (because if
382 // javascript is turned off then we want them to be
383 // visible); but by default, we want to hide them. So hide
384 // them unless we have a cookie that says to show them.
385 checkCookie();
386 // -->
387 </script>
388 </body>
389 </html>
+0
-215
doc/epydoc/html/ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Engine-module.html">Module&nbsp;Engine</a> ::
44 <a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">Class&nbsp;_EngineTimerQ</a> ::
45 Class&nbsp;_EngineTimerCase
46 </span>
47 </td>
48 <td>
49 <table cellpadding="0" cellspacing="0">
50 <!-- hide/show private -->
51 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
52 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
53 <tr><td align="right"><span class="options"
54 >[<a href="frames.html" target="_top">frames</a
55 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html"
56 target="_top">no&nbsp;frames</a>]</span></td></tr>
57 </table>
58 </td>
59 </tr>
60 </table>
61 <!-- ==================== CLASS DESCRIPTION ==================== -->
62 <h1 class="epydoc">Class _EngineTimerCase</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ._EngineTimerCase">source&nbsp;code</a></span></p>
63 <p>Helper class that allows comparisons of fire times, to be easily used
64 in an heapq.</p>
65
66 <!-- ==================== INSTANCE METHODS ==================== -->
67 <a name="section-InstanceMethods"></a>
68 <table class="summary" border="1" cellpadding="3"
69 cellspacing="0" width="100%" bgcolor="white">
70 <tr bgcolor="#70b0f0" class="table-header">
71 <td colspan="2" class="table-header">
72 <table border="0" cellpadding="0" cellspacing="0" width="100%">
73 <tr valign="top">
74 <td align="left"><span class="table-header">Instance Methods</span></td>
75 <td align="right" valign="top"
76 ><span class="options">[<a href="#section-InstanceMethods"
77 class="privatelink" onclick="toggle_private();"
78 >hide private</a>]</span></td>
79 </tr>
80 </table>
81 </td>
82 </tr>
83 <tr>
84 <td width="15%" align="right" valign="top" class="summary">
85 <span class="summary-type">&nbsp;</span>
86 </td><td class="summary">
87 <table width="100%" cellpadding="0" cellspacing="0" border="0">
88 <tr>
89 <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
90 <span class="summary-sig-arg">client</span>)</span></td>
91 <td align="right" valign="top">
92 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ._EngineTimerCase.__init__">source&nbsp;code</a></span>
93
94 </td>
95 </tr>
96 </table>
97
98 </td>
99 </tr>
100 <tr>
101 <td width="15%" align="right" valign="top" class="summary">
102 <span class="summary-type">&nbsp;</span>
103 </td><td class="summary">
104 <table width="100%" cellpadding="0" cellspacing="0" border="0">
105 <tr>
106 <td><span class="summary-sig"><a name="__cmp__"></a><span class="summary-sig-name">__cmp__</span>(<span class="summary-sig-arg">self</span>,
107 <span class="summary-sig-arg">other</span>)</span></td>
108 <td align="right" valign="top">
109 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ._EngineTimerCase.__cmp__">source&nbsp;code</a></span>
110
111 </td>
112 </tr>
113 </table>
114
115 </td>
116 </tr>
117 <tr>
118 <td width="15%" align="right" valign="top" class="summary">
119 <span class="summary-type">&nbsp;</span>
120 </td><td class="summary">
121 <table width="100%" cellpadding="0" cellspacing="0" border="0">
122 <tr>
123 <td><span class="summary-sig"><a name="arm"></a><span class="summary-sig-name">arm</span>(<span class="summary-sig-arg">self</span>,
124 <span class="summary-sig-arg">client</span>)</span></td>
125 <td align="right" valign="top">
126 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ._EngineTimerCase.arm">source&nbsp;code</a></span>
127
128 </td>
129 </tr>
130 </table>
131
132 </td>
133 </tr>
134 <tr>
135 <td width="15%" align="right" valign="top" class="summary">
136 <span class="summary-type">&nbsp;</span>
137 </td><td class="summary">
138 <table width="100%" cellpadding="0" cellspacing="0" border="0">
139 <tr>
140 <td><span class="summary-sig"><a name="disarm"></a><span class="summary-sig-name">disarm</span>(<span class="summary-sig-arg">self</span>)</span></td>
141 <td align="right" valign="top">
142 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ._EngineTimerCase.disarm">source&nbsp;code</a></span>
143
144 </td>
145 </tr>
146 </table>
147
148 </td>
149 </tr>
150 <tr>
151 <td width="15%" align="right" valign="top" class="summary">
152 <span class="summary-type">&nbsp;</span>
153 </td><td class="summary">
154 <table width="100%" cellpadding="0" cellspacing="0" border="0">
155 <tr>
156 <td><span class="summary-sig"><a name="armed"></a><span class="summary-sig-name">armed</span>(<span class="summary-sig-arg">self</span>)</span></td>
157 <td align="right" valign="top">
158 <span class="codelink"><a href="ClusterShell.Engine.Engine-pysrc.html#_EngineTimerQ._EngineTimerCase.armed">source&nbsp;code</a></span>
159
160 </td>
161 </tr>
162 </table>
163
164 </td>
165 </tr>
166 </table>
167 <!-- ==================== NAVIGATION BAR ==================== -->
168 <table class="navbar" border="0" width="100%" cellpadding="0"
169 bgcolor="#a0c0ff" cellspacing="0">
170 <tr valign="middle">
171
172 <!-- Tree link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Index link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Help link -->
181 <th>&nbsp;&nbsp;&nbsp;<a
182 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
183
184 <!-- Project homepage -->
185 <th class="navbar" align="right" width="100%">
186 <table border="0" cellpadding="0" cellspacing="0">
187 <tr><th class="navbar" align="center"
188 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
189 </tr></table></th>
190 </tr>
191 </table>
192 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
193 <tr>
194 <td align="left" class="footer">
195 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
196 </td>
197 <td align="right" class="footer">
198 <a target="mainFrame" href="http://epydoc.sourceforge.net"
199 >http://epydoc.sourceforge.net</a>
200 </td>
201 </tr>
202 </table>
203
204 <script type="text/javascript">
205 <!--
206 // Private objects are initially displayed (because if
207 // javascript is turned off then we want them to be
208 // visible); but by default, we want to hide them. So hide
209 // them unless we have a cookie that says to show them.
210 checkCookie();
211 // -->
212 </script>
213 </body>
214 </html>
+0
-163
doc/epydoc/html/ClusterShell.Engine.Factory-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Factory</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 Module&nbsp;Factory
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Factory-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module Factory</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Factory-pysrc.html">source&nbsp;code</a></span></p>
61 <p>Engine Factory to select the best working event engine for the current
62 version of Python and Operating System.</p>
63
64 <!-- ==================== CLASSES ==================== -->
65 <a name="section-Classes"></a>
66 <table class="summary" border="1" cellpadding="3"
67 cellspacing="0" width="100%" bgcolor="white">
68 <tr bgcolor="#70b0f0" class="table-header">
69 <td colspan="2" class="table-header">
70 <table border="0" cellpadding="0" cellspacing="0" width="100%">
71 <tr valign="top">
72 <td align="left"><span class="table-header">Classes</span></td>
73 <td align="right" valign="top"
74 ><span class="options">[<a href="#section-Classes"
75 class="privatelink" onclick="toggle_private();"
76 >hide private</a>]</span></td>
77 </tr>
78 </table>
79 </td>
80 </tr>
81 <tr>
82 <td width="15%" align="right" valign="top" class="summary">
83 <span class="summary-type">&nbsp;</span>
84 </td><td class="summary">
85 <a href="ClusterShell.Engine.Factory.PreferredEngine-class.html" class="summary-name">PreferredEngine</a><br />
86 Preferred Engine selection metaclass (DP Abstract Factory).
87 </td>
88 </tr>
89 </table>
90 <!-- ==================== VARIABLES ==================== -->
91 <a name="section-Variables"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Variables</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-Variables"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td width="15%" align="right" valign="top" class="summary">
109 <span class="summary-type">&nbsp;</span>
110 </td><td class="summary">
111 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Engine'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Engine</code><code class="variable-quote">'</code></code>
112 </td>
113 </tr>
114 </table>
115 <!-- ==================== NAVIGATION BAR ==================== -->
116 <table class="navbar" border="0" width="100%" cellpadding="0"
117 bgcolor="#a0c0ff" cellspacing="0">
118 <tr valign="middle">
119
120 <!-- Tree link -->
121 <th>&nbsp;&nbsp;&nbsp;<a
122 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
123
124 <!-- Index link -->
125 <th>&nbsp;&nbsp;&nbsp;<a
126 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
127
128 <!-- Help link -->
129 <th>&nbsp;&nbsp;&nbsp;<a
130 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
131
132 <!-- Project homepage -->
133 <th class="navbar" align="right" width="100%">
134 <table border="0" cellpadding="0" cellspacing="0">
135 <tr><th class="navbar" align="center"
136 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
137 </tr></table></th>
138 </tr>
139 </table>
140 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
141 <tr>
142 <td align="left" class="footer">
143 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
144 </td>
145 <td align="right" class="footer">
146 <a target="mainFrame" href="http://epydoc.sourceforge.net"
147 >http://epydoc.sourceforge.net</a>
148 </td>
149 </tr>
150 </table>
151
152 <script type="text/javascript">
153 <!--
154 // Private objects are initially displayed (because if
155 // javascript is turned off then we want them to be
156 // visible); but by default, we want to hide them. So hide
157 // them unless we have a cookie that says to show them.
158 checkCookie();
159 // -->
160 </script>
161 </body>
162 </html>
+0
-204
doc/epydoc/html/ClusterShell.Engine.Factory-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Factory</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 Module&nbsp;Factory
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Factory-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Engine.Factory-module.html">Module ClusterShell.Engine.Factory</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2009, 2010)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Factory.py 238 2010-02-25 22:30:31Z st-cea $</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"><tt class="py-docstring">Engine Factory to select the best working event engine for the current</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"><tt class="py-docstring">version of Python and Operating System.</tt> </tt>
98 <a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"> </tt>
100 <a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
101 <a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"> </tt>
102 <a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package ClusterShell.Engine=ClusterShell.Engine-module.html,Module ClusterShell.Engine.Engine=ClusterShell.Engine.Engine-module.html,Class ClusterShell.Engine.Engine.Engine=ClusterShell.Engine.Engine.Engine-class.html"><a title="ClusterShell.Engine
103 ClusterShell.Engine.Engine
104 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-1', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name"><a title="ClusterShell.Engine
105 ClusterShell.Engine.Engine
106 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-2', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineNotSupportedError=ClusterShell.Engine.Engine.EngineNotSupportedError-class.html"><a title="ClusterShell.Engine.Engine.EngineNotSupportedError" class="py-name" href="#" onclick="return doclink('link-3', 'EngineNotSupportedError', 'link-3');">EngineNotSupportedError</a></tt> </tt>
107 <a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"> </tt>
108 <a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"><tt class="py-comment"># Available event engines</tt> </tt>
109 <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="ClusterShell" class="py-name" href="#" onclick="return doclink('link-4', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="ClusterShell.Engine
110 ClusterShell.Engine.Engine
111 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-5', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Module ClusterShell.Engine.EPoll=ClusterShell.Engine.EPoll-module.html"><a title="ClusterShell.Engine.EPoll" class="py-name" href="#" onclick="return doclink('link-6', 'EPoll', 'link-6');">EPoll</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Class ClusterShell.Engine.EPoll.EngineEPoll=ClusterShell.Engine.EPoll.EngineEPoll-class.html"><a title="ClusterShell.Engine.EPoll.EngineEPoll" class="py-name" href="#" onclick="return doclink('link-7', 'EngineEPoll', 'link-7');">EngineEPoll</a></tt> </tt>
112 <a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-8', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="ClusterShell.Engine
113 ClusterShell.Engine.Engine
114 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-9', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Module ClusterShell.Engine.Poll=ClusterShell.Engine.Poll-module.html"><a title="ClusterShell.Engine.Poll" class="py-name" href="#" onclick="return doclink('link-10', 'Poll', 'link-10');">Poll</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.Engine.Poll.EnginePoll=ClusterShell.Engine.Poll.EnginePoll-class.html"><a title="ClusterShell.Engine.Poll.EnginePoll" class="py-name" href="#" onclick="return doclink('link-11', 'EnginePoll', 'link-11');">EnginePoll</a></tt> </tt>
115 <a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"> </tt>
116 <a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"> </tt>
117 <a name="PreferredEngine"></a><div id="PreferredEngine-def"><a name="L49"></a><tt class="py-lineno">49</tt> <a class="py-toggle" href="#" id="PreferredEngine-toggle" onclick="return toggle('PreferredEngine');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Factory.PreferredEngine-class.html">PreferredEngine</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
118 </div><div id="PreferredEngine-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="PreferredEngine-expanded"><a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
119 <a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"><tt class="py-docstring"> Preferred Engine selection metaclass (DP Abstract Factory).</tt> </tt>
120 <a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
121 <a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"> </tt>
122 <a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"> <tt id="link-12" class="py-name" targets="Variable ClusterShell.Engine.Factory.PreferredEngine.engines=ClusterShell.Engine.Factory.PreferredEngine-class.html#engines"><a title="ClusterShell.Engine.Factory.PreferredEngine.engines" class="py-name" href="#" onclick="return doclink('link-12', 'engines', 'link-12');">engines</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <tt id="link-13" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll" class="py-name" href="#" onclick="return doclink('link-13', 'EngineEPoll', 'link-7');">EngineEPoll</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Variable ClusterShell.Engine.EPoll.EngineEPoll.identifier=ClusterShell.Engine.EPoll.EngineEPoll-class.html#identifier,Variable ClusterShell.Engine.Engine.Engine.identifier=ClusterShell.Engine.Engine.Engine-class.html#identifier,Variable ClusterShell.Engine.Poll.EnginePoll.identifier=ClusterShell.Engine.Poll.EnginePoll-class.html#identifier"><a title="ClusterShell.Engine.EPoll.EngineEPoll.identifier
123 ClusterShell.Engine.Engine.Engine.identifier
124 ClusterShell.Engine.Poll.EnginePoll.identifier" class="py-name" href="#" onclick="return doclink('link-14', 'identifier', 'link-14');">identifier</a></tt><tt class="py-op">:</tt> <tt id="link-15" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll" class="py-name" href="#" onclick="return doclink('link-15', 'EngineEPoll', 'link-7');">EngineEPoll</a></tt><tt class="py-op">,</tt> </tt>
125 <a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"> <tt id="link-16" class="py-name"><a title="ClusterShell.Engine.Poll.EnginePoll" class="py-name" href="#" onclick="return doclink('link-16', 'EnginePoll', 'link-11');">EnginePoll</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.identifier
126 ClusterShell.Engine.Engine.Engine.identifier
127 ClusterShell.Engine.Poll.EnginePoll.identifier" class="py-name" href="#" onclick="return doclink('link-17', 'identifier', 'link-14');">identifier</a></tt><tt class="py-op">:</tt> <tt id="link-18" class="py-name"><a title="ClusterShell.Engine.Poll.EnginePoll" class="py-name" href="#" onclick="return doclink('link-18', 'EnginePoll', 'link-11');">EnginePoll</a></tt> <tt class="py-op">}</tt> </tt>
128 <a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"> </tt>
129 <a name="PreferredEngine.__new__"></a><div id="PreferredEngine.__new__-def"><a name="L57"></a><tt class="py-lineno">57</tt> <a class="py-toggle" href="#" id="PreferredEngine.__new__-toggle" onclick="return toggle('PreferredEngine.__new__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Factory.PreferredEngine-class.html#__new__">__new__</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">hint</tt><tt class="py-op">,</tt> <tt class="py-param">info</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
130 </div><div id="PreferredEngine.__new__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="PreferredEngine.__new__-expanded"><a name="L58"></a><tt class="py-lineno">58</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
131 <a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"><tt class="py-docstring"> Create a new preferred Engine.</tt> </tt>
132 <a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
133 <a name="L61"></a><tt class="py-lineno">61</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hint</tt> <tt class="py-keyword">or</tt> <tt class="py-name">hint</tt> <tt class="py-op">==</tt> <tt class="py-string">'auto'</tt><tt class="py-op">:</tt> </tt>
134 <a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"> <tt class="py-comment"># 2010-02-11: disable automatic EngineEPoll selection as an</tt> </tt>
135 <a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"> <tt class="py-comment"># epoll issue has been found (trac ticket #56).</tt> </tt>
136 <a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">engine_class</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt> <tt id="link-19" class="py-name"><a title="ClusterShell.Engine.Poll.EnginePoll" class="py-name" href="#" onclick="return doclink('link-19', 'EnginePoll', 'link-11');">EnginePoll</a></tt> <tt class="py-op">]</tt><tt class="py-op">:</tt> <tt class="py-comment"># in order or preference</tt> </tt>
137 <a name="L65"></a><tt class="py-lineno">65</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
138 <a name="L66"></a><tt class="py-lineno">66</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">engine_class</tt><tt class="py-op">(</tt><tt id="link-20" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-20', 'info', 'link-20');">info</a></tt><tt class="py-op">)</tt> </tt>
139 <a name="L67"></a><tt class="py-lineno">67</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-21" class="py-name"><a title="ClusterShell.Engine.Engine.EngineNotSupportedError" class="py-name" href="#" onclick="return doclink('link-21', 'EngineNotSupportedError', 'link-3');">EngineNotSupportedError</a></tt><tt class="py-op">:</tt> </tt>
140 <a name="L68"></a><tt class="py-lineno">68</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
141 <a name="L69"></a><tt class="py-lineno">69</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">"FATAL: No supported Engine found"</tt><tt class="py-op">)</tt> </tt>
142 <a name="L70"></a><tt class="py-lineno">70</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
143 <a name="L71"></a><tt class="py-lineno">71</tt> <tt class="py-line"> <tt class="py-comment"># User overriding engine selection</tt> </tt>
144 <a name="L72"></a><tt class="py-lineno">72</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
145 <a name="L73"></a><tt class="py-lineno">73</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cls</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="ClusterShell.Engine.Factory.PreferredEngine.engines" class="py-name" href="#" onclick="return doclink('link-22', 'engines', 'link-12');">engines</a></tt><tt class="py-op">[</tt><tt class="py-name">hint</tt><tt class="py-op">]</tt><tt class="py-op">(</tt><tt id="link-23" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-23', 'info', 'link-20');">info</a></tt><tt class="py-op">)</tt> </tt>
146 <a name="L74"></a><tt class="py-lineno">74</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyError</tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt><tt class="py-op">:</tt> </tt>
147 <a name="L75"></a><tt class="py-lineno">75</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid engine identifier"</tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt> </tt>
148 <a name="L76"></a><tt class="py-lineno">76</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
149 </div></div><a name="L77"></a><tt class="py-lineno">77</tt> <tt class="py-line"> </tt><script type="text/javascript">
150 <!--
151 expandto(location.href);
152 // -->
153 </script>
154 </pre>
155 <br />
156 <!-- ==================== NAVIGATION BAR ==================== -->
157 <table class="navbar" border="0" width="100%" cellpadding="0"
158 bgcolor="#a0c0ff" cellspacing="0">
159 <tr valign="middle">
160
161 <!-- Tree link -->
162 <th>&nbsp;&nbsp;&nbsp;<a
163 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
164
165 <!-- Index link -->
166 <th>&nbsp;&nbsp;&nbsp;<a
167 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
168
169 <!-- Help link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Project homepage -->
174 <th class="navbar" align="right" width="100%">
175 <table border="0" cellpadding="0" cellspacing="0">
176 <tr><th class="navbar" align="center"
177 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
178 </tr></table></th>
179 </tr>
180 </table>
181 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
182 <tr>
183 <td align="left" class="footer">
184 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
185 </td>
186 <td align="right" class="footer">
187 <a target="mainFrame" href="http://epydoc.sourceforge.net"
188 >http://epydoc.sourceforge.net</a>
189 </td>
190 </tr>
191 </table>
192
193 <script type="text/javascript">
194 <!--
195 // Private objects are initially displayed (because if
196 // javascript is turned off then we want them to be
197 // visible); but by default, we want to hide them. So hide
198 // them unless we have a cookie that says to show them.
199 checkCookie();
200 // -->
201 </script>
202 </body>
203 </html>
+0
-329
doc/epydoc/html/ClusterShell.Engine.Factory.PreferredEngine-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Factory.PreferredEngine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Factory-module.html">Module&nbsp;Factory</a> ::
44 Class&nbsp;PreferredEngine
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Factory.PreferredEngine-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class PreferredEngine</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Factory-pysrc.html#PreferredEngine">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_11" name="uml_class_diagram_for_clusters_11">
64 <area shape="rect" id="node46" href="ClusterShell.Engine.Factory.PreferredEngine-class.html#engines" title="ClusterShell.Engine.Factory.PreferredEngine.engines" alt="" coords="17,31,160,49"/>
65 <area shape="rect" id="node46" href="ClusterShell.Engine.Factory.PreferredEngine-class.html#__new__" title="Create a new preferred Engine." alt="" coords="17,52,160,71"/>
66 <area shape="rect" id="node1" href="ClusterShell.Engine.Factory.PreferredEngine-class.html" title="Preferred Engine selection metaclass (DP Abstract Factory)." alt="" coords="5,6,171,77"/>
67 </map>
68 <img src="uml_class_diagram_for_clusters_11.png" alt='' usemap="#uml_class_diagram_for_clusters_11" ismap="ismap" class="graph-without-title" />
69 </center>
70 </center>
71 <hr />
72 <p>Preferred Engine selection metaclass (DP Abstract Factory).</p>
73
74 <!-- ==================== INSTANCE METHODS ==================== -->
75 <a name="section-InstanceMethods"></a>
76 <table class="summary" border="1" cellpadding="3"
77 cellspacing="0" width="100%" bgcolor="white">
78 <tr bgcolor="#70b0f0" class="table-header">
79 <td colspan="2" class="table-header">
80 <table border="0" cellpadding="0" cellspacing="0" width="100%">
81 <tr valign="top">
82 <td align="left"><span class="table-header">Instance Methods</span></td>
83 <td align="right" valign="top"
84 ><span class="options">[<a href="#section-InstanceMethods"
85 class="privatelink" onclick="toggle_private();"
86 >hide private</a>]</span></td>
87 </tr>
88 </table>
89 </td>
90 </tr>
91 <tr>
92 <td colspan="2" class="summary">
93 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
94 <code>__delattr__</code>,
95 <code>__format__</code>,
96 <code>__getattribute__</code>,
97 <code>__hash__</code>,
98 <code>__init__</code>,
99 <code>__reduce__</code>,
100 <code>__reduce_ex__</code>,
101 <code>__repr__</code>,
102 <code>__setattr__</code>,
103 <code>__sizeof__</code>,
104 <code>__str__</code>,
105 <code>__subclasshook__</code>
106 </p>
107 </td>
108 </tr>
109 </table>
110 <!-- ==================== STATIC METHODS ==================== -->
111 <a name="section-StaticMethods"></a>
112 <table class="summary" border="1" cellpadding="3"
113 cellspacing="0" width="100%" bgcolor="white">
114 <tr bgcolor="#70b0f0" class="table-header">
115 <td colspan="2" class="table-header">
116 <table border="0" cellpadding="0" cellspacing="0" width="100%">
117 <tr valign="top">
118 <td align="left"><span class="table-header">Static Methods</span></td>
119 <td align="right" valign="top"
120 ><span class="options">[<a href="#section-StaticMethods"
121 class="privatelink" onclick="toggle_private();"
122 >hide private</a>]</span></td>
123 </tr>
124 </table>
125 </td>
126 </tr>
127 <tr>
128 <td width="15%" align="right" valign="top" class="summary">
129 <span class="summary-type">a new object with type S, a subtype of T</span>
130 </td><td class="summary">
131 <table width="100%" cellpadding="0" cellspacing="0" border="0">
132 <tr>
133 <td><span class="summary-sig"><a href="ClusterShell.Engine.Factory.PreferredEngine-class.html#__new__" class="summary-sig-name">__new__</a>(<span class="summary-sig-arg">cls</span>,
134 <span class="summary-sig-arg">hint</span>,
135 <span class="summary-sig-arg">info</span>)</span><br />
136 Create a new preferred Engine.</td>
137 <td align="right" valign="top">
138 <span class="codelink"><a href="ClusterShell.Engine.Factory-pysrc.html#PreferredEngine.__new__">source&nbsp;code</a></span>
139
140 </td>
141 </tr>
142 </table>
143
144 </td>
145 </tr>
146 </table>
147 <!-- ==================== CLASS VARIABLES ==================== -->
148 <a name="section-ClassVariables"></a>
149 <table class="summary" border="1" cellpadding="3"
150 cellspacing="0" width="100%" bgcolor="white">
151 <tr bgcolor="#70b0f0" class="table-header">
152 <td colspan="2" class="table-header">
153 <table border="0" cellpadding="0" cellspacing="0" width="100%">
154 <tr valign="top">
155 <td align="left"><span class="table-header">Class Variables</span></td>
156 <td align="right" valign="top"
157 ><span class="options">[<a href="#section-ClassVariables"
158 class="privatelink" onclick="toggle_private();"
159 >hide private</a>]</span></td>
160 </tr>
161 </table>
162 </td>
163 </tr>
164 <tr>
165 <td width="15%" align="right" valign="top" class="summary">
166 <span class="summary-type">&nbsp;</span>
167 </td><td class="summary">
168 <a href="ClusterShell.Engine.Factory.PreferredEngine-class.html#engines" class="summary-name">engines</a> = <code title="{EngineEPoll.identifier: EngineEPoll, EnginePoll.identifier: EnginePol\
169 l}">{EngineEPoll.identifier: EngineEPoll, EnginePoll.ide<code class="variable-ellipsis">...</code></code>
170 </td>
171 </tr>
172 </table>
173 <!-- ==================== PROPERTIES ==================== -->
174 <a name="section-Properties"></a>
175 <table class="summary" border="1" cellpadding="3"
176 cellspacing="0" width="100%" bgcolor="white">
177 <tr bgcolor="#70b0f0" class="table-header">
178 <td colspan="2" class="table-header">
179 <table border="0" cellpadding="0" cellspacing="0" width="100%">
180 <tr valign="top">
181 <td align="left"><span class="table-header">Properties</span></td>
182 <td align="right" valign="top"
183 ><span class="options">[<a href="#section-Properties"
184 class="privatelink" onclick="toggle_private();"
185 >hide private</a>]</span></td>
186 </tr>
187 </table>
188 </td>
189 </tr>
190 <tr>
191 <td colspan="2" class="summary">
192 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
193 <code>__class__</code>
194 </p>
195 </td>
196 </tr>
197 </table>
198 <!-- ==================== METHOD DETAILS ==================== -->
199 <a name="section-MethodDetails"></a>
200 <table class="details" border="1" cellpadding="3"
201 cellspacing="0" width="100%" bgcolor="white">
202 <tr bgcolor="#70b0f0" class="table-header">
203 <td colspan="2" class="table-header">
204 <table border="0" cellpadding="0" cellspacing="0" width="100%">
205 <tr valign="top">
206 <td align="left"><span class="table-header">Method Details</span></td>
207 <td align="right" valign="top"
208 ><span class="options">[<a href="#section-MethodDetails"
209 class="privatelink" onclick="toggle_private();"
210 >hide private</a>]</span></td>
211 </tr>
212 </table>
213 </td>
214 </tr>
215 </table>
216 <a name="__new__"></a>
217 <div>
218 <table class="details" border="1" cellpadding="3"
219 cellspacing="0" width="100%" bgcolor="white">
220 <tr><td>
221 <table width="100%" cellpadding="0" cellspacing="0" border="0">
222 <tr valign="top"><td>
223 <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">cls</span>,
224 <span class="sig-arg">hint</span>,
225 <span class="sig-arg">info</span>)</span>
226 <br /><em class="fname">Static Method</em>
227 </h3>
228 </td><td align="right" valign="top"
229 ><span class="codelink"><a href="ClusterShell.Engine.Factory-pysrc.html#PreferredEngine.__new__">source&nbsp;code</a></span>&nbsp;
230 </td>
231 </tr></table>
232
233 <p>Create a new preferred Engine.</p>
234 <dl class="fields">
235 <dt>Returns: a new object with type S, a subtype of T</dt>
236 <dt>Overrides:
237 object.__new__
238 </dt>
239 </dl>
240 </td></tr></table>
241 </div>
242 <br />
243 <!-- ==================== CLASS VARIABLE DETAILS ==================== -->
244 <a name="section-ClassVariableDetails"></a>
245 <table class="details" border="1" cellpadding="3"
246 cellspacing="0" width="100%" bgcolor="white">
247 <tr bgcolor="#70b0f0" class="table-header">
248 <td colspan="2" class="table-header">
249 <table border="0" cellpadding="0" cellspacing="0" width="100%">
250 <tr valign="top">
251 <td align="left"><span class="table-header">Class Variable Details</span></td>
252 <td align="right" valign="top"
253 ><span class="options">[<a href="#section-ClassVariableDetails"
254 class="privatelink" onclick="toggle_private();"
255 >hide private</a>]</span></td>
256 </tr>
257 </table>
258 </td>
259 </tr>
260 </table>
261 <a name="engines"></a>
262 <div>
263 <table class="details" border="1" cellpadding="3"
264 cellspacing="0" width="100%" bgcolor="white">
265 <tr><td>
266 <h3 class="epydoc">engines</h3>
267
268 <dl class="fields">
269 </dl>
270 <dl class="fields">
271 <dt>Value:</dt>
272 <dd><table><tr><td><pre class="variable">
273 {EngineEPoll.identifier: EngineEPoll, EnginePoll.identifier: EnginePol<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
274 l}
275 </pre></td></tr></table>
276 </dd>
277 </dl>
278 </td></tr></table>
279 </div>
280 <br />
281 <!-- ==================== NAVIGATION BAR ==================== -->
282 <table class="navbar" border="0" width="100%" cellpadding="0"
283 bgcolor="#a0c0ff" cellspacing="0">
284 <tr valign="middle">
285
286 <!-- Tree link -->
287 <th>&nbsp;&nbsp;&nbsp;<a
288 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
289
290 <!-- Index link -->
291 <th>&nbsp;&nbsp;&nbsp;<a
292 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
293
294 <!-- Help link -->
295 <th>&nbsp;&nbsp;&nbsp;<a
296 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
297
298 <!-- Project homepage -->
299 <th class="navbar" align="right" width="100%">
300 <table border="0" cellpadding="0" cellspacing="0">
301 <tr><th class="navbar" align="center"
302 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
303 </tr></table></th>
304 </tr>
305 </table>
306 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
307 <tr>
308 <td align="left" class="footer">
309 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
310 </td>
311 <td align="right" class="footer">
312 <a target="mainFrame" href="http://epydoc.sourceforge.net"
313 >http://epydoc.sourceforge.net</a>
314 </td>
315 </tr>
316 </table>
317
318 <script type="text/javascript">
319 <!--
320 // Private objects are initially displayed (because if
321 // javascript is turned off then we want them to be
322 // visible); but by default, we want to hide them. So hide
323 // them unless we have a cookie that says to show them.
324 checkCookie();
325 // -->
326 </script>
327 </body>
328 </html>
+0
-163
doc/epydoc/html/ClusterShell.Engine.Poll-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Poll</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 Module&nbsp;Poll
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Poll-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module Poll</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html">source&nbsp;code</a></span></p>
61 <p>A poll() based ClusterShell Engine.</p>
62 <p>The poll() system call is available on Linux and BSD.</p>
63
64 <!-- ==================== CLASSES ==================== -->
65 <a name="section-Classes"></a>
66 <table class="summary" border="1" cellpadding="3"
67 cellspacing="0" width="100%" bgcolor="white">
68 <tr bgcolor="#70b0f0" class="table-header">
69 <td colspan="2" class="table-header">
70 <table border="0" cellpadding="0" cellspacing="0" width="100%">
71 <tr valign="top">
72 <td align="left"><span class="table-header">Classes</span></td>
73 <td align="right" valign="top"
74 ><span class="options">[<a href="#section-Classes"
75 class="privatelink" onclick="toggle_private();"
76 >hide private</a>]</span></td>
77 </tr>
78 </table>
79 </td>
80 </tr>
81 <tr>
82 <td width="15%" align="right" valign="top" class="summary">
83 <span class="summary-type">&nbsp;</span>
84 </td><td class="summary">
85 <a href="ClusterShell.Engine.Poll.EnginePoll-class.html" class="summary-name">EnginePoll</a><br />
86 Poll Engine
87 </td>
88 </tr>
89 </table>
90 <!-- ==================== VARIABLES ==================== -->
91 <a name="section-Variables"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Variables</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-Variables"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td width="15%" align="right" valign="top" class="summary">
109 <span class="summary-type">&nbsp;</span>
110 </td><td class="summary">
111 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Engine'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Engine</code><code class="variable-quote">'</code></code>
112 </td>
113 </tr>
114 </table>
115 <!-- ==================== NAVIGATION BAR ==================== -->
116 <table class="navbar" border="0" width="100%" cellpadding="0"
117 bgcolor="#a0c0ff" cellspacing="0">
118 <tr valign="middle">
119
120 <!-- Tree link -->
121 <th>&nbsp;&nbsp;&nbsp;<a
122 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
123
124 <!-- Index link -->
125 <th>&nbsp;&nbsp;&nbsp;<a
126 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
127
128 <!-- Help link -->
129 <th>&nbsp;&nbsp;&nbsp;<a
130 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
131
132 <!-- Project homepage -->
133 <th class="navbar" align="right" width="100%">
134 <table border="0" cellpadding="0" cellspacing="0">
135 <tr><th class="navbar" align="center"
136 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
137 </tr></table></th>
138 </tr>
139 </table>
140 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
141 <tr>
142 <td align="left" class="footer">
143 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
144 </td>
145 <td align="right" class="footer">
146 <a target="mainFrame" href="http://epydoc.sourceforge.net"
147 >http://epydoc.sourceforge.net</a>
148 </td>
149 </tr>
150 </table>
151
152 <script type="text/javascript">
153 <!--
154 // Private objects are initially displayed (because if
155 // javascript is turned off then we want them to be
156 // visible); but by default, we want to hide them. So hide
157 // them unless we have a cookie that says to show them.
158 checkCookie();
159 // -->
160 </script>
161 </body>
162 </html>
+0
-465
doc/epydoc/html/ClusterShell.Engine.Poll-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Poll</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 Module&nbsp;Poll
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Poll-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Engine.Poll-module.html">Module ClusterShell.Engine.Poll</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Poll.py 238 2010-02-25 22:30:31Z st-cea $</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">A poll() based ClusterShell Engine.</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">The poll() system call is available on Linux and BSD.</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
100 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> </tt>
101 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">errno</tt> </tt>
102 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">select</tt> </tt>
103 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
104 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
105 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> </tt>
106 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package ClusterShell.Engine=ClusterShell.Engine-module.html,Module ClusterShell.Engine.Engine=ClusterShell.Engine.Engine-module.html,Class ClusterShell.Engine.Engine.Engine=ClusterShell.Engine.Engine.Engine-class.html"><a title="ClusterShell.Engine
107 ClusterShell.Engine.Engine
108 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-1', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name"><a title="ClusterShell.Engine
109 ClusterShell.Engine.Engine
110 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-2', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name"><a title="ClusterShell.Engine
111 ClusterShell.Engine.Engine
112 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-3', 'Engine', 'link-1');">Engine</a></tt> </tt>
113 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-4', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="ClusterShell.Engine
114 ClusterShell.Engine.Engine
115 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-5', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name"><a title="ClusterShell.Engine
116 ClusterShell.Engine.Engine
117 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-6', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineException=ClusterShell.Engine.Engine.EngineException-class.html"><a title="ClusterShell.Engine.Engine.EngineException" class="py-name" href="#" onclick="return doclink('link-7', 'EngineException', 'link-7');">EngineException</a></tt> </tt>
118 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-8', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="ClusterShell.Engine
119 ClusterShell.Engine.Engine
120 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-9', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.Engine
121 ClusterShell.Engine.Engine
122 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-10', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineNotSupportedError=ClusterShell.Engine.Engine.EngineNotSupportedError-class.html"><a title="ClusterShell.Engine.Engine.EngineNotSupportedError" class="py-name" href="#" onclick="return doclink('link-11', 'EngineNotSupportedError', 'link-11');">EngineNotSupportedError</a></tt> </tt>
123 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-12" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-12', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="ClusterShell.Engine
124 ClusterShell.Engine.Engine
125 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-13', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="ClusterShell.Engine
126 ClusterShell.Engine.Engine
127 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-14', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-15" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineTimeoutException=ClusterShell.Engine.Engine.EngineTimeoutException-class.html"><a title="ClusterShell.Engine.Engine.EngineTimeoutException" class="py-name" href="#" onclick="return doclink('link-15', 'EngineTimeoutException', 'link-15');">EngineTimeoutException</a></tt> </tt>
128 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-16" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-16', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Package ClusterShell.Worker=ClusterShell.Worker-module.html,Module ClusterShell.Worker.Worker=ClusterShell.Worker.Worker-module.html,Class ClusterShell.Worker.Worker.Worker=ClusterShell.Worker.Worker.Worker-class.html"><a title="ClusterShell.Worker
129 ClusterShell.Worker.Worker
130 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-17', 'Worker', 'link-17');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Module ClusterShell.Worker.EngineClient=ClusterShell.Worker.EngineClient-module.html,Class ClusterShell.Worker.EngineClient.EngineClient=ClusterShell.Worker.EngineClient.EngineClient-class.html"><a title="ClusterShell.Worker.EngineClient
131 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-18', 'EngineClient', 'link-18');">EngineClient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-19" class="py-name" targets="Class ClusterShell.Worker.EngineClient.EngineClientEOF=ClusterShell.Worker.EngineClient.EngineClientEOF-class.html"><a title="ClusterShell.Worker.EngineClient.EngineClientEOF" class="py-name" href="#" onclick="return doclink('link-19', 'EngineClientEOF', 'link-19');">EngineClientEOF</a></tt> </tt>
132 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
133 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> </tt>
134 <a name="EnginePoll"></a><div id="EnginePoll-def"><a name="L53"></a><tt class="py-lineno"> 53</tt> <a class="py-toggle" href="#" id="EnginePoll-toggle" onclick="return toggle('EnginePoll');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Engine.Poll.EnginePoll-class.html">EnginePoll</a><tt class="py-op">(</tt><tt class="py-base-class">Engine</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
135 </div><div id="EnginePoll-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EnginePoll-expanded"><a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
136 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"> Poll Engine</tt> </tt>
137 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
138 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> ClusterShell engine using the select.poll mechanism (Linux poll()</tt> </tt>
139 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> syscall).</tt> </tt>
140 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
141 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> </tt>
142 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt id="link-20" class="py-name" targets="Variable ClusterShell.Engine.EPoll.EngineEPoll.identifier=ClusterShell.Engine.EPoll.EngineEPoll-class.html#identifier,Variable ClusterShell.Engine.Engine.Engine.identifier=ClusterShell.Engine.Engine.Engine-class.html#identifier,Variable ClusterShell.Engine.Poll.EnginePoll.identifier=ClusterShell.Engine.Poll.EnginePoll-class.html#identifier"><a title="ClusterShell.Engine.EPoll.EngineEPoll.identifier
143 ClusterShell.Engine.Engine.Engine.identifier
144 ClusterShell.Engine.Poll.EnginePoll.identifier" class="py-name" href="#" onclick="return doclink('link-20', 'identifier', 'link-20');">identifier</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"poll"</tt> </tt>
145 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> </tt>
146 <a name="EnginePoll.__init__"></a><div id="EnginePoll.__init__-def"><a name="L63"></a><tt class="py-lineno"> 63</tt> <a class="py-toggle" href="#" id="EnginePoll.__init__-toggle" onclick="return toggle('EnginePoll.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Poll.EnginePoll-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">info</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
147 </div><div id="EnginePoll.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePoll.__init__-expanded"><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
148 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> Initialize Engine.</tt> </tt>
149 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
150 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt id="link-21" class="py-name"><a title="ClusterShell.Engine
151 ClusterShell.Engine.Engine
152 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-21', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
153 ClusterShell.Engine.Engine.Engine.__init__
154 ClusterShell.Engine.Engine.EngineAbortException.__init__
155 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
156 ClusterShell.Engine.Engine.EngineTimer.__init__
157 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
158 ClusterShell.Engine.Engine._EngineTimerQ.__init__
159 ClusterShell.Engine.Poll.EnginePoll.__init__
160 ClusterShell.MsgTree.MsgTree.__init__
161 ClusterShell.MsgTree.MsgTreeElem.__init__
162 ClusterShell.NodeSet.NodeSet.__init__
163 ClusterShell.NodeSet.NodeSetBase.__init__
164 ClusterShell.NodeSet.NodeSetParseError.__init__
165 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
166 ClusterShell.NodeSet.ParsingEngine.__init__
167 ClusterShell.NodeSet.RangeSet.__init__
168 ClusterShell.NodeSet.RangeSetPaddingError.__init__
169 ClusterShell.NodeSet.RangeSetParseError.__init__
170 ClusterShell.NodeUtils.GroupResolver.__init__
171 ClusterShell.NodeUtils.GroupResolverConfig.__init__
172 ClusterShell.NodeUtils.GroupSource.__init__
173 ClusterShell.NodeUtils.GroupSourceException.__init__
174 ClusterShell.Task.Task._SuspendCondition.__init__
175 ClusterShell.Task.Task.__init__
176 ClusterShell.Task._TaskMsgTree.__init__
177 ClusterShell.Worker.EngineClient.EngineClient.__init__
178 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
179 ClusterShell.Worker.EngineClient.EnginePort.__init__
180 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
181 ClusterShell.Worker.Popen.WorkerPopen.__init__
182 ClusterShell.Worker.Ssh.Scp.__init__
183 ClusterShell.Worker.Ssh.Ssh.__init__
184 ClusterShell.Worker.Ssh.WorkerSsh.__init__
185 ClusterShell.Worker.Worker.DistantWorker.__init__
186 ClusterShell.Worker.Worker.Worker.__init__
187 ClusterShell.Worker.Worker.WorkerSimple.__init__
188 clubak.Display.__init__
189 clush.ClushConfig.__init__
190 clush.ClushConfigError.__init__
191 clush.DirectOutputHandler.__init__
192 clush.Display.__init__
193 clush.GatherOutputHandler.__init__
194 clush.RunTimer.__init__
195 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-22', '__init__', 'link-22');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-23" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-23', 'info', 'link-23');">info</a></tt><tt class="py-op">)</tt> </tt>
196 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
197 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-comment"># get a polling object</tt> </tt>
198 <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">polling</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
199 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
200 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-24" class="py-name"><a title="ClusterShell.Engine.Engine.EngineNotSupportedError" class="py-name" href="#" onclick="return doclink('link-24', 'EngineNotSupportedError', 'link-11');">EngineNotSupportedError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
201 </div><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
202 <a name="EnginePoll._register_specific"></a><div id="EnginePoll._register_specific-def"><a name="L74"></a><tt class="py-lineno"> 74</tt> <a class="py-toggle" href="#" id="EnginePoll._register_specific-toggle" onclick="return toggle('EnginePoll._register_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Poll.EnginePoll-class.html#_register_specific">_register_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">event</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
203 </div><div id="EnginePoll._register_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePoll._register_specific-expanded"><a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt id="link-25" class="py-name"><a title="ClusterShell.Engine
204 ClusterShell.Engine.Engine
205 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-25', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_READ=ClusterShell.Engine.Engine.Engine-class.html#E_READ"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-26', 'E_READ', 'link-26');">E_READ</a></tt> <tt class="py-op">|</tt> <tt id="link-27" class="py-name"><a title="ClusterShell.Engine
206 ClusterShell.Engine.Engine
207 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-27', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_ERROR=ClusterShell.Engine.Engine.Engine-class.html#E_ERROR"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-28', 'E_ERROR', 'link-28');">E_ERROR</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
208 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLIN</tt> </tt>
209 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">event</tt> <tt class="py-op">==</tt> <tt id="link-29" class="py-name"><a title="ClusterShell.Engine
210 ClusterShell.Engine.Engine
211 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-29', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Variable ClusterShell.Engine.Engine.Engine.E_WRITE=ClusterShell.Engine.Engine.Engine-class.html#E_WRITE"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-30', 'E_WRITE', 'link-30');">E_WRITE</a></tt><tt class="py-op">:</tt> </tt>
212 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLOUT</tt> </tt>
213 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> </tt>
214 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">polling</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.register()=ClusterShell.Engine.Engine.Engine-class.html#register"><a title="ClusterShell.Engine.Engine.Engine.register" class="py-name" href="#" onclick="return doclink('link-31', 'register', 'link-31');">register</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">eventmask</tt><tt class="py-op">)</tt> </tt>
215 </div><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> </tt>
216 <a name="EnginePoll._unregister_specific"></a><div id="EnginePoll._unregister_specific-def"><a name="L82"></a><tt class="py-lineno"> 82</tt> <a class="py-toggle" href="#" id="EnginePoll._unregister_specific-toggle" onclick="return toggle('EnginePoll._unregister_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Poll.EnginePoll-class.html#_unregister_specific">_unregister_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">ev_is_set</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
217 </div><div id="EnginePoll._unregister_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePoll._unregister_specific-expanded"><a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ev_is_set</tt><tt class="py-op">:</tt> </tt>
218 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">polling</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.unregister()=ClusterShell.Engine.Engine.Engine-class.html#unregister"><a title="ClusterShell.Engine.Engine.Engine.unregister" class="py-name" href="#" onclick="return doclink('link-32', 'unregister', 'link-32');">unregister</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
219 </div><a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> </tt>
220 <a name="EnginePoll._modify_specific"></a><div id="EnginePoll._modify_specific-def"><a name="L86"></a><tt class="py-lineno"> 86</tt> <a class="py-toggle" href="#" id="EnginePoll._modify_specific-toggle" onclick="return toggle('EnginePoll._modify_specific');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Poll.EnginePoll-class.html#_modify_specific">_modify_specific</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">event</tt><tt class="py-op">,</tt> <tt class="py-param">setvalue</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
221 </div><div id="EnginePoll._modify_specific-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePoll._modify_specific-expanded"><a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
222 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt class="py-docstring"> Engine-specific modifications after a interesting event change for</tt> </tt>
223 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"><tt class="py-docstring"> a file descriptor. Called automatically by Engine register/unregister and</tt> </tt>
224 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"><tt class="py-docstring"> set_events(). For the poll() engine, it reg/unreg or modifies the event mask</tt> </tt>
225 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-docstring"> associated to a file descriptor.</tt> </tt>
226 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
227 <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 id="link-33" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine._debug()=ClusterShell.Engine.Engine.Engine-class.html#_debug"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-33', '_debug', 'link-33');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"MODSPEC fd=%d event=%x setvalue=%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">event</tt><tt class="py-op">,</tt> </tt>
228 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">setvalue</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
229 <a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">setvalue</tt><tt class="py-op">:</tt> </tt>
230 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
231 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt id="link-34" class="py-name"><a title="ClusterShell.Engine
232 ClusterShell.Engine.Engine
233 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-34', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-35', 'E_READ', 'link-26');">E_READ</a></tt> <tt class="py-op">|</tt> <tt id="link-36" class="py-name"><a title="ClusterShell.Engine
234 ClusterShell.Engine.Engine
235 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-36', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-37', 'E_ERROR', 'link-28');">E_ERROR</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
236 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLIN</tt> </tt>
237 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">event</tt> <tt class="py-op">==</tt> <tt id="link-38" class="py-name"><a title="ClusterShell.Engine
238 ClusterShell.Engine.Engine
239 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-38', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-39', 'E_WRITE', 'link-30');">E_WRITE</a></tt><tt class="py-op">:</tt> </tt>
240 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">eventmask</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLOUT</tt> </tt>
241 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">polling</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.register" class="py-name" href="#" onclick="return doclink('link-40', 'register', 'link-31');">register</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">eventmask</tt><tt class="py-op">)</tt> </tt>
242 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
243 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">polling</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.unregister" class="py-name" href="#" onclick="return doclink('link-41', 'unregister', 'link-32');">unregister</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
244 </div><a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> </tt>
245 <a name="EnginePoll.runloop"></a><div id="EnginePoll.runloop-def"><a name="L105"></a><tt class="py-lineno">105</tt> <a class="py-toggle" href="#" id="EnginePoll.runloop-toggle" onclick="return toggle('EnginePoll.runloop');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Engine.Poll.EnginePoll-class.html#runloop">runloop</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
246 </div><div id="EnginePoll.runloop-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePoll.runloop-expanded"><a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
247 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"><tt class="py-docstring"> Poll engine run(): start clients and properly get replies</tt> </tt>
248 <a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
249 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
250 <a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">timeout</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
251 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> </tt>
252 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">start_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
253 <a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> </tt>
254 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-comment"># run main event loop...</tt> </tt>
255 <a name="L115"></a><tt class="py-lineno">115</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">evlooprefcnt</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
256 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-42', '_debug', 'link-33');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"LOOP evlooprefcnt=%d (reg_clifds=%s) (timers=%d)"</tt> \ </tt>
257 <a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.keys()=ClusterShell.MsgTree.MsgTree-class.html#keys"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-43', 'keys', 'link-43');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> \ </tt>
258 <a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
259 <a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
260 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-name">timeo</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.nextfire_delay()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#nextfire_delay"><a title="ClusterShell.Engine.Engine._EngineTimerQ.nextfire_delay" class="py-name" href="#" onclick="return doclink('link-44', 'nextfire_delay', 'link-44');">nextfire_delay</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
261 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">timeo</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
262 <a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-comment"># task timeout may invalidate clients timeout</tt> </tt>
263 <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">timerq</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clear()=ClusterShell.Engine.Engine.Engine-class.html#clear,Method ClusterShell.Engine.Engine._EngineTimerQ.clear()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear,Method ClusterShell.MsgTree.MsgTree.clear()=ClusterShell.MsgTree.MsgTree-class.html#clear,Method ClusterShell.NodeSet.NodeSetBase.clear()=ClusterShell.NodeSet.NodeSetBase-class.html#clear,Method ClusterShell.NodeSet.RangeSet.clear()=ClusterShell.NodeSet.RangeSet-class.html#clear"><a title="ClusterShell.Engine.Engine.Engine.clear
264 ClusterShell.Engine.Engine._EngineTimerQ.clear
265 ClusterShell.MsgTree.MsgTree.clear
266 ClusterShell.NodeSet.NodeSetBase.clear
267 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-45', 'clear', 'link-45');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
268 <a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-name">timeo</tt> <tt class="py-op">=</tt> <tt class="py-name">timeout</tt> </tt>
269 <a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">timeo</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
270 <a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-name">timeo</tt> <tt class="py-op">=</tt> <tt class="py-name">timeout</tt> </tt>
271 <a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> </tt>
272 <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">reg_clifds_changed</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
273 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">evlist</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">polling</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-name">timeo</tt> <tt class="py-op">*</tt> <tt class="py-number">1000.0</tt> <tt class="py-op">+</tt> <tt class="py-number">1.0</tt><tt class="py-op">)</tt> </tt>
274 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> </tt>
275 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple.error()=ClusterShell.Worker.Worker.WorkerSimple-class.html#error"><a title="ClusterShell.Worker.Worker.WorkerSimple.error" class="py-name" href="#" onclick="return doclink('link-46', 'error', 'link-46');">error</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">ex_errno</tt><tt class="py-op">,</tt> <tt class="py-name">ex_strerror</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
276 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-comment"># might get interrupted by a signal</tt> </tt>
277 <a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ex_errno</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>
278 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
279 <a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">ex_errno</tt> <tt class="py-op">==</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EINVAL</tt><tt class="py-op">:</tt> </tt>
280 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> \ </tt>
281 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-string">"EnginePoll: please increase RLIMIT_NOFILE"</tt> </tt>
282 <a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
283 <a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> </tt>
284 <a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">event</tt> <tt class="py-keyword">in</tt> <tt class="py-name">evlist</tt><tt class="py-op">:</tt> </tt>
285 <a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> </tt>
286 <a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLNVAL</tt><tt class="py-op">:</tt> </tt>
287 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-47" class="py-name"><a title="ClusterShell.Engine.Engine.EngineException" class="py-name" href="#" onclick="return doclink('link-47', 'EngineException', 'link-7');">EngineException</a></tt><tt class="py-op">(</tt><tt class="py-string">"Caught POLLNVAL on fd %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
288 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> </tt>
289 <a name="L145"></a><tt class="py-lineno">145</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">reg_clifds_changed</tt><tt class="py-op">:</tt> </tt>
290 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-48', '_debug', 'link-33');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"REG CLIENTS CHANGED - Aborting current evlist"</tt><tt class="py-op">)</tt> </tt>
291 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-comment"># Oops, reconsider evlist by calling poll() again.</tt> </tt>
292 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
293 <a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> </tt>
294 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-comment"># get client instance</tt> </tt>
295 <a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine._fd2client()=ClusterShell.Engine.Engine.Engine-class.html#_fd2client"><a title="ClusterShell.Engine.Engine.Engine._fd2client" class="py-name" href="#" onclick="return doclink('link-49', '_fd2client', 'link-49');">_fd2client</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
296 <a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">client</tt> <tt class="py-keyword">or</tt> <tt class="py-name">fdev</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
297 <a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
298 <a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> </tt>
299 <a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-comment"># process this client</tt> </tt>
300 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
301 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> </tt>
302 <a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-comment"># check for poll error condition of some sort</tt> </tt>
303 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLERR</tt><tt class="py-op">:</tt> </tt>
304 <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 id="link-50" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-50', '_debug', 'link-33');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"POLLERR %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
305 <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 id="link-51" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.unregister_writer()=ClusterShell.Engine.Engine.Engine-class.html#unregister_writer"><a title="ClusterShell.Engine.Engine.Engine.unregister_writer" class="py-name" href="#" onclick="return doclink('link-51', 'unregister_writer', 'link-51');">unregister_writer</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
306 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
307 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
308 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
309 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> </tt>
310 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-comment"># check for data to read</tt> </tt>
311 <a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLIN</tt><tt class="py-op">:</tt> </tt>
312 <a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">fdev</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt id="link-52" class="py-name"><a title="ClusterShell.Engine
313 ClusterShell.Engine.Engine
314 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-52', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-53', 'E_READ', 'link-26');">E_READ</a></tt> <tt class="py-op">|</tt> <tt id="link-54" class="py-name"><a title="ClusterShell.Engine
315 ClusterShell.Engine.Engine
316 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-54', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-55', 'E_ERROR', 'link-28');">E_ERROR</a></tt><tt class="py-op">)</tt> </tt>
317 <a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">fdev</tt> </tt>
318 <a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.modify()=ClusterShell.Engine.Engine.Engine-class.html#modify"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-56', 'modify', 'link-56');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
319 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
320 <a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fdev</tt> <tt class="py-op">&amp;</tt> <tt id="link-57" class="py-name"><a title="ClusterShell.Engine
321 ClusterShell.Engine.Engine
322 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-57', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-58', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
323 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._handle_read()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read,Method ClusterShell.Worker.EngineClient.EnginePort._handle_read()=ClusterShell.Worker.EngineClient.EnginePort-class.html#_handle_read,Method ClusterShell.Worker.Pdsh.WorkerPdsh._handle_read()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_read,Method ClusterShell.Worker.Ssh.Ssh._handle_read()=ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read,Method ClusterShell.Worker.Worker.WorkerSimple._handle_read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read"><a title="ClusterShell.Worker.EngineClient.EngineClient._handle_read
324 ClusterShell.Worker.EngineClient.EnginePort._handle_read
325 ClusterShell.Worker.Pdsh.WorkerPdsh._handle_read
326 ClusterShell.Worker.Ssh.Ssh._handle_read
327 ClusterShell.Worker.Worker.WorkerSimple._handle_read" class="py-name" href="#" onclick="return doclink('link-59', '_handle_read', 'link-59');">_handle_read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
328 <a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
329 <a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._handle_error()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error,Method ClusterShell.Worker.Pdsh.WorkerPdsh._handle_error()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_error,Method ClusterShell.Worker.Ssh.Ssh._handle_error()=ClusterShell.Worker.Ssh.Ssh-class.html#_handle_error,Method ClusterShell.Worker.Worker.WorkerSimple._handle_error()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_error"><a title="ClusterShell.Worker.EngineClient.EngineClient._handle_error
330 ClusterShell.Worker.Pdsh.WorkerPdsh._handle_error
331 ClusterShell.Worker.Ssh.Ssh._handle_error
332 ClusterShell.Worker.Worker.WorkerSimple._handle_error" class="py-name" href="#" onclick="return doclink('link-60', '_handle_error', 'link-60');">_handle_error</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
333 <a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-61" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClientEOF" class="py-name" href="#" onclick="return doclink('link-61', 'EngineClientEOF', 'link-19');">EngineClientEOF</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
334 <a name="L177"></a><tt class="py-lineno">177</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="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-62', '_debug', 'link-33');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"EngineClientEOF %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
335 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fdev</tt> <tt class="py-op">&amp;</tt> <tt id="link-63" class="py-name"><a title="ClusterShell.Engine
336 ClusterShell.Engine.Engine
337 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-63', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-64', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
338 <a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.remove()=ClusterShell.Engine.Engine.Engine-class.html#remove,Method ClusterShell.MsgTree.MsgTree.remove()=ClusterShell.MsgTree.MsgTree-class.html#remove,Method ClusterShell.NodeSet.NodeSetBase.remove()=ClusterShell.NodeSet.NodeSetBase-class.html#remove,Method ClusterShell.NodeSet.RangeSet.remove()=ClusterShell.NodeSet.RangeSet-class.html#remove"><a title="ClusterShell.Engine.Engine.Engine.remove
339 ClusterShell.MsgTree.MsgTree.remove
340 ClusterShell.NodeSet.NodeSetBase.remove
341 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-65', 'remove', 'link-65');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
342 <a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
343 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> </tt>
344 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-comment"># or check for end of stream (do not handle both at the same</tt> </tt>
345 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-comment"># time because handle_read() may perform a partial read)</tt> </tt>
346 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLHUP</tt><tt class="py-op">:</tt> </tt>
347 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-66', '_debug', 'link-33');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"POLLHUP fd=%d %s (r%s,e%s,w%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> </tt>
348 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.reader_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.reader_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
349 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-67', 'reader_fileno', 'link-67');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
350 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.error_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.error_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.error_fileno
351 ClusterShell.Worker.Worker.WorkerSimple.error_fileno" class="py-name" href="#" onclick="return doclink('link-68', 'error_fileno', 'link-68');">error_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.writer_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.writer_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
352 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-69', 'writer_fileno', 'link-69');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
353 <a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
354 <a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt>
355 <a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fdev</tt> <tt class="py-op">&amp;</tt> <tt id="link-70" class="py-name"><a title="ClusterShell.Engine
356 ClusterShell.Engine.Engine
357 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-70', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-71', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
358 <a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-72" class="py-name"><a title="ClusterShell.Engine
359 ClusterShell.Engine.Engine
360 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-72', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_ERROR" class="py-name" href="#" onclick="return doclink('link-73', 'E_ERROR', 'link-28');">E_ERROR</a></tt><tt class="py-op">:</tt> </tt>
361 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-74', 'modify', 'link-56');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
362 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
363 <a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.remove
364 ClusterShell.MsgTree.MsgTree.remove
365 ClusterShell.NodeSet.NodeSetBase.remove
366 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-75', 'remove', 'link-65');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
367 <a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
368 <a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt id="link-76" class="py-name"><a title="ClusterShell.Engine
369 ClusterShell.Engine.Engine
370 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-76', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_READ" class="py-name" href="#" onclick="return doclink('link-77', 'E_READ', 'link-26');">E_READ</a></tt><tt class="py-op">:</tt> </tt>
371 <a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-78', 'modify', 'link-56');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
372 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
373 <a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.remove
374 ClusterShell.MsgTree.MsgTree.remove
375 ClusterShell.NodeSet.NodeSetBase.remove
376 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-79', 'remove', 'link-65');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
377 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
378 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> </tt>
379 <a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-comment"># check for writing</tt> </tt>
380 <a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">POLLOUT</tt><tt class="py-op">:</tt> </tt>
381 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-80', '_debug', 'link-33');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"POLLOUT fd=%d %s (r%s,e%s,w%s)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> </tt>
382 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.reader_fileno
383 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno" class="py-name" href="#" onclick="return doclink('link-81', 'reader_fileno', 'link-67');">reader_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
384 <a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.error_fileno
385 ClusterShell.Worker.Worker.WorkerSimple.error_fileno" class="py-name" href="#" onclick="return doclink('link-82', 'error_fileno', 'link-68');">error_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
386 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-83', 'writer_fileno', 'link-69');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
387 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">fdev</tt> <tt class="py-op">==</tt> <tt id="link-84" class="py-name"><a title="ClusterShell.Engine
388 ClusterShell.Engine.Engine
389 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-84', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.E_WRITE" class="py-name" href="#" onclick="return doclink('link-85', 'E_WRITE', 'link-30');">E_WRITE</a></tt> </tt>
390 <a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">fdev</tt> </tt>
391 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.modify" class="py-name" href="#" onclick="return doclink('link-86', 'modify', 'link-56');">modify</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">fdev</tt><tt class="py-op">)</tt> </tt>
392 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._handle_write()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write"><a title="ClusterShell.Worker.EngineClient.EngineClient._handle_write" class="py-name" href="#" onclick="return doclink('link-87', '_handle_write', 'link-87');">_handle_write</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
393 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> </tt>
394 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-comment"># post processing</tt> </tt>
395 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
396 <a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> </tt>
397 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-comment"># apply any changes occured during processing</tt> </tt>
398 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt><tt class="py-op">:</tt> </tt>
399 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.set_events()=ClusterShell.Engine.Engine.Engine-class.html#set_events"><a title="ClusterShell.Engine.Engine.Engine.set_events" class="py-name" href="#" onclick="return doclink('link-88', 'set_events', 'link-88');">set_events</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">,</tt> <tt class="py-name">client</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt><tt class="py-op">)</tt> </tt>
400 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> </tt>
401 <a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-comment"># check for task runloop timeout</tt> </tt>
402 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">start_time</tt> <tt class="py-op">+</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
403 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-89" class="py-name"><a title="ClusterShell.Engine.Engine.EngineTimeoutException" class="py-name" href="#" onclick="return doclink('link-89', 'EngineTimeoutException', 'link-15');">EngineTimeoutException</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
404 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> </tt>
405 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-comment"># process clients timeout</tt> </tt>
406 <a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.fire_timers()=ClusterShell.Engine.Engine.Engine-class.html#fire_timers"><a title="ClusterShell.Engine.Engine.Engine.fire_timers" class="py-name" href="#" onclick="return doclink('link-90', 'fire_timers', 'link-90');">fire_timers</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
407 <a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> </tt>
408 <a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="ClusterShell.Engine.Engine.Engine._debug" class="py-name" href="#" onclick="return doclink('link-91', '_debug', 'link-33');">_debug</a></tt><tt class="py-op">(</tt><tt class="py-string">"LOOP EXIT evlooprefcnt=%d (reg_clifds=%s) (timers=%d)"</tt> <tt class="py-op">%</tt> \ </tt>
409 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">evlooprefcnt</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reg_clifds</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timerq</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
410 </div></div><a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> </tt><script type="text/javascript">
411 <!--
412 expandto(location.href);
413 // -->
414 </script>
415 </pre>
416 <br />
417 <!-- ==================== NAVIGATION BAR ==================== -->
418 <table class="navbar" border="0" width="100%" cellpadding="0"
419 bgcolor="#a0c0ff" cellspacing="0">
420 <tr valign="middle">
421
422 <!-- Tree link -->
423 <th>&nbsp;&nbsp;&nbsp;<a
424 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
425
426 <!-- Index link -->
427 <th>&nbsp;&nbsp;&nbsp;<a
428 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
429
430 <!-- Help link -->
431 <th>&nbsp;&nbsp;&nbsp;<a
432 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
433
434 <!-- Project homepage -->
435 <th class="navbar" align="right" width="100%">
436 <table border="0" cellpadding="0" cellspacing="0">
437 <tr><th class="navbar" align="center"
438 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
439 </tr></table></th>
440 </tr>
441 </table>
442 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
443 <tr>
444 <td align="left" class="footer">
445 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
446 </td>
447 <td align="right" class="footer">
448 <a target="mainFrame" href="http://epydoc.sourceforge.net"
449 >http://epydoc.sourceforge.net</a>
450 </td>
451 </tr>
452 </table>
453
454 <script type="text/javascript">
455 <!--
456 // Private objects are initially displayed (because if
457 // javascript is turned off then we want them to be
458 // visible); but by default, we want to hide them. So hide
459 // them unless we have a cookie that says to show them.
460 checkCookie();
461 // -->
462 </script>
463 </body>
464 </html>
+0
-469
doc/epydoc/html/ClusterShell.Engine.Poll.EnginePoll-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Engine.Poll.EnginePoll</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Engine-module.html">Package&nbsp;Engine</a> ::
43 <a href="ClusterShell.Engine.Poll-module.html">Module&nbsp;Poll</a> ::
44 Class&nbsp;EnginePoll
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Engine.Poll.EnginePoll-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EnginePoll</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_12" name="uml_class_diagram_for_clusters_12">
64 <area shape="rect" id="node47" href="ClusterShell.Engine.Poll.EnginePoll-class.html#identifier" title="ClusterShell.Engine.Poll.EnginePoll.identifier" alt="" coords="99,439,228,457"/>
65 <area shape="rect" id="node47" href="ClusterShell.Engine.Poll.EnginePoll-class.html#__init__" title="Initialize Engine." alt="" coords="99,460,228,479"/>
66 <area shape="rect" id="node47" href="ClusterShell.Engine.Poll.EnginePoll-class.html#runloop" title="Poll engine run(): start clients and properly get replies" alt="" coords="99,479,228,497"/>
67 <area shape="rect" id="node1" href="ClusterShell.Engine.Poll.EnginePoll-class.html" title="Poll Engine" alt="" coords="87,414,239,503"/>
68 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#E_READ" title="ClusterShell.Engine.Engine.Engine.E_READ" alt="" coords="17,31,309,49"/>
69 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#E_ERROR" title="ClusterShell.Engine.Engine.Engine.E_ERROR" alt="" coords="17,49,309,68"/>
70 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#E_WRITE" title="ClusterShell.Engine.Engine.Engine.E_WRITE" alt="" coords="17,68,309,87"/>
71 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#E_ANY" title="ClusterShell.Engine.Engine.Engine.E_ANY" alt="" coords="17,87,309,105"/>
72 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#clients" title="Get a copy of clients set." alt="" coords="17,108,309,127"/>
73 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#ports" title="Get a copy of ports set." alt="" coords="17,127,309,145"/>
74 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#add" title="Add a client to engine." alt="" coords="17,145,309,164"/>
75 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#remove" title="Remove a client from engine." alt="" coords="17,164,309,183"/>
76 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#clear" title="Remove all clients." alt="" coords="17,183,309,201"/>
77 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#register" title="Register an engine client." alt="" coords="17,201,309,220"/>
78 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#unregister_writer" title="ClusterShell.Engine.Engine.Engine.unregister_writer" alt="" coords="17,220,309,239"/>
79 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#unregister" title="Unregister a client." alt="" coords="17,239,309,257"/>
80 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#modify" title="Modify the next loop interest events bitset for a client." alt="" coords="17,257,309,276"/>
81 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#set_events" title="Set the active interest events bitset for a client." alt="" coords="17,276,309,295"/>
82 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#set_reading" title="Set client reading state." alt="" coords="17,295,309,313"/>
83 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#set_reading_error" title="Set client reading error state." alt="" coords="17,313,309,332"/>
84 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#set_writing" title="Set client writing state." alt="" coords="17,332,309,351"/>
85 <area shape="rect" id="node48" href="ClusterShell.Engine.Engine.Engine-class.html#exited" title="Returns True if the engine has exited the runloop once." alt="" coords="17,369,309,388"/>
86 <area shape="rect" id="node2" href="ClusterShell.Engine.Engine.Engine-class.html" title="Interface for ClusterShell engine." alt="" coords="5,6,320,394"/>
87 </map>
88 <img src="uml_class_diagram_for_clusters_12.png" alt='' usemap="#uml_class_diagram_for_clusters_12" ismap="ismap" class="graph-without-title" />
89 </center>
90 </center>
91 <hr />
92 <p>Poll Engine</p>
93 <p>ClusterShell engine using the select.poll mechanism (Linux poll()
94 syscall).</p>
95
96 <!-- ==================== INSTANCE METHODS ==================== -->
97 <a name="section-InstanceMethods"></a>
98 <table class="summary" border="1" cellpadding="3"
99 cellspacing="0" width="100%" bgcolor="white">
100 <tr bgcolor="#70b0f0" class="table-header">
101 <td colspan="2" class="table-header">
102 <table border="0" cellpadding="0" cellspacing="0" width="100%">
103 <tr valign="top">
104 <td align="left"><span class="table-header">Instance Methods</span></td>
105 <td align="right" valign="top"
106 ><span class="options">[<a href="#section-InstanceMethods"
107 class="privatelink" onclick="toggle_private();"
108 >hide private</a>]</span></td>
109 </tr>
110 </table>
111 </td>
112 </tr>
113 <tr>
114 <td width="15%" align="right" valign="top" class="summary">
115 <span class="summary-type">&nbsp;</span>
116 </td><td class="summary">
117 <table width="100%" cellpadding="0" cellspacing="0" border="0">
118 <tr>
119 <td><span class="summary-sig"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
120 <span class="summary-sig-arg">info</span>)</span><br />
121 Initialize Engine.</td>
122 <td align="right" valign="top">
123 <span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll.__init__">source&nbsp;code</a></span>
124
125 </td>
126 </tr>
127 </table>
128
129 </td>
130 </tr>
131 <tr class="private">
132 <td width="15%" align="right" valign="top" class="summary">
133 <span class="summary-type">&nbsp;</span>
134 </td><td class="summary">
135 <table width="100%" cellpadding="0" cellspacing="0" border="0">
136 <tr>
137 <td><span class="summary-sig"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#_register_specific" class="summary-sig-name" onclick="show_private();">_register_specific</a>(<span class="summary-sig-arg">self</span>,
138 <span class="summary-sig-arg">fd</span>,
139 <span class="summary-sig-arg">event</span>)</span><br />
140 Engine-specific register fd for event method.</td>
141 <td align="right" valign="top">
142 <span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll._register_specific">source&nbsp;code</a></span>
143
144 </td>
145 </tr>
146 </table>
147
148 </td>
149 </tr>
150 <tr class="private">
151 <td width="15%" align="right" valign="top" class="summary">
152 <span class="summary-type">&nbsp;</span>
153 </td><td class="summary">
154 <table width="100%" cellpadding="0" cellspacing="0" border="0">
155 <tr>
156 <td><span class="summary-sig"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#_unregister_specific" class="summary-sig-name" onclick="show_private();">_unregister_specific</a>(<span class="summary-sig-arg">self</span>,
157 <span class="summary-sig-arg">fd</span>,
158 <span class="summary-sig-arg">ev_is_set</span>)</span><br />
159 Engine-specific unregister fd method.</td>
160 <td align="right" valign="top">
161 <span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll._unregister_specific">source&nbsp;code</a></span>
162
163 </td>
164 </tr>
165 </table>
166
167 </td>
168 </tr>
169 <tr class="private">
170 <td width="15%" align="right" valign="top" class="summary">
171 <span class="summary-type">&nbsp;</span>
172 </td><td class="summary">
173 <table width="100%" cellpadding="0" cellspacing="0" border="0">
174 <tr>
175 <td><span class="summary-sig"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#_modify_specific" class="summary-sig-name" onclick="show_private();">_modify_specific</a>(<span class="summary-sig-arg">self</span>,
176 <span class="summary-sig-arg">fd</span>,
177 <span class="summary-sig-arg">event</span>,
178 <span class="summary-sig-arg">setvalue</span>)</span><br />
179 Engine-specific modifications after a interesting event change for a
180 file descriptor.</td>
181 <td align="right" valign="top">
182 <span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll._modify_specific">source&nbsp;code</a></span>
183
184 </td>
185 </tr>
186 </table>
187
188 </td>
189 </tr>
190 <tr>
191 <td width="15%" align="right" valign="top" class="summary">
192 <span class="summary-type">&nbsp;</span>
193 </td><td class="summary">
194 <table width="100%" cellpadding="0" cellspacing="0" border="0">
195 <tr>
196 <td><span class="summary-sig"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#runloop" class="summary-sig-name">runloop</a>(<span class="summary-sig-arg">self</span>,
197 <span class="summary-sig-arg">timeout</span>)</span><br />
198 Poll engine run(): start clients and properly get replies</td>
199 <td align="right" valign="top">
200 <span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll.runloop">source&nbsp;code</a></span>
201
202 </td>
203 </tr>
204 </table>
205
206 </td>
207 </tr>
208 <tr>
209 <td colspan="2" class="summary">
210 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.Engine-class.html">Engine.Engine</a></code></b>:
211 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#abort">abort</a></code>,
212 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#add">add</a></code>,
213 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#add_timer">add_timer</a></code>,
214 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#clear">clear</a></code>,
215 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#clients">clients</a></code>,
216 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#exited">exited</a></code>,
217 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#fire_timers">fire_timers</a></code>,
218 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#modify">modify</a></code>,
219 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#ports">ports</a></code>,
220 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#register">register</a></code>,
221 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#remove">remove</a></code>,
222 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#remove_timer">remove_timer</a></code>,
223 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#run">run</a></code>,
224 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#set_events">set_events</a></code>,
225 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#set_reading">set_reading</a></code>,
226 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#set_reading_error">set_reading_error</a></code>,
227 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#set_writing">set_writing</a></code>,
228 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#snoop_ports">snoop_ports</a></code>,
229 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#start_all">start_all</a></code>,
230 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#start_ports">start_ports</a></code>,
231 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#unregister">unregister</a></code>,
232 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#unregister_writer">unregister_writer</a></code>
233 </p>
234 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.Engine-class.html">Engine.Engine</a></code></b> (private):
235 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#_debug" onclick="show_private();">_debug</a></code>,
236 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#_fd2client" onclick="show_private();">_fd2client</a></code>,
237 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#_remove" onclick="show_private();">_remove</a></code>
238 </p></div>
239 </td>
240 </tr>
241 </table>
242 <!-- ==================== CLASS VARIABLES ==================== -->
243 <a name="section-ClassVariables"></a>
244 <table class="summary" border="1" cellpadding="3"
245 cellspacing="0" width="100%" bgcolor="white">
246 <tr bgcolor="#70b0f0" class="table-header">
247 <td colspan="2" class="table-header">
248 <table border="0" cellpadding="0" cellspacing="0" width="100%">
249 <tr valign="top">
250 <td align="left"><span class="table-header">Class Variables</span></td>
251 <td align="right" valign="top"
252 ><span class="options">[<a href="#section-ClassVariables"
253 class="privatelink" onclick="toggle_private();"
254 >hide private</a>]</span></td>
255 </tr>
256 </table>
257 </td>
258 </tr>
259 <tr>
260 <td width="15%" align="right" valign="top" class="summary">
261 <span class="summary-type">&nbsp;</span>
262 </td><td class="summary">
263 <a name="identifier"></a><span class="summary-name">identifier</span> = <code title="'poll'"><code class="variable-quote">'</code><code class="variable-string">poll</code><code class="variable-quote">'</code></code>
264 </td>
265 </tr>
266 <tr>
267 <td colspan="2" class="summary">
268 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.Engine-class.html">Engine.Engine</a></code></b>:
269 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#E_ANY">E_ANY</a></code>,
270 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#E_ERROR">E_ERROR</a></code>,
271 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#E_READ">E_READ</a></code>,
272 <code><a href="ClusterShell.Engine.Engine.Engine-class.html#E_WRITE">E_WRITE</a></code>
273 </p>
274 </td>
275 </tr>
276 </table>
277 <!-- ==================== METHOD DETAILS ==================== -->
278 <a name="section-MethodDetails"></a>
279 <table class="details" border="1" cellpadding="3"
280 cellspacing="0" width="100%" bgcolor="white">
281 <tr bgcolor="#70b0f0" class="table-header">
282 <td colspan="2" class="table-header">
283 <table border="0" cellpadding="0" cellspacing="0" width="100%">
284 <tr valign="top">
285 <td align="left"><span class="table-header">Method Details</span></td>
286 <td align="right" valign="top"
287 ><span class="options">[<a href="#section-MethodDetails"
288 class="privatelink" onclick="toggle_private();"
289 >hide private</a>]</span></td>
290 </tr>
291 </table>
292 </td>
293 </tr>
294 </table>
295 <a name="__init__"></a>
296 <div>
297 <table class="details" border="1" cellpadding="3"
298 cellspacing="0" width="100%" bgcolor="white">
299 <tr><td>
300 <table width="100%" cellpadding="0" cellspacing="0" border="0">
301 <tr valign="top"><td>
302 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
303 <span class="sig-arg">info</span>)</span>
304 <br /><em class="fname">(Constructor)</em>
305 </h3>
306 </td><td align="right" valign="top"
307 ><span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll.__init__">source&nbsp;code</a></span>&nbsp;
308 </td>
309 </tr></table>
310
311 <p>Initialize Engine.</p>
312 <dl class="fields">
313 <dt>Overrides:
314 <a href="ClusterShell.Engine.Engine.Engine-class.html#__init__">Engine.Engine.__init__</a>
315 </dt>
316 </dl>
317 </td></tr></table>
318 </div>
319 <a name="_register_specific"></a>
320 <div class="private">
321 <table class="details" border="1" cellpadding="3"
322 cellspacing="0" width="100%" bgcolor="white">
323 <tr><td>
324 <table width="100%" cellpadding="0" cellspacing="0" border="0">
325 <tr valign="top"><td>
326 <h3 class="epydoc"><span class="sig"><span class="sig-name">_register_specific</span>(<span class="sig-arg">self</span>,
327 <span class="sig-arg">fd</span>,
328 <span class="sig-arg">event</span>)</span>
329 </h3>
330 </td><td align="right" valign="top"
331 ><span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll._register_specific">source&nbsp;code</a></span>&nbsp;
332 </td>
333 </tr></table>
334
335 <p>Engine-specific register fd for event method.</p>
336 <dl class="fields">
337 <dt>Overrides:
338 <a href="ClusterShell.Engine.Engine.Engine-class.html#_register_specific" onclick="show_private();">Engine.Engine._register_specific</a>
339 <dd><em class="note">(inherited documentation)</em></dd>
340 </dt>
341 </dl>
342 </td></tr></table>
343 </div>
344 <a name="_unregister_specific"></a>
345 <div class="private">
346 <table class="details" border="1" cellpadding="3"
347 cellspacing="0" width="100%" bgcolor="white">
348 <tr><td>
349 <table width="100%" cellpadding="0" cellspacing="0" border="0">
350 <tr valign="top"><td>
351 <h3 class="epydoc"><span class="sig"><span class="sig-name">_unregister_specific</span>(<span class="sig-arg">self</span>,
352 <span class="sig-arg">fd</span>,
353 <span class="sig-arg">ev_is_set</span>)</span>
354 </h3>
355 </td><td align="right" valign="top"
356 ><span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll._unregister_specific">source&nbsp;code</a></span>&nbsp;
357 </td>
358 </tr></table>
359
360 <p>Engine-specific unregister fd method.</p>
361 <dl class="fields">
362 <dt>Overrides:
363 <a href="ClusterShell.Engine.Engine.Engine-class.html#_unregister_specific" onclick="show_private();">Engine.Engine._unregister_specific</a>
364 <dd><em class="note">(inherited documentation)</em></dd>
365 </dt>
366 </dl>
367 </td></tr></table>
368 </div>
369 <a name="_modify_specific"></a>
370 <div class="private">
371 <table class="details" border="1" cellpadding="3"
372 cellspacing="0" width="100%" bgcolor="white">
373 <tr><td>
374 <table width="100%" cellpadding="0" cellspacing="0" border="0">
375 <tr valign="top"><td>
376 <h3 class="epydoc"><span class="sig"><span class="sig-name">_modify_specific</span>(<span class="sig-arg">self</span>,
377 <span class="sig-arg">fd</span>,
378 <span class="sig-arg">event</span>,
379 <span class="sig-arg">setvalue</span>)</span>
380 </h3>
381 </td><td align="right" valign="top"
382 ><span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll._modify_specific">source&nbsp;code</a></span>&nbsp;
383 </td>
384 </tr></table>
385
386 <p>Engine-specific modifications after a interesting event change for a
387 file descriptor. Called automatically by Engine register/unregister and
388 set_events(). For the poll() engine, it reg/unreg or modifies the event
389 mask associated to a file descriptor.</p>
390 <dl class="fields">
391 <dt>Overrides:
392 <a href="ClusterShell.Engine.Engine.Engine-class.html#_modify_specific" onclick="show_private();">Engine.Engine._modify_specific</a>
393 </dt>
394 </dl>
395 </td></tr></table>
396 </div>
397 <a name="runloop"></a>
398 <div>
399 <table class="details" border="1" cellpadding="3"
400 cellspacing="0" width="100%" bgcolor="white">
401 <tr><td>
402 <table width="100%" cellpadding="0" cellspacing="0" border="0">
403 <tr valign="top"><td>
404 <h3 class="epydoc"><span class="sig"><span class="sig-name">runloop</span>(<span class="sig-arg">self</span>,
405 <span class="sig-arg">timeout</span>)</span>
406 </h3>
407 </td><td align="right" valign="top"
408 ><span class="codelink"><a href="ClusterShell.Engine.Poll-pysrc.html#EnginePoll.runloop">source&nbsp;code</a></span>&nbsp;
409 </td>
410 </tr></table>
411
412 <p>Poll engine run(): start clients and properly get replies</p>
413 <dl class="fields">
414 <dt>Overrides:
415 <a href="ClusterShell.Engine.Engine.Engine-class.html#runloop">Engine.Engine.runloop</a>
416 </dt>
417 </dl>
418 </td></tr></table>
419 </div>
420 <br />
421 <!-- ==================== NAVIGATION BAR ==================== -->
422 <table class="navbar" border="0" width="100%" cellpadding="0"
423 bgcolor="#a0c0ff" cellspacing="0">
424 <tr valign="middle">
425
426 <!-- Tree link -->
427 <th>&nbsp;&nbsp;&nbsp;<a
428 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
429
430 <!-- Index link -->
431 <th>&nbsp;&nbsp;&nbsp;<a
432 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
433
434 <!-- Help link -->
435 <th>&nbsp;&nbsp;&nbsp;<a
436 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
437
438 <!-- Project homepage -->
439 <th class="navbar" align="right" width="100%">
440 <table border="0" cellpadding="0" cellspacing="0">
441 <tr><th class="navbar" align="center"
442 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
443 </tr></table></th>
444 </tr>
445 </table>
446 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
447 <tr>
448 <td align="left" class="footer">
449 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
450 </td>
451 <td align="right" class="footer">
452 <a target="mainFrame" href="http://epydoc.sourceforge.net"
453 >http://epydoc.sourceforge.net</a>
454 </td>
455 </tr>
456 </table>
457
458 <script type="text/javascript">
459 <!--
460 // Private objects are initially displayed (because if
461 // javascript is turned off then we want them to be
462 // visible); but by default, we want to hide them. So hide
463 // them unless we have a cookie that says to show them.
464 checkCookie();
465 // -->
466 </script>
467 </body>
468 </html>
+0
-163
doc/epydoc/html/ClusterShell.Event-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Event</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;Event
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.Event-module.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== MODULE DESCRIPTION ==================== -->
59 <h1 class="epydoc">Module Event</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Event-pysrc.html">source&nbsp;code</a></span></p>
60 <p>Event handler support</p>
61 <p>EventHandler's derived classes may implement ev_* methods to listen on
62 worker's events.</p>
63
64 <!-- ==================== CLASSES ==================== -->
65 <a name="section-Classes"></a>
66 <table class="summary" border="1" cellpadding="3"
67 cellspacing="0" width="100%" bgcolor="white">
68 <tr bgcolor="#70b0f0" class="table-header">
69 <td colspan="2" class="table-header">
70 <table border="0" cellpadding="0" cellspacing="0" width="100%">
71 <tr valign="top">
72 <td align="left"><span class="table-header">Classes</span></td>
73 <td align="right" valign="top"
74 ><span class="options">[<a href="#section-Classes"
75 class="privatelink" onclick="toggle_private();"
76 >hide private</a>]</span></td>
77 </tr>
78 </table>
79 </td>
80 </tr>
81 <tr>
82 <td width="15%" align="right" valign="top" class="summary">
83 <span class="summary-type">&nbsp;</span>
84 </td><td class="summary">
85 <a href="ClusterShell.Event.EventHandler-class.html" class="summary-name">EventHandler</a><br />
86 Base class EventHandler.
87 </td>
88 </tr>
89 </table>
90 <!-- ==================== VARIABLES ==================== -->
91 <a name="section-Variables"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Variables</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-Variables"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td width="15%" align="right" valign="top" class="summary">
109 <span class="summary-type">&nbsp;</span>
110 </td><td class="summary">
111 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
112 </td>
113 </tr>
114 </table>
115 <!-- ==================== NAVIGATION BAR ==================== -->
116 <table class="navbar" border="0" width="100%" cellpadding="0"
117 bgcolor="#a0c0ff" cellspacing="0">
118 <tr valign="middle">
119
120 <!-- Tree link -->
121 <th>&nbsp;&nbsp;&nbsp;<a
122 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
123
124 <!-- Index link -->
125 <th>&nbsp;&nbsp;&nbsp;<a
126 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
127
128 <!-- Help link -->
129 <th>&nbsp;&nbsp;&nbsp;<a
130 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
131
132 <!-- Project homepage -->
133 <th class="navbar" align="right" width="100%">
134 <table border="0" cellpadding="0" cellspacing="0">
135 <tr><th class="navbar" align="center"
136 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
137 </tr></table></th>
138 </tr>
139 </table>
140 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
141 <tr>
142 <td align="left" class="footer">
143 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
144 </td>
145 <td align="right" class="footer">
146 <a target="mainFrame" href="http://epydoc.sourceforge.net"
147 >http://epydoc.sourceforge.net</a>
148 </td>
149 </tr>
150 </table>
151
152 <script type="text/javascript">
153 <!--
154 // Private objects are initially displayed (because if
155 // javascript is turned off then we want them to be
156 // visible); but by default, we want to hide them. So hide
157 // them unless we have a cookie that says to show them.
158 checkCookie();
159 // -->
160 </script>
161 </body>
162 </html>
+0
-216
doc/epydoc/html/ClusterShell.Event-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Event</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;Event
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.Event-pysrc.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <h1 class="epydoc">Source Code for <a href="ClusterShell.Event-module.html">Module ClusterShell.Event</a></h1>
59 <pre class="py-src">
60 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
61 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009, 2010)</tt> </tt>
62 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
63 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
64 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
65 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
66 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
67 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
68 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
69 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
70 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
71 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
72 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
73 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
74 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
75 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
76 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
77 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
78 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
79 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
80 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
81 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
82 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
83 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
84 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
85 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
86 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
87 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
88 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
89 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
90 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
91 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
92 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Event.py 292 2010-07-15 22:43:46Z st-cea $</tt> </tt>
93 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
94 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
95 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">Event handler support</tt> </tt>
96 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
97 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">EventHandler's derived classes may implement ev_* methods to listen on</tt> </tt>
98 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">worker's events.</tt> </tt>
99 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
100 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> </tt>
101 <a name="EventHandler"></a><div id="EventHandler-def"><a name="L42"></a><tt class="py-lineno"> 42</tt> <a class="py-toggle" href="#" id="EventHandler-toggle" onclick="return toggle('EventHandler');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html">EventHandler</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
102 </div><div id="EventHandler-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EventHandler-expanded"><a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
103 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> Base class EventHandler.</tt> </tt>
104 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
105 <a name="EventHandler._invoke"></a><div id="EventHandler._invoke-def"><a name="L46"></a><tt class="py-lineno"> 46</tt> <a class="py-toggle" href="#" id="EventHandler._invoke-toggle" onclick="return toggle('EventHandler._invoke');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#_invoke">_invoke</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">ev_type</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>
106 </div><div id="EventHandler._invoke-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler._invoke-expanded"><a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
107 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring"> Invoke a specific event handler.</tt> </tt>
108 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
109 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-name">ev_handler</tt> <tt class="py-op">=</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">ev_type</tt><tt class="py-op">)</tt> </tt>
110 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-name">ev_handler</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
111 </div><a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> </tt>
112 <a name="EventHandler.ev_start"></a><div id="EventHandler.ev_start-def"><a name="L53"></a><tt class="py-lineno"> 53</tt> <a class="py-toggle" href="#" id="EventHandler.ev_start-toggle" onclick="return toggle('EventHandler.ev_start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_start">ev_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
113 </div><div id="EventHandler.ev_start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_start-expanded"><a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
114 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"> Called to indicate that a worker has just started.</tt> </tt>
115 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
116 </div><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> </tt>
117 <a name="EventHandler.ev_read"></a><div id="EventHandler.ev_read-def"><a name="L58"></a><tt class="py-lineno"> 58</tt> <a class="py-toggle" href="#" id="EventHandler.ev_read-toggle" onclick="return toggle('EventHandler.ev_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_read">ev_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
118 </div><div id="EventHandler.ev_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_read-expanded"><a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
119 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> Called to indicate that a worker has data to read.</tt> </tt>
120 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
121 </div><a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> </tt>
122 <a name="EventHandler.ev_error"></a><div id="EventHandler.ev_error-def"><a name="L63"></a><tt class="py-lineno"> 63</tt> <a class="py-toggle" href="#" id="EventHandler.ev_error-toggle" onclick="return toggle('EventHandler.ev_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_error">ev_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
123 </div><div id="EventHandler.ev_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_error-expanded"><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
124 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> Called to indicate that a worker has error to read (on stderr).</tt> </tt>
125 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
126 </div><a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> </tt>
127 <a name="EventHandler.ev_written"></a><div id="EventHandler.ev_written-def"><a name="L68"></a><tt class="py-lineno"> 68</tt> <a class="py-toggle" href="#" id="EventHandler.ev_written-toggle" onclick="return toggle('EventHandler.ev_written');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_written">ev_written</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
128 </div><div id="EventHandler.ev_written-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_written-expanded"><a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
129 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"> Called to indicate that writing has been done.</tt> </tt>
130 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
131 </div><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> </tt>
132 <a name="EventHandler.ev_hup"></a><div id="EventHandler.ev_hup-def"><a name="L73"></a><tt class="py-lineno"> 73</tt> <a class="py-toggle" href="#" id="EventHandler.ev_hup-toggle" onclick="return toggle('EventHandler.ev_hup');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_hup">ev_hup</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
133 </div><div id="EventHandler.ev_hup-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_hup-expanded"><a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
134 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring"> Called to indicate that a worker's connection has been closed.</tt> </tt>
135 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
136 </div><a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> </tt>
137 <a name="EventHandler.ev_timeout"></a><div id="EventHandler.ev_timeout-def"><a name="L78"></a><tt class="py-lineno"> 78</tt> <a class="py-toggle" href="#" id="EventHandler.ev_timeout-toggle" onclick="return toggle('EventHandler.ev_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_timeout">ev_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
138 </div><div id="EventHandler.ev_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_timeout-expanded"><a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
139 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"> Called to indicate that a worker has timed out (worker timeout only).</tt> </tt>
140 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
141 </div><a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> </tt>
142 <a name="EventHandler.ev_close"></a><div id="EventHandler.ev_close-def"><a name="L83"></a><tt class="py-lineno"> 83</tt> <a class="py-toggle" href="#" id="EventHandler.ev_close-toggle" onclick="return toggle('EventHandler.ev_close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_close">ev_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
143 </div><div id="EventHandler.ev_close-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_close-expanded"><a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
144 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-docstring"> Called to indicate that a worker has just finished (it may already</tt> </tt>
145 <a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-docstring"> have failed on timeout).</tt> </tt>
146 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
147 </div><a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> </tt>
148 <a name="EventHandler.ev_msg"></a><div id="EventHandler.ev_msg-def"><a name="L89"></a><tt class="py-lineno"> 89</tt> <a class="py-toggle" href="#" id="EventHandler.ev_msg-toggle" onclick="return toggle('EventHandler.ev_msg');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_msg">ev_msg</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
149 </div><div id="EventHandler.ev_msg-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_msg-expanded"><a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
150 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-docstring"> Handle port message.</tt> </tt>
151 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
152 <a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt class="py-docstring"> @param port: The port object on which a message is available.</tt> </tt>
153 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
154 </div><a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt>
155 <a name="EventHandler.ev_timer"></a><div id="EventHandler.ev_timer-def"><a name="L96"></a><tt class="py-lineno"> 96</tt> <a class="py-toggle" href="#" id="EventHandler.ev_timer-toggle" onclick="return toggle('EventHandler.ev_timer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Event.EventHandler-class.html#ev_timer">ev_timer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
156 </div><div id="EventHandler.ev_timer-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EventHandler.ev_timer-expanded"><a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
157 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"><tt class="py-docstring"> Handle firing timer.</tt> </tt>
158 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
159 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt class="py-docstring"> @param timer: The timer that is firing. </tt> </tt>
160 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
161 </div></div><a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> </tt><script type="text/javascript">
162 <!--
163 expandto(location.href);
164 // -->
165 </script>
166 </pre>
167 <br />
168 <!-- ==================== NAVIGATION BAR ==================== -->
169 <table class="navbar" border="0" width="100%" cellpadding="0"
170 bgcolor="#a0c0ff" cellspacing="0">
171 <tr valign="middle">
172
173 <!-- Tree link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Index link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Help link -->
182 <th>&nbsp;&nbsp;&nbsp;<a
183 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
184
185 <!-- Project homepage -->
186 <th class="navbar" align="right" width="100%">
187 <table border="0" cellpadding="0" cellspacing="0">
188 <tr><th class="navbar" align="center"
189 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
190 </tr></table></th>
191 </tr>
192 </table>
193 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
194 <tr>
195 <td align="left" class="footer">
196 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:24 2010
197 </td>
198 <td align="right" class="footer">
199 <a target="mainFrame" href="http://epydoc.sourceforge.net"
200 >http://epydoc.sourceforge.net</a>
201 </td>
202 </tr>
203 </table>
204
205 <script type="text/javascript">
206 <!--
207 // Private objects are initially displayed (because if
208 // javascript is turned off then we want them to be
209 // visible); but by default, we want to hide them. So hide
210 // them unless we have a cookie that says to show them.
211 checkCookie();
212 // -->
213 </script>
214 </body>
215 </html>
+0
-464
doc/epydoc/html/ClusterShell.Event.EventHandler-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Event.EventHandler</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Event-module.html">Module&nbsp;Event</a> ::
43 Class&nbsp;EventHandler
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Event.EventHandler-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class EventHandler</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler">source&nbsp;code</a></span></p>
61 <center>
62 <div class="private"><center> <map id="uml_class_diagram_for_clusters_13" name="uml_class_diagram_for_clusters_13">
63 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_start" title="Called to indicate that a worker has just started." alt="" coords="484,39,632,57"/>
64 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_read" title="Called to indicate that a worker has data to read." alt="" coords="484,57,632,76"/>
65 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_error" title="Called to indicate that a worker has error to read (on stderr)." alt="" coords="484,76,632,95"/>
66 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_written" title="Called to indicate that writing has been done." alt="" coords="484,95,632,113"/>
67 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_hup" title="Called to indicate that a worker&#39;s connection has been closed." alt="" coords="484,113,632,132"/>
68 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_timeout" title="Called to indicate that a worker has timed out (worker timeout only)." alt="" coords="484,132,632,151"/>
69 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_close" title="Called to indicate that a worker has just finished (it may already have &#160;failed on timeout)." alt="" coords="484,151,632,169"/>
70 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_msg" title="Handle port message." alt="" coords="484,169,632,188"/>
71 <area shape="rect" id="node49" href="ClusterShell.Event.EventHandler-class.html#ev_timer" title="Handle firing timer." alt="" coords="484,188,632,207"/>
72 <area shape="rect" id="node1" href="ClusterShell.Event.EventHandler-class.html" title="Base class EventHandler." alt="" coords="472,6,643,213"/>
73 <area shape="rect" id="node2" href="ClusterShell.Task.Task._SyncMsgHandler-class.html" title="Special task control port event handler." alt="" coords="5,233,213,271"/>
74 <area shape="rect" id="node3" href="clush.DirectOutputHandler-class.html" title="Direct output event handler class." alt="" coords="243,233,432,271"/>
75 <area shape="rect" id="node4" href="clush.GatherOutputHandler-class.html" title="Gathered output event handler class." alt="" coords="461,233,656,271"/>
76 <area shape="rect" id="node5" href="clush.StdInputHandler-class.html" title="Standard input event handler class." alt="" coords="685,233,851,271"/>
77 <area shape="rect" id="node6" href="clush.RunTimer-class.html" title="clush.RunTimer" alt="" coords="880,233,1008,271"/>
78 </map>
79 <img src="uml_class_diagram_for_clusters_13.png" alt='' usemap="#uml_class_diagram_for_clusters_13" ismap="ismap" class="graph-without-title" />
80 </center></div>
81 <div class="public" style="display:none"><center> <map id="uml_class_diagram_for_clusters_14" name="uml_class_diagram_for_clusters_14">
82 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_start" title="Called to indicate that a worker has just started." alt="" coords="308,39,456,57"/>
83 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_read" title="Called to indicate that a worker has data to read." alt="" coords="308,57,456,76"/>
84 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_error" title="Called to indicate that a worker has error to read (on stderr)." alt="" coords="308,76,456,95"/>
85 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_written" title="Called to indicate that writing has been done." alt="" coords="308,95,456,113"/>
86 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_hup" title="Called to indicate that a worker&#39;s connection has been closed." alt="" coords="308,113,456,132"/>
87 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_timeout" title="Called to indicate that a worker has timed out (worker timeout only)." alt="" coords="308,132,456,151"/>
88 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_close" title="Called to indicate that a worker has just finished (it may already have &#160;failed on timeout)." alt="" coords="308,151,456,169"/>
89 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_msg" title="Handle port message." alt="" coords="308,169,456,188"/>
90 <area shape="rect" id="node55" href="ClusterShell.Event.EventHandler-class.html#ev_timer" title="Handle firing timer." alt="" coords="308,188,456,207"/>
91 <area shape="rect" id="node1" href="ClusterShell.Event.EventHandler-class.html" title="Base class EventHandler." alt="" coords="296,6,467,213"/>
92 <area shape="rect" id="node2" href="clush.DirectOutputHandler-class.html" title="Direct output event handler class." alt="" coords="5,233,195,271"/>
93 <area shape="rect" id="node3" href="clush.RunTimer-class.html" title="clush.RunTimer" alt="" coords="224,233,352,271"/>
94 <area shape="rect" id="node4" href="clush.GatherOutputHandler-class.html" title="Gathered output event handler class." alt="" coords="381,233,576,271"/>
95 <area shape="rect" id="node5" href="clush.StdInputHandler-class.html" title="Standard input event handler class." alt="" coords="605,233,771,271"/>
96 </map>
97 <img src="uml_class_diagram_for_clusters_14.png" alt='' usemap="#uml_class_diagram_for_clusters_14" ismap="ismap" class="graph-without-title" />
98 </center></div>
99 </center>
100 <hr />
101 <p>Base class EventHandler.</p>
102
103 <!-- ==================== INSTANCE METHODS ==================== -->
104 <a name="section-InstanceMethods"></a>
105 <table class="summary" border="1" cellpadding="3"
106 cellspacing="0" width="100%" bgcolor="white">
107 <tr bgcolor="#70b0f0" class="table-header">
108 <td colspan="2" class="table-header">
109 <table border="0" cellpadding="0" cellspacing="0" width="100%">
110 <tr valign="top">
111 <td align="left"><span class="table-header">Instance Methods</span></td>
112 <td align="right" valign="top"
113 ><span class="options">[<a href="#section-InstanceMethods"
114 class="privatelink" onclick="toggle_private();"
115 >hide private</a>]</span></td>
116 </tr>
117 </table>
118 </td>
119 </tr>
120 <tr class="private">
121 <td width="15%" align="right" valign="top" class="summary">
122 <span class="summary-type">&nbsp;</span>
123 </td><td class="summary">
124 <table width="100%" cellpadding="0" cellspacing="0" border="0">
125 <tr>
126 <td><span class="summary-sig"><a name="_invoke"></a><span class="summary-sig-name">_invoke</span>(<span class="summary-sig-arg">self</span>,
127 <span class="summary-sig-arg">ev_type</span>,
128 <span class="summary-sig-arg">*args</span>)</span><br />
129 Invoke a specific event handler.</td>
130 <td align="right" valign="top">
131 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler._invoke">source&nbsp;code</a></span>
132
133 </td>
134 </tr>
135 </table>
136
137 </td>
138 </tr>
139 <tr>
140 <td width="15%" align="right" valign="top" class="summary">
141 <span class="summary-type">&nbsp;</span>
142 </td><td class="summary">
143 <table width="100%" cellpadding="0" cellspacing="0" border="0">
144 <tr>
145 <td><span class="summary-sig"><a name="ev_start"></a><span class="summary-sig-name">ev_start</span>(<span class="summary-sig-arg">self</span>,
146 <span class="summary-sig-arg">worker</span>)</span><br />
147 Called to indicate that a worker has just started.</td>
148 <td align="right" valign="top">
149 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_start">source&nbsp;code</a></span>
150
151 </td>
152 </tr>
153 </table>
154
155 </td>
156 </tr>
157 <tr>
158 <td width="15%" align="right" valign="top" class="summary">
159 <span class="summary-type">&nbsp;</span>
160 </td><td class="summary">
161 <table width="100%" cellpadding="0" cellspacing="0" border="0">
162 <tr>
163 <td><span class="summary-sig"><a name="ev_read"></a><span class="summary-sig-name">ev_read</span>(<span class="summary-sig-arg">self</span>,
164 <span class="summary-sig-arg">worker</span>)</span><br />
165 Called to indicate that a worker has data to read.</td>
166 <td align="right" valign="top">
167 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_read">source&nbsp;code</a></span>
168
169 </td>
170 </tr>
171 </table>
172
173 </td>
174 </tr>
175 <tr>
176 <td width="15%" align="right" valign="top" class="summary">
177 <span class="summary-type">&nbsp;</span>
178 </td><td class="summary">
179 <table width="100%" cellpadding="0" cellspacing="0" border="0">
180 <tr>
181 <td><span class="summary-sig"><a name="ev_error"></a><span class="summary-sig-name">ev_error</span>(<span class="summary-sig-arg">self</span>,
182 <span class="summary-sig-arg">worker</span>)</span><br />
183 Called to indicate that a worker has error to read (on stderr).</td>
184 <td align="right" valign="top">
185 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_error">source&nbsp;code</a></span>
186
187 </td>
188 </tr>
189 </table>
190
191 </td>
192 </tr>
193 <tr>
194 <td width="15%" align="right" valign="top" class="summary">
195 <span class="summary-type">&nbsp;</span>
196 </td><td class="summary">
197 <table width="100%" cellpadding="0" cellspacing="0" border="0">
198 <tr>
199 <td><span class="summary-sig"><a name="ev_written"></a><span class="summary-sig-name">ev_written</span>(<span class="summary-sig-arg">self</span>,
200 <span class="summary-sig-arg">worker</span>)</span><br />
201 Called to indicate that writing has been done.</td>
202 <td align="right" valign="top">
203 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_written">source&nbsp;code</a></span>
204
205 </td>
206 </tr>
207 </table>
208
209 </td>
210 </tr>
211 <tr>
212 <td width="15%" align="right" valign="top" class="summary">
213 <span class="summary-type">&nbsp;</span>
214 </td><td class="summary">
215 <table width="100%" cellpadding="0" cellspacing="0" border="0">
216 <tr>
217 <td><span class="summary-sig"><a name="ev_hup"></a><span class="summary-sig-name">ev_hup</span>(<span class="summary-sig-arg">self</span>,
218 <span class="summary-sig-arg">worker</span>)</span><br />
219 Called to indicate that a worker's connection has been closed.</td>
220 <td align="right" valign="top">
221 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_hup">source&nbsp;code</a></span>
222
223 </td>
224 </tr>
225 </table>
226
227 </td>
228 </tr>
229 <tr>
230 <td width="15%" align="right" valign="top" class="summary">
231 <span class="summary-type">&nbsp;</span>
232 </td><td class="summary">
233 <table width="100%" cellpadding="0" cellspacing="0" border="0">
234 <tr>
235 <td><span class="summary-sig"><a name="ev_timeout"></a><span class="summary-sig-name">ev_timeout</span>(<span class="summary-sig-arg">self</span>,
236 <span class="summary-sig-arg">worker</span>)</span><br />
237 Called to indicate that a worker has timed out (worker timeout only).</td>
238 <td align="right" valign="top">
239 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_timeout">source&nbsp;code</a></span>
240
241 </td>
242 </tr>
243 </table>
244
245 </td>
246 </tr>
247 <tr>
248 <td width="15%" align="right" valign="top" class="summary">
249 <span class="summary-type">&nbsp;</span>
250 </td><td class="summary">
251 <table width="100%" cellpadding="0" cellspacing="0" border="0">
252 <tr>
253 <td><span class="summary-sig"><a name="ev_close"></a><span class="summary-sig-name">ev_close</span>(<span class="summary-sig-arg">self</span>,
254 <span class="summary-sig-arg">worker</span>)</span><br />
255 Called to indicate that a worker has just finished (it may already
256 have failed on timeout).</td>
257 <td align="right" valign="top">
258 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_close">source&nbsp;code</a></span>
259
260 </td>
261 </tr>
262 </table>
263
264 </td>
265 </tr>
266 <tr>
267 <td width="15%" align="right" valign="top" class="summary">
268 <span class="summary-type">&nbsp;</span>
269 </td><td class="summary">
270 <table width="100%" cellpadding="0" cellspacing="0" border="0">
271 <tr>
272 <td><span class="summary-sig"><a href="ClusterShell.Event.EventHandler-class.html#ev_msg" class="summary-sig-name">ev_msg</a>(<span class="summary-sig-arg">self</span>,
273 <span class="summary-sig-arg">port</span>,
274 <span class="summary-sig-arg">msg</span>)</span><br />
275 Handle port message.</td>
276 <td align="right" valign="top">
277 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_msg">source&nbsp;code</a></span>
278
279 </td>
280 </tr>
281 </table>
282
283 </td>
284 </tr>
285 <tr>
286 <td width="15%" align="right" valign="top" class="summary">
287 <span class="summary-type">&nbsp;</span>
288 </td><td class="summary">
289 <table width="100%" cellpadding="0" cellspacing="0" border="0">
290 <tr>
291 <td><span class="summary-sig"><a href="ClusterShell.Event.EventHandler-class.html#ev_timer" class="summary-sig-name">ev_timer</a>(<span class="summary-sig-arg">self</span>,
292 <span class="summary-sig-arg">timer</span>)</span><br />
293 Handle firing timer.</td>
294 <td align="right" valign="top">
295 <span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_timer">source&nbsp;code</a></span>
296
297 </td>
298 </tr>
299 </table>
300
301 </td>
302 </tr>
303 <tr>
304 <td colspan="2" class="summary">
305 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
306 <code>__delattr__</code>,
307 <code>__format__</code>,
308 <code>__getattribute__</code>,
309 <code>__hash__</code>,
310 <code>__init__</code>,
311 <code>__new__</code>,
312 <code>__reduce__</code>,
313 <code>__reduce_ex__</code>,
314 <code>__repr__</code>,
315 <code>__setattr__</code>,
316 <code>__sizeof__</code>,
317 <code>__str__</code>,
318 <code>__subclasshook__</code>
319 </p>
320 </td>
321 </tr>
322 </table>
323 <!-- ==================== PROPERTIES ==================== -->
324 <a name="section-Properties"></a>
325 <table class="summary" border="1" cellpadding="3"
326 cellspacing="0" width="100%" bgcolor="white">
327 <tr bgcolor="#70b0f0" class="table-header">
328 <td colspan="2" class="table-header">
329 <table border="0" cellpadding="0" cellspacing="0" width="100%">
330 <tr valign="top">
331 <td align="left"><span class="table-header">Properties</span></td>
332 <td align="right" valign="top"
333 ><span class="options">[<a href="#section-Properties"
334 class="privatelink" onclick="toggle_private();"
335 >hide private</a>]</span></td>
336 </tr>
337 </table>
338 </td>
339 </tr>
340 <tr>
341 <td colspan="2" class="summary">
342 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
343 <code>__class__</code>
344 </p>
345 </td>
346 </tr>
347 </table>
348 <!-- ==================== METHOD DETAILS ==================== -->
349 <a name="section-MethodDetails"></a>
350 <table class="details" border="1" cellpadding="3"
351 cellspacing="0" width="100%" bgcolor="white">
352 <tr bgcolor="#70b0f0" class="table-header">
353 <td colspan="2" class="table-header">
354 <table border="0" cellpadding="0" cellspacing="0" width="100%">
355 <tr valign="top">
356 <td align="left"><span class="table-header">Method Details</span></td>
357 <td align="right" valign="top"
358 ><span class="options">[<a href="#section-MethodDetails"
359 class="privatelink" onclick="toggle_private();"
360 >hide private</a>]</span></td>
361 </tr>
362 </table>
363 </td>
364 </tr>
365 </table>
366 <a name="ev_msg"></a>
367 <div>
368 <table class="details" border="1" cellpadding="3"
369 cellspacing="0" width="100%" bgcolor="white">
370 <tr><td>
371 <table width="100%" cellpadding="0" cellspacing="0" border="0">
372 <tr valign="top"><td>
373 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_msg</span>(<span class="sig-arg">self</span>,
374 <span class="sig-arg">port</span>,
375 <span class="sig-arg">msg</span>)</span>
376 </h3>
377 </td><td align="right" valign="top"
378 ><span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_msg">source&nbsp;code</a></span>&nbsp;
379 </td>
380 </tr></table>
381
382 <p>Handle port message.</p>
383 <dl class="fields">
384 <dt>Parameters:</dt>
385 <dd><ul class="nomargin-top">
386 <li><strong class="pname"><code>port</code></strong> - The port object on which a message is available.</li>
387 </ul></dd>
388 </dl>
389 </td></tr></table>
390 </div>
391 <a name="ev_timer"></a>
392 <div>
393 <table class="details" border="1" cellpadding="3"
394 cellspacing="0" width="100%" bgcolor="white">
395 <tr><td>
396 <table width="100%" cellpadding="0" cellspacing="0" border="0">
397 <tr valign="top"><td>
398 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_timer</span>(<span class="sig-arg">self</span>,
399 <span class="sig-arg">timer</span>)</span>
400 </h3>
401 </td><td align="right" valign="top"
402 ><span class="codelink"><a href="ClusterShell.Event-pysrc.html#EventHandler.ev_timer">source&nbsp;code</a></span>&nbsp;
403 </td>
404 </tr></table>
405
406 <p>Handle firing timer.</p>
407 <dl class="fields">
408 <dt>Parameters:</dt>
409 <dd><ul class="nomargin-top">
410 <li><strong class="pname"><code>timer</code></strong> - The timer that is firing.</li>
411 </ul></dd>
412 </dl>
413 </td></tr></table>
414 </div>
415 <br />
416 <!-- ==================== NAVIGATION BAR ==================== -->
417 <table class="navbar" border="0" width="100%" cellpadding="0"
418 bgcolor="#a0c0ff" cellspacing="0">
419 <tr valign="middle">
420
421 <!-- Tree link -->
422 <th>&nbsp;&nbsp;&nbsp;<a
423 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
424
425 <!-- Index link -->
426 <th>&nbsp;&nbsp;&nbsp;<a
427 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
428
429 <!-- Help link -->
430 <th>&nbsp;&nbsp;&nbsp;<a
431 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
432
433 <!-- Project homepage -->
434 <th class="navbar" align="right" width="100%">
435 <table border="0" cellpadding="0" cellspacing="0">
436 <tr><th class="navbar" align="center"
437 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
438 </tr></table></th>
439 </tr>
440 </table>
441 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
442 <tr>
443 <td align="left" class="footer">
444 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
445 </td>
446 <td align="right" class="footer">
447 <a target="mainFrame" href="http://epydoc.sourceforge.net"
448 >http://epydoc.sourceforge.net</a>
449 </td>
450 </tr>
451 </table>
452
453 <script type="text/javascript">
454 <!--
455 // Private objects are initially displayed (because if
456 // javascript is turned off then we want them to be
457 // visible); but by default, we want to hide them. So hide
458 // them unless we have a cookie that says to show them.
459 checkCookie();
460 // -->
461 </script>
462 </body>
463 </html>
+0
-175
doc/epydoc/html/ClusterShell.MsgTree-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.MsgTree</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;MsgTree
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.MsgTree-module.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== MODULE DESCRIPTION ==================== -->
59 <h1 class="epydoc">Module MsgTree</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html">source&nbsp;code</a></span></p>
60 <p>MsgTree</p>
61 <p>ClusterShell message tree module. The purpose of MsgTree is to provide
62 a shared message tree for storing message lines received from
63 ClusterShell Workers (for example, from remote cluster commands). It
64 should be efficient, in term of compute power and memory consumption,
65 especially when remote messages are the same.</p>
66
67 <!-- ==================== CLASSES ==================== -->
68 <a name="section-Classes"></a>
69 <table class="summary" border="1" cellpadding="3"
70 cellspacing="0" width="100%" bgcolor="white">
71 <tr bgcolor="#70b0f0" class="table-header">
72 <td colspan="2" class="table-header">
73 <table border="0" cellpadding="0" cellspacing="0" width="100%">
74 <tr valign="top">
75 <td align="left"><span class="table-header">Classes</span></td>
76 <td align="right" valign="top"
77 ><span class="options">[<a href="#section-Classes"
78 class="privatelink" onclick="toggle_private();"
79 >hide private</a>]</span></td>
80 </tr>
81 </table>
82 </td>
83 </tr>
84 <tr>
85 <td width="15%" align="right" valign="top" class="summary">
86 <span class="summary-type">&nbsp;</span>
87 </td><td class="summary">
88 <a href="ClusterShell.MsgTree.MsgTreeElem-class.html" class="summary-name">MsgTreeElem</a><br />
89 Class representing an element of the MsgTree and its associated
90 message.
91 </td>
92 </tr>
93 <tr>
94 <td width="15%" align="right" valign="top" class="summary">
95 <span class="summary-type">&nbsp;</span>
96 </td><td class="summary">
97 <a href="ClusterShell.MsgTree.MsgTree-class.html" class="summary-name">MsgTree</a><br />
98 A MsgTree object maps key objects to multi-lines messages.
99 </td>
100 </tr>
101 </table>
102 <!-- ==================== VARIABLES ==================== -->
103 <a name="section-Variables"></a>
104 <table class="summary" border="1" cellpadding="3"
105 cellspacing="0" width="100%" bgcolor="white">
106 <tr bgcolor="#70b0f0" class="table-header">
107 <td colspan="2" class="table-header">
108 <table border="0" cellpadding="0" cellspacing="0" width="100%">
109 <tr valign="top">
110 <td align="left"><span class="table-header">Variables</span></td>
111 <td align="right" valign="top"
112 ><span class="options">[<a href="#section-Variables"
113 class="privatelink" onclick="toggle_private();"
114 >hide private</a>]</span></td>
115 </tr>
116 </table>
117 </td>
118 </tr>
119 <tr>
120 <td width="15%" align="right" valign="top" class="summary">
121 <span class="summary-type">&nbsp;</span>
122 </td><td class="summary">
123 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell</code><code class="variable-quote">'</code></code>
124 </td>
125 </tr>
126 </table>
127 <!-- ==================== NAVIGATION BAR ==================== -->
128 <table class="navbar" border="0" width="100%" cellpadding="0"
129 bgcolor="#a0c0ff" cellspacing="0">
130 <tr valign="middle">
131
132 <!-- Tree link -->
133 <th>&nbsp;&nbsp;&nbsp;<a
134 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
135
136 <!-- Index link -->
137 <th>&nbsp;&nbsp;&nbsp;<a
138 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
139
140 <!-- Help link -->
141 <th>&nbsp;&nbsp;&nbsp;<a
142 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
143
144 <!-- Project homepage -->
145 <th class="navbar" align="right" width="100%">
146 <table border="0" cellpadding="0" cellspacing="0">
147 <tr><th class="navbar" align="center"
148 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
149 </tr></table></th>
150 </tr>
151 </table>
152 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
153 <tr>
154 <td align="left" class="footer">
155 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
156 </td>
157 <td align="right" class="footer">
158 <a target="mainFrame" href="http://epydoc.sourceforge.net"
159 >http://epydoc.sourceforge.net</a>
160 </td>
161 </tr>
162 </table>
163
164 <script type="text/javascript">
165 <!--
166 // Private objects are initially displayed (because if
167 // javascript is turned off then we want them to be
168 // visible); but by default, we want to hide them. So hide
169 // them unless we have a cookie that says to show them.
170 checkCookie();
171 // -->
172 </script>
173 </body>
174 </html>
+0
-393
doc/epydoc/html/ClusterShell.MsgTree-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.MsgTree</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;MsgTree
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.MsgTree-pysrc.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <h1 class="epydoc">Source Code for <a href="ClusterShell.MsgTree-module.html">Module ClusterShell.MsgTree</a></h1>
59 <pre class="py-src">
60 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
61 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009)</tt> </tt>
62 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
63 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
64 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
65 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
66 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
67 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
68 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
69 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
70 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
71 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
72 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
73 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
74 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
75 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
76 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
77 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
78 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
79 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
80 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
81 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
82 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
83 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
84 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
85 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
86 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
87 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
88 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
89 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
90 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
91 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
92 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: MsgTree.py 271 2010-06-08 14:29:04Z st-cea $</tt> </tt>
93 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
94 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
95 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">MsgTree</tt> </tt>
96 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
97 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">ClusterShell message tree module. The purpose of MsgTree is to</tt> </tt>
98 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">provide a shared message tree for storing message lines received</tt> </tt>
99 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">from ClusterShell Workers (for example, from remote cluster</tt> </tt>
100 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring">commands). It should be efficient, in term of compute power and memory</tt> </tt>
101 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring">consumption, especially when remote messages are the same.</tt> </tt>
102 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
103 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> </tt>
104 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">itertools</tt> <tt class="py-keyword">import</tt> <tt class="py-name">ifilterfalse</tt><tt class="py-op">,</tt> <tt class="py-name">imap</tt> </tt>
105 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">operator</tt> <tt class="py-keyword">import</tt> <tt class="py-name">itemgetter</tt> </tt>
106 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> </tt>
107 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> </tt>
108 <a name="MsgTreeElem"></a><div id="MsgTreeElem-def"><a name="L49"></a><tt class="py-lineno"> 49</tt> <a class="py-toggle" href="#" id="MsgTreeElem-toggle" onclick="return toggle('MsgTreeElem');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
109 </div><div id="MsgTreeElem-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="MsgTreeElem-expanded"><a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
110 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-docstring"> Class representing an element of the MsgTree and its associated</tt> </tt>
111 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-docstring"> message. Object of this class are returned by the various MsgTree</tt> </tt>
112 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt class="py-docstring"> methods like messages() or walk(). The object can then be used as</tt> </tt>
113 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-docstring"> an iterator over the message lines or casted into a string.</tt> </tt>
114 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
115 <a name="MsgTreeElem.__init__"></a><div id="MsgTreeElem.__init__-def"><a name="L56"></a><tt class="py-lineno"> 56</tt> <a class="py-toggle" href="#" id="MsgTreeElem.__init__-toggle" onclick="return toggle('MsgTreeElem.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-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">msgline</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">parent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
116 </div><div id="MsgTreeElem.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem.__init__-expanded"><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
117 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> Initialize message tree element.</tt> </tt>
118 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
119 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-comment"># structure</tt> </tt>
120 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parent</tt> </tt>
121 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">children</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
122 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-comment"># content</tt> </tt>
123 <a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">msgline</tt> <tt class="py-op">=</tt> <tt class="py-name">msgline</tt> </tt>
124 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-0" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.keys()=ClusterShell.MsgTree.MsgTree-class.html#keys"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-0', 'keys', 'link-0');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
125 </div><a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> </tt>
126 <a name="MsgTreeElem.__len__"></a><div id="MsgTreeElem.__len__-def"><a name="L67"></a><tt class="py-lineno"> 67</tt> <a class="py-toggle" href="#" id="MsgTreeElem.__len__-toggle" onclick="return toggle('MsgTreeElem.__len__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__len__">__len__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
127 </div><div id="MsgTreeElem.__len__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem.__len__-expanded"><a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-docstring">"""Length of whole message string."""</tt> </tt>
128 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
129 </div><a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
130 <a name="MsgTreeElem.__eq__"></a><div id="MsgTreeElem.__eq__-def"><a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="MsgTreeElem.__eq__-toggle" onclick="return toggle('MsgTreeElem.__eq__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__eq__">__eq__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
131 </div><div id="MsgTreeElem.__eq__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem.__eq__-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-docstring">"""Comparison method compares whole message strings."""</tt> </tt>
132 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</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">str</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
133 </div><a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
134 <a name="MsgTreeElem._shift"></a><div id="MsgTreeElem._shift-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="MsgTreeElem._shift-toggle" onclick="return toggle('MsgTreeElem._shift');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html#_shift">_shift</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">target_elem</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
135 </div><div id="MsgTreeElem._shift-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem._shift-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-docstring">"""Shift one of our key to specified target element."""</tt> </tt>
136 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-1', 'keys', 'link-0');">keys</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-2" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-2', 'keys', 'link-0');">keys</a></tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
137 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">shifting</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-3', 'keys', 'link-0');">keys</a></tt> </tt>
138 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-4', 'keys', 'link-0');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
139 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
140 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">shifting</tt> <tt class="py-op">=</tt> <tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> <tt class="py-name">key</tt> <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
141 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-5', 'keys', 'link-0');">keys</a></tt><tt class="py-op">:</tt> </tt>
142 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-6', 'keys', 'link-0');">keys</a></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.difference_update()=ClusterShell.NodeSet.NodeSet-class.html#difference_update,Method ClusterShell.NodeSet.NodeSetBase.difference_update()=ClusterShell.NodeSet.NodeSetBase-class.html#difference_update,Method ClusterShell.NodeSet.RangeSet.difference_update()=ClusterShell.NodeSet.RangeSet-class.html#difference_update"><a title="ClusterShell.NodeSet.NodeSet.difference_update
143 ClusterShell.NodeSet.NodeSetBase.difference_update
144 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-7', 'difference_update', 'link-7');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">shifting</tt><tt class="py-op">)</tt> </tt>
145 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
146 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">target_elem</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-8', 'keys', 'link-0');">keys</a></tt><tt class="py-op">:</tt> </tt>
147 <a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-name">target_elem</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-9', 'keys', 'link-0');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-name">shifting</tt> </tt>
148 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
149 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">target_elem</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-10', 'keys', 'link-0');">keys</a></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.update()=ClusterShell.NodeSet.NodeSet-class.html#update,Method ClusterShell.NodeSet.NodeSetBase.update()=ClusterShell.NodeSet.NodeSetBase-class.html#update,Method ClusterShell.NodeSet.RangeSet.update()=ClusterShell.NodeSet.RangeSet-class.html#update,Method clush.RunTimer.update()=clush.RunTimer-class.html#update"><a title="ClusterShell.NodeSet.NodeSet.update
150 ClusterShell.NodeSet.NodeSetBase.update
151 ClusterShell.NodeSet.RangeSet.update
152 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-11', 'update', 'link-11');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">shifting</tt><tt class="py-op">)</tt> </tt>
153 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
154 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">target_elem</tt> </tt>
155 </div><a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> </tt>
156 <a name="MsgTreeElem.__getitem__"></a><div id="MsgTreeElem.__getitem__-def"><a name="L92"></a><tt class="py-lineno"> 92</tt> <a class="py-toggle" href="#" id="MsgTreeElem.__getitem__-toggle" onclick="return toggle('MsgTreeElem.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">i</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
157 </div><div id="MsgTreeElem.__getitem__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem.__getitem__-expanded"><a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.lines()=ClusterShell.MsgTree.MsgTreeElem-class.html#lines"><a title="ClusterShell.MsgTree.MsgTreeElem.lines" class="py-name" href="#" onclick="return doclink('link-12', 'lines', 'link-12');">lines</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> </tt>
158 </div><a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> </tt>
159 <a name="MsgTreeElem.__iter__"></a><div id="MsgTreeElem.__iter__-def"><a name="L95"></a><tt class="py-lineno"> 95</tt> <a class="py-toggle" href="#" id="MsgTreeElem.__iter__-toggle" onclick="return toggle('MsgTreeElem.__iter__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__iter__">__iter__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
160 </div><div id="MsgTreeElem.__iter__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem.__iter__-expanded"><a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-docstring">"""Iterate over message lines starting from this tree element."""</tt> </tt>
161 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-comment"># no msgline in root element</tt> </tt>
162 <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">msgline</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
163 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
164 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-comment"># trace the message path</tt> </tt>
165 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">path</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">msgline</tt><tt class="py-op">]</tt> </tt>
166 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
167 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">msgline</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>
168 <a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">path</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.append()=ClusterShell.MsgTree.MsgTreeElem-class.html#append"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-13', 'append', 'link-13');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">msgline</tt><tt class="py-op">)</tt> </tt>
169 <a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
170 <a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-comment"># rewind path</tt> </tt>
171 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">path</tt><tt class="py-op">:</tt> </tt>
172 <a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
173 </div><a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> </tt>
174 <a name="MsgTreeElem.lines"></a><div id="MsgTreeElem.lines-def"><a name="L110"></a><tt class="py-lineno">110</tt> <a class="py-toggle" href="#" id="MsgTreeElem.lines-toggle" onclick="return toggle('MsgTreeElem.lines');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html#lines">lines</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
175 </div><div id="MsgTreeElem.lines-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem.lines-expanded"><a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
176 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"><tt class="py-docstring"> Get the whole message lines iterator from this tree element.</tt> </tt>
177 <a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
178 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">iter</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
179 </div><a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> </tt>
180 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-name">splitlines</tt> <tt class="py-op">=</tt> <tt id="link-14" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.lines" class="py-name" href="#" onclick="return doclink('link-14', 'lines', 'link-12');">lines</a></tt> </tt>
181 <a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> </tt>
182 <a name="MsgTreeElem.message"></a><div id="MsgTreeElem.message-def"><a name="L118"></a><tt class="py-lineno">118</tt> <a class="py-toggle" href="#" id="MsgTreeElem.message-toggle" onclick="return toggle('MsgTreeElem.message');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html#message">message</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
183 </div><div id="MsgTreeElem.message-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem.message-expanded"><a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
184 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> Get the whole message buffer from this tree element.</tt> </tt>
185 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
186 <a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-comment"># concat buffers</tt> </tt>
187 <a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'\n'</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Method ClusterShell.Task.Task.join()=ClusterShell.Task.Task-class.html#join"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-15', 'join', 'link-15');">join</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"><a title="ClusterShell.MsgTree.MsgTreeElem.lines" class="py-name" href="#" onclick="return doclink('link-16', 'lines', 'link-12');">lines</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
188 </div><a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> </tt>
189 <a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt id="link-17" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase.__str__()=ClusterShell.NodeSet.NodeSetBase-class.html#__str__,Method ClusterShell.NodeSet.RangeSet.__str__()=ClusterShell.NodeSet.RangeSet-class.html#__str__,Method clush.ClushConfigError.__str__()=clush.ClushConfigError-class.html#__str__"><a title="ClusterShell.NodeSet.NodeSetBase.__str__
190 ClusterShell.NodeSet.RangeSet.__str__
191 clush.ClushConfigError.__str__" class="py-name" href="#" onclick="return doclink('link-17', '__str__', 'link-17');">__str__</a></tt> <tt class="py-op">=</tt> <tt id="link-18" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.message()=ClusterShell.MsgTree.MsgTreeElem-class.html#message"><a title="ClusterShell.MsgTree.MsgTreeElem.message" class="py-name" href="#" onclick="return doclink('link-18', 'message', 'link-18');">message</a></tt> </tt>
192 <a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> </tt>
193 <a name="MsgTreeElem.append"></a><div id="MsgTreeElem.append-def"><a name="L127"></a><tt class="py-lineno">127</tt> <a class="py-toggle" href="#" id="MsgTreeElem.append-toggle" onclick="return toggle('MsgTreeElem.append');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTreeElem-class.html#append">append</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">msgline</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
194 </div><div id="MsgTreeElem.append-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTreeElem.append-expanded"><a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
195 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> A new message line is coming, append it to the tree element</tt> </tt>
196 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> with associated source key. Called by MsgTree.add().</tt> </tt>
197 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"><tt class="py-docstring"> Return corresponding newly created MsgTreeElem.</tt> </tt>
198 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
199 <a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-comment"># create new child element and shift down the key</tt> </tt>
200 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem._shift()=ClusterShell.MsgTree.MsgTreeElem-class.html#_shift"><a title="ClusterShell.MsgTree.MsgTreeElem._shift" class="py-name" href="#" onclick="return doclink('link-19', '_shift', 'link-19');">_shift</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-name">msgline</tt><tt class="py-op">,</tt> \ </tt>
201 <a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">msgline</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-op">)</tt> </tt>
202 </div></div><a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> </tt>
203 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> </tt>
204 <a name="MsgTree"></a><div id="MsgTree-def"><a name="L138"></a><tt class="py-lineno">138</tt> <a class="py-toggle" href="#" id="MsgTree-toggle" onclick="return toggle('MsgTree');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
205 </div><div id="MsgTree-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="MsgTree-expanded"><a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
206 <a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"><tt class="py-docstring"> A MsgTree object maps key objects to multi-lines messages.</tt> </tt>
207 <a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"><tt class="py-docstring"> MsgTree's are mutable objects. Keys are almost arbitrary values</tt> </tt>
208 <a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"><tt class="py-docstring"> (must be hashable). Message lines are organized as a tree</tt> </tt>
209 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"><tt class="py-docstring"> internally. MsgTree provides low memory consumption especially</tt> </tt>
210 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"><tt class="py-docstring"> on a cluster when all nodes return similar messages. Also,</tt> </tt>
211 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-docstring"> the gathering of messages is done automatically.</tt> </tt>
212 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
213 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> </tt>
214 <a name="MsgTree.__init__"></a><div id="MsgTree.__init__-def"><a name="L148"></a><tt class="py-lineno">148</tt> <a class="py-toggle" href="#" id="MsgTree.__init__-toggle" onclick="return toggle('MsgTree.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-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>
215 </div><div id="MsgTree.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.__init__-expanded"><a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-comment"># root element of MsgTree</tt> </tt>
216 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_root</tt> <tt class="py-op">=</tt> <tt id="link-20" class="py-name" targets="Class ClusterShell.MsgTree.MsgTreeElem=ClusterShell.MsgTree.MsgTreeElem-class.html"><a title="ClusterShell.MsgTree.MsgTreeElem" class="py-name" href="#" onclick="return doclink('link-20', 'MsgTreeElem', 'link-20');">MsgTreeElem</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
217 <a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-comment"># dict of keys to MsgTreeElem</tt> </tt>
218 <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">_keys</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
219 </div><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> </tt>
220 <a name="MsgTree.clear"></a><div id="MsgTree.clear-def"><a name="L154"></a><tt class="py-lineno">154</tt> <a class="py-toggle" href="#" id="MsgTree.clear-toggle" onclick="return toggle('MsgTree.clear');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#clear">clear</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
221 </div><div id="MsgTree.clear-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.clear-expanded"><a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-docstring">"""Remove all items from the MsgTree."""</tt> </tt>
222 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_root</tt> <tt class="py-op">=</tt> <tt id="link-21" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem" class="py-name" href="#" onclick="return doclink('link-21', 'MsgTreeElem', 'link-20');">MsgTreeElem</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
223 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keys</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clear()=ClusterShell.Engine.Engine.Engine-class.html#clear,Method ClusterShell.Engine.Engine._EngineTimerQ.clear()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear,Method ClusterShell.MsgTree.MsgTree.clear()=ClusterShell.MsgTree.MsgTree-class.html#clear,Method ClusterShell.NodeSet.NodeSetBase.clear()=ClusterShell.NodeSet.NodeSetBase-class.html#clear,Method ClusterShell.NodeSet.RangeSet.clear()=ClusterShell.NodeSet.RangeSet-class.html#clear"><a title="ClusterShell.Engine.Engine.Engine.clear
224 ClusterShell.Engine.Engine._EngineTimerQ.clear
225 ClusterShell.MsgTree.MsgTree.clear
226 ClusterShell.NodeSet.NodeSetBase.clear
227 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-22', 'clear', 'link-22');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
228 </div><a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> </tt>
229 <a name="MsgTree.__len__"></a><div id="MsgTree.__len__-def"><a name="L159"></a><tt class="py-lineno">159</tt> <a class="py-toggle" href="#" id="MsgTree.__len__-toggle" onclick="return toggle('MsgTree.__len__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#__len__">__len__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
230 </div><div id="MsgTree.__len__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.__len__-expanded"><a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-docstring">"""Return the number of keys contained in the MsgTree."""</tt> </tt>
231 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keys</tt><tt class="py-op">)</tt> </tt>
232 </div><a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> </tt>
233 <a name="MsgTree.__getitem__"></a><div id="MsgTree.__getitem__-def"><a name="L163"></a><tt class="py-lineno">163</tt> <a class="py-toggle" href="#" id="MsgTree.__getitem__-toggle" onclick="return toggle('MsgTree.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
234 </div><div id="MsgTree.__getitem__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.__getitem__-expanded"><a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-docstring">"""Return the message of MsgTree with specified key. Raises a</tt> </tt>
235 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"><tt class="py-docstring"> KeyError if key is not in the MsgTree."""</tt> </tt>
236 <a name="L166"></a><tt class="py-lineno">166</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">_keys</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
237 </div><a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> </tt>
238 <a name="MsgTree.get"></a><div id="MsgTree.get-def"><a name="L168"></a><tt class="py-lineno">168</tt> <a class="py-toggle" href="#" id="MsgTree.get-toggle" onclick="return toggle('MsgTree.get');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">default</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
239 </div><div id="MsgTree.get-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.get-expanded"><a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
240 <a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"><tt class="py-docstring"> Return the message for key if key is in the MsgTree, else default.</tt> </tt>
241 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"><tt class="py-docstring"> If default is not given, it defaults to None, so that this method</tt> </tt>
242 <a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"><tt class="py-docstring"> never raises a KeyError.</tt> </tt>
243 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
244 <a name="L174"></a><tt class="py-lineno">174</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">_keys</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
245 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-23', 'get', 'link-23');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-24" class="py-name" targets="Method ClusterShell.Task.Task.default()=ClusterShell.Task.Task-class.html#default"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-24', 'default', 'link-24');">default</a></tt><tt class="py-op">)</tt> </tt>
246 </div><a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> </tt>
247 <a name="MsgTree.add"></a><div id="MsgTree.add-def"><a name="L176"></a><tt class="py-lineno">176</tt> <a class="py-toggle" href="#" id="MsgTree.add-toggle" onclick="return toggle('MsgTree.add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#add">add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">msgline</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
248 </div><div id="MsgTree.add-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.add-expanded"><a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
249 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"><tt class="py-docstring"> Add a message line associated with the given key to the MsgTree.</tt> </tt>
250 <a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
251 <a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-comment"># try to get current element in MsgTree for the given key,</tt> </tt>
252 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-comment"># defaulting to the root element</tt> </tt>
253 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">e_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keys</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
254 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-25', 'get', 'link-23');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_root</tt><tt class="py-op">)</tt> </tt>
255 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> </tt>
256 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-comment"># add child msg and update keys dict</tt> </tt>
257 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keys</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">e_msg</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-26', 'append', 'link-13');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">msgline</tt><tt class="py-op">)</tt> </tt>
258 </div><a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> </tt>
259 <a name="MsgTree.keys"></a><div id="MsgTree.keys-def"><a name="L187"></a><tt class="py-lineno">187</tt> <a class="py-toggle" href="#" id="MsgTree.keys-toggle" onclick="return toggle('MsgTree.keys');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#keys">keys</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
260 </div><div id="MsgTree.keys-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.keys-expanded"><a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-docstring">"""Return an iterator over MsgTree's keys."""</tt> </tt>
261 <a name="L189"></a><tt class="py-lineno">189</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">_keys</tt><tt class="py-op">.</tt><tt class="py-name">iterkeys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
262 </div><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> </tt>
263 <a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt id="link-27" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.__iter__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__iter__,Method ClusterShell.NodeSet.NodeSetBase.__iter__()=ClusterShell.NodeSet.NodeSetBase-class.html#__iter__,Method ClusterShell.NodeSet.RangeSet.__iter__()=ClusterShell.NodeSet.RangeSet-class.html#__iter__"><a title="ClusterShell.MsgTree.MsgTreeElem.__iter__
264 ClusterShell.NodeSet.NodeSetBase.__iter__
265 ClusterShell.NodeSet.RangeSet.__iter__" class="py-name" href="#" onclick="return doclink('link-27', '__iter__', 'link-27');">__iter__</a></tt> <tt class="py-op">=</tt> <tt id="link-28" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-28', 'keys', 'link-0');">keys</a></tt> </tt>
266 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> </tt>
267 <a name="MsgTree.messages"></a><div id="MsgTree.messages-def"><a name="L193"></a><tt class="py-lineno">193</tt> <a class="py-toggle" href="#" id="MsgTree.messages-toggle" onclick="return toggle('MsgTree.messages');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#messages">messages</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
268 </div><div id="MsgTree.messages-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.messages-expanded"><a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-docstring">"""Return an iterator over MsgTree's messages."""</tt> </tt>
269 <a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">imap</tt><tt class="py-op">(</tt><tt class="py-name">itemgetter</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">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.walk()=ClusterShell.MsgTree.MsgTree-class.html#walk"><a title="ClusterShell.MsgTree.MsgTree.walk" class="py-name" href="#" onclick="return doclink('link-29', 'walk', 'link-29');">walk</a></tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
270 </div><a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> </tt>
271 <a name="MsgTree.items"></a><div id="MsgTree.items-def"><a name="L197"></a><tt class="py-lineno">197</tt> <a class="py-toggle" href="#" id="MsgTree.items-toggle" onclick="return toggle('MsgTree.items');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#items">items</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">mapper</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
272 </div><div id="MsgTree.items-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.items-expanded"><a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
273 <a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"><tt class="py-docstring"> Return (key, message) for each key of the MsgTree.</tt> </tt>
274 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
275 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">mapper</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
276 <a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">mapper</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> <tt class="py-name">k</tt> </tt>
277 <a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">elem</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keys</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
278 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">match</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
279 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">mapper</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">elem</tt> </tt>
280 </div><a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> </tt>
281 <a name="MsgTree._depth"></a><div id="MsgTree._depth-def"><a name="L207"></a><tt class="py-lineno">207</tt> <a class="py-toggle" href="#" id="MsgTree._depth-toggle" onclick="return toggle('MsgTree._depth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#_depth">_depth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
282 </div><div id="MsgTree._depth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree._depth-expanded"><a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
283 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"><tt class="py-docstring"> Return the depth of the MsgTree, ie. the max number of lines</tt> </tt>
284 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"><tt class="py-docstring"> per message. Added for debugging.</tt> </tt>
285 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
286 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">depth</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
287 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-comment"># stack of (element, depth) tuples used to walk the tree</tt> </tt>
288 <a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-name">estack</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_root</tt><tt class="py-op">,</tt> <tt class="py-name">depth</tt><tt class="py-op">)</tt> <tt class="py-op">]</tt> </tt>
289 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> </tt>
290 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">estack</tt><tt class="py-op">:</tt> </tt>
291 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">elem</tt><tt class="py-op">,</tt> <tt class="py-name">edepth</tt> <tt class="py-op">=</tt> <tt class="py-name">estack</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
292 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
293 <a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-name">estack</tt> <tt class="py-op">+=</tt> <tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">,</tt> <tt class="py-name">edepth</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt class="py-name">children</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>
294 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-name">depth</tt> <tt class="py-op">=</tt> <tt class="py-name">max</tt><tt class="py-op">(</tt><tt class="py-name">depth</tt><tt class="py-op">,</tt> <tt class="py-name">edepth</tt><tt class="py-op">)</tt> </tt>
295 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> </tt>
296 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">depth</tt> </tt>
297 </div><a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> </tt>
298 <a name="MsgTree.walk"></a><div id="MsgTree.walk-def"><a name="L224"></a><tt class="py-lineno">224</tt> <a class="py-toggle" href="#" id="MsgTree.walk-toggle" onclick="return toggle('MsgTree.walk');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#walk">walk</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">mapper</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
299 </div><div id="MsgTree.walk-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.walk-expanded"><a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
300 <a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"><tt class="py-docstring"> Walk the tree. Optionally filter keys on match parameter,</tt> </tt>
301 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"><tt class="py-docstring"> and optionally map resulting keys with mapper function.</tt> </tt>
302 <a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"><tt class="py-docstring"> Return an iterator of (message, keys) tuples for each</tt> </tt>
303 <a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"><tt class="py-docstring"> different message in the tree.</tt> </tt>
304 <a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
305 <a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-comment"># stack of elements used to walk the tree (depth-first)</tt> </tt>
306 <a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-name">estack</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_root</tt> <tt class="py-op">]</tt> </tt>
307 <a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> </tt>
308 <a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">estack</tt><tt class="py-op">:</tt> </tt>
309 <a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-name">elem</tt> <tt class="py-op">=</tt> <tt class="py-name">estack</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
310 <a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
311 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-name">estack</tt> <tt class="py-op">+=</tt> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">.</tt><tt class="py-name">values</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
312 <a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-30', 'keys', 'link-0');">keys</a></tt><tt class="py-op">:</tt> <tt class="py-comment"># has some keys</tt> </tt>
313 <a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">mkeys</tt> <tt class="py-op">=</tt> <tt class="py-name">filter</tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">,</tt> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-31', 'keys', 'link-0');">keys</a></tt><tt class="py-op">)</tt> </tt>
314 <a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">mkeys</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
315 <a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">elem</tt><tt class="py-op">,</tt> <tt class="py-name">map</tt><tt class="py-op">(</tt><tt class="py-name">mapper</tt><tt class="py-op">,</tt> <tt class="py-name">mkeys</tt><tt class="py-op">)</tt> </tt>
316 </div><a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> </tt>
317 <a name="MsgTree.remove"></a><div id="MsgTree.remove-def"><a name="L243"></a><tt class="py-lineno">243</tt> <a class="py-toggle" href="#" id="MsgTree.remove-toggle" onclick="return toggle('MsgTree.remove');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.MsgTree.MsgTree-class.html#remove">remove</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
318 </div><div id="MsgTree.remove-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MsgTree.remove-expanded"><a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
319 <a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"><tt class="py-docstring"> Modify the tree by removing any matching key references from the</tt> </tt>
320 <a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"><tt class="py-docstring"> messages tree.</tt> </tt>
321 <a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
322 <a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"><tt class="py-docstring"> Example of use:</tt> </tt>
323 <a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; msgtree.remove(lambda k: k &gt; 3)</tt> </tt>
324 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
325 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-name">estack</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_root</tt> <tt class="py-op">]</tt> </tt>
326 <a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> </tt>
327 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-comment"># walk the tree to keep only matching keys</tt> </tt>
328 <a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">estack</tt><tt class="py-op">:</tt> </tt>
329 <a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-name">elem</tt> <tt class="py-op">=</tt> <tt class="py-name">estack</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
330 <a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
331 <a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-name">estack</tt> <tt class="py-op">+=</tt> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt class="py-name">children</tt><tt class="py-op">.</tt><tt class="py-name">values</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
332 <a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-32', 'keys', 'link-0');">keys</a></tt><tt class="py-op">:</tt> <tt class="py-comment"># has some keys</tt> </tt>
333 <a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-33', 'keys', 'link-0');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-name">ifilterfalse</tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">,</tt> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-34', 'keys', 'link-0');">keys</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
334 <a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> </tt>
335 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-comment"># also remove key(s) from known keys dict</tt> </tt>
336 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">filter</tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keys</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-35', 'keys', 'link-0');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
337 <a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keys</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
338 </div></div><a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> </tt><script type="text/javascript">
339 <!--
340 expandto(location.href);
341 // -->
342 </script>
343 </pre>
344 <br />
345 <!-- ==================== NAVIGATION BAR ==================== -->
346 <table class="navbar" border="0" width="100%" cellpadding="0"
347 bgcolor="#a0c0ff" cellspacing="0">
348 <tr valign="middle">
349
350 <!-- Tree link -->
351 <th>&nbsp;&nbsp;&nbsp;<a
352 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
353
354 <!-- Index link -->
355 <th>&nbsp;&nbsp;&nbsp;<a
356 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
357
358 <!-- Help link -->
359 <th>&nbsp;&nbsp;&nbsp;<a
360 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
361
362 <!-- Project homepage -->
363 <th class="navbar" align="right" width="100%">
364 <table border="0" cellpadding="0" cellspacing="0">
365 <tr><th class="navbar" align="center"
366 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
367 </tr></table></th>
368 </tr>
369 </table>
370 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
371 <tr>
372 <td align="left" class="footer">
373 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
374 </td>
375 <td align="right" class="footer">
376 <a target="mainFrame" href="http://epydoc.sourceforge.net"
377 >http://epydoc.sourceforge.net</a>
378 </td>
379 </tr>
380 </table>
381
382 <script type="text/javascript">
383 <!--
384 // Private objects are initially displayed (because if
385 // javascript is turned off then we want them to be
386 // visible); but by default, we want to hide them. So hide
387 // them unless we have a cookie that says to show them.
388 checkCookie();
389 // -->
390 </script>
391 </body>
392 </html>
+0
-585
doc/epydoc/html/ClusterShell.MsgTree.MsgTree-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.MsgTree.MsgTree</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.MsgTree-module.html">Module&nbsp;MsgTree</a> ::
43 Class&nbsp;MsgTree
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class MsgTree</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_15" name="uml_class_diagram_for_clusters_15">
63 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,39,259,57"/>
64 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#clear" title="Remove all items from the MsgTree." alt="" coords="17,57,259,76"/>
65 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#__len__" title="Return the number of keys contained in the MsgTree." alt="" coords="17,76,259,95"/>
66 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#__getitem__" title="Return the message of MsgTree with specified key." alt="" coords="17,95,259,113"/>
67 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#get" title="Return the message for key if key is in the MsgTree, else default." alt="" coords="17,113,259,132"/>
68 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#add" title="Add a message line associated with the given key to the MsgTree." alt="" coords="17,132,259,151"/>
69 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#keys" title="Return an iterator over MsgTree&#39;s keys." alt="" coords="17,151,259,169"/>
70 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#__iter__" title="Return an iterator over MsgTree&#39;s keys." alt="" coords="17,169,259,188"/>
71 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#messages" title="Return an iterator over MsgTree&#39;s messages." alt="" coords="17,188,259,207"/>
72 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#items" title="Return (key, message) for each key of the MsgTree." alt="" coords="17,207,259,225"/>
73 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#walk" title="Walk the tree." alt="" coords="17,225,259,244"/>
74 <area shape="rect" id="node60" href="ClusterShell.MsgTree.MsgTree-class.html#remove" title="Modify the tree by removing any matching key references from the messages &#160;tree." alt="" coords="17,244,259,263"/>
75 <area shape="rect" id="node1" href="ClusterShell.MsgTree.MsgTree-class.html" title="A MsgTree object maps key objects to multi&#45;lines messages." alt="" coords="5,6,269,269"/>
76 </map>
77 <img src="uml_class_diagram_for_clusters_15.png" alt='' usemap="#uml_class_diagram_for_clusters_15" ismap="ismap" class="graph-without-title" />
78 </center>
79 </center>
80 <hr />
81 <p>A MsgTree object maps key objects to multi-lines messages. MsgTree's
82 are mutable objects. Keys are almost arbitrary values (must be hashable).
83 Message lines are organized as a tree internally. MsgTree provides low
84 memory consumption especially on a cluster when all nodes return similar
85 messages. Also, the gathering of messages is done automatically.</p>
86
87 <!-- ==================== INSTANCE METHODS ==================== -->
88 <a name="section-InstanceMethods"></a>
89 <table class="summary" border="1" cellpadding="3"
90 cellspacing="0" width="100%" bgcolor="white">
91 <tr bgcolor="#70b0f0" class="table-header">
92 <td colspan="2" class="table-header">
93 <table border="0" cellpadding="0" cellspacing="0" width="100%">
94 <tr valign="top">
95 <td align="left"><span class="table-header">Instance Methods</span></td>
96 <td align="right" valign="top"
97 ><span class="options">[<a href="#section-InstanceMethods"
98 class="privatelink" onclick="toggle_private();"
99 >hide private</a>]</span></td>
100 </tr>
101 </table>
102 </td>
103 </tr>
104 <tr>
105 <td width="15%" align="right" valign="top" class="summary">
106 <span class="summary-type">&nbsp;</span>
107 </td><td class="summary">
108 <table width="100%" cellpadding="0" cellspacing="0" border="0">
109 <tr>
110 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTree-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br />
111 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
112 <td align="right" valign="top">
113 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.__init__">source&nbsp;code</a></span>
114
115 </td>
116 </tr>
117 </table>
118
119 </td>
120 </tr>
121 <tr>
122 <td width="15%" align="right" valign="top" class="summary">
123 <span class="summary-type">&nbsp;</span>
124 </td><td class="summary">
125 <table width="100%" cellpadding="0" cellspacing="0" border="0">
126 <tr>
127 <td><span class="summary-sig"><a name="clear"></a><span class="summary-sig-name">clear</span>(<span class="summary-sig-arg">self</span>)</span><br />
128 Remove all items from the MsgTree.</td>
129 <td align="right" valign="top">
130 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.clear">source&nbsp;code</a></span>
131
132 </td>
133 </tr>
134 </table>
135
136 </td>
137 </tr>
138 <tr>
139 <td width="15%" align="right" valign="top" class="summary">
140 <span class="summary-type">&nbsp;</span>
141 </td><td class="summary">
142 <table width="100%" cellpadding="0" cellspacing="0" border="0">
143 <tr>
144 <td><span class="summary-sig"><a name="__len__"></a><span class="summary-sig-name">__len__</span>(<span class="summary-sig-arg">self</span>)</span><br />
145 Return the number of keys contained in the MsgTree.</td>
146 <td align="right" valign="top">
147 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.__len__">source&nbsp;code</a></span>
148
149 </td>
150 </tr>
151 </table>
152
153 </td>
154 </tr>
155 <tr>
156 <td width="15%" align="right" valign="top" class="summary">
157 <span class="summary-type">&nbsp;</span>
158 </td><td class="summary">
159 <table width="100%" cellpadding="0" cellspacing="0" border="0">
160 <tr>
161 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTree-class.html#__getitem__" class="summary-sig-name">__getitem__</a>(<span class="summary-sig-arg">self</span>,
162 <span class="summary-sig-arg">key</span>)</span><br />
163 Return the message of MsgTree with specified key.</td>
164 <td align="right" valign="top">
165 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.__getitem__">source&nbsp;code</a></span>
166
167 </td>
168 </tr>
169 </table>
170
171 </td>
172 </tr>
173 <tr>
174 <td width="15%" align="right" valign="top" class="summary">
175 <span class="summary-type">&nbsp;</span>
176 </td><td class="summary">
177 <table width="100%" cellpadding="0" cellspacing="0" border="0">
178 <tr>
179 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTree-class.html#get" class="summary-sig-name">get</a>(<span class="summary-sig-arg">self</span>,
180 <span class="summary-sig-arg">key</span>,
181 <span class="summary-sig-arg">default</span>=<span class="summary-sig-default">None</span>)</span><br />
182 Return the message for key if key is in the MsgTree, else default.</td>
183 <td align="right" valign="top">
184 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.get">source&nbsp;code</a></span>
185
186 </td>
187 </tr>
188 </table>
189
190 </td>
191 </tr>
192 <tr>
193 <td width="15%" align="right" valign="top" class="summary">
194 <span class="summary-type">&nbsp;</span>
195 </td><td class="summary">
196 <table width="100%" cellpadding="0" cellspacing="0" border="0">
197 <tr>
198 <td><span class="summary-sig"><a name="add"></a><span class="summary-sig-name">add</span>(<span class="summary-sig-arg">self</span>,
199 <span class="summary-sig-arg">key</span>,
200 <span class="summary-sig-arg">msgline</span>)</span><br />
201 Add a message line associated with the given key to the MsgTree.</td>
202 <td align="right" valign="top">
203 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.add">source&nbsp;code</a></span>
204
205 </td>
206 </tr>
207 </table>
208
209 </td>
210 </tr>
211 <tr>
212 <td width="15%" align="right" valign="top" class="summary">
213 <span class="summary-type">&nbsp;</span>
214 </td><td class="summary">
215 <table width="100%" cellpadding="0" cellspacing="0" border="0">
216 <tr>
217 <td><span class="summary-sig"><a name="keys"></a><span class="summary-sig-name">keys</span>(<span class="summary-sig-arg">self</span>)</span><br />
218 Return an iterator over MsgTree's keys.</td>
219 <td align="right" valign="top">
220 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.keys">source&nbsp;code</a></span>
221
222 </td>
223 </tr>
224 </table>
225
226 </td>
227 </tr>
228 <tr>
229 <td width="15%" align="right" valign="top" class="summary">
230 <span class="summary-type">&nbsp;</span>
231 </td><td class="summary">
232 <table width="100%" cellpadding="0" cellspacing="0" border="0">
233 <tr>
234 <td><span class="summary-sig"><a name="__iter__"></a><span class="summary-sig-name">__iter__</span>(<span class="summary-sig-arg">self</span>)</span><br />
235 Return an iterator over MsgTree's keys.</td>
236 <td align="right" valign="top">
237 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.keys">source&nbsp;code</a></span>
238
239 </td>
240 </tr>
241 </table>
242
243 </td>
244 </tr>
245 <tr>
246 <td width="15%" align="right" valign="top" class="summary">
247 <span class="summary-type">&nbsp;</span>
248 </td><td class="summary">
249 <table width="100%" cellpadding="0" cellspacing="0" border="0">
250 <tr>
251 <td><span class="summary-sig"><a name="messages"></a><span class="summary-sig-name">messages</span>(<span class="summary-sig-arg">self</span>,
252 <span class="summary-sig-arg">match</span>=<span class="summary-sig-default">None</span>)</span><br />
253 Return an iterator over MsgTree's messages.</td>
254 <td align="right" valign="top">
255 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.messages">source&nbsp;code</a></span>
256
257 </td>
258 </tr>
259 </table>
260
261 </td>
262 </tr>
263 <tr>
264 <td width="15%" align="right" valign="top" class="summary">
265 <span class="summary-type">&nbsp;</span>
266 </td><td class="summary">
267 <table width="100%" cellpadding="0" cellspacing="0" border="0">
268 <tr>
269 <td><span class="summary-sig"><a name="items"></a><span class="summary-sig-name">items</span>(<span class="summary-sig-arg">self</span>,
270 <span class="summary-sig-arg">match</span>=<span class="summary-sig-default">None</span>,
271 <span class="summary-sig-arg">mapper</span>=<span class="summary-sig-default">None</span>)</span><br />
272 Return (key, message) for each key of the MsgTree.</td>
273 <td align="right" valign="top">
274 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.items">source&nbsp;code</a></span>
275
276 </td>
277 </tr>
278 </table>
279
280 </td>
281 </tr>
282 <tr class="private">
283 <td width="15%" align="right" valign="top" class="summary">
284 <span class="summary-type">&nbsp;</span>
285 </td><td class="summary">
286 <table width="100%" cellpadding="0" cellspacing="0" border="0">
287 <tr>
288 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTree-class.html#_depth" class="summary-sig-name" onclick="show_private();">_depth</a>(<span class="summary-sig-arg">self</span>)</span><br />
289 Return the depth of the MsgTree, ie.</td>
290 <td align="right" valign="top">
291 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree._depth">source&nbsp;code</a></span>
292
293 </td>
294 </tr>
295 </table>
296
297 </td>
298 </tr>
299 <tr>
300 <td width="15%" align="right" valign="top" class="summary">
301 <span class="summary-type">&nbsp;</span>
302 </td><td class="summary">
303 <table width="100%" cellpadding="0" cellspacing="0" border="0">
304 <tr>
305 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTree-class.html#walk" class="summary-sig-name">walk</a>(<span class="summary-sig-arg">self</span>,
306 <span class="summary-sig-arg">match</span>=<span class="summary-sig-default">None</span>,
307 <span class="summary-sig-arg">mapper</span>=<span class="summary-sig-default">None</span>)</span><br />
308 Walk the tree.</td>
309 <td align="right" valign="top">
310 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.walk">source&nbsp;code</a></span>
311
312 </td>
313 </tr>
314 </table>
315
316 </td>
317 </tr>
318 <tr>
319 <td width="15%" align="right" valign="top" class="summary">
320 <span class="summary-type">&nbsp;</span>
321 </td><td class="summary">
322 <table width="100%" cellpadding="0" cellspacing="0" border="0">
323 <tr>
324 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTree-class.html#remove" class="summary-sig-name">remove</a>(<span class="summary-sig-arg">self</span>,
325 <span class="summary-sig-arg">match</span>=<span class="summary-sig-default">None</span>)</span><br />
326 Modify the tree by removing any matching key references from the
327 messages tree.</td>
328 <td align="right" valign="top">
329 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.remove">source&nbsp;code</a></span>
330
331 </td>
332 </tr>
333 </table>
334
335 </td>
336 </tr>
337 <tr>
338 <td colspan="2" class="summary">
339 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
340 <code>__delattr__</code>,
341 <code>__format__</code>,
342 <code>__getattribute__</code>,
343 <code>__hash__</code>,
344 <code>__new__</code>,
345 <code>__reduce__</code>,
346 <code>__reduce_ex__</code>,
347 <code>__repr__</code>,
348 <code>__setattr__</code>,
349 <code>__sizeof__</code>,
350 <code>__str__</code>,
351 <code>__subclasshook__</code>
352 </p>
353 </td>
354 </tr>
355 </table>
356 <!-- ==================== PROPERTIES ==================== -->
357 <a name="section-Properties"></a>
358 <table class="summary" border="1" cellpadding="3"
359 cellspacing="0" width="100%" bgcolor="white">
360 <tr bgcolor="#70b0f0" class="table-header">
361 <td colspan="2" class="table-header">
362 <table border="0" cellpadding="0" cellspacing="0" width="100%">
363 <tr valign="top">
364 <td align="left"><span class="table-header">Properties</span></td>
365 <td align="right" valign="top"
366 ><span class="options">[<a href="#section-Properties"
367 class="privatelink" onclick="toggle_private();"
368 >hide private</a>]</span></td>
369 </tr>
370 </table>
371 </td>
372 </tr>
373 <tr>
374 <td colspan="2" class="summary">
375 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
376 <code>__class__</code>
377 </p>
378 </td>
379 </tr>
380 </table>
381 <!-- ==================== METHOD DETAILS ==================== -->
382 <a name="section-MethodDetails"></a>
383 <table class="details" border="1" cellpadding="3"
384 cellspacing="0" width="100%" bgcolor="white">
385 <tr bgcolor="#70b0f0" class="table-header">
386 <td colspan="2" class="table-header">
387 <table border="0" cellpadding="0" cellspacing="0" width="100%">
388 <tr valign="top">
389 <td align="left"><span class="table-header">Method Details</span></td>
390 <td align="right" valign="top"
391 ><span class="options">[<a href="#section-MethodDetails"
392 class="privatelink" onclick="toggle_private();"
393 >hide private</a>]</span></td>
394 </tr>
395 </table>
396 </td>
397 </tr>
398 </table>
399 <a name="__init__"></a>
400 <div>
401 <table class="details" border="1" cellpadding="3"
402 cellspacing="0" width="100%" bgcolor="white">
403 <tr><td>
404 <table width="100%" cellpadding="0" cellspacing="0" border="0">
405 <tr valign="top"><td>
406 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
407 <br /><em class="fname">(Constructor)</em>
408 </h3>
409 </td><td align="right" valign="top"
410 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.__init__">source&nbsp;code</a></span>&nbsp;
411 </td>
412 </tr></table>
413
414 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
415 signature</p>
416 <dl class="fields">
417 <dt>Overrides:
418 object.__init__
419 <dd><em class="note">(inherited documentation)</em></dd>
420 </dt>
421 </dl>
422 </td></tr></table>
423 </div>
424 <a name="__getitem__"></a>
425 <div>
426 <table class="details" border="1" cellpadding="3"
427 cellspacing="0" width="100%" bgcolor="white">
428 <tr><td>
429 <table width="100%" cellpadding="0" cellspacing="0" border="0">
430 <tr valign="top"><td>
431 <h3 class="epydoc"><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,
432 <span class="sig-arg">key</span>)</span>
433 <br /><em class="fname">(Indexing operator)</em>
434 </h3>
435 </td><td align="right" valign="top"
436 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.__getitem__">source&nbsp;code</a></span>&nbsp;
437 </td>
438 </tr></table>
439
440 <p>Return the message of MsgTree with specified key. Raises a KeyError if
441 key is not in the MsgTree.</p>
442 <dl class="fields">
443 </dl>
444 </td></tr></table>
445 </div>
446 <a name="get"></a>
447 <div>
448 <table class="details" border="1" cellpadding="3"
449 cellspacing="0" width="100%" bgcolor="white">
450 <tr><td>
451 <table width="100%" cellpadding="0" cellspacing="0" border="0">
452 <tr valign="top"><td>
453 <h3 class="epydoc"><span class="sig"><span class="sig-name">get</span>(<span class="sig-arg">self</span>,
454 <span class="sig-arg">key</span>,
455 <span class="sig-arg">default</span>=<span class="sig-default">None</span>)</span>
456 </h3>
457 </td><td align="right" valign="top"
458 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.get">source&nbsp;code</a></span>&nbsp;
459 </td>
460 </tr></table>
461
462 <p>Return the message for key if key is in the MsgTree, else default. If
463 default is not given, it defaults to None, so that this method never
464 raises a KeyError.</p>
465 <dl class="fields">
466 </dl>
467 </td></tr></table>
468 </div>
469 <a name="_depth"></a>
470 <div class="private">
471 <table class="details" border="1" cellpadding="3"
472 cellspacing="0" width="100%" bgcolor="white">
473 <tr><td>
474 <table width="100%" cellpadding="0" cellspacing="0" border="0">
475 <tr valign="top"><td>
476 <h3 class="epydoc"><span class="sig"><span class="sig-name">_depth</span>(<span class="sig-arg">self</span>)</span>
477 </h3>
478 </td><td align="right" valign="top"
479 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree._depth">source&nbsp;code</a></span>&nbsp;
480 </td>
481 </tr></table>
482
483 <p>Return the depth of the MsgTree, ie. the max number of lines per
484 message. Added for debugging.</p>
485 <dl class="fields">
486 </dl>
487 </td></tr></table>
488 </div>
489 <a name="walk"></a>
490 <div>
491 <table class="details" border="1" cellpadding="3"
492 cellspacing="0" width="100%" bgcolor="white">
493 <tr><td>
494 <table width="100%" cellpadding="0" cellspacing="0" border="0">
495 <tr valign="top"><td>
496 <h3 class="epydoc"><span class="sig"><span class="sig-name">walk</span>(<span class="sig-arg">self</span>,
497 <span class="sig-arg">match</span>=<span class="sig-default">None</span>,
498 <span class="sig-arg">mapper</span>=<span class="sig-default">None</span>)</span>
499 </h3>
500 </td><td align="right" valign="top"
501 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.walk">source&nbsp;code</a></span>&nbsp;
502 </td>
503 </tr></table>
504
505 <p>Walk the tree. Optionally filter keys on match parameter, and
506 optionally map resulting keys with mapper function. Return an iterator of
507 (message, keys) tuples for each different message in the tree.</p>
508 <dl class="fields">
509 </dl>
510 </td></tr></table>
511 </div>
512 <a name="remove"></a>
513 <div>
514 <table class="details" border="1" cellpadding="3"
515 cellspacing="0" width="100%" bgcolor="white">
516 <tr><td>
517 <table width="100%" cellpadding="0" cellspacing="0" border="0">
518 <tr valign="top"><td>
519 <h3 class="epydoc"><span class="sig"><span class="sig-name">remove</span>(<span class="sig-arg">self</span>,
520 <span class="sig-arg">match</span>=<span class="sig-default">None</span>)</span>
521 </h3>
522 </td><td align="right" valign="top"
523 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTree.remove">source&nbsp;code</a></span>&nbsp;
524 </td>
525 </tr></table>
526
527 <p>Modify the tree by removing any matching key references from the
528 messages tree.</p>
529 <p>Example of use:</p>
530 <pre class="py-doctest">
531 <span class="py-prompt">&gt;&gt;&gt; </span>msgtree.remove(<span class="py-keyword">lambda</span> k: k &gt; 3)</pre>
532 <dl class="fields">
533 </dl>
534 </td></tr></table>
535 </div>
536 <br />
537 <!-- ==================== NAVIGATION BAR ==================== -->
538 <table class="navbar" border="0" width="100%" cellpadding="0"
539 bgcolor="#a0c0ff" cellspacing="0">
540 <tr valign="middle">
541
542 <!-- Tree link -->
543 <th>&nbsp;&nbsp;&nbsp;<a
544 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
545
546 <!-- Index link -->
547 <th>&nbsp;&nbsp;&nbsp;<a
548 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
549
550 <!-- Help link -->
551 <th>&nbsp;&nbsp;&nbsp;<a
552 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
553
554 <!-- Project homepage -->
555 <th class="navbar" align="right" width="100%">
556 <table border="0" cellpadding="0" cellspacing="0">
557 <tr><th class="navbar" align="center"
558 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
559 </tr></table></th>
560 </tr>
561 </table>
562 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
563 <tr>
564 <td align="left" class="footer">
565 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
566 </td>
567 <td align="right" class="footer">
568 <a target="mainFrame" href="http://epydoc.sourceforge.net"
569 >http://epydoc.sourceforge.net</a>
570 </td>
571 </tr>
572 </table>
573
574 <script type="text/javascript">
575 <!--
576 // Private objects are initially displayed (because if
577 // javascript is turned off then we want them to be
578 // visible); but by default, we want to hide them. So hide
579 // them unless we have a cookie that says to show them.
580 checkCookie();
581 // -->
582 </script>
583 </body>
584 </html>
+0
-477
doc/epydoc/html/ClusterShell.MsgTree.MsgTreeElem-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.MsgTree.MsgTreeElem</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.MsgTree-module.html">Module&nbsp;MsgTree</a> ::
43 Class&nbsp;MsgTreeElem
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class MsgTreeElem</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_16" name="uml_class_diagram_for_clusters_16">
63 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__init__" title="Initialize message tree element." alt="" coords="17,39,273,57"/>
64 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__len__" title="Length of whole message string." alt="" coords="17,57,273,76"/>
65 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__eq__" title="Comparison method compares whole message strings." alt="" coords="17,76,273,95"/>
66 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__getitem__" title="ClusterShell.MsgTree.MsgTreeElem.__getitem__" alt="" coords="17,95,273,113"/>
67 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__iter__" title="Iterate over message lines starting from this tree element." alt="" coords="17,113,273,132"/>
68 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#lines" title="Get the whole message lines iterator from this tree element." alt="" coords="17,132,273,151"/>
69 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#splitlines" title="Get the whole message lines iterator from this tree element." alt="" coords="17,151,273,169"/>
70 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#message" title="Get the whole message buffer from this tree element." alt="" coords="17,169,273,188"/>
71 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#__str__" title="Get the whole message buffer from this tree element." alt="" coords="17,188,273,207"/>
72 <area shape="rect" id="node61" href="ClusterShell.MsgTree.MsgTreeElem-class.html#append" title="A new message line is coming, append it to the tree element with associated source key." alt="" coords="17,207,273,225"/>
73 <area shape="rect" id="node1" href="ClusterShell.MsgTree.MsgTreeElem-class.html" title="Class representing an element of the MsgTree and its associated message." alt="" coords="5,6,285,231"/>
74 </map>
75 <img src="uml_class_diagram_for_clusters_16.png" alt='' usemap="#uml_class_diagram_for_clusters_16" ismap="ismap" class="graph-without-title" />
76 </center>
77 </center>
78 <hr />
79 <p>Class representing an element of the MsgTree and its associated
80 message. Object of this class are returned by the various MsgTree methods
81 like messages() or walk(). The object can then be used as an iterator
82 over the message lines or casted into a string.</p>
83
84 <!-- ==================== INSTANCE METHODS ==================== -->
85 <a name="section-InstanceMethods"></a>
86 <table class="summary" border="1" cellpadding="3"
87 cellspacing="0" width="100%" bgcolor="white">
88 <tr bgcolor="#70b0f0" class="table-header">
89 <td colspan="2" class="table-header">
90 <table border="0" cellpadding="0" cellspacing="0" width="100%">
91 <tr valign="top">
92 <td align="left"><span class="table-header">Instance Methods</span></td>
93 <td align="right" valign="top"
94 ><span class="options">[<a href="#section-InstanceMethods"
95 class="privatelink" onclick="toggle_private();"
96 >hide private</a>]</span></td>
97 </tr>
98 </table>
99 </td>
100 </tr>
101 <tr>
102 <td width="15%" align="right" valign="top" class="summary">
103 <span class="summary-type">&nbsp;</span>
104 </td><td class="summary">
105 <table width="100%" cellpadding="0" cellspacing="0" border="0">
106 <tr>
107 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
108 <span class="summary-sig-arg">msgline</span>=<span class="summary-sig-default">None</span>,
109 <span class="summary-sig-arg">parent</span>=<span class="summary-sig-default">None</span>)</span><br />
110 Initialize message tree element.</td>
111 <td align="right" valign="top">
112 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.__init__">source&nbsp;code</a></span>
113
114 </td>
115 </tr>
116 </table>
117
118 </td>
119 </tr>
120 <tr>
121 <td width="15%" align="right" valign="top" class="summary">
122 <span class="summary-type">&nbsp;</span>
123 </td><td class="summary">
124 <table width="100%" cellpadding="0" cellspacing="0" border="0">
125 <tr>
126 <td><span class="summary-sig"><a name="__len__"></a><span class="summary-sig-name">__len__</span>(<span class="summary-sig-arg">self</span>)</span><br />
127 Length of whole message string.</td>
128 <td align="right" valign="top">
129 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.__len__">source&nbsp;code</a></span>
130
131 </td>
132 </tr>
133 </table>
134
135 </td>
136 </tr>
137 <tr>
138 <td width="15%" align="right" valign="top" class="summary">
139 <span class="summary-type">&nbsp;</span>
140 </td><td class="summary">
141 <table width="100%" cellpadding="0" cellspacing="0" border="0">
142 <tr>
143 <td><span class="summary-sig"><a name="__eq__"></a><span class="summary-sig-name">__eq__</span>(<span class="summary-sig-arg">self</span>,
144 <span class="summary-sig-arg">other</span>)</span><br />
145 Comparison method compares whole message strings.</td>
146 <td align="right" valign="top">
147 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.__eq__">source&nbsp;code</a></span>
148
149 </td>
150 </tr>
151 </table>
152
153 </td>
154 </tr>
155 <tr class="private">
156 <td width="15%" align="right" valign="top" class="summary">
157 <span class="summary-type">&nbsp;</span>
158 </td><td class="summary">
159 <table width="100%" cellpadding="0" cellspacing="0" border="0">
160 <tr>
161 <td><span class="summary-sig"><a name="_shift"></a><span class="summary-sig-name">_shift</span>(<span class="summary-sig-arg">self</span>,
162 <span class="summary-sig-arg">key</span>,
163 <span class="summary-sig-arg">target_elem</span>)</span><br />
164 Shift one of our key to specified target element.</td>
165 <td align="right" valign="top">
166 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem._shift">source&nbsp;code</a></span>
167
168 </td>
169 </tr>
170 </table>
171
172 </td>
173 </tr>
174 <tr>
175 <td width="15%" align="right" valign="top" class="summary">
176 <span class="summary-type">&nbsp;</span>
177 </td><td class="summary">
178 <table width="100%" cellpadding="0" cellspacing="0" border="0">
179 <tr>
180 <td><span class="summary-sig"><a name="__getitem__"></a><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-arg">self</span>,
181 <span class="summary-sig-arg">i</span>)</span></td>
182 <td align="right" valign="top">
183 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.__getitem__">source&nbsp;code</a></span>
184
185 </td>
186 </tr>
187 </table>
188
189 </td>
190 </tr>
191 <tr>
192 <td width="15%" align="right" valign="top" class="summary">
193 <span class="summary-type">&nbsp;</span>
194 </td><td class="summary">
195 <table width="100%" cellpadding="0" cellspacing="0" border="0">
196 <tr>
197 <td><span class="summary-sig"><a name="__iter__"></a><span class="summary-sig-name">__iter__</span>(<span class="summary-sig-arg">self</span>)</span><br />
198 Iterate over message lines starting from this tree element.</td>
199 <td align="right" valign="top">
200 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.__iter__">source&nbsp;code</a></span>
201
202 </td>
203 </tr>
204 </table>
205
206 </td>
207 </tr>
208 <tr>
209 <td width="15%" align="right" valign="top" class="summary">
210 <span class="summary-type">&nbsp;</span>
211 </td><td class="summary">
212 <table width="100%" cellpadding="0" cellspacing="0" border="0">
213 <tr>
214 <td><span class="summary-sig"><a name="lines"></a><span class="summary-sig-name">lines</span>(<span class="summary-sig-arg">self</span>)</span><br />
215 Get the whole message lines iterator from this tree element.</td>
216 <td align="right" valign="top">
217 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.lines">source&nbsp;code</a></span>
218
219 </td>
220 </tr>
221 </table>
222
223 </td>
224 </tr>
225 <tr>
226 <td width="15%" align="right" valign="top" class="summary">
227 <span class="summary-type">&nbsp;</span>
228 </td><td class="summary">
229 <table width="100%" cellpadding="0" cellspacing="0" border="0">
230 <tr>
231 <td><span class="summary-sig"><a name="splitlines"></a><span class="summary-sig-name">splitlines</span>(<span class="summary-sig-arg">self</span>)</span><br />
232 Get the whole message lines iterator from this tree element.</td>
233 <td align="right" valign="top">
234 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.lines">source&nbsp;code</a></span>
235
236 </td>
237 </tr>
238 </table>
239
240 </td>
241 </tr>
242 <tr>
243 <td width="15%" align="right" valign="top" class="summary">
244 <span class="summary-type">&nbsp;</span>
245 </td><td class="summary">
246 <table width="100%" cellpadding="0" cellspacing="0" border="0">
247 <tr>
248 <td><span class="summary-sig"><a name="message"></a><span class="summary-sig-name">message</span>(<span class="summary-sig-arg">self</span>)</span><br />
249 Get the whole message buffer from this tree element.</td>
250 <td align="right" valign="top">
251 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.message">source&nbsp;code</a></span>
252
253 </td>
254 </tr>
255 </table>
256
257 </td>
258 </tr>
259 <tr>
260 <td width="15%" align="right" valign="top" class="summary">
261 <span class="summary-type">&nbsp;</span>
262 </td><td class="summary">
263 <table width="100%" cellpadding="0" cellspacing="0" border="0">
264 <tr>
265 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
266 Get the whole message buffer from this tree element.</td>
267 <td align="right" valign="top">
268 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.message">source&nbsp;code</a></span>
269
270 </td>
271 </tr>
272 </table>
273
274 </td>
275 </tr>
276 <tr>
277 <td width="15%" align="right" valign="top" class="summary">
278 <span class="summary-type">&nbsp;</span>
279 </td><td class="summary">
280 <table width="100%" cellpadding="0" cellspacing="0" border="0">
281 <tr>
282 <td><span class="summary-sig"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#append" class="summary-sig-name">append</a>(<span class="summary-sig-arg">self</span>,
283 <span class="summary-sig-arg">key</span>,
284 <span class="summary-sig-arg">msgline</span>)</span><br />
285 A new message line is coming, append it to the tree element with
286 associated source key.</td>
287 <td align="right" valign="top">
288 <span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.append">source&nbsp;code</a></span>
289
290 </td>
291 </tr>
292 </table>
293
294 </td>
295 </tr>
296 <tr>
297 <td colspan="2" class="summary">
298 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
299 <code>__delattr__</code>,
300 <code>__format__</code>,
301 <code>__getattribute__</code>,
302 <code>__hash__</code>,
303 <code>__new__</code>,
304 <code>__reduce__</code>,
305 <code>__reduce_ex__</code>,
306 <code>__repr__</code>,
307 <code>__setattr__</code>,
308 <code>__sizeof__</code>,
309 <code>__subclasshook__</code>
310 </p>
311 </td>
312 </tr>
313 </table>
314 <!-- ==================== PROPERTIES ==================== -->
315 <a name="section-Properties"></a>
316 <table class="summary" border="1" cellpadding="3"
317 cellspacing="0" width="100%" bgcolor="white">
318 <tr bgcolor="#70b0f0" class="table-header">
319 <td colspan="2" class="table-header">
320 <table border="0" cellpadding="0" cellspacing="0" width="100%">
321 <tr valign="top">
322 <td align="left"><span class="table-header">Properties</span></td>
323 <td align="right" valign="top"
324 ><span class="options">[<a href="#section-Properties"
325 class="privatelink" onclick="toggle_private();"
326 >hide private</a>]</span></td>
327 </tr>
328 </table>
329 </td>
330 </tr>
331 <tr>
332 <td colspan="2" class="summary">
333 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
334 <code>__class__</code>
335 </p>
336 </td>
337 </tr>
338 </table>
339 <!-- ==================== METHOD DETAILS ==================== -->
340 <a name="section-MethodDetails"></a>
341 <table class="details" border="1" cellpadding="3"
342 cellspacing="0" width="100%" bgcolor="white">
343 <tr bgcolor="#70b0f0" class="table-header">
344 <td colspan="2" class="table-header">
345 <table border="0" cellpadding="0" cellspacing="0" width="100%">
346 <tr valign="top">
347 <td align="left"><span class="table-header">Method Details</span></td>
348 <td align="right" valign="top"
349 ><span class="options">[<a href="#section-MethodDetails"
350 class="privatelink" onclick="toggle_private();"
351 >hide private</a>]</span></td>
352 </tr>
353 </table>
354 </td>
355 </tr>
356 </table>
357 <a name="__init__"></a>
358 <div>
359 <table class="details" border="1" cellpadding="3"
360 cellspacing="0" width="100%" bgcolor="white">
361 <tr><td>
362 <table width="100%" cellpadding="0" cellspacing="0" border="0">
363 <tr valign="top"><td>
364 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
365 <span class="sig-arg">msgline</span>=<span class="sig-default">None</span>,
366 <span class="sig-arg">parent</span>=<span class="sig-default">None</span>)</span>
367 <br /><em class="fname">(Constructor)</em>
368 </h3>
369 </td><td align="right" valign="top"
370 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.__init__">source&nbsp;code</a></span>&nbsp;
371 </td>
372 </tr></table>
373
374 <p>Initialize message tree element.</p>
375 <dl class="fields">
376 <dt>Overrides:
377 object.__init__
378 </dt>
379 </dl>
380 </td></tr></table>
381 </div>
382 <a name="__str__"></a>
383 <div>
384 <table class="details" border="1" cellpadding="3"
385 cellspacing="0" width="100%" bgcolor="white">
386 <tr><td>
387 <table width="100%" cellpadding="0" cellspacing="0" border="0">
388 <tr valign="top"><td>
389 <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
390 <br /><em class="fname">(Informal representation operator)</em>
391 </h3>
392 </td><td align="right" valign="top"
393 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.message">source&nbsp;code</a></span>&nbsp;
394 </td>
395 </tr></table>
396
397 <p>Get the whole message buffer from this tree element.</p>
398 <dl class="fields">
399 <dt>Overrides:
400 object.__str__
401 </dt>
402 </dl>
403 </td></tr></table>
404 </div>
405 <a name="append"></a>
406 <div>
407 <table class="details" border="1" cellpadding="3"
408 cellspacing="0" width="100%" bgcolor="white">
409 <tr><td>
410 <table width="100%" cellpadding="0" cellspacing="0" border="0">
411 <tr valign="top"><td>
412 <h3 class="epydoc"><span class="sig"><span class="sig-name">append</span>(<span class="sig-arg">self</span>,
413 <span class="sig-arg">key</span>,
414 <span class="sig-arg">msgline</span>)</span>
415 </h3>
416 </td><td align="right" valign="top"
417 ><span class="codelink"><a href="ClusterShell.MsgTree-pysrc.html#MsgTreeElem.append">source&nbsp;code</a></span>&nbsp;
418 </td>
419 </tr></table>
420
421 <p>A new message line is coming, append it to the tree element with
422 associated source key. Called by MsgTree.add(). Return corresponding
423 newly created MsgTreeElem.</p>
424 <dl class="fields">
425 </dl>
426 </td></tr></table>
427 </div>
428 <br />
429 <!-- ==================== NAVIGATION BAR ==================== -->
430 <table class="navbar" border="0" width="100%" cellpadding="0"
431 bgcolor="#a0c0ff" cellspacing="0">
432 <tr valign="middle">
433
434 <!-- Tree link -->
435 <th>&nbsp;&nbsp;&nbsp;<a
436 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
437
438 <!-- Index link -->
439 <th>&nbsp;&nbsp;&nbsp;<a
440 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
441
442 <!-- Help link -->
443 <th>&nbsp;&nbsp;&nbsp;<a
444 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
445
446 <!-- Project homepage -->
447 <th class="navbar" align="right" width="100%">
448 <table border="0" cellpadding="0" cellspacing="0">
449 <tr><th class="navbar" align="center"
450 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
451 </tr></table></th>
452 </tr>
453 </table>
454 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
455 <tr>
456 <td align="left" class="footer">
457 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
458 </td>
459 <td align="right" class="footer">
460 <a target="mainFrame" href="http://epydoc.sourceforge.net"
461 >http://epydoc.sourceforge.net</a>
462 </td>
463 </tr>
464 </table>
465
466 <script type="text/javascript">
467 <!--
468 // Private objects are initially displayed (because if
469 // javascript is turned off then we want them to be
470 // visible); but by default, we want to hide them. So hide
471 // them unless we have a cookie that says to show them.
472 checkCookie();
473 // -->
474 </script>
475 </body>
476 </html>
+0
-441
doc/epydoc/html/ClusterShell.NodeSet-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;NodeSet
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet-module.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== MODULE DESCRIPTION ==================== -->
59 <h1 class="epydoc">Module NodeSet</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html">source&nbsp;code</a></span></p>
60 <p>Cluster node set module.</p>
61 <p>A module to deal efficiently with 1D rangesets and nodesets
62 (pdsh-like). Instances of RangeSet and NodeSet both provide similar
63 operations than the builtin set() type and Set object. See
64 http://www.python.org/doc/lib/set-objects.html</p>
65 <h1 class="heading">Usage example</h1>
66 <pre class="py-doctest">
67 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># Import NodeSet class</span>
68 <span class="py-more">... </span><span class="py-keyword">from</span> ClusterShell.NodeSet <span class="py-keyword">import</span> NodeSet
69 <span class="py-prompt">&gt;&gt;&gt;</span>
70 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># Create a new nodeset from string</span>
71 <span class="py-more">... </span>nodeset = NodeSet(<span class="py-string">&quot;cluster[1-30]&quot;</span>)
72 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># Add cluster32 to nodeset</span>
73 <span class="py-more">... </span>nodeset.update(<span class="py-string">&quot;cluster32&quot;</span>)
74 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># Remove from nodeset</span>
75 <span class="py-more">... </span>nodeset.difference_update(<span class="py-string">&quot;cluster[2-5]&quot;</span>)
76 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># Print nodeset as a pdsh-like pattern</span>
77 <span class="py-more">... </span><span class="py-keyword">print</span> nodeset
78 <span class="py-output">cluster[1,6-30,32]</span>
79 <span class="py-output"></span><span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># Iterate over node names in nodeset</span>
80 <span class="py-more">... </span><span class="py-keyword">for</span> node <span class="py-keyword">in</span> nodeset:
81 <span class="py-more">... </span> <span class="py-keyword">print</span> node
82 <span class="py-output">[...]</span></pre>
83
84 <!-- ==================== CLASSES ==================== -->
85 <a name="section-Classes"></a>
86 <table class="summary" border="1" cellpadding="3"
87 cellspacing="0" width="100%" bgcolor="white">
88 <tr bgcolor="#70b0f0" class="table-header">
89 <td colspan="2" class="table-header">
90 <table border="0" cellpadding="0" cellspacing="0" width="100%">
91 <tr valign="top">
92 <td align="left"><span class="table-header">Classes</span></td>
93 <td align="right" valign="top"
94 ><span class="options">[<a href="#section-Classes"
95 class="privatelink" onclick="toggle_private();"
96 >hide private</a>]</span></td>
97 </tr>
98 </table>
99 </td>
100 </tr>
101 <tr>
102 <td width="15%" align="right" valign="top" class="summary">
103 <span class="summary-type">&nbsp;</span>
104 </td><td class="summary">
105 <a href="ClusterShell.NodeSet.RangeSetException-class.html" class="summary-name">RangeSetException</a><br />
106 Base RangeSet exception class.
107 </td>
108 </tr>
109 <tr>
110 <td width="15%" align="right" valign="top" class="summary">
111 <span class="summary-type">&nbsp;</span>
112 </td><td class="summary">
113 <a href="ClusterShell.NodeSet.RangeSetParseError-class.html" class="summary-name">RangeSetParseError</a><br />
114 Raised when RangeSet parsing cannot be done properly.
115 </td>
116 </tr>
117 <tr>
118 <td width="15%" align="right" valign="top" class="summary">
119 <span class="summary-type">&nbsp;</span>
120 </td><td class="summary">
121 <a href="ClusterShell.NodeSet.RangeSetPaddingError-class.html" class="summary-name">RangeSetPaddingError</a><br />
122 Raised when a fatal padding incoherency occurs
123 </td>
124 </tr>
125 <tr>
126 <td width="15%" align="right" valign="top" class="summary">
127 <span class="summary-type">&nbsp;</span>
128 </td><td class="summary">
129 <a href="ClusterShell.NodeSet.NodeSetException-class.html" class="summary-name">NodeSetException</a><br />
130 Base NodeSet exception class.
131 </td>
132 </tr>
133 <tr>
134 <td width="15%" align="right" valign="top" class="summary">
135 <span class="summary-type">&nbsp;</span>
136 </td><td class="summary">
137 <a href="ClusterShell.NodeSet.NodeSetParseError-class.html" class="summary-name">NodeSetParseError</a><br />
138 Raised when NodeSet parsing cannot be done properly.
139 </td>
140 </tr>
141 <tr>
142 <td width="15%" align="right" valign="top" class="summary">
143 <span class="summary-type">&nbsp;</span>
144 </td><td class="summary">
145 <a href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html" class="summary-name">NodeSetParseRangeError</a><br />
146 Raised when bad range is encountered during NodeSet parsing.
147 </td>
148 </tr>
149 <tr>
150 <td width="15%" align="right" valign="top" class="summary">
151 <span class="summary-type">&nbsp;</span>
152 </td><td class="summary">
153 <a href="ClusterShell.NodeSet.NodeSetExternalError-class.html" class="summary-name">NodeSetExternalError</a><br />
154 Raised when an external error is encountered.
155 </td>
156 </tr>
157 <tr>
158 <td width="15%" align="right" valign="top" class="summary">
159 <span class="summary-type">&nbsp;</span>
160 </td><td class="summary">
161 <a href="ClusterShell.NodeSet.RangeSet-class.html" class="summary-name">RangeSet</a><br />
162 Advanced range sets.
163 </td>
164 </tr>
165 <tr>
166 <td width="15%" align="right" valign="top" class="summary">
167 <span class="summary-type">&nbsp;</span>
168 </td><td class="summary">
169 <a href="ClusterShell.NodeSet.NodeSetBase-class.html" class="summary-name">NodeSetBase</a><br />
170 Base class for NodeSet.
171 </td>
172 </tr>
173 <tr>
174 <td width="15%" align="right" valign="top" class="summary">
175 <span class="summary-type">&nbsp;</span>
176 </td><td class="summary">
177 <a href="ClusterShell.NodeSet.NodeGroupBase-class.html" class="summary-name">NodeGroupBase</a>
178 </td>
179 </tr>
180 <tr>
181 <td width="15%" align="right" valign="top" class="summary">
182 <span class="summary-type">&nbsp;</span>
183 </td><td class="summary">
184 <a href="ClusterShell.NodeSet.ParsingEngine-class.html" class="summary-name">ParsingEngine</a><br />
185 Class that is able to transform a source into a NodeSetBase.
186 </td>
187 </tr>
188 <tr>
189 <td width="15%" align="right" valign="top" class="summary">
190 <span class="summary-type">&nbsp;</span>
191 </td><td class="summary">
192 <a href="ClusterShell.NodeSet.NodeSet-class.html" class="summary-name">NodeSet</a><br />
193 Iterable class of nodes with node ranges support.
194 </td>
195 </tr>
196 </table>
197 <!-- ==================== FUNCTIONS ==================== -->
198 <a name="section-Functions"></a>
199 <table class="summary" border="1" cellpadding="3"
200 cellspacing="0" width="100%" bgcolor="white">
201 <tr bgcolor="#70b0f0" class="table-header">
202 <td colspan="2" class="table-header">
203 <table border="0" cellpadding="0" cellspacing="0" width="100%">
204 <tr valign="top">
205 <td align="left"><span class="table-header">Functions</span></td>
206 <td align="right" valign="top"
207 ><span class="options">[<a href="#section-Functions"
208 class="privatelink" onclick="toggle_private();"
209 >hide private</a>]</span></td>
210 </tr>
211 </table>
212 </td>
213 </tr>
214 <tr>
215 <td width="15%" align="right" valign="top" class="summary">
216 <span class="summary-type">&nbsp;</span>
217 </td><td class="summary">
218 <table width="100%" cellpadding="0" cellspacing="0" border="0">
219 <tr>
220 <td><span class="summary-sig"><a name="expand"></a><span class="summary-sig-name">expand</span>(<span class="summary-sig-arg">pat</span>)</span><br />
221 Commodity function that expands a pdsh-like pattern into a list of
222 nodes.</td>
223 <td align="right" valign="top">
224 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#expand">source&nbsp;code</a></span>
225
226 </td>
227 </tr>
228 </table>
229
230 </td>
231 </tr>
232 <tr>
233 <td width="15%" align="right" valign="top" class="summary">
234 <span class="summary-type">&nbsp;</span>
235 </td><td class="summary">
236 <table width="100%" cellpadding="0" cellspacing="0" border="0">
237 <tr>
238 <td><span class="summary-sig"><a name="fold"></a><span class="summary-sig-name">fold</span>(<span class="summary-sig-arg">pat</span>)</span><br />
239 Commodity function that clean dups and fold provided pattern with
240 ranges and &quot;/step&quot; support.</td>
241 <td align="right" valign="top">
242 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#fold">source&nbsp;code</a></span>
243
244 </td>
245 </tr>
246 </table>
247
248 </td>
249 </tr>
250 <tr>
251 <td width="15%" align="right" valign="top" class="summary">
252 <span class="summary-type">&nbsp;</span>
253 </td><td class="summary">
254 <table width="100%" cellpadding="0" cellspacing="0" border="0">
255 <tr>
256 <td><span class="summary-sig"><a name="grouplist"></a><span class="summary-sig-name">grouplist</span>(<span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
257 Commodity function that retrieves the list of groups for a specified
258 group namespace (or use default namespace).</td>
259 <td align="right" valign="top">
260 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#grouplist">source&nbsp;code</a></span>
261
262 </td>
263 </tr>
264 </table>
265
266 </td>
267 </tr>
268 <tr class="private">
269 <td width="15%" align="right" valign="top" class="summary">
270 <span class="summary-type">&nbsp;</span>
271 </td><td class="summary">
272 <table width="100%" cellpadding="0" cellspacing="0" border="0">
273 <tr>
274 <td><span class="summary-sig"><a name="_test"></a><span class="summary-sig-name">_test</span>()</span></td>
275 <td align="right" valign="top">
276 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#_test">source&nbsp;code</a></span>
277
278 </td>
279 </tr>
280 </table>
281
282 </td>
283 </tr>
284 </table>
285 <!-- ==================== VARIABLES ==================== -->
286 <a name="section-Variables"></a>
287 <table class="summary" border="1" cellpadding="3"
288 cellspacing="0" width="100%" bgcolor="white">
289 <tr bgcolor="#70b0f0" class="table-header">
290 <td colspan="2" class="table-header">
291 <table border="0" cellpadding="0" cellspacing="0" width="100%">
292 <tr valign="top">
293 <td align="left"><span class="table-header">Variables</span></td>
294 <td align="right" valign="top"
295 ><span class="options">[<a href="#section-Variables"
296 class="privatelink" onclick="toggle_private();"
297 >hide private</a>]</span></td>
298 </tr>
299 </table>
300 </td>
301 </tr>
302 <tr>
303 <td width="15%" align="right" valign="top" class="summary">
304 <span class="summary-type">&nbsp;</span>
305 </td><td class="summary">
306 <a name="DEF_GROUPS_CONFIG"></a><span class="summary-name">DEF_GROUPS_CONFIG</span> = <code title="'/etc/clustershell/groups.conf'"><code class="variable-quote">'</code><code class="variable-string">/etc/clustershell/groups.conf</code><code class="variable-quote">'</code></code>
307 </td>
308 </tr>
309 <tr>
310 <td width="15%" align="right" valign="top" class="summary">
311 <span class="summary-type">&nbsp;</span>
312 </td><td class="summary">
313 <a href="ClusterShell.NodeSet-module.html#DEF_STD_GROUP_RESOLVER" class="summary-name">DEF_STD_GROUP_RESOLVER</a> = <code title="NodeUtils.GroupResolverConfig(DEF_GROUPS_CONFIG)">NodeUtils.GroupResolverConfig(DEF_GRO<code class="variable-ellipsis">...</code></code>
314 </td>
315 </tr>
316 <tr>
317 <td width="15%" align="right" valign="top" class="summary">
318 <span class="summary-type">&nbsp;</span>
319 </td><td class="summary">
320 <a href="ClusterShell.NodeSet-module.html#STD_GROUP_RESOLVER" class="summary-name">STD_GROUP_RESOLVER</a> = <code title="NodeUtils.GroupResolverConfig(DEF_GROUPS_CONFIG)">NodeUtils.GroupResolverConfig(DEF_GROUPS_<code class="variable-ellipsis">...</code></code>
321 </td>
322 </tr>
323 <tr>
324 <td width="15%" align="right" valign="top" class="summary">
325 <span class="summary-type">&nbsp;</span>
326 </td><td class="summary">
327 <a name="NOGROUP_RESOLVER"></a><span class="summary-name">NOGROUP_RESOLVER</span> = <code title="-1">-1</code>
328 </td>
329 </tr>
330 <tr>
331 <td width="15%" align="right" valign="top" class="summary">
332 <span class="summary-type">&nbsp;</span>
333 </td><td class="summary">
334 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell</code><code class="variable-quote">'</code></code>
335 </td>
336 </tr>
337 </table>
338 <!-- ==================== VARIABLES DETAILS ==================== -->
339 <a name="section-VariablesDetails"></a>
340 <table class="details" border="1" cellpadding="3"
341 cellspacing="0" width="100%" bgcolor="white">
342 <tr bgcolor="#70b0f0" class="table-header">
343 <td colspan="2" class="table-header">
344 <table border="0" cellpadding="0" cellspacing="0" width="100%">
345 <tr valign="top">
346 <td align="left"><span class="table-header">Variables Details</span></td>
347 <td align="right" valign="top"
348 ><span class="options">[<a href="#section-VariablesDetails"
349 class="privatelink" onclick="toggle_private();"
350 >hide private</a>]</span></td>
351 </tr>
352 </table>
353 </td>
354 </tr>
355 </table>
356 <a name="DEF_STD_GROUP_RESOLVER"></a>
357 <div>
358 <table class="details" border="1" cellpadding="3"
359 cellspacing="0" width="100%" bgcolor="white">
360 <tr><td>
361 <h3 class="epydoc">DEF_STD_GROUP_RESOLVER</h3>
362
363 <dl class="fields">
364 </dl>
365 <dl class="fields">
366 <dt>Value:</dt>
367 <dd><table><tr><td><pre class="variable">
368 NodeUtils.GroupResolverConfig(DEF_GROUPS_CONFIG)
369 </pre></td></tr></table>
370 </dd>
371 </dl>
372 </td></tr></table>
373 </div>
374 <a name="STD_GROUP_RESOLVER"></a>
375 <div>
376 <table class="details" border="1" cellpadding="3"
377 cellspacing="0" width="100%" bgcolor="white">
378 <tr><td>
379 <h3 class="epydoc">STD_GROUP_RESOLVER</h3>
380
381 <dl class="fields">
382 </dl>
383 <dl class="fields">
384 <dt>Value:</dt>
385 <dd><table><tr><td><pre class="variable">
386 NodeUtils.GroupResolverConfig(DEF_GROUPS_CONFIG)
387 </pre></td></tr></table>
388 </dd>
389 </dl>
390 </td></tr></table>
391 </div>
392 <br />
393 <!-- ==================== NAVIGATION BAR ==================== -->
394 <table class="navbar" border="0" width="100%" cellpadding="0"
395 bgcolor="#a0c0ff" cellspacing="0">
396 <tr valign="middle">
397
398 <!-- Tree link -->
399 <th>&nbsp;&nbsp;&nbsp;<a
400 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
401
402 <!-- Index link -->
403 <th>&nbsp;&nbsp;&nbsp;<a
404 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
405
406 <!-- Help link -->
407 <th>&nbsp;&nbsp;&nbsp;<a
408 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
409
410 <!-- Project homepage -->
411 <th class="navbar" align="right" width="100%">
412 <table border="0" cellpadding="0" cellspacing="0">
413 <tr><th class="navbar" align="center"
414 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
415 </tr></table></th>
416 </tr>
417 </table>
418 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
419 <tr>
420 <td align="left" class="footer">
421 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
422 </td>
423 <td align="right" class="footer">
424 <a target="mainFrame" href="http://epydoc.sourceforge.net"
425 >http://epydoc.sourceforge.net</a>
426 </td>
427 </tr>
428 </table>
429
430 <script type="text/javascript">
431 <!--
432 // Private objects are initially displayed (because if
433 // javascript is turned off then we want them to be
434 // visible); but by default, we want to hide them. So hide
435 // them unless we have a cookie that says to show them.
436 checkCookie();
437 // -->
438 </script>
439 </body>
440 </html>
+0
-2168
doc/epydoc/html/ClusterShell.NodeSet-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;NodeSet
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet-pysrc.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <h1 class="epydoc">Source Code for <a href="ClusterShell.NodeSet-module.html">Module ClusterShell.NodeSet</a></h1>
59 <pre class="py-src">
60 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
61 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009, 2010)</tt> </tt>
62 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
63 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
64 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
65 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
66 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
67 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
68 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
69 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
70 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
71 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
72 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
73 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
74 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
75 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
76 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
77 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
78 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
79 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
80 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
81 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
82 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
83 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
84 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
85 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
86 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
87 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
88 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
89 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
90 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
91 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
92 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: NodeSet.py 297 2010-07-21 20:57:35Z st-cea $</tt> </tt>
93 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
94 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
95 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">Cluster node set module.</tt> </tt>
96 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
97 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">A module to deal efficiently with 1D rangesets and nodesets (pdsh-like).</tt> </tt>
98 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">Instances of RangeSet and NodeSet both provide similar operations than</tt> </tt>
99 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">the builtin set() type and Set object.</tt> </tt>
100 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring">See http://www.python.org/doc/lib/set-objects.html</tt> </tt>
101 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
102 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring">Usage example</tt> </tt>
103 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring">=============</tt> </tt>
104 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; # Import NodeSet class</tt> </tt>
105 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> ... from ClusterShell.NodeSet import NodeSet</tt> </tt>
106 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt;</tt> </tt>
107 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; # Create a new nodeset from string</tt> </tt>
108 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring"> ... nodeset = NodeSet("cluster[1-30]")</tt> </tt>
109 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; # Add cluster32 to nodeset</tt> </tt>
110 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-docstring"> ... nodeset.update("cluster32")</tt> </tt>
111 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; # Remove from nodeset</tt> </tt>
112 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt class="py-docstring"> ... nodeset.difference_update("cluster[2-5]")</tt> </tt>
113 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; # Print nodeset as a pdsh-like pattern</tt> </tt>
114 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"> ... print nodeset</tt> </tt>
115 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> cluster[1,6-30,32]</tt> </tt>
116 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; # Iterate over node names in nodeset</tt> </tt>
117 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> ... for node in nodeset:</tt> </tt>
118 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> ... print node</tt> </tt>
119 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> [...]</tt> </tt>
120 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
121 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> </tt>
122 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Method ClusterShell.Task.Task.copy()=ClusterShell.Task.Task-class.html#copy"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-0', 'copy', 'link-0');">copy</a></tt> </tt>
123 <a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
124 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> </tt>
125 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-1', 'ClusterShell', 'link-1');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Module ClusterShell.NodeUtils=ClusterShell.NodeUtils-module.html"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-2', 'NodeUtils', 'link-2');">NodeUtils</a></tt> <tt class="py-keyword">as</tt> <tt id="link-3" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-3', 'NodeUtils', 'link-2');">NodeUtils</a></tt> </tt>
126 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> </tt>
127 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> </tt>
128 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-comment"># Define default GroupResolver object used by NodeSet</tt> </tt>
129 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable ClusterShell.NodeSet.DEF_GROUPS_CONFIG=ClusterShell.NodeSet-module.html#DEF_GROUPS_CONFIG"><a title="ClusterShell.NodeSet.DEF_GROUPS_CONFIG" class="py-name" href="#" onclick="return doclink('link-4', 'DEF_GROUPS_CONFIG', 'link-4');">DEF_GROUPS_CONFIG</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"/etc/clustershell/groups.conf"</tt> </tt>
130 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable ClusterShell.NodeSet.DEF_STD_GROUP_RESOLVER=ClusterShell.NodeSet-module.html#DEF_STD_GROUP_RESOLVER"><a title="ClusterShell.NodeSet.DEF_STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-5', 'DEF_STD_GROUP_RESOLVER', 'link-5');">DEF_STD_GROUP_RESOLVER</a></tt> <tt class="py-op">=</tt> <tt id="link-6" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-6', 'NodeUtils', 'link-2');">NodeUtils</a></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverConfig=ClusterShell.NodeUtils.GroupResolverConfig-class.html"><a title="ClusterShell.NodeUtils.GroupResolverConfig" class="py-name" href="#" onclick="return doclink('link-7', 'GroupResolverConfig', 'link-7');">GroupResolverConfig</a></tt><tt class="py-op">(</tt><tt id="link-8" class="py-name"><a title="ClusterShell.NodeSet.DEF_GROUPS_CONFIG" class="py-name" href="#" onclick="return doclink('link-8', 'DEF_GROUPS_CONFIG', 'link-4');">DEF_GROUPS_CONFIG</a></tt><tt class="py-op">)</tt> </tt>
131 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt id="link-9" class="py-name" targets="Variable ClusterShell.NodeSet.STD_GROUP_RESOLVER=ClusterShell.NodeSet-module.html#STD_GROUP_RESOLVER"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-9', 'STD_GROUP_RESOLVER', 'link-9');">STD_GROUP_RESOLVER</a></tt> <tt class="py-op">=</tt> <tt id="link-10" class="py-name"><a title="ClusterShell.NodeSet.DEF_STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-10', 'DEF_STD_GROUP_RESOLVER', 'link-5');">DEF_STD_GROUP_RESOLVER</a></tt> </tt>
132 <a name="RangeSetException"></a><div id="RangeSetException-def"><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
133 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
134 <a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="RangeSetException-toggle" onclick="return toggle('RangeSetException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSetException-class.html">RangeSetException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
135 </div><div id="RangeSetException-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RangeSetException-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-docstring">"""Base RangeSet exception class."""</tt> </tt>
136 </div><a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> </tt>
137 <a name="RangeSetParseError"></a><div id="RangeSetParseError-def"><a name="L78"></a><tt class="py-lineno"> 78</tt> <a class="py-toggle" href="#" id="RangeSetParseError-toggle" onclick="return toggle('RangeSetParseError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSetParseError-class.html">RangeSetParseError</a><tt class="py-op">(</tt><tt class="py-base-class">RangeSetException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
138 </div><div id="RangeSetParseError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RangeSetParseError-expanded"><a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when RangeSet parsing cannot be done properly."""</tt> </tt>
139 <a name="RangeSetParseError.__init__"></a><div id="RangeSetParseError.__init__-def"><a name="L80"></a><tt class="py-lineno"> 80</tt> <a class="py-toggle" href="#" id="RangeSetParseError.__init__-toggle" onclick="return toggle('RangeSetParseError.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSetParseError-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">part</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
140 </div><div id="RangeSetParseError.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSetParseError.__init__-expanded"><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">part</tt><tt class="py-op">:</tt> </tt>
141 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt id="link-11" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-11', 'msg', 'link-11');">msg</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"%s : \"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-12" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-12', 'msg', 'link-11');">msg</a></tt><tt class="py-op">,</tt> <tt class="py-name">part</tt><tt class="py-op">)</tt> </tt>
142 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt id="link-13" class="py-name" targets="Class ClusterShell.NodeSet.RangeSetException=ClusterShell.NodeSet.RangeSetException-class.html"><a title="ClusterShell.NodeSet.RangeSetException" class="py-name" href="#" onclick="return doclink('link-13', 'RangeSetException', 'link-13');">RangeSetException</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
143 ClusterShell.Engine.Engine.Engine.__init__
144 ClusterShell.Engine.Engine.EngineAbortException.__init__
145 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
146 ClusterShell.Engine.Engine.EngineTimer.__init__
147 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
148 ClusterShell.Engine.Engine._EngineTimerQ.__init__
149 ClusterShell.Engine.Poll.EnginePoll.__init__
150 ClusterShell.MsgTree.MsgTree.__init__
151 ClusterShell.MsgTree.MsgTreeElem.__init__
152 ClusterShell.NodeSet.NodeSet.__init__
153 ClusterShell.NodeSet.NodeSetBase.__init__
154 ClusterShell.NodeSet.NodeSetParseError.__init__
155 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
156 ClusterShell.NodeSet.ParsingEngine.__init__
157 ClusterShell.NodeSet.RangeSet.__init__
158 ClusterShell.NodeSet.RangeSetPaddingError.__init__
159 ClusterShell.NodeSet.RangeSetParseError.__init__
160 ClusterShell.NodeUtils.GroupResolver.__init__
161 ClusterShell.NodeUtils.GroupResolverConfig.__init__
162 ClusterShell.NodeUtils.GroupSource.__init__
163 ClusterShell.NodeUtils.GroupSourceException.__init__
164 ClusterShell.Task.Task._SuspendCondition.__init__
165 ClusterShell.Task.Task.__init__
166 ClusterShell.Task._TaskMsgTree.__init__
167 ClusterShell.Worker.EngineClient.EngineClient.__init__
168 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
169 ClusterShell.Worker.EngineClient.EnginePort.__init__
170 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
171 ClusterShell.Worker.Popen.WorkerPopen.__init__
172 ClusterShell.Worker.Ssh.Scp.__init__
173 ClusterShell.Worker.Ssh.Ssh.__init__
174 ClusterShell.Worker.Ssh.WorkerSsh.__init__
175 ClusterShell.Worker.Worker.DistantWorker.__init__
176 ClusterShell.Worker.Worker.Worker.__init__
177 ClusterShell.Worker.Worker.WorkerSimple.__init__
178 clubak.Display.__init__
179 clush.ClushConfig.__init__
180 clush.ClushConfigError.__init__
181 clush.DirectOutputHandler.__init__
182 clush.Display.__init__
183 clush.GatherOutputHandler.__init__
184 clush.RunTimer.__init__
185 clush.StdInputHandler.__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"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-15', 'msg', 'link-11');">msg</a></tt><tt class="py-op">)</tt> </tt>
186 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-comment"># faulty subrange; this allows you to target the error</tt> </tt>
187 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">part</tt> <tt class="py-op">=</tt> <tt class="py-name">part</tt> </tt>
188 </div></div><a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> </tt>
189 <a name="RangeSetPaddingError"></a><div id="RangeSetPaddingError-def"><a name="L87"></a><tt class="py-lineno"> 87</tt> <a class="py-toggle" href="#" id="RangeSetPaddingError-toggle" onclick="return toggle('RangeSetPaddingError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSetPaddingError-class.html">RangeSetPaddingError</a><tt class="py-op">(</tt><tt class="py-base-class">RangeSetParseError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
190 </div><div id="RangeSetPaddingError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RangeSetPaddingError-expanded"><a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when a fatal padding incoherency occurs"""</tt> </tt>
191 <a name="RangeSetPaddingError.__init__"></a><div id="RangeSetPaddingError.__init__-def"><a name="L89"></a><tt class="py-lineno"> 89</tt> <a class="py-toggle" href="#" id="RangeSetPaddingError.__init__-toggle" onclick="return toggle('RangeSetPaddingError.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSetPaddingError-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">part</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
192 </div><div id="RangeSetPaddingError.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSetPaddingError.__init__-expanded"><a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt id="link-16" class="py-name" targets="Class ClusterShell.NodeSet.RangeSetParseError=ClusterShell.NodeSet.RangeSetParseError-class.html"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-16', 'RangeSetParseError', 'link-16');">RangeSetParseError</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
193 ClusterShell.Engine.Engine.Engine.__init__
194 ClusterShell.Engine.Engine.EngineAbortException.__init__
195 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
196 ClusterShell.Engine.Engine.EngineTimer.__init__
197 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
198 ClusterShell.Engine.Engine._EngineTimerQ.__init__
199 ClusterShell.Engine.Poll.EnginePoll.__init__
200 ClusterShell.MsgTree.MsgTree.__init__
201 ClusterShell.MsgTree.MsgTreeElem.__init__
202 ClusterShell.NodeSet.NodeSet.__init__
203 ClusterShell.NodeSet.NodeSetBase.__init__
204 ClusterShell.NodeSet.NodeSetParseError.__init__
205 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
206 ClusterShell.NodeSet.ParsingEngine.__init__
207 ClusterShell.NodeSet.RangeSet.__init__
208 ClusterShell.NodeSet.RangeSetPaddingError.__init__
209 ClusterShell.NodeSet.RangeSetParseError.__init__
210 ClusterShell.NodeUtils.GroupResolver.__init__
211 ClusterShell.NodeUtils.GroupResolverConfig.__init__
212 ClusterShell.NodeUtils.GroupSource.__init__
213 ClusterShell.NodeUtils.GroupSourceException.__init__
214 ClusterShell.Task.Task._SuspendCondition.__init__
215 ClusterShell.Task.Task.__init__
216 ClusterShell.Task._TaskMsgTree.__init__
217 ClusterShell.Worker.EngineClient.EngineClient.__init__
218 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
219 ClusterShell.Worker.EngineClient.EnginePort.__init__
220 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
221 ClusterShell.Worker.Popen.WorkerPopen.__init__
222 ClusterShell.Worker.Ssh.Scp.__init__
223 ClusterShell.Worker.Ssh.Ssh.__init__
224 ClusterShell.Worker.Ssh.WorkerSsh.__init__
225 ClusterShell.Worker.Worker.DistantWorker.__init__
226 ClusterShell.Worker.Worker.Worker.__init__
227 ClusterShell.Worker.Worker.WorkerSimple.__init__
228 clubak.Display.__init__
229 clush.ClushConfig.__init__
230 clush.ClushConfigError.__init__
231 clush.DirectOutputHandler.__init__
232 clush.Display.__init__
233 clush.GatherOutputHandler.__init__
234 clush.RunTimer.__init__
235 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-17', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">part</tt><tt class="py-op">,</tt> <tt class="py-string">"padding mismatch (%s)"</tt> <tt class="py-op">%</tt> <tt id="link-18" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-18', 'msg', 'link-11');">msg</a></tt><tt class="py-op">)</tt> </tt>
236 </div></div><a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> </tt>
237 <a name="NodeSetException"></a><div id="NodeSetException-def"><a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> </tt>
238 <a name="L93"></a><tt class="py-lineno"> 93</tt> <a class="py-toggle" href="#" id="NodeSetException-toggle" onclick="return toggle('NodeSetException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetException-class.html">NodeSetException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
239 </div><div id="NodeSetException-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NodeSetException-expanded"><a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-docstring">"""Base NodeSet exception class."""</tt> </tt>
240 </div><a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt>
241 <a name="NodeSetParseError"></a><div id="NodeSetParseError-def"><a name="L96"></a><tt class="py-lineno"> 96</tt> <a class="py-toggle" href="#" id="NodeSetParseError-toggle" onclick="return toggle('NodeSetParseError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetParseError-class.html">NodeSetParseError</a><tt class="py-op">(</tt><tt class="py-base-class">NodeSetException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
242 </div><div id="NodeSetParseError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NodeSetParseError-expanded"><a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when NodeSet parsing cannot be done properly."""</tt> </tt>
243 <a name="NodeSetParseError.__init__"></a><div id="NodeSetParseError.__init__-def"><a name="L98"></a><tt class="py-lineno"> 98</tt> <a class="py-toggle" href="#" id="NodeSetParseError.__init__-toggle" onclick="return toggle('NodeSetParseError.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetParseError-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">part</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
244 </div><div id="NodeSetParseError.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetParseError.__init__-expanded"><a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">part</tt><tt class="py-op">:</tt> </tt>
245 <a name="L100"></a><tt class="py-lineno"> 100</tt> <tt class="py-line"> <tt id="link-19" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-19', 'msg', 'link-11');">msg</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"%s : \"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-20" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-20', 'msg', 'link-11');">msg</a></tt><tt class="py-op">,</tt> <tt class="py-name">part</tt><tt class="py-op">)</tt> </tt>
246 <a name="L101"></a><tt class="py-lineno"> 101</tt> <tt class="py-line"> <tt id="link-21" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetException=ClusterShell.NodeSet.NodeSetException-class.html"><a title="ClusterShell.NodeSet.NodeSetException" class="py-name" href="#" onclick="return doclink('link-21', 'NodeSetException', 'link-21');">NodeSetException</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
247 ClusterShell.Engine.Engine.Engine.__init__
248 ClusterShell.Engine.Engine.EngineAbortException.__init__
249 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
250 ClusterShell.Engine.Engine.EngineTimer.__init__
251 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
252 ClusterShell.Engine.Engine._EngineTimerQ.__init__
253 ClusterShell.Engine.Poll.EnginePoll.__init__
254 ClusterShell.MsgTree.MsgTree.__init__
255 ClusterShell.MsgTree.MsgTreeElem.__init__
256 ClusterShell.NodeSet.NodeSet.__init__
257 ClusterShell.NodeSet.NodeSetBase.__init__
258 ClusterShell.NodeSet.NodeSetParseError.__init__
259 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
260 ClusterShell.NodeSet.ParsingEngine.__init__
261 ClusterShell.NodeSet.RangeSet.__init__
262 ClusterShell.NodeSet.RangeSetPaddingError.__init__
263 ClusterShell.NodeSet.RangeSetParseError.__init__
264 ClusterShell.NodeUtils.GroupResolver.__init__
265 ClusterShell.NodeUtils.GroupResolverConfig.__init__
266 ClusterShell.NodeUtils.GroupSource.__init__
267 ClusterShell.NodeUtils.GroupSourceException.__init__
268 ClusterShell.Task.Task._SuspendCondition.__init__
269 ClusterShell.Task.Task.__init__
270 ClusterShell.Task._TaskMsgTree.__init__
271 ClusterShell.Worker.EngineClient.EngineClient.__init__
272 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
273 ClusterShell.Worker.EngineClient.EnginePort.__init__
274 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
275 ClusterShell.Worker.Popen.WorkerPopen.__init__
276 ClusterShell.Worker.Ssh.Scp.__init__
277 ClusterShell.Worker.Ssh.Ssh.__init__
278 ClusterShell.Worker.Ssh.WorkerSsh.__init__
279 ClusterShell.Worker.Worker.DistantWorker.__init__
280 ClusterShell.Worker.Worker.Worker.__init__
281 ClusterShell.Worker.Worker.WorkerSimple.__init__
282 clubak.Display.__init__
283 clush.ClushConfig.__init__
284 clush.ClushConfigError.__init__
285 clush.DirectOutputHandler.__init__
286 clush.Display.__init__
287 clush.GatherOutputHandler.__init__
288 clush.RunTimer.__init__
289 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-22', '__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-23" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-23', 'msg', 'link-11');">msg</a></tt><tt class="py-op">)</tt> </tt>
290 <a name="L102"></a><tt class="py-lineno"> 102</tt> <tt class="py-line"> <tt class="py-comment"># faulty part; this allows you to target the error</tt> </tt>
291 <a name="L103"></a><tt class="py-lineno"> 103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">part</tt> <tt class="py-op">=</tt> <tt class="py-name">part</tt> </tt>
292 </div></div><a name="L104"></a><tt class="py-lineno"> 104</tt> <tt class="py-line"> </tt>
293 <a name="NodeSetParseRangeError"></a><div id="NodeSetParseRangeError-def"><a name="L105"></a><tt class="py-lineno"> 105</tt> <a class="py-toggle" href="#" id="NodeSetParseRangeError-toggle" onclick="return toggle('NodeSetParseRangeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html">NodeSetParseRangeError</a><tt class="py-op">(</tt><tt class="py-base-class">NodeSetParseError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
294 </div><div id="NodeSetParseRangeError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NodeSetParseRangeError-expanded"><a name="L106"></a><tt class="py-lineno"> 106</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when bad range is encountered during NodeSet parsing."""</tt> </tt>
295 <a name="NodeSetParseRangeError.__init__"></a><div id="NodeSetParseRangeError.__init__-def"><a name="L107"></a><tt class="py-lineno"> 107</tt> <a class="py-toggle" href="#" id="NodeSetParseRangeError.__init__-toggle" onclick="return toggle('NodeSetParseRangeError.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetParseRangeError-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">rset_exc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
296 </div><div id="NodeSetParseRangeError.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetParseRangeError.__init__-expanded"><a name="L108"></a><tt class="py-lineno"> 108</tt> <tt class="py-line"> <tt id="link-24" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetParseError=ClusterShell.NodeSet.NodeSetParseError-class.html"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-24', 'NodeSetParseError', 'link-24');">NodeSetParseError</a></tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
297 ClusterShell.Engine.Engine.Engine.__init__
298 ClusterShell.Engine.Engine.EngineAbortException.__init__
299 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
300 ClusterShell.Engine.Engine.EngineTimer.__init__
301 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
302 ClusterShell.Engine.Engine._EngineTimerQ.__init__
303 ClusterShell.Engine.Poll.EnginePoll.__init__
304 ClusterShell.MsgTree.MsgTree.__init__
305 ClusterShell.MsgTree.MsgTreeElem.__init__
306 ClusterShell.NodeSet.NodeSet.__init__
307 ClusterShell.NodeSet.NodeSetBase.__init__
308 ClusterShell.NodeSet.NodeSetParseError.__init__
309 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
310 ClusterShell.NodeSet.ParsingEngine.__init__
311 ClusterShell.NodeSet.RangeSet.__init__
312 ClusterShell.NodeSet.RangeSetPaddingError.__init__
313 ClusterShell.NodeSet.RangeSetParseError.__init__
314 ClusterShell.NodeUtils.GroupResolver.__init__
315 ClusterShell.NodeUtils.GroupResolverConfig.__init__
316 ClusterShell.NodeUtils.GroupSource.__init__
317 ClusterShell.NodeUtils.GroupSourceException.__init__
318 ClusterShell.Task.Task._SuspendCondition.__init__
319 ClusterShell.Task.Task.__init__
320 ClusterShell.Task._TaskMsgTree.__init__
321 ClusterShell.Worker.EngineClient.EngineClient.__init__
322 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
323 ClusterShell.Worker.EngineClient.EnginePort.__init__
324 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
325 ClusterShell.Worker.Popen.WorkerPopen.__init__
326 ClusterShell.Worker.Ssh.Scp.__init__
327 ClusterShell.Worker.Ssh.Ssh.__init__
328 ClusterShell.Worker.Ssh.WorkerSsh.__init__
329 ClusterShell.Worker.Worker.DistantWorker.__init__
330 ClusterShell.Worker.Worker.Worker.__init__
331 ClusterShell.Worker.Worker.WorkerSimple.__init__
332 clubak.Display.__init__
333 clush.ClushConfig.__init__
334 clush.ClushConfigError.__init__
335 clush.DirectOutputHandler.__init__
336 clush.Display.__init__
337 clush.GatherOutputHandler.__init__
338 clush.RunTimer.__init__
339 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-25', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">rset_exc</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">"bad range"</tt><tt class="py-op">)</tt> </tt>
340 </div></div><a name="L109"></a><tt class="py-lineno"> 109</tt> <tt class="py-line"> </tt>
341 <a name="NodeSetExternalError"></a><div id="NodeSetExternalError-def"><a name="L110"></a><tt class="py-lineno"> 110</tt> <a class="py-toggle" href="#" id="NodeSetExternalError-toggle" onclick="return toggle('NodeSetExternalError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetExternalError-class.html">NodeSetExternalError</a><tt class="py-op">(</tt><tt class="py-base-class">NodeSetException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
342 </div><div id="NodeSetExternalError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NodeSetExternalError-expanded"><a name="L111"></a><tt class="py-lineno"> 111</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when an external error is encountered."""</tt> </tt>
343 </div><a name="L112"></a><tt class="py-lineno"> 112</tt> <tt class="py-line"> </tt>
344 <a name="RangeSet"></a><div id="RangeSet-def"><a name="L113"></a><tt class="py-lineno"> 113</tt> <tt class="py-line"> </tt>
345 <a name="L114"></a><tt class="py-lineno"> 114</tt> <a class="py-toggle" href="#" id="RangeSet-toggle" onclick="return toggle('RangeSet');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a><tt class="py-op">:</tt> </tt>
346 </div><div id="RangeSet-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RangeSet-expanded"><a name="L115"></a><tt class="py-lineno"> 115</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
347 <a name="L116"></a><tt class="py-lineno"> 116</tt> <tt class="py-line"><tt class="py-docstring"> Advanced range sets.</tt> </tt>
348 <a name="L117"></a><tt class="py-lineno"> 117</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
349 <a name="L118"></a><tt class="py-lineno"> 118</tt> <tt class="py-line"><tt class="py-docstring"> RangeSet creation examples:</tt> </tt>
350 <a name="L119"></a><tt class="py-lineno"> 119</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; rset = RangeSet() # empty RangeSet</tt> </tt>
351 <a name="L120"></a><tt class="py-lineno"> 120</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; rset = RangeSet("5,10-42") # contains 5, 10 to 42</tt> </tt>
352 <a name="L121"></a><tt class="py-lineno"> 121</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; rset = RangeSet("0-10/2") # contains 0, 2, 4, 6, 8, 10</tt> </tt>
353 <a name="L122"></a><tt class="py-lineno"> 122</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
354 <a name="L123"></a><tt class="py-lineno"> 123</tt> <tt class="py-line"><tt class="py-docstring"> Also, RangeSet provides methods like update(), intersection_update()</tt> </tt>
355 <a name="L124"></a><tt class="py-lineno"> 124</tt> <tt class="py-line"><tt class="py-docstring"> or difference_update(), which conform to the Python Set API.</tt> </tt>
356 <a name="L125"></a><tt class="py-lineno"> 125</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
357 <a name="RangeSet.__init__"></a><div id="RangeSet.__init__-def"><a name="L126"></a><tt class="py-lineno"> 126</tt> <a class="py-toggle" href="#" id="RangeSet.__init__-toggle" onclick="return toggle('RangeSet.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-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">pattern</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
358 </div><div id="RangeSet.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__init__-expanded"><a name="L127"></a><tt class="py-lineno"> 127</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
359 <a name="L128"></a><tt class="py-lineno"> 128</tt> <tt class="py-line"><tt class="py-docstring"> Initialize RangeSet with optional pdsh-like string pattern and</tt> </tt>
360 <a name="L129"></a><tt class="py-lineno"> 129</tt> <tt class="py-line"><tt class="py-docstring"> autostep threshold.</tt> </tt>
361 <a name="L130"></a><tt class="py-lineno"> 130</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
362 <a name="L131"></a><tt class="py-lineno"> 131</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">autostep</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
363 <a name="L132"></a><tt class="py-lineno"> 132</tt> <tt class="py-line"> <tt class="py-comment"># disabled by default for pdsh compat (+inf is 1E400, but a bug in</tt> </tt>
364 <a name="L133"></a><tt class="py-lineno"> 133</tt> <tt class="py-line"> <tt class="py-comment"># python 2.4 makes it impossible to be pickled, so we use less).</tt> </tt>
365 <a name="L134"></a><tt class="py-lineno"> 134</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt> <tt class="py-op">=</tt> <tt class="py-number">1E100</tt> </tt>
366 <a name="L135"></a><tt class="py-lineno"> 135</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
367 <a name="L136"></a><tt class="py-lineno"> 136</tt> <tt class="py-line"> <tt class="py-comment"># - 1 because user means node count, but we means</tt> </tt>
368 <a name="L137"></a><tt class="py-lineno"> 137</tt> <tt class="py-line"> <tt class="py-comment"># real steps.</tt> </tt>
369 <a name="L138"></a><tt class="py-lineno"> 138</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">autostep</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
370 <a name="L139"></a><tt class="py-lineno"> 139</tt> <tt class="py-line"> </tt>
371 <a name="L140"></a><tt class="py-lineno"> 140</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
372 <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">_ranges</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
373 <a name="L142"></a><tt class="py-lineno"> 142</tt> <tt class="py-line"> </tt>
374 <a name="L143"></a><tt class="py-lineno"> 143</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pattern</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>
375 <a name="L144"></a><tt class="py-lineno"> 144</tt> <tt class="py-line"> </tt>
376 <a name="L145"></a><tt class="py-lineno"> 145</tt> <tt class="py-line"> <tt class="py-comment"># Comma separated ranges</tt> </tt>
377 <a name="L146"></a><tt class="py-lineno"> 146</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pattern</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">','</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
378 <a name="L147"></a><tt class="py-lineno"> 147</tt> <tt class="py-line"> <tt class="py-name">subranges</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">pattern</tt><tt class="py-op">]</tt> </tt>
379 <a name="L148"></a><tt class="py-lineno"> 148</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
380 <a name="L149"></a><tt class="py-lineno"> 149</tt> <tt class="py-line"> <tt class="py-name">subranges</tt> <tt class="py-op">=</tt> <tt class="py-name">pattern</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.split()=ClusterShell.NodeSet.NodeSet-class.html#split,Method ClusterShell.NodeSet.RangeSet.split()=ClusterShell.NodeSet.RangeSet-class.html#split"><a title="ClusterShell.NodeSet.NodeSet.split
381 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-26', 'split', 'link-26');">split</a></tt><tt class="py-op">(</tt><tt class="py-string">','</tt><tt class="py-op">)</tt> </tt>
382 <a name="L150"></a><tt class="py-lineno"> 150</tt> <tt class="py-line"> </tt>
383 <a name="L151"></a><tt class="py-lineno"> 151</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">subrange</tt> <tt class="py-keyword">in</tt> <tt class="py-name">subranges</tt><tt class="py-op">:</tt> </tt>
384 <a name="L152"></a><tt class="py-lineno"> 152</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">subrange</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
385 <a name="L153"></a><tt class="py-lineno"> 153</tt> <tt class="py-line"> <tt class="py-name">step</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
386 <a name="L154"></a><tt class="py-lineno"> 154</tt> <tt class="py-line"> <tt class="py-name">baserange</tt> <tt class="py-op">=</tt> <tt class="py-name">subrange</tt> </tt>
387 <a name="L155"></a><tt class="py-lineno"> 155</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
388 <a name="L156"></a><tt class="py-lineno"> 156</tt> <tt class="py-line"> <tt class="py-name">baserange</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt> <tt class="py-op">=</tt> <tt class="py-name">subrange</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.split
389 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-27', 'split', 'link-26');">split</a></tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
390 <a name="L157"></a><tt class="py-lineno"> 157</tt> <tt class="py-line"> </tt>
391 <a name="L158"></a><tt class="py-lineno"> 158</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
392 <a name="L159"></a><tt class="py-lineno"> 159</tt> <tt class="py-line"> <tt class="py-name">step</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">step</tt><tt class="py-op">)</tt> </tt>
393 <a name="L160"></a><tt class="py-lineno"> 160</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
394 <a name="L161"></a><tt class="py-lineno"> 161</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-28" class="py-name"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-28', 'RangeSetParseError', 'link-16');">RangeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">subrange</tt><tt class="py-op">,</tt> </tt>
395 <a name="L162"></a><tt class="py-lineno"> 162</tt> <tt class="py-line"> <tt class="py-string">"cannot convert string to integer"</tt><tt class="py-op">)</tt> </tt>
396 <a name="L163"></a><tt class="py-lineno"> 163</tt> <tt class="py-line"> </tt>
397 <a name="L164"></a><tt class="py-lineno"> 164</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">baserange</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
398 <a name="L165"></a><tt class="py-lineno"> 165</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">step</tt> <tt class="py-op">!=</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
399 <a name="L166"></a><tt class="py-lineno"> 166</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-29" class="py-name"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-29', 'RangeSetParseError', 'link-16');">RangeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">subrange</tt><tt class="py-op">,</tt> </tt>
400 <a name="L167"></a><tt class="py-lineno"> 167</tt> <tt class="py-line"> <tt class="py-string">"invalid step usage"</tt><tt class="py-op">)</tt> </tt>
401 <a name="L168"></a><tt class="py-lineno"> 168</tt> <tt class="py-line"> <tt class="py-name">begin</tt> <tt class="py-op">=</tt> <tt class="py-name">end</tt> <tt class="py-op">=</tt> <tt class="py-name">baserange</tt> </tt>
402 <a name="L169"></a><tt class="py-lineno"> 169</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
403 <a name="L170"></a><tt class="py-lineno"> 170</tt> <tt class="py-line"> <tt class="py-name">begin</tt><tt class="py-op">,</tt> <tt class="py-name">end</tt> <tt class="py-op">=</tt> <tt class="py-name">baserange</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.split
404 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-30', 'split', 'link-26');">split</a></tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
405 <a name="L171"></a><tt class="py-lineno"> 171</tt> <tt class="py-line"> </tt>
406 <a name="L172"></a><tt class="py-lineno"> 172</tt> <tt class="py-line"> <tt class="py-comment"># compute padding and return node range info tuple</tt> </tt>
407 <a name="L173"></a><tt class="py-lineno"> 173</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
408 <a name="L174"></a><tt class="py-lineno"> 174</tt> <tt class="py-line"> <tt class="py-name">pad</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
409 <a name="L175"></a><tt class="py-lineno"> 175</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
410 <a name="L176"></a><tt class="py-lineno"> 176</tt> <tt class="py-line"> <tt class="py-name">begins</tt> <tt class="py-op">=</tt> <tt class="py-name">begin</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-string">"0"</tt><tt class="py-op">)</tt> </tt>
411 <a name="L177"></a><tt class="py-lineno"> 177</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">begins</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
412 <a name="L178"></a><tt class="py-lineno"> 178</tt> <tt class="py-line"> <tt class="py-name">pad</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> </tt>
413 <a name="L179"></a><tt class="py-lineno"> 179</tt> <tt class="py-line"> <tt class="py-name">start</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">begins</tt><tt class="py-op">)</tt> </tt>
414 <a name="L180"></a><tt class="py-lineno"> 180</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
415 <a name="L181"></a><tt class="py-lineno"> 181</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
416 <a name="L182"></a><tt class="py-lineno"> 182</tt> <tt class="py-line"> <tt class="py-name">pad</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> </tt>
417 <a name="L183"></a><tt class="py-lineno"> 183</tt> <tt class="py-line"> <tt class="py-name">start</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
418 <a name="L184"></a><tt class="py-lineno"> 184</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">end</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
419 <a name="L185"></a><tt class="py-lineno"> 185</tt> <tt class="py-line"> <tt class="py-name">ends</tt> <tt class="py-op">=</tt> <tt class="py-name">end</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-string">"0"</tt><tt class="py-op">)</tt> </tt>
420 <a name="L186"></a><tt class="py-lineno"> 186</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
421 <a name="L187"></a><tt class="py-lineno"> 187</tt> <tt class="py-line"> <tt class="py-name">ends</tt> <tt class="py-op">=</tt> <tt class="py-name">end</tt> </tt>
422 <a name="L188"></a><tt class="py-lineno"> 188</tt> <tt class="py-line"> <tt class="py-name">stop</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">ends</tt><tt class="py-op">)</tt> </tt>
423 <a name="L189"></a><tt class="py-lineno"> 189</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
424 <a name="L190"></a><tt class="py-lineno"> 190</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-31" class="py-name"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-31', 'RangeSetParseError', 'link-16');">RangeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">subrange</tt><tt class="py-op">,</tt> </tt>
425 <a name="L191"></a><tt class="py-lineno"> 191</tt> <tt class="py-line"> <tt class="py-string">"cannot convert string to integer"</tt><tt class="py-op">)</tt> </tt>
426 <a name="L192"></a><tt class="py-lineno"> 192</tt> <tt class="py-line"> </tt>
427 <a name="L193"></a><tt class="py-lineno"> 193</tt> <tt class="py-line"> <tt class="py-comment"># check preconditions</tt> </tt>
428 <a name="L194"></a><tt class="py-lineno"> 194</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">start</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">stop</tt> <tt class="py-keyword">or</tt> <tt class="py-name">step</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
429 <a name="L195"></a><tt class="py-lineno"> 195</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-32" class="py-name"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-32', 'RangeSetParseError', 'link-16');">RangeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">subrange</tt><tt class="py-op">,</tt> </tt>
430 <a name="L196"></a><tt class="py-lineno"> 196</tt> <tt class="py-line"> <tt class="py-string">"invalid values in range"</tt><tt class="py-op">)</tt> </tt>
431 <a name="L197"></a><tt class="py-lineno"> 197</tt> <tt class="py-line"> </tt>
432 <a name="L198"></a><tt class="py-lineno"> 198</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet.add_range()=ClusterShell.NodeSet.RangeSet-class.html#add_range"><a title="ClusterShell.NodeSet.RangeSet.add_range" class="py-name" href="#" onclick="return doclink('link-33', 'add_range', 'link-33');">add_range</a></tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt> </tt>
433 </div><a name="L199"></a><tt class="py-lineno"> 199</tt> <tt class="py-line"> </tt>
434 <a name="L200"></a><tt class="py-lineno"> 200</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
435 <a name="RangeSet.fromlist"></a><div id="RangeSet.fromlist-def"><a name="L201"></a><tt class="py-lineno"> 201</tt> <a class="py-toggle" href="#" id="RangeSet.fromlist-toggle" onclick="return toggle('RangeSet.fromlist');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#fromlist">fromlist</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">rglist</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
436 </div><div id="RangeSet.fromlist-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.fromlist-expanded"><a name="L202"></a><tt class="py-lineno"> 202</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
437 <a name="L203"></a><tt class="py-lineno"> 203</tt> <tt class="py-line"><tt class="py-docstring"> Class method that returns a new RangeSet with ranges from</tt> </tt>
438 <a name="L204"></a><tt class="py-lineno"> 204</tt> <tt class="py-line"><tt class="py-docstring"> provided list.</tt> </tt>
439 <a name="L205"></a><tt class="py-lineno"> 205</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
440 <a name="L206"></a><tt class="py-lineno"> 206</tt> <tt class="py-line"> <tt class="py-name">inst</tt> <tt class="py-op">=</tt> <tt id="link-34" class="py-name" targets="Class ClusterShell.NodeSet.RangeSet=ClusterShell.NodeSet.RangeSet-class.html"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-34', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
441 <a name="L207"></a><tt class="py-lineno"> 207</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">rglist</tt><tt class="py-op">:</tt> </tt>
442 <a name="L208"></a><tt class="py-lineno"> 208</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">rg</tt><tt class="py-op">,</tt> <tt id="link-35" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-35', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
443 <a name="L209"></a><tt class="py-lineno"> 209</tt> <tt class="py-line"> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.update()=ClusterShell.NodeSet.NodeSet-class.html#update,Method ClusterShell.NodeSet.NodeSetBase.update()=ClusterShell.NodeSet.NodeSetBase-class.html#update,Method ClusterShell.NodeSet.RangeSet.update()=ClusterShell.NodeSet.RangeSet-class.html#update,Method clush.RunTimer.update()=clush.RunTimer-class.html#update"><a title="ClusterShell.NodeSet.NodeSet.update
444 ClusterShell.NodeSet.NodeSetBase.update
445 ClusterShell.NodeSet.RangeSet.update
446 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-36', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">rg</tt><tt class="py-op">)</tt> </tt>
447 <a name="L210"></a><tt class="py-lineno"> 210</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
448 <a name="L211"></a><tt class="py-lineno"> 211</tt> <tt class="py-line"> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
449 ClusterShell.NodeSet.NodeSetBase.update
450 ClusterShell.NodeSet.RangeSet.update
451 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-37', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt id="link-38" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-38', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">rg</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
452 <a name="L212"></a><tt class="py-lineno"> 212</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">inst</tt> </tt>
453 </div><a name="L213"></a><tt class="py-lineno"> 213</tt> <tt class="py-line"> </tt>
454 <a name="L214"></a><tt class="py-lineno"> 214</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
455 <a name="RangeSet.fromone"></a><div id="RangeSet.fromone-def"><a name="L215"></a><tt class="py-lineno"> 215</tt> <a class="py-toggle" href="#" id="RangeSet.fromone-toggle" onclick="return toggle('RangeSet.fromone');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#fromone">fromone</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">index</tt><tt class="py-op">,</tt> <tt class="py-param">pad</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
456 </div><div id="RangeSet.fromone-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.fromone-expanded"><a name="L216"></a><tt class="py-lineno"> 216</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
457 <a name="L217"></a><tt class="py-lineno"> 217</tt> <tt class="py-line"><tt class="py-docstring"> Class method that returns a new RangeSet of one single item.</tt> </tt>
458 <a name="L218"></a><tt class="py-lineno"> 218</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
459 <a name="L219"></a><tt class="py-lineno"> 219</tt> <tt class="py-line"> <tt class="py-name">inst</tt> <tt class="py-op">=</tt> <tt id="link-39" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-39', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
460 <a name="L220"></a><tt class="py-lineno"> 220</tt> <tt class="py-line"> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.add()=ClusterShell.Engine.Engine.Engine-class.html#add,Method ClusterShell.MsgTree.MsgTree.add()=ClusterShell.MsgTree.MsgTree-class.html#add,Method ClusterShell.NodeSet.NodeSetBase.add()=ClusterShell.NodeSet.NodeSetBase-class.html#add,Method ClusterShell.NodeSet.RangeSet.add()=ClusterShell.NodeSet.RangeSet-class.html#add"><a title="ClusterShell.Engine.Engine.Engine.add
461 ClusterShell.MsgTree.MsgTree.add
462 ClusterShell.NodeSet.NodeSetBase.add
463 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-40', 'add', 'link-40');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt> </tt>
464 <a name="L221"></a><tt class="py-lineno"> 221</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">inst</tt> </tt>
465 </div><a name="L222"></a><tt class="py-lineno"> 222</tt> <tt class="py-line"> </tt>
466 <a name="RangeSet.__iter__"></a><div id="RangeSet.__iter__-def"><a name="L223"></a><tt class="py-lineno"> 223</tt> <a class="py-toggle" href="#" id="RangeSet.__iter__-toggle" onclick="return toggle('RangeSet.__iter__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__iter__">__iter__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
467 </div><div id="RangeSet.__iter__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__iter__-expanded"><a name="L224"></a><tt class="py-lineno"> 224</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
468 <a name="L225"></a><tt class="py-lineno"> 225</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over each item in RangeSet.</tt> </tt>
469 <a name="L226"></a><tt class="py-lineno"> 226</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
470 <a name="L227"></a><tt class="py-lineno"> 227</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
471 <a name="L228"></a><tt class="py-lineno"> 228</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
472 <a name="L229"></a><tt class="py-lineno"> 229</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-string">"%*d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pad</tt><tt class="py-op">,</tt> <tt class="py-name">i</tt><tt class="py-op">)</tt> </tt>
473 </div><a name="L230"></a><tt class="py-lineno"> 230</tt> <tt class="py-line"> </tt>
474 <a name="RangeSet.__len__"></a><div id="RangeSet.__len__-def"><a name="L231"></a><tt class="py-lineno"> 231</tt> <a class="py-toggle" href="#" id="RangeSet.__len__-toggle" onclick="return toggle('RangeSet.__len__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__len__">__len__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
475 </div><div id="RangeSet.__len__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__len__-expanded"><a name="L232"></a><tt class="py-lineno"> 232</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
476 <a name="L233"></a><tt class="py-lineno"> 233</tt> <tt class="py-line"><tt class="py-docstring"> Get the number of items in RangeSet.</tt> </tt>
477 <a name="L234"></a><tt class="py-lineno"> 234</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
478 <a name="L235"></a><tt class="py-lineno"> 235</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">_length</tt> </tt>
479 </div><a name="L236"></a><tt class="py-lineno"> 236</tt> <tt class="py-line"> </tt>
480 <a name="RangeSet.__str__"></a><div id="RangeSet.__str__-def"><a name="L237"></a><tt class="py-lineno"> 237</tt> <a class="py-toggle" href="#" id="RangeSet.__str__-toggle" onclick="return toggle('RangeSet.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
481 </div><div id="RangeSet.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__str__-expanded"><a name="L238"></a><tt class="py-lineno"> 238</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
482 <a name="L239"></a><tt class="py-lineno"> 239</tt> <tt class="py-line"><tt class="py-docstring"> Get range-based string.</tt> </tt>
483 <a name="L240"></a><tt class="py-lineno"> 240</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
484 <a name="L241"></a><tt class="py-lineno"> 241</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
485 <a name="L242"></a><tt class="py-lineno"> 242</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
486 <a name="L243"></a><tt class="py-lineno"> 243</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
487 <a name="L244"></a><tt class="py-lineno"> 244</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">pad</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
488 <a name="L245"></a><tt class="py-lineno"> 245</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cnt</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
489 <a name="L246"></a><tt class="py-lineno"> 246</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">","</tt> </tt>
490 <a name="L247"></a><tt class="py-lineno"> 247</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">start</tt> <tt class="py-op">==</tt> <tt class="py-name">stop</tt><tt class="py-op">:</tt> </tt>
491 <a name="L248"></a><tt class="py-lineno"> 248</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%0*d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pad</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">)</tt> </tt>
492 <a name="L249"></a><tt class="py-lineno"> 249</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
493 <a name="L250"></a><tt class="py-lineno"> 250</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">step</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-string">"Internal error: step &lt; 0"</tt> </tt>
494 <a name="L251"></a><tt class="py-lineno"> 251</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">step</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
495 <a name="L252"></a><tt class="py-lineno"> 252</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%0*d-%0*d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pad</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">)</tt> </tt>
496 <a name="L253"></a><tt class="py-lineno"> 253</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
497 <a name="L254"></a><tt class="py-lineno"> 254</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%0*d-%0*d/%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pad</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">)</tt> </tt>
498 <a name="L255"></a><tt class="py-lineno"> 255</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">+=</tt> <tt class="py-name">stop</tt> <tt class="py-op">-</tt> <tt class="py-name">start</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
499 <a name="L256"></a><tt class="py-lineno"> 256</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt>
500 </div><a name="L257"></a><tt class="py-lineno"> 257</tt> <tt class="py-line"> </tt>
501 <a name="L258"></a><tt class="py-lineno"> 258</tt> <tt class="py-line"> <tt class="py-comment"># __repr__ is the same as __str__ as it is a valid expression that</tt> </tt>
502 <a name="L259"></a><tt class="py-lineno"> 259</tt> <tt class="py-line"> <tt class="py-comment"># could be used to recreate a RangeSet with the same value</tt> </tt>
503 <a name="L260"></a><tt class="py-lineno"> 260</tt> <tt class="py-line"> <tt class="py-name">__repr__</tt> <tt class="py-op">=</tt> <tt id="link-41" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase.__str__()=ClusterShell.NodeSet.NodeSetBase-class.html#__str__,Method ClusterShell.NodeSet.RangeSet.__str__()=ClusterShell.NodeSet.RangeSet-class.html#__str__,Method clush.ClushConfigError.__str__()=clush.ClushConfigError-class.html#__str__"><a title="ClusterShell.NodeSet.NodeSetBase.__str__
504 ClusterShell.NodeSet.RangeSet.__str__
505 clush.ClushConfigError.__str__" class="py-name" href="#" onclick="return doclink('link-41', '__str__', 'link-41');">__str__</a></tt> </tt>
506 <a name="L261"></a><tt class="py-lineno"> 261</tt> <tt class="py-line"> </tt>
507 <a name="RangeSet.__contains__"></a><div id="RangeSet.__contains__-def"><a name="L262"></a><tt class="py-lineno"> 262</tt> <a class="py-toggle" href="#" id="RangeSet.__contains__-toggle" onclick="return toggle('RangeSet.__contains__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__contains__">__contains__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">elem</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
508 </div><div id="RangeSet.__contains__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__contains__-expanded"><a name="L263"></a><tt class="py-lineno"> 263</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
509 <a name="L264"></a><tt class="py-lineno"> 264</tt> <tt class="py-line"><tt class="py-docstring"> Is element contained in RangeSet? Element can be either a</tt> </tt>
510 <a name="L265"></a><tt class="py-lineno"> 265</tt> <tt class="py-line"><tt class="py-docstring"> string with optional padding (eg. "002") or an integer</tt> </tt>
511 <a name="L266"></a><tt class="py-lineno"> 266</tt> <tt class="py-line"><tt class="py-docstring"> (obviously, no padding check is performed for integer).</tt> </tt>
512 <a name="L267"></a><tt class="py-lineno"> 267</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
513 <a name="L268"></a><tt class="py-lineno"> 268</tt> <tt class="py-line"> <tt class="py-comment"># support str type with padding support, eg. `"003" in rangeset'</tt> </tt>
514 <a name="L269"></a><tt class="py-lineno"> 269</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">str</tt><tt class="py-op">:</tt> </tt>
515 <a name="L270"></a><tt class="py-lineno"> 270</tt> <tt class="py-line"> <tt class="py-name">pad</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
516 <a name="L271"></a><tt class="py-lineno"> 271</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
517 <a name="L272"></a><tt class="py-lineno"> 272</tt> <tt class="py-line"> <tt class="py-name">selem</tt> <tt class="py-op">=</tt> <tt class="py-name">elem</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-string">"0"</tt><tt class="py-op">)</tt> </tt>
518 <a name="L273"></a><tt class="py-lineno"> 273</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">selem</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
519 <a name="L274"></a><tt class="py-lineno"> 274</tt> <tt class="py-line"> <tt class="py-name">pad</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">)</tt> </tt>
520 <a name="L275"></a><tt class="py-lineno"> 275</tt> <tt class="py-line"> <tt class="py-name">ielem</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">selem</tt><tt class="py-op">)</tt> </tt>
521 <a name="L276"></a><tt class="py-lineno"> 276</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
522 <a name="L277"></a><tt class="py-lineno"> 277</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
523 <a name="L278"></a><tt class="py-lineno"> 278</tt> <tt class="py-line"> <tt class="py-name">pad</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">)</tt> </tt>
524 <a name="L279"></a><tt class="py-lineno"> 279</tt> <tt class="py-line"> <tt class="py-name">ielem</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
525 <a name="L280"></a><tt class="py-lineno"> 280</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet._contains_with_padding()=ClusterShell.NodeSet.RangeSet-class.html#_contains_with_padding"><a title="ClusterShell.NodeSet.RangeSet._contains_with_padding" class="py-name" href="#" onclick="return doclink('link-42', '_contains_with_padding', 'link-42');">_contains_with_padding</a></tt><tt class="py-op">(</tt><tt class="py-name">ielem</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt> </tt>
526 <a name="L281"></a><tt class="py-lineno"> 281</tt> <tt class="py-line"> </tt>
527 <a name="L282"></a><tt class="py-lineno"> 282</tt> <tt class="py-line"> <tt class="py-comment"># the following cast raises TypeError if elem is not an integer</tt> </tt>
528 <a name="L283"></a><tt class="py-lineno"> 283</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet._contains()=ClusterShell.NodeSet.RangeSet-class.html#_contains"><a title="ClusterShell.NodeSet.RangeSet._contains" class="py-name" href="#" onclick="return doclink('link-43', '_contains', 'link-43');">_contains</a></tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
529 </div><a name="L284"></a><tt class="py-lineno"> 284</tt> <tt class="py-line"> </tt>
530 <a name="RangeSet._contains"></a><div id="RangeSet._contains-def"><a name="L285"></a><tt class="py-lineno"> 285</tt> <a class="py-toggle" href="#" id="RangeSet._contains-toggle" onclick="return toggle('RangeSet._contains');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_contains">_contains</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">ielem</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
531 </div><div id="RangeSet._contains-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._contains-expanded"><a name="L286"></a><tt class="py-lineno"> 286</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
532 <a name="L287"></a><tt class="py-lineno"> 287</tt> <tt class="py-line"><tt class="py-docstring"> Contains subroutine that takes an integer.</tt> </tt>
533 <a name="L288"></a><tt class="py-lineno"> 288</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
534 <a name="L289"></a><tt class="py-lineno"> 289</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rgstart</tt><tt class="py-op">,</tt> <tt class="py-name">rgstop</tt><tt class="py-op">,</tt> <tt class="py-name">rgstep</tt><tt class="py-op">,</tt> <tt class="py-name">rgpad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
535 <a name="L290"></a><tt class="py-lineno"> 290</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ielem</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">rgstart</tt> <tt class="py-keyword">and</tt> <tt class="py-name">ielem</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">rgstop</tt> <tt class="py-keyword">and</tt> \ </tt>
536 <a name="L291"></a><tt class="py-lineno"> 291</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">ielem</tt> <tt class="py-op">-</tt> <tt class="py-name">rgstart</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">rgstep</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
537 <a name="L292"></a><tt class="py-lineno"> 292</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
538 <a name="L293"></a><tt class="py-lineno"> 293</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
539 </div><a name="L294"></a><tt class="py-lineno"> 294</tt> <tt class="py-line"> </tt>
540 <a name="RangeSet._contains_with_padding"></a><div id="RangeSet._contains_with_padding-def"><a name="L295"></a><tt class="py-lineno"> 295</tt> <a class="py-toggle" href="#" id="RangeSet._contains_with_padding-toggle" onclick="return toggle('RangeSet._contains_with_padding');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_contains_with_padding">_contains_with_padding</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">ielem</tt><tt class="py-op">,</tt> <tt class="py-param">pad</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
541 </div><div id="RangeSet._contains_with_padding-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._contains_with_padding-expanded"><a name="L296"></a><tt class="py-lineno"> 296</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
542 <a name="L297"></a><tt class="py-lineno"> 297</tt> <tt class="py-line"><tt class="py-docstring"> Contains subroutine that takes an integer and a padding value.</tt> </tt>
543 <a name="L298"></a><tt class="py-lineno"> 298</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
544 <a name="L299"></a><tt class="py-lineno"> 299</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rgstart</tt><tt class="py-op">,</tt> <tt class="py-name">rgstop</tt><tt class="py-op">,</tt> <tt class="py-name">rgstep</tt><tt class="py-op">,</tt> <tt class="py-name">rgpad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
545 <a name="L300"></a><tt class="py-lineno"> 300</tt> <tt class="py-line"> <tt class="py-comment"># for each ranges, check for inclusion + padding matching</tt> </tt>
546 <a name="L301"></a><tt class="py-lineno"> 301</tt> <tt class="py-line"> <tt class="py-comment"># + step matching</tt> </tt>
547 <a name="L302"></a><tt class="py-lineno"> 302</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ielem</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">rgstart</tt> <tt class="py-keyword">and</tt> <tt class="py-name">ielem</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">rgstop</tt> <tt class="py-keyword">and</tt> \ </tt>
548 <a name="L303"></a><tt class="py-lineno"> 303</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">pad</tt> <tt class="py-op">==</tt> <tt class="py-name">rgpad</tt> <tt class="py-keyword">or</tt> <tt class="py-op">(</tt><tt class="py-name">pad</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">ielem</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">rgpad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> \ </tt>
549 <a name="L304"></a><tt class="py-lineno"> 304</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">ielem</tt> <tt class="py-op">-</tt> <tt class="py-name">rgstart</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">rgstep</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
550 <a name="L305"></a><tt class="py-lineno"> 305</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
551 <a name="L306"></a><tt class="py-lineno"> 306</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
552 </div><a name="L307"></a><tt class="py-lineno"> 307</tt> <tt class="py-line"> </tt>
553 <a name="RangeSet._binary_sanity_check"></a><div id="RangeSet._binary_sanity_check-def"><a name="L308"></a><tt class="py-lineno"> 308</tt> <a class="py-toggle" href="#" id="RangeSet._binary_sanity_check-toggle" onclick="return toggle('RangeSet._binary_sanity_check');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_binary_sanity_check">_binary_sanity_check</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
554 </div><div id="RangeSet._binary_sanity_check-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._binary_sanity_check-expanded"><a name="L309"></a><tt class="py-lineno"> 309</tt> <tt class="py-line"> <tt class="py-comment"># check that the other argument to a binary operation is also</tt> </tt>
555 <a name="L310"></a><tt class="py-lineno"> 310</tt> <tt class="py-line"> <tt class="py-comment"># a RangeSet, raising a TypeError otherwise.</tt> </tt>
556 <a name="L311"></a><tt class="py-lineno"> 311</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-44" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-44', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
557 <a name="L312"></a><tt class="py-lineno"> 312</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Binary operation only permitted between RangeSets"</tt> </tt>
558 </div><a name="L313"></a><tt class="py-lineno"> 313</tt> <tt class="py-line"> </tt>
559 <a name="RangeSet.issubset"></a><div id="RangeSet.issubset-def"><a name="L314"></a><tt class="py-lineno"> 314</tt> <a class="py-toggle" href="#" id="RangeSet.issubset-toggle" onclick="return toggle('RangeSet.issubset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#issubset">issubset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
560 </div><div id="RangeSet.issubset-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.issubset-expanded"><a name="L315"></a><tt class="py-lineno"> 315</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
561 <a name="L316"></a><tt class="py-lineno"> 316</tt> <tt class="py-line"><tt class="py-docstring"> Report whether another rangeset contains this rangeset.</tt> </tt>
562 <a name="L317"></a><tt class="py-lineno"> 317</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
563 <a name="L318"></a><tt class="py-lineno"> 318</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase._binary_sanity_check()=ClusterShell.NodeSet.NodeSetBase-class.html#_binary_sanity_check,Method ClusterShell.NodeSet.RangeSet._binary_sanity_check()=ClusterShell.NodeSet.RangeSet-class.html#_binary_sanity_check"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
564 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-45', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
565 <a name="L319"></a><tt class="py-lineno"> 319</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
566 <a name="L320"></a><tt class="py-lineno"> 320</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
567 <a name="L321"></a><tt class="py-lineno"> 321</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._contains_with_padding" class="py-name" href="#" onclick="return doclink('link-46', '_contains_with_padding', 'link-42');">_contains_with_padding</a></tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
568 <a name="L322"></a><tt class="py-lineno"> 322</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
569 <a name="L323"></a><tt class="py-lineno"> 323</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
570 </div><a name="L324"></a><tt class="py-lineno"> 324</tt> <tt class="py-line"> </tt>
571 <a name="RangeSet.issuperset"></a><div id="RangeSet.issuperset-def"><a name="L325"></a><tt class="py-lineno"> 325</tt> <a class="py-toggle" href="#" id="RangeSet.issuperset-toggle" onclick="return toggle('RangeSet.issuperset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#issuperset">issuperset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
572 </div><div id="RangeSet.issuperset-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.issuperset-expanded"><a name="L326"></a><tt class="py-lineno"> 326</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
573 <a name="L327"></a><tt class="py-lineno"> 327</tt> <tt class="py-line"><tt class="py-docstring"> Report whether this rangeset contains another rangeset.</tt> </tt>
574 <a name="L328"></a><tt class="py-lineno"> 328</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
575 <a name="L329"></a><tt class="py-lineno"> 329</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
576 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-47', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
577 <a name="L330"></a><tt class="py-lineno"> 330</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.issubset()=ClusterShell.NodeSet.NodeSet-class.html#issubset,Method ClusterShell.NodeSet.NodeSetBase.issubset()=ClusterShell.NodeSet.NodeSetBase-class.html#issubset,Method ClusterShell.NodeSet.RangeSet.issubset()=ClusterShell.NodeSet.RangeSet-class.html#issubset"><a title="ClusterShell.NodeSet.NodeSet.issubset
578 ClusterShell.NodeSet.NodeSetBase.issubset
579 ClusterShell.NodeSet.RangeSet.issubset" class="py-name" href="#" onclick="return doclink('link-48', 'issubset', 'link-48');">issubset</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
580 </div><a name="L331"></a><tt class="py-lineno"> 331</tt> <tt class="py-line"> </tt>
581 <a name="RangeSet.__eq__"></a><div id="RangeSet.__eq__-def"><a name="L332"></a><tt class="py-lineno"> 332</tt> <a class="py-toggle" href="#" id="RangeSet.__eq__-toggle" onclick="return toggle('RangeSet.__eq__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__eq__">__eq__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
582 </div><div id="RangeSet.__eq__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__eq__-expanded"><a name="L333"></a><tt class="py-lineno"> 333</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
583 <a name="L334"></a><tt class="py-lineno"> 334</tt> <tt class="py-line"><tt class="py-docstring"> RangeSet equality comparison.</tt> </tt>
584 <a name="L335"></a><tt class="py-lineno"> 335</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
585 <a name="L336"></a><tt class="py-lineno"> 336</tt> <tt class="py-line"> <tt class="py-comment"># Return NotImplemented instead of raising TypeError, to</tt> </tt>
586 <a name="L337"></a><tt class="py-lineno"> 337</tt> <tt class="py-line"> <tt class="py-comment"># indicate that the comparison is not implemented with respect</tt> </tt>
587 <a name="L338"></a><tt class="py-lineno"> 338</tt> <tt class="py-line"> <tt class="py-comment"># to the other type (the other comparand then gets a change to</tt> </tt>
588 <a name="L339"></a><tt class="py-lineno"> 339</tt> <tt class="py-line"> <tt class="py-comment"># determine the result, then it falls back to object address</tt> </tt>
589 <a name="L340"></a><tt class="py-lineno"> 340</tt> <tt class="py-line"> <tt class="py-comment"># comparison).</tt> </tt>
590 <a name="L341"></a><tt class="py-lineno"> 341</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-49" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-49', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
591 <a name="L342"></a><tt class="py-lineno"> 342</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
592 <a name="L343"></a><tt class="py-lineno"> 343</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</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">len</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issubset
593 ClusterShell.NodeSet.NodeSetBase.issubset
594 ClusterShell.NodeSet.RangeSet.issubset" class="py-name" href="#" onclick="return doclink('link-50', 'issubset', 'link-48');">issubset</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
595 </div><a name="L344"></a><tt class="py-lineno"> 344</tt> <tt class="py-line"> </tt>
596 <a name="L345"></a><tt class="py-lineno"> 345</tt> <tt class="py-line"> <tt class="py-comment"># inequality comparisons using the is-subset relation</tt> </tt>
597 <a name="L346"></a><tt class="py-lineno"> 346</tt> <tt class="py-line"> <tt class="py-name">__le__</tt> <tt class="py-op">=</tt> <tt id="link-51" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issubset
598 ClusterShell.NodeSet.NodeSetBase.issubset
599 ClusterShell.NodeSet.RangeSet.issubset" class="py-name" href="#" onclick="return doclink('link-51', 'issubset', 'link-48');">issubset</a></tt> </tt>
600 <a name="L347"></a><tt class="py-lineno"> 347</tt> <tt class="py-line"> <tt class="py-name">__ge__</tt> <tt class="py-op">=</tt> <tt id="link-52" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.issuperset()=ClusterShell.NodeSet.NodeSet-class.html#issuperset,Method ClusterShell.NodeSet.NodeSetBase.issuperset()=ClusterShell.NodeSet.NodeSetBase-class.html#issuperset,Method ClusterShell.NodeSet.RangeSet.issuperset()=ClusterShell.NodeSet.RangeSet-class.html#issuperset"><a title="ClusterShell.NodeSet.NodeSet.issuperset
601 ClusterShell.NodeSet.NodeSetBase.issuperset
602 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-52', 'issuperset', 'link-52');">issuperset</a></tt> </tt>
603 <a name="L348"></a><tt class="py-lineno"> 348</tt> <tt class="py-line"> </tt>
604 <a name="RangeSet.__lt__"></a><div id="RangeSet.__lt__-def"><a name="L349"></a><tt class="py-lineno"> 349</tt> <a class="py-toggle" href="#" id="RangeSet.__lt__-toggle" onclick="return toggle('RangeSet.__lt__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__lt__">__lt__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
605 </div><div id="RangeSet.__lt__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__lt__-expanded"><a name="L350"></a><tt class="py-lineno"> 350</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
606 <a name="L351"></a><tt class="py-lineno"> 351</tt> <tt class="py-line"><tt class="py-docstring"> x.__lt__(y) &lt;==&gt; x&lt;y</tt> </tt>
607 <a name="L352"></a><tt class="py-lineno"> 352</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
608 <a name="L353"></a><tt class="py-lineno"> 353</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
609 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-53', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
610 <a name="L354"></a><tt class="py-lineno"> 354</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issubset
611 ClusterShell.NodeSet.NodeSetBase.issubset
612 ClusterShell.NodeSet.RangeSet.issubset" class="py-name" href="#" onclick="return doclink('link-54', 'issubset', 'link-48');">issubset</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
613 </div><a name="L355"></a><tt class="py-lineno"> 355</tt> <tt class="py-line"> </tt>
614 <a name="RangeSet.__gt__"></a><div id="RangeSet.__gt__-def"><a name="L356"></a><tt class="py-lineno"> 356</tt> <a class="py-toggle" href="#" id="RangeSet.__gt__-toggle" onclick="return toggle('RangeSet.__gt__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__gt__">__gt__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
615 </div><div id="RangeSet.__gt__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__gt__-expanded"><a name="L357"></a><tt class="py-lineno"> 357</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
616 <a name="L358"></a><tt class="py-lineno"> 358</tt> <tt class="py-line"><tt class="py-docstring"> x.__gt__(y) &lt;==&gt; x&gt;y</tt> </tt>
617 <a name="L359"></a><tt class="py-lineno"> 359</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
618 <a name="L360"></a><tt class="py-lineno"> 360</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
619 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-55', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
620 <a name="L361"></a><tt class="py-lineno"> 361</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
621 ClusterShell.NodeSet.NodeSetBase.issuperset
622 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-56', 'issuperset', 'link-52');">issuperset</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
623 </div><a name="L362"></a><tt class="py-lineno"> 362</tt> <tt class="py-line"> </tt>
624 <a name="RangeSet.__getitem__"></a><div id="RangeSet.__getitem__-def"><a name="L363"></a><tt class="py-lineno"> 363</tt> <a class="py-toggle" href="#" id="RangeSet.__getitem__-toggle" onclick="return toggle('RangeSet.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">i</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
625 </div><div id="RangeSet.__getitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__getitem__-expanded"><a name="L364"></a><tt class="py-lineno"> 364</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
626 <a name="L365"></a><tt class="py-lineno"> 365</tt> <tt class="py-line"><tt class="py-docstring"> Return the element at index i.</tt> </tt>
627 <a name="L366"></a><tt class="py-lineno"> 366</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
628 <a name="L367"></a><tt class="py-lineno"> 367</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
629 <a name="L368"></a><tt class="py-lineno"> 368</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
630 <a name="L369"></a><tt class="py-lineno"> 369</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">stop</tt> <tt class="py-op">-</tt> <tt class="py-name">start</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-name">step</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
631 <a name="L370"></a><tt class="py-lineno"> 370</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">i</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">length</tt> <tt class="py-op">+</tt> <tt class="py-name">cnt</tt><tt class="py-op">:</tt> </tt>
632 <a name="L371"></a><tt class="py-lineno"> 371</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">start</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">i</tt> <tt class="py-op">-</tt> <tt class="py-name">length</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-name">step</tt> </tt>
633 <a name="L372"></a><tt class="py-lineno"> 372</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">+=</tt> <tt class="py-name">cnt</tt> </tt>
634 </div><a name="L373"></a><tt class="py-lineno"> 373</tt> <tt class="py-line"> </tt>
635 <a name="RangeSet.__getslice__"></a><div id="RangeSet.__getslice__-def"><a name="L374"></a><tt class="py-lineno"> 374</tt> <a class="py-toggle" href="#" id="RangeSet.__getslice__-toggle" onclick="return toggle('RangeSet.__getslice__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__getslice__">__getslice__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">i</tt><tt class="py-op">,</tt> <tt class="py-param">j</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
636 </div><div id="RangeSet.__getslice__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__getslice__-expanded"><a name="L375"></a><tt class="py-lineno"> 375</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
637 <a name="L376"></a><tt class="py-lineno"> 376</tt> <tt class="py-line"><tt class="py-docstring"> Return the slice from index i to index j-1. For convenience</tt> </tt>
638 <a name="L377"></a><tt class="py-lineno"> 377</tt> <tt class="py-line"><tt class="py-docstring"> only, not optimized as of version 1.0.</tt> </tt>
639 <a name="L378"></a><tt class="py-lineno"> 378</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
640 <a name="L379"></a><tt class="py-lineno"> 379</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-57" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-57', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">.</tt><tt id="link-58" class="py-name" targets="Class Method ClusterShell.NodeSet.NodeSet.fromlist()=ClusterShell.NodeSet.NodeSet-class.html#fromlist,Class Method ClusterShell.NodeSet.RangeSet.fromlist()=ClusterShell.NodeSet.RangeSet-class.html#fromlist"><a title="ClusterShell.NodeSet.NodeSet.fromlist
641 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-58', 'fromlist', 'link-58');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">list</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">i</tt><tt class="py-op">:</tt><tt class="py-name">j</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
642 </div><a name="L380"></a><tt class="py-lineno"> 380</tt> <tt class="py-line"> </tt>
643 <a name="RangeSet.split"></a><div id="RangeSet.split-def"><a name="L381"></a><tt class="py-lineno"> 381</tt> <a class="py-toggle" href="#" id="RangeSet.split-toggle" onclick="return toggle('RangeSet.split');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#split">split</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nbr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
644 </div><div id="RangeSet.split-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.split-expanded"><a name="L382"></a><tt class="py-lineno"> 382</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
645 <a name="L383"></a><tt class="py-lineno"> 383</tt> <tt class="py-line"><tt class="py-docstring"> Split the rangeset into nbr sub-rangeset. Each sub-rangeset will have</tt> </tt>
646 <a name="L384"></a><tt class="py-lineno"> 384</tt> <tt class="py-line"><tt class="py-docstring"> the same number of element more or less 1. Current rangeset remains</tt> </tt>
647 <a name="L385"></a><tt class="py-lineno"> 385</tt> <tt class="py-line"><tt class="py-docstring"> unmodified. Returns an iterator.</tt> </tt>
648 <a name="L386"></a><tt class="py-lineno"> 386</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
649 <a name="L387"></a><tt class="py-lineno"> 387</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; RangeSet("1-5").split(3) </tt> </tt>
650 <a name="L388"></a><tt class="py-lineno"> 388</tt> <tt class="py-line"><tt class="py-docstring"> RangeSet("1-2")</tt> </tt>
651 <a name="L389"></a><tt class="py-lineno"> 389</tt> <tt class="py-line"><tt class="py-docstring"> RangeSet("3-4")</tt> </tt>
652 <a name="L390"></a><tt class="py-lineno"> 390</tt> <tt class="py-line"><tt class="py-docstring"> RangeSet("foo5")</tt> </tt>
653 <a name="L391"></a><tt class="py-lineno"> 391</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
654 <a name="L392"></a><tt class="py-lineno"> 392</tt> <tt class="py-line"> <tt class="py-comment"># XXX: This uses the non-optimized __getslice__ method.</tt> </tt>
655 <a name="L393"></a><tt class="py-lineno"> 393</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt><tt class="py-op">(</tt><tt class="py-name">nbr</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
656 <a name="L394"></a><tt class="py-lineno"> 394</tt> <tt class="py-line"> </tt>
657 <a name="L395"></a><tt class="py-lineno"> 395</tt> <tt class="py-line"> <tt class="py-comment"># We put the same number of element in each sub-nodeset.</tt> </tt>
658 <a name="L396"></a><tt class="py-lineno"> 396</tt> <tt class="py-line"> <tt class="py-name">slice_size</tt> <tt class="py-op">=</tt> <tt class="py-name">len</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">nbr</tt> </tt>
659 <a name="L397"></a><tt class="py-lineno"> 397</tt> <tt class="py-line"> <tt class="py-name">left</tt> <tt class="py-op">=</tt> <tt class="py-name">len</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">nbr</tt> </tt>
660 <a name="L398"></a><tt class="py-lineno"> 398</tt> <tt class="py-line"> </tt>
661 <a name="L399"></a><tt class="py-lineno"> 399</tt> <tt class="py-line"> <tt class="py-name">begin</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
662 <a name="L400"></a><tt class="py-lineno"> 400</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">nbr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
663 <a name="L401"></a><tt class="py-lineno"> 401</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-name">slice_size</tt> <tt class="py-op">+</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">left</tt><tt class="py-op">)</tt> </tt>
664 <a name="L402"></a><tt class="py-lineno"> 402</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-name">begin</tt><tt class="py-op">:</tt><tt class="py-name">begin</tt> <tt class="py-op">+</tt> <tt class="py-name">length</tt><tt class="py-op">]</tt> </tt>
665 <a name="L403"></a><tt class="py-lineno"> 403</tt> <tt class="py-line"> <tt class="py-name">begin</tt> <tt class="py-op">+=</tt> <tt class="py-name">length</tt> </tt>
666 </div><a name="L404"></a><tt class="py-lineno"> 404</tt> <tt class="py-line"> </tt>
667 <a name="L405"></a><tt class="py-lineno"> 405</tt> <tt class="py-line"> </tt>
668 <a name="RangeSet._expand"></a><div id="RangeSet._expand-def"><a name="L406"></a><tt class="py-lineno"> 406</tt> <a class="py-toggle" href="#" id="RangeSet._expand-toggle" onclick="return toggle('RangeSet._expand');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_expand">_expand</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
669 </div><div id="RangeSet._expand-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._expand-expanded"><a name="L407"></a><tt class="py-lineno"> 407</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
670 <a name="L408"></a><tt class="py-lineno"> 408</tt> <tt class="py-line"><tt class="py-docstring"> Expand all items. Internal use.</tt> </tt>
671 <a name="L409"></a><tt class="py-lineno"> 409</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
672 <a name="L410"></a><tt class="py-lineno"> 410</tt> <tt class="py-line"> <tt id="link-59" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.items()=ClusterShell.MsgTree.MsgTree-class.html#items"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-59', 'items', 'link-59');">items</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
673 <a name="L411"></a><tt class="py-lineno"> 411</tt> <tt class="py-line"> <tt class="py-name">pad</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
674 <a name="L412"></a><tt class="py-lineno"> 412</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rgstart</tt><tt class="py-op">,</tt> <tt class="py-name">rgstop</tt><tt class="py-op">,</tt> <tt class="py-name">rgstep</tt><tt class="py-op">,</tt> <tt class="py-name">rgpad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
675 <a name="L413"></a><tt class="py-lineno"> 413</tt> <tt class="py-line"> <tt id="link-60" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-60', 'items', 'link-59');">items</a></tt> <tt class="py-op">+=</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">rgstart</tt><tt class="py-op">,</tt> <tt class="py-name">rgstop</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">rgstep</tt><tt class="py-op">)</tt> </tt>
676 <a name="L414"></a><tt class="py-lineno"> 414</tt> <tt class="py-line"> <tt class="py-name">pad</tt> <tt class="py-op">=</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">or</tt> <tt class="py-name">rgpad</tt> </tt>
677 <a name="L415"></a><tt class="py-lineno"> 415</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-61" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-61', 'items', 'link-59');">items</a></tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> </tt>
678 </div><a name="L416"></a><tt class="py-lineno"> 416</tt> <tt class="py-line"> </tt>
679 <a name="RangeSet._fold"></a><div id="RangeSet._fold-def"><a name="L417"></a><tt class="py-lineno"> 417</tt> <a class="py-toggle" href="#" id="RangeSet._fold-toggle" onclick="return toggle('RangeSet._fold');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_fold">_fold</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">items</tt><tt class="py-op">,</tt> <tt class="py-param">pad</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
680 </div><div id="RangeSet._fold-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._fold-expanded"><a name="L418"></a><tt class="py-lineno"> 418</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
681 <a name="L419"></a><tt class="py-lineno"> 419</tt> <tt class="py-line"><tt class="py-docstring"> Fold items as ranges and group them by step.</tt> </tt>
682 <a name="L420"></a><tt class="py-lineno"> 420</tt> <tt class="py-line"><tt class="py-docstring"> Return: (ranges, total_length)</tt> </tt>
683 <a name="L421"></a><tt class="py-lineno"> 421</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
684 <a name="L422"></a><tt class="py-lineno"> 422</tt> <tt class="py-line"> <tt class="py-name">cnt</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">,</tt> <tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-name">rg</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 class="py-number">0</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-op">]</tt> </tt>
685 <a name="L423"></a><tt class="py-lineno"> 423</tt> <tt class="py-line"> </tt>
686 <a name="L424"></a><tt class="py-lineno"> 424</tt> <tt class="py-line"> <tt class="py-comment"># iterate over items and regroup them using steps</tt> </tt>
687 <a name="L425"></a><tt class="py-lineno"> 425</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt id="link-62" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-62', 'items', 'link-59');">items</a></tt><tt class="py-op">:</tt> </tt>
688 <a name="L426"></a><tt class="py-lineno"> 426</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">i</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> </tt>
689 <a name="L427"></a><tt class="py-lineno"> 427</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
690 <a name="L428"></a><tt class="py-lineno"> 428</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">istart</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
691 <a name="L429"></a><tt class="py-lineno"> 429</tt> <tt class="py-line"> <tt class="py-name">istart</tt> <tt class="py-op">=</tt> <tt class="py-name">k</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt> </tt>
692 <a name="L430"></a><tt class="py-lineno"> 430</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">m</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> <tt class="py-comment"># check step length (m)</tt> </tt>
693 <a name="L431"></a><tt class="py-lineno"> 431</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">m</tt> <tt class="py-op">!=</tt> <tt class="py-name">i</tt> <tt class="py-op">-</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> </tt>
694 <a name="L432"></a><tt class="py-lineno"> 432</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">m</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt> <tt class="py-keyword">or</tt> <tt class="py-name">k</tt> <tt class="py-op">-</tt> <tt class="py-name">istart</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt> <tt class="py-op">*</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
695 <a name="L433"></a><tt class="py-lineno"> 433</tt> <tt class="py-line"> <tt class="py-comment"># add one range with possible autostep</tt> </tt>
696 <a name="L434"></a><tt class="py-lineno"> 434</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.append()=ClusterShell.MsgTree.MsgTreeElem-class.html#append"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-63', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
697 <a name="L435"></a><tt class="py-lineno"> 435</tt> <tt class="py-line"> <tt class="py-name">istart</tt> <tt class="py-op">=</tt> <tt class="py-name">k</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt> </tt>
698 <a name="L436"></a><tt class="py-lineno"> 436</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-op">-</tt> <tt class="py-name">istart</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
699 <a name="L437"></a><tt class="py-lineno"> 437</tt> <tt class="py-line"> <tt class="py-comment"># stepped without autostep</tt> </tt>
700 <a name="L438"></a><tt class="py-lineno"> 438</tt> <tt class="py-line"> <tt class="py-comment"># be careful to let the last one "pending"</tt> </tt>
701 <a name="L439"></a><tt class="py-lineno"> 439</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">j</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
702 <a name="L440"></a><tt class="py-lineno"> 440</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-64', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">j</tt><tt class="py-op">,</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-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
703 <a name="L441"></a><tt class="py-lineno"> 441</tt> <tt class="py-line"> <tt class="py-name">istart</tt> <tt class="py-op">=</tt> <tt class="py-name">k</tt> </tt>
704 <a name="L442"></a><tt class="py-lineno"> 442</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
705 <a name="L443"></a><tt class="py-lineno"> 443</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-65', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
706 <a name="L444"></a><tt class="py-lineno"> 444</tt> <tt class="py-line"> <tt class="py-name">istart</tt> <tt class="py-op">=</tt> <tt class="py-name">k</tt> </tt>
707 <a name="L445"></a><tt class="py-lineno"> 445</tt> <tt class="py-line"> <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt> <tt class="py-op">-</tt> <tt class="py-name">k</tt> </tt>
708 <a name="L446"></a><tt class="py-lineno"> 446</tt> <tt class="py-line"> <tt class="py-name">k</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt> </tt>
709 <a name="L447"></a><tt class="py-lineno"> 447</tt> <tt class="py-line"> </tt>
710 <a name="L448"></a><tt class="py-lineno"> 448</tt> <tt class="py-line"> <tt class="py-comment"># finishing</tt> </tt>
711 <a name="L449"></a><tt class="py-lineno"> 449</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">istart</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 class="py-comment"># istart might be 0</tt> </tt>
712 <a name="L450"></a><tt class="py-lineno"> 450</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">m</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
713 <a name="L451"></a><tt class="py-lineno"> 451</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">m</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt> <tt class="py-keyword">or</tt> <tt class="py-name">k</tt> <tt class="py-op">-</tt> <tt class="py-name">istart</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt> <tt class="py-op">*</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
714 <a name="L452"></a><tt class="py-lineno"> 452</tt> <tt class="py-line"> <tt class="py-comment"># add one range with possible autostep</tt> </tt>
715 <a name="L453"></a><tt class="py-lineno"> 453</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-66', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
716 <a name="L454"></a><tt class="py-lineno"> 454</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-op">-</tt> <tt class="py-name">istart</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> </tt>
717 <a name="L455"></a><tt class="py-lineno"> 455</tt> <tt class="py-line"> <tt class="py-comment"># stepped without autostep</tt> </tt>
718 <a name="L456"></a><tt class="py-lineno"> 456</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">j</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt> <tt class="py-op">+</tt> <tt class="py-name">m</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
719 <a name="L457"></a><tt class="py-lineno"> 457</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-67', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">j</tt><tt class="py-op">,</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-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
720 <a name="L458"></a><tt class="py-lineno"> 458</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
721 <a name="L459"></a><tt class="py-lineno"> 459</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-68', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
722 <a name="L460"></a><tt class="py-lineno"> 460</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-69', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
723 <a name="L461"></a><tt class="py-lineno"> 461</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
724 <a name="L462"></a><tt class="py-lineno"> 462</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-70', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-name">istart</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
725 <a name="L463"></a><tt class="py-lineno"> 463</tt> <tt class="py-line"> </tt>
726 <a name="L464"></a><tt class="py-lineno"> 464</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">rg</tt><tt class="py-op">,</tt> <tt class="py-name">cnt</tt> </tt>
727 </div><a name="L465"></a><tt class="py-lineno"> 465</tt> <tt class="py-line"> </tt>
728 <a name="RangeSet.add_range"></a><div id="RangeSet.add_range-def"><a name="L466"></a><tt class="py-lineno"> 466</tt> <a class="py-toggle" href="#" id="RangeSet.add_range-toggle" onclick="return toggle('RangeSet.add_range');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#add_range">add_range</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">start</tt><tt class="py-op">,</tt> <tt class="py-param">stop</tt><tt class="py-op">,</tt> <tt class="py-param">step</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">pad</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
729 </div><div id="RangeSet.add_range-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.add_range-expanded"><a name="L467"></a><tt class="py-lineno"> 467</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
730 <a name="L468"></a><tt class="py-lineno"> 468</tt> <tt class="py-line"><tt class="py-docstring"> Add a range (start, stop, step and padding length) to RangeSet.</tt> </tt>
731 <a name="L469"></a><tt class="py-lineno"> 469</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
732 <a name="L470"></a><tt class="py-lineno"> 470</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">start</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-string">"please provide ordered node index ranges"</tt> </tt>
733 <a name="L471"></a><tt class="py-lineno"> 471</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">step</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
734 <a name="L472"></a><tt class="py-lineno"> 472</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">step</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> </tt>
735 <a name="L473"></a><tt class="py-lineno"> 473</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">pad</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
736 <a name="L474"></a><tt class="py-lineno"> 474</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">pad</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt> </tt>
737 <a name="L475"></a><tt class="py-lineno"> 475</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">stop</tt> <tt class="py-op">-</tt> <tt class="py-name">start</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">1e9</tt><tt class="py-op">,</tt> <tt class="py-string">"range too large"</tt> </tt>
738 <a name="L476"></a><tt class="py-lineno"> 476</tt> <tt class="py-line"> </tt>
739 <a name="L477"></a><tt class="py-lineno"> 477</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">_length</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
740 <a name="L478"></a><tt class="py-lineno"> 478</tt> <tt class="py-line"> <tt class="py-comment"># first add optimization</tt> </tt>
741 <a name="L479"></a><tt class="py-lineno"> 479</tt> <tt class="py-line"> <tt class="py-name">stop_adjust</tt> <tt class="py-op">=</tt> <tt class="py-name">stop</tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">stop</tt> <tt class="py-op">-</tt> <tt class="py-name">start</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">step</tt> </tt>
742 <a name="L480"></a><tt class="py-lineno"> 480</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">step</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt> <tt class="py-keyword">or</tt> <tt class="py-name">stop_adjust</tt> <tt class="py-op">-</tt> <tt class="py-name">start</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt> <tt class="py-op">*</tt> <tt class="py-name">step</tt><tt class="py-op">:</tt> </tt>
743 <a name="L481"></a><tt class="py-lineno"> 481</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop_adjust</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt> <tt class="py-op">]</tt> </tt>
744 <a name="L482"></a><tt class="py-lineno"> 482</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
745 <a name="L483"></a><tt class="py-lineno"> 483</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">j</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop_adjust</tt> <tt class="py-op">+</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
746 <a name="L484"></a><tt class="py-lineno"> 484</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-71', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">j</tt><tt class="py-op">,</tt> <tt class="py-name">j</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
747 <a name="L485"></a><tt class="py-lineno"> 485</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">stop_adjust</tt> <tt class="py-op">-</tt> <tt class="py-name">start</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-name">step</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
748 <a name="L486"></a><tt class="py-lineno"> 486</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
749 <a name="L487"></a><tt class="py-lineno"> 487</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet._add_range_exfold()=ClusterShell.NodeSet.RangeSet-class.html#_add_range_exfold"><a title="ClusterShell.NodeSet.RangeSet._add_range_exfold" class="py-name" href="#" onclick="return doclink('link-72', '_add_range_exfold', 'link-72');">_add_range_exfold</a></tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> \ </tt>
750 <a name="L488"></a><tt class="py-lineno"> 488</tt> <tt class="py-line"> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt> </tt>
751 </div><a name="L489"></a><tt class="py-lineno"> 489</tt> <tt class="py-line"> </tt>
752 <a name="RangeSet._add_range_exfold"></a><div id="RangeSet._add_range_exfold-def"><a name="L490"></a><tt class="py-lineno"> 490</tt> <a class="py-toggle" href="#" id="RangeSet._add_range_exfold-toggle" onclick="return toggle('RangeSet._add_range_exfold');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_add_range_exfold">_add_range_exfold</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">start</tt><tt class="py-op">,</tt> <tt class="py-param">stop</tt><tt class="py-op">,</tt> <tt class="py-param">step</tt><tt class="py-op">,</tt> <tt class="py-param">pad</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
753 </div><div id="RangeSet._add_range_exfold-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._add_range_exfold-expanded"><a name="L491"></a><tt class="py-lineno"> 491</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
754 <a name="L492"></a><tt class="py-lineno"> 492</tt> <tt class="py-line"><tt class="py-docstring"> Add range expanding then folding all items.</tt> </tt>
755 <a name="L493"></a><tt class="py-lineno"> 493</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
756 <a name="L494"></a><tt class="py-lineno"> 494</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">start</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-string">"please provide ordered node index ranges"</tt> </tt>
757 <a name="L495"></a><tt class="py-lineno"> 495</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">step</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> </tt>
758 <a name="L496"></a><tt class="py-lineno"> 496</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">pad</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
759 <a name="L497"></a><tt class="py-lineno"> 497</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">pad</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt> </tt>
760 <a name="L498"></a><tt class="py-lineno"> 498</tt> <tt class="py-line"> </tt>
761 <a name="L499"></a><tt class="py-lineno"> 499</tt> <tt class="py-line"> <tt id="link-73" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-73', 'items', 'link-59');">items</a></tt><tt class="py-op">,</tt> <tt class="py-name">rgpad</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet._expand()=ClusterShell.NodeSet.RangeSet-class.html#_expand"><a title="ClusterShell.NodeSet.RangeSet._expand" class="py-name" href="#" onclick="return doclink('link-74', '_expand', 'link-74');">_expand</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
762 <a name="L500"></a><tt class="py-lineno"> 500</tt> <tt class="py-line"> <tt id="link-75" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-75', 'items', 'link-59');">items</a></tt> <tt class="py-op">+=</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">)</tt> </tt>
763 <a name="L501"></a><tt class="py-lineno"> 501</tt> <tt class="py-line"> <tt id="link-76" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-76', 'items', 'link-59');">items</a></tt><tt class="py-op">.</tt><tt class="py-name">sort</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
764 <a name="L502"></a><tt class="py-lineno"> 502</tt> <tt class="py-line"> </tt>
765 <a name="L503"></a><tt class="py-lineno"> 503</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet._fold()=ClusterShell.NodeSet.RangeSet-class.html#_fold"><a title="ClusterShell.NodeSet.RangeSet._fold" class="py-name" href="#" onclick="return doclink('link-77', '_fold', 'link-77');">_fold</a></tt><tt class="py-op">(</tt><tt id="link-78" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-78', 'items', 'link-59');">items</a></tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">or</tt> <tt class="py-name">rgpad</tt><tt class="py-op">)</tt> </tt>
766 </div><a name="L504"></a><tt class="py-lineno"> 504</tt> <tt class="py-line"> </tt>
767 <a name="RangeSet.union"></a><div id="RangeSet.union-def"><a name="L505"></a><tt class="py-lineno"> 505</tt> <a class="py-toggle" href="#" id="RangeSet.union-toggle" onclick="return toggle('RangeSet.union');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#union">union</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
768 </div><div id="RangeSet.union-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.union-expanded"><a name="L506"></a><tt class="py-lineno"> 506</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
769 <a name="L507"></a><tt class="py-lineno"> 507</tt> <tt class="py-line"><tt class="py-docstring"> s.union(t) returns a new rangeset with elements from both s and t.</tt> </tt>
770 <a name="L508"></a><tt class="py-lineno"> 508</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
771 <a name="L509"></a><tt class="py-lineno"> 509</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt> <tt class="py-op">=</tt> <tt id="link-79" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-79', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
772 <a name="L510"></a><tt class="py-lineno"> 510</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
773 ClusterShell.NodeSet.NodeSetBase.update
774 ClusterShell.NodeSet.RangeSet.update
775 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-80', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
776 <a name="L511"></a><tt class="py-lineno"> 511</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self_copy</tt> </tt>
777 </div><a name="L512"></a><tt class="py-lineno"> 512</tt> <tt class="py-line"> </tt>
778 <a name="RangeSet.__or__"></a><div id="RangeSet.__or__-def"><a name="L513"></a><tt class="py-lineno"> 513</tt> <a class="py-toggle" href="#" id="RangeSet.__or__-toggle" onclick="return toggle('RangeSet.__or__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__or__">__or__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
779 </div><div id="RangeSet.__or__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__or__-expanded"><a name="L514"></a><tt class="py-lineno"> 514</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
780 <a name="L515"></a><tt class="py-lineno"> 515</tt> <tt class="py-line"><tt class="py-docstring"> Implements the | operator. So s | t returns a new rangeset with</tt> </tt>
781 <a name="L516"></a><tt class="py-lineno"> 516</tt> <tt class="py-line"><tt class="py-docstring"> elements from both s and t.</tt> </tt>
782 <a name="L517"></a><tt class="py-lineno"> 517</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
783 <a name="L518"></a><tt class="py-lineno"> 518</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-81" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-81', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
784 <a name="L519"></a><tt class="py-lineno"> 519</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
785 <a name="L520"></a><tt class="py-lineno"> 520</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase.union()=ClusterShell.NodeSet.NodeSetBase-class.html#union,Method ClusterShell.NodeSet.RangeSet.union()=ClusterShell.NodeSet.RangeSet-class.html#union"><a title="ClusterShell.NodeSet.NodeSetBase.union
786 ClusterShell.NodeSet.RangeSet.union" class="py-name" href="#" onclick="return doclink('link-82', 'union', 'link-82');">union</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
787 </div><a name="L521"></a><tt class="py-lineno"> 521</tt> <tt class="py-line"> </tt>
788 <a name="RangeSet.add"></a><div id="RangeSet.add-def"><a name="L522"></a><tt class="py-lineno"> 522</tt> <a class="py-toggle" href="#" id="RangeSet.add-toggle" onclick="return toggle('RangeSet.add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#add">add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">elem</tt><tt class="py-op">,</tt> <tt class="py-param">pad</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
789 </div><div id="RangeSet.add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.add-expanded"><a name="L523"></a><tt class="py-lineno"> 523</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
790 <a name="L524"></a><tt class="py-lineno"> 524</tt> <tt class="py-line"><tt class="py-docstring"> Add element to RangeSet.</tt> </tt>
791 <a name="L525"></a><tt class="py-lineno"> 525</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
792 <a name="L526"></a><tt class="py-lineno"> 526</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="ClusterShell.NodeSet.RangeSet.add_range" class="py-name" href="#" onclick="return doclink('link-83', 'add_range', 'link-33');">add_range</a></tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">,</tt> <tt class="py-name">elem</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">=</tt><tt class="py-name">pad</tt><tt class="py-op">)</tt> </tt>
793 </div><a name="L527"></a><tt class="py-lineno"> 527</tt> <tt class="py-line"> </tt>
794 <a name="RangeSet.update"></a><div id="RangeSet.update-def"><a name="L528"></a><tt class="py-lineno"> 528</tt> <a class="py-toggle" href="#" id="RangeSet.update-toggle" onclick="return toggle('RangeSet.update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#update">update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
795 </div><div id="RangeSet.update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.update-expanded"><a name="L529"></a><tt class="py-lineno"> 529</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
796 <a name="L530"></a><tt class="py-lineno"> 530</tt> <tt class="py-line"><tt class="py-docstring"> Update a rangeset with the union of itself and another.</tt> </tt>
797 <a name="L531"></a><tt class="py-lineno"> 531</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
798 <a name="L532"></a><tt class="py-lineno"> 532</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
799 <a name="L533"></a><tt class="py-lineno"> 533</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="ClusterShell.NodeSet.RangeSet.add_range" class="py-name" href="#" onclick="return doclink('link-84', 'add_range', 'link-33');">add_range</a></tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt> </tt>
800 </div><a name="L534"></a><tt class="py-lineno"> 534</tt> <tt class="py-line"> </tt>
801 <a name="RangeSet.clear"></a><div id="RangeSet.clear-def"><a name="L535"></a><tt class="py-lineno"> 535</tt> <a class="py-toggle" href="#" id="RangeSet.clear-toggle" onclick="return toggle('RangeSet.clear');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#clear">clear</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
802 </div><div id="RangeSet.clear-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.clear-expanded"><a name="L536"></a><tt class="py-lineno"> 536</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
803 <a name="L537"></a><tt class="py-lineno"> 537</tt> <tt class="py-line"><tt class="py-docstring"> Remove all ranges from this rangeset.</tt> </tt>
804 <a name="L538"></a><tt class="py-lineno"> 538</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
805 <a name="L539"></a><tt class="py-lineno"> 539</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
806 <a name="L540"></a><tt class="py-lineno"> 540</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
807 </div><a name="L541"></a><tt class="py-lineno"> 541</tt> <tt class="py-line"> </tt>
808 <a name="RangeSet.__ior__"></a><div id="RangeSet.__ior__-def"><a name="L542"></a><tt class="py-lineno"> 542</tt> <a class="py-toggle" href="#" id="RangeSet.__ior__-toggle" onclick="return toggle('RangeSet.__ior__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__ior__">__ior__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
809 </div><div id="RangeSet.__ior__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__ior__-expanded"><a name="L543"></a><tt class="py-lineno"> 543</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
810 <a name="L544"></a><tt class="py-lineno"> 544</tt> <tt class="py-line"><tt class="py-docstring"> Implements the |= operator. So s |= t returns rangeset s with</tt> </tt>
811 <a name="L545"></a><tt class="py-lineno"> 545</tt> <tt class="py-line"><tt class="py-docstring"> elements added from t. (Python version 2.5+ required)</tt> </tt>
812 <a name="L546"></a><tt class="py-lineno"> 546</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
813 <a name="L547"></a><tt class="py-lineno"> 547</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
814 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-85', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
815 <a name="L548"></a><tt class="py-lineno"> 548</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
816 ClusterShell.NodeSet.NodeSetBase.update
817 ClusterShell.NodeSet.RangeSet.update
818 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-86', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
819 </div><a name="L549"></a><tt class="py-lineno"> 549</tt> <tt class="py-line"> </tt>
820 <a name="RangeSet.intersection"></a><div id="RangeSet.intersection-def"><a name="L550"></a><tt class="py-lineno"> 550</tt> <a class="py-toggle" href="#" id="RangeSet.intersection-toggle" onclick="return toggle('RangeSet.intersection');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#intersection">intersection</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
821 </div><div id="RangeSet.intersection-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.intersection-expanded"><a name="L551"></a><tt class="py-lineno"> 551</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
822 <a name="L552"></a><tt class="py-lineno"> 552</tt> <tt class="py-line"><tt class="py-docstring"> s.intersection(t) returns a new rangeset with elements common</tt> </tt>
823 <a name="L553"></a><tt class="py-lineno"> 553</tt> <tt class="py-line"><tt class="py-docstring"> to s and t.</tt> </tt>
824 <a name="L554"></a><tt class="py-lineno"> 554</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
825 <a name="L555"></a><tt class="py-lineno"> 555</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt> <tt class="py-op">=</tt> <tt id="link-87" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-87', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
826 <a name="L556"></a><tt class="py-lineno"> 556</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.intersection_update()=ClusterShell.NodeSet.NodeSet-class.html#intersection_update,Method ClusterShell.NodeSet.NodeSetBase.intersection_update()=ClusterShell.NodeSet.NodeSetBase-class.html#intersection_update,Method ClusterShell.NodeSet.RangeSet.intersection_update()=ClusterShell.NodeSet.RangeSet-class.html#intersection_update"><a title="ClusterShell.NodeSet.NodeSet.intersection_update
827 ClusterShell.NodeSet.NodeSetBase.intersection_update
828 ClusterShell.NodeSet.RangeSet.intersection_update" class="py-name" href="#" onclick="return doclink('link-88', 'intersection_update', 'link-88');">intersection_update</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
829 <a name="L557"></a><tt class="py-lineno"> 557</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self_copy</tt> </tt>
830 </div><a name="L558"></a><tt class="py-lineno"> 558</tt> <tt class="py-line"> </tt>
831 <a name="RangeSet.__and__"></a><div id="RangeSet.__and__-def"><a name="L559"></a><tt class="py-lineno"> 559</tt> <a class="py-toggle" href="#" id="RangeSet.__and__-toggle" onclick="return toggle('RangeSet.__and__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__and__">__and__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
832 </div><div id="RangeSet.__and__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__and__-expanded"><a name="L560"></a><tt class="py-lineno"> 560</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
833 <a name="L561"></a><tt class="py-lineno"> 561</tt> <tt class="py-line"><tt class="py-docstring"> Implements the &amp; operator. So s &amp; t returns a new rangeset with</tt> </tt>
834 <a name="L562"></a><tt class="py-lineno"> 562</tt> <tt class="py-line"><tt class="py-docstring"> elements common to s and t.</tt> </tt>
835 <a name="L563"></a><tt class="py-lineno"> 563</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
836 <a name="L564"></a><tt class="py-lineno"> 564</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-89" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-89', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
837 <a name="L565"></a><tt class="py-lineno"> 565</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
838 <a name="L566"></a><tt class="py-lineno"> 566</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase.intersection()=ClusterShell.NodeSet.NodeSetBase-class.html#intersection,Method ClusterShell.NodeSet.RangeSet.intersection()=ClusterShell.NodeSet.RangeSet-class.html#intersection"><a title="ClusterShell.NodeSet.NodeSetBase.intersection
839 ClusterShell.NodeSet.RangeSet.intersection" class="py-name" href="#" onclick="return doclink('link-90', 'intersection', 'link-90');">intersection</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
840 </div><a name="L567"></a><tt class="py-lineno"> 567</tt> <tt class="py-line"> </tt>
841 <a name="RangeSet.intersection_update"></a><div id="RangeSet.intersection_update-def"><a name="L568"></a><tt class="py-lineno"> 568</tt> <a class="py-toggle" href="#" id="RangeSet.intersection_update-toggle" onclick="return toggle('RangeSet.intersection_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#intersection_update">intersection_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
842 </div><div id="RangeSet.intersection_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.intersection_update-expanded"><a name="L569"></a><tt class="py-lineno"> 569</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
843 <a name="L570"></a><tt class="py-lineno"> 570</tt> <tt class="py-line"><tt class="py-docstring"> Intersection with provided RangeSet.</tt> </tt>
844 <a name="L571"></a><tt class="py-lineno"> 571</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
845 <a name="L572"></a><tt class="py-lineno"> 572</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet._intersect_exfold()=ClusterShell.NodeSet.RangeSet-class.html#_intersect_exfold"><a title="ClusterShell.NodeSet.RangeSet._intersect_exfold" class="py-name" href="#" onclick="return doclink('link-91', '_intersect_exfold', 'link-91');">_intersect_exfold</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
846 </div><a name="L573"></a><tt class="py-lineno"> 573</tt> <tt class="py-line"> </tt>
847 <a name="RangeSet.__iand__"></a><div id="RangeSet.__iand__-def"><a name="L574"></a><tt class="py-lineno"> 574</tt> <a class="py-toggle" href="#" id="RangeSet.__iand__-toggle" onclick="return toggle('RangeSet.__iand__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__iand__">__iand__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
848 </div><div id="RangeSet.__iand__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__iand__-expanded"><a name="L575"></a><tt class="py-lineno"> 575</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
849 <a name="L576"></a><tt class="py-lineno"> 576</tt> <tt class="py-line"><tt class="py-docstring"> Implements the &amp;= operator. So s &amp;= t returns rangeset s keeping</tt> </tt>
850 <a name="L577"></a><tt class="py-lineno"> 577</tt> <tt class="py-line"><tt class="py-docstring"> only elements also found in t. (Python version 2.5+ required)</tt> </tt>
851 <a name="L578"></a><tt class="py-lineno"> 578</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
852 <a name="L579"></a><tt class="py-lineno"> 579</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
853 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-92', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
854 <a name="L580"></a><tt class="py-lineno"> 580</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.intersection_update
855 ClusterShell.NodeSet.NodeSetBase.intersection_update
856 ClusterShell.NodeSet.RangeSet.intersection_update" class="py-name" href="#" onclick="return doclink('link-93', 'intersection_update', 'link-88');">intersection_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
857 </div><a name="L581"></a><tt class="py-lineno"> 581</tt> <tt class="py-line"> </tt>
858 <a name="RangeSet._intersect_exfold"></a><div id="RangeSet._intersect_exfold-def"><a name="L582"></a><tt class="py-lineno"> 582</tt> <a class="py-toggle" href="#" id="RangeSet._intersect_exfold-toggle" onclick="return toggle('RangeSet._intersect_exfold');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_intersect_exfold">_intersect_exfold</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
859 </div><div id="RangeSet._intersect_exfold-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._intersect_exfold-expanded"><a name="L583"></a><tt class="py-lineno"> 583</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
860 <a name="L584"></a><tt class="py-lineno"> 584</tt> <tt class="py-line"><tt class="py-docstring"> Calc intersection with the expand/fold method.</tt> </tt>
861 <a name="L585"></a><tt class="py-lineno"> 585</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
862 <a name="L586"></a><tt class="py-lineno"> 586</tt> <tt class="py-line"> <tt class="py-comment"># expand both rangesets</tt> </tt>
863 <a name="L587"></a><tt class="py-lineno"> 587</tt> <tt class="py-line"> <tt class="py-name">items1</tt><tt class="py-op">,</tt> <tt class="py-name">pad1</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._expand" class="py-name" href="#" onclick="return doclink('link-94', '_expand', 'link-74');">_expand</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
864 <a name="L588"></a><tt class="py-lineno"> 588</tt> <tt class="py-line"> <tt class="py-name">items2</tt><tt class="py-op">,</tt> <tt class="py-name">pad2</tt> <tt class="py-op">=</tt> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._expand" class="py-name" href="#" onclick="return doclink('link-95', '_expand', 'link-74');">_expand</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
865 <a name="L589"></a><tt class="py-lineno"> 589</tt> <tt class="py-line"> </tt>
866 <a name="L590"></a><tt class="py-lineno"> 590</tt> <tt class="py-line"> <tt class="py-comment"># create a temporary dict with keys from items2</tt> </tt>
867 <a name="L591"></a><tt class="py-lineno"> 591</tt> <tt class="py-line"> <tt class="py-name">iset</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">.</tt><tt class="py-name">fromkeys</tt><tt class="py-op">(</tt><tt class="py-name">items2</tt><tt class="py-op">)</tt> </tt>
868 <a name="L592"></a><tt class="py-lineno"> 592</tt> <tt class="py-line"> </tt>
869 <a name="L593"></a><tt class="py-lineno"> 593</tt> <tt class="py-line"> <tt class="py-comment"># fold items that are in both sets</tt> </tt>
870 <a name="L594"></a><tt class="py-lineno"> 594</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._fold" class="py-name" href="#" onclick="return doclink('link-96', '_fold', 'link-77');">_fold</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">e</tt> <tt class="py-keyword">for</tt> <tt class="py-name">e</tt> <tt class="py-keyword">in</tt> <tt class="py-name">items1</tt> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt> <tt class="py-keyword">in</tt> <tt class="py-name">iset</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">pad1</tt> <tt class="py-keyword">or</tt> <tt class="py-name">pad2</tt><tt class="py-op">)</tt> </tt>
871 </div><a name="L595"></a><tt class="py-lineno"> 595</tt> <tt class="py-line"> </tt>
872 <a name="RangeSet.difference"></a><div id="RangeSet.difference-def"><a name="L596"></a><tt class="py-lineno"> 596</tt> <a class="py-toggle" href="#" id="RangeSet.difference-toggle" onclick="return toggle('RangeSet.difference');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#difference">difference</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
873 </div><div id="RangeSet.difference-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.difference-expanded"><a name="L597"></a><tt class="py-lineno"> 597</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
874 <a name="L598"></a><tt class="py-lineno"> 598</tt> <tt class="py-line"><tt class="py-docstring"> s.difference(t) returns a new rangeset with elements in s but</tt> </tt>
875 <a name="L599"></a><tt class="py-lineno"> 599</tt> <tt class="py-line"><tt class="py-docstring"> not in t.</tt> </tt>
876 <a name="L600"></a><tt class="py-lineno"> 600</tt> <tt class="py-line"><tt class="py-docstring"> in t.</tt> </tt>
877 <a name="L601"></a><tt class="py-lineno"> 601</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
878 <a name="L602"></a><tt class="py-lineno"> 602</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt> <tt class="py-op">=</tt> <tt id="link-97" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-97', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
879 <a name="L603"></a><tt class="py-lineno"> 603</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.difference_update()=ClusterShell.NodeSet.NodeSet-class.html#difference_update,Method ClusterShell.NodeSet.NodeSetBase.difference_update()=ClusterShell.NodeSet.NodeSetBase-class.html#difference_update,Method ClusterShell.NodeSet.RangeSet.difference_update()=ClusterShell.NodeSet.RangeSet-class.html#difference_update"><a title="ClusterShell.NodeSet.NodeSet.difference_update
880 ClusterShell.NodeSet.NodeSetBase.difference_update
881 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-98', 'difference_update', 'link-98');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
882 <a name="L604"></a><tt class="py-lineno"> 604</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self_copy</tt> </tt>
883 </div><a name="L605"></a><tt class="py-lineno"> 605</tt> <tt class="py-line"> </tt>
884 <a name="RangeSet.__sub__"></a><div id="RangeSet.__sub__-def"><a name="L606"></a><tt class="py-lineno"> 606</tt> <a class="py-toggle" href="#" id="RangeSet.__sub__-toggle" onclick="return toggle('RangeSet.__sub__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__sub__">__sub__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
885 </div><div id="RangeSet.__sub__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__sub__-expanded"><a name="L607"></a><tt class="py-lineno"> 607</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
886 <a name="L608"></a><tt class="py-lineno"> 608</tt> <tt class="py-line"><tt class="py-docstring"> Implement the - operator. So s - t returns a new rangeset with</tt> </tt>
887 <a name="L609"></a><tt class="py-lineno"> 609</tt> <tt class="py-line"><tt class="py-docstring"> elements in s but not in t.</tt> </tt>
888 <a name="L610"></a><tt class="py-lineno"> 610</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
889 <a name="L611"></a><tt class="py-lineno"> 611</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-99" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-99', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
890 <a name="L612"></a><tt class="py-lineno"> 612</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
891 <a name="L613"></a><tt class="py-lineno"> 613</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase.difference()=ClusterShell.NodeSet.NodeSetBase-class.html#difference,Method ClusterShell.NodeSet.RangeSet.difference()=ClusterShell.NodeSet.RangeSet-class.html#difference"><a title="ClusterShell.NodeSet.NodeSetBase.difference
892 ClusterShell.NodeSet.RangeSet.difference" class="py-name" href="#" onclick="return doclink('link-100', 'difference', 'link-100');">difference</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
893 </div><a name="L614"></a><tt class="py-lineno"> 614</tt> <tt class="py-line"> </tt>
894 <a name="RangeSet.difference_update"></a><div id="RangeSet.difference_update-def"><a name="L615"></a><tt class="py-lineno"> 615</tt> <a class="py-toggle" href="#" id="RangeSet.difference_update-toggle" onclick="return toggle('RangeSet.difference_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#difference_update">difference_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">,</tt> <tt class="py-param">strict</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
895 </div><div id="RangeSet.difference_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.difference_update-expanded"><a name="L616"></a><tt class="py-lineno"> 616</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
896 <a name="L617"></a><tt class="py-lineno"> 617</tt> <tt class="py-line"><tt class="py-docstring"> s.difference_update(t) returns rangeset s after removing</tt> </tt>
897 <a name="L618"></a><tt class="py-lineno"> 618</tt> <tt class="py-line"><tt class="py-docstring"> elements found in t. If strict is True, raise KeyError</tt> </tt>
898 <a name="L619"></a><tt class="py-lineno"> 619</tt> <tt class="py-line"><tt class="py-docstring"> if an element cannot be removed.</tt> </tt>
899 <a name="L620"></a><tt class="py-lineno"> 620</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
900 <a name="L621"></a><tt class="py-lineno"> 621</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet._sub_exfold()=ClusterShell.NodeSet.RangeSet-class.html#_sub_exfold"><a title="ClusterShell.NodeSet.RangeSet._sub_exfold" class="py-name" href="#" onclick="return doclink('link-101', '_sub_exfold', 'link-101');">_sub_exfold</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">,</tt> <tt class="py-name">strict</tt><tt class="py-op">)</tt> </tt>
901 </div><a name="L622"></a><tt class="py-lineno"> 622</tt> <tt class="py-line"> </tt>
902 <a name="RangeSet.__isub__"></a><div id="RangeSet.__isub__-def"><a name="L623"></a><tt class="py-lineno"> 623</tt> <a class="py-toggle" href="#" id="RangeSet.__isub__-toggle" onclick="return toggle('RangeSet.__isub__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__isub__">__isub__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
903 </div><div id="RangeSet.__isub__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__isub__-expanded"><a name="L624"></a><tt class="py-lineno"> 624</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
904 <a name="L625"></a><tt class="py-lineno"> 625</tt> <tt class="py-line"><tt class="py-docstring"> Implement the -= operator. So s -= t returns rangeset s after</tt> </tt>
905 <a name="L626"></a><tt class="py-lineno"> 626</tt> <tt class="py-line"><tt class="py-docstring"> removing elements found in t. (Python version 2.5+ required)</tt> </tt>
906 <a name="L627"></a><tt class="py-lineno"> 627</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
907 <a name="L628"></a><tt class="py-lineno"> 628</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
908 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-102', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
909 <a name="L629"></a><tt class="py-lineno"> 629</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.difference_update
910 ClusterShell.NodeSet.NodeSetBase.difference_update
911 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-103', 'difference_update', 'link-98');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
912 </div><a name="L630"></a><tt class="py-lineno"> 630</tt> <tt class="py-line"> </tt>
913 <a name="RangeSet.remove"></a><div id="RangeSet.remove-def"><a name="L631"></a><tt class="py-lineno"> 631</tt> <a class="py-toggle" href="#" id="RangeSet.remove-toggle" onclick="return toggle('RangeSet.remove');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#remove">remove</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">elem</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
914 </div><div id="RangeSet.remove-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.remove-expanded"><a name="L632"></a><tt class="py-lineno"> 632</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
915 <a name="L633"></a><tt class="py-lineno"> 633</tt> <tt class="py-line"><tt class="py-docstring"> Remove element elem from the RangeSet. Raise KeyError if elem</tt> </tt>
916 <a name="L634"></a><tt class="py-lineno"> 634</tt> <tt class="py-line"><tt class="py-docstring"> is not contained in the RangeSet.</tt> </tt>
917 <a name="L635"></a><tt class="py-lineno"> 635</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
918 <a name="L636"></a><tt class="py-lineno"> 636</tt> <tt class="py-line"> <tt class="py-name">items1</tt><tt class="py-op">,</tt> <tt class="py-name">pad1</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._expand" class="py-name" href="#" onclick="return doclink('link-104', '_expand', 'link-74');">_expand</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
919 <a name="L637"></a><tt class="py-lineno"> 637</tt> <tt class="py-line"> </tt>
920 <a name="L638"></a><tt class="py-lineno"> 638</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
921 <a name="L639"></a><tt class="py-lineno"> 639</tt> <tt class="py-line"> <tt class="py-name">items1</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.remove()=ClusterShell.Engine.Engine.Engine-class.html#remove,Method ClusterShell.MsgTree.MsgTree.remove()=ClusterShell.MsgTree.MsgTree-class.html#remove,Method ClusterShell.NodeSet.NodeSetBase.remove()=ClusterShell.NodeSet.NodeSetBase-class.html#remove,Method ClusterShell.NodeSet.RangeSet.remove()=ClusterShell.NodeSet.RangeSet-class.html#remove"><a title="ClusterShell.Engine.Engine.Engine.remove
922 ClusterShell.MsgTree.MsgTree.remove
923 ClusterShell.NodeSet.NodeSetBase.remove
924 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-105', 'remove', 'link-105');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">)</tt> </tt>
925 <a name="L640"></a><tt class="py-lineno"> 640</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
926 <a name="L641"></a><tt class="py-lineno"> 641</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">KeyError</tt><tt class="py-op">,</tt> <tt class="py-name">elem</tt> </tt>
927 <a name="L642"></a><tt class="py-lineno"> 642</tt> <tt class="py-line"> </tt>
928 <a name="L643"></a><tt class="py-lineno"> 643</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._fold" class="py-name" href="#" onclick="return doclink('link-106', '_fold', 'link-77');">_fold</a></tt><tt class="py-op">(</tt><tt class="py-name">items1</tt><tt class="py-op">,</tt> <tt class="py-name">pad1</tt><tt class="py-op">)</tt> </tt>
929 </div><a name="L644"></a><tt class="py-lineno"> 644</tt> <tt class="py-line"> </tt>
930 <a name="RangeSet._sub_exfold"></a><div id="RangeSet._sub_exfold-def"><a name="L645"></a><tt class="py-lineno"> 645</tt> <a class="py-toggle" href="#" id="RangeSet._sub_exfold-toggle" onclick="return toggle('RangeSet._sub_exfold');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_sub_exfold">_sub_exfold</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">,</tt> <tt class="py-param">strict</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
931 </div><div id="RangeSet._sub_exfold-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._sub_exfold-expanded"><a name="L646"></a><tt class="py-lineno"> 646</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
932 <a name="L647"></a><tt class="py-lineno"> 647</tt> <tt class="py-line"><tt class="py-docstring"> Calc sub/exclusion with the expand/fold method. If strict is</tt> </tt>
933 <a name="L648"></a><tt class="py-lineno"> 648</tt> <tt class="py-line"><tt class="py-docstring"> True, raise KeyError if the rangeset is not included.</tt> </tt>
934 <a name="L649"></a><tt class="py-lineno"> 649</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
935 <a name="L650"></a><tt class="py-lineno"> 650</tt> <tt class="py-line"> <tt class="py-comment"># expand both rangesets</tt> </tt>
936 <a name="L651"></a><tt class="py-lineno"> 651</tt> <tt class="py-line"> <tt class="py-name">items1</tt><tt class="py-op">,</tt> <tt class="py-name">pad1</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._expand" class="py-name" href="#" onclick="return doclink('link-107', '_expand', 'link-74');">_expand</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
937 <a name="L652"></a><tt class="py-lineno"> 652</tt> <tt class="py-line"> <tt class="py-name">items2</tt><tt class="py-op">,</tt> <tt class="py-name">pad2</tt> <tt class="py-op">=</tt> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._expand" class="py-name" href="#" onclick="return doclink('link-108', '_expand', 'link-74');">_expand</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
938 <a name="L653"></a><tt class="py-lineno"> 653</tt> <tt class="py-line"> </tt>
939 <a name="L654"></a><tt class="py-lineno"> 654</tt> <tt class="py-line"> <tt class="py-comment"># create a temporary dict with keys from items2</tt> </tt>
940 <a name="L655"></a><tt class="py-lineno"> 655</tt> <tt class="py-line"> <tt class="py-name">iset</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">.</tt><tt class="py-name">fromkeys</tt><tt class="py-op">(</tt><tt class="py-name">items2</tt><tt class="py-op">)</tt> </tt>
941 <a name="L656"></a><tt class="py-lineno"> 656</tt> <tt class="py-line"> </tt>
942 <a name="L657"></a><tt class="py-lineno"> 657</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">strict</tt><tt class="py-op">:</tt> </tt>
943 <a name="L658"></a><tt class="py-lineno"> 658</tt> <tt class="py-line"> <tt class="py-comment"># create a list of remaining items (lst) and update iset</tt> </tt>
944 <a name="L659"></a><tt class="py-lineno"> 659</tt> <tt class="py-line"> <tt class="py-name">lst</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
945 <a name="L660"></a><tt class="py-lineno"> 660</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">e</tt> <tt class="py-keyword">in</tt> <tt class="py-name">items1</tt><tt class="py-op">:</tt> </tt>
946 <a name="L661"></a><tt class="py-lineno"> 661</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">iset</tt><tt class="py-op">:</tt> </tt>
947 <a name="L662"></a><tt class="py-lineno"> 662</tt> <tt class="py-line"> <tt class="py-name">lst</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-109', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
948 <a name="L663"></a><tt class="py-lineno"> 663</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
949 <a name="L664"></a><tt class="py-lineno"> 664</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">iset</tt><tt class="py-op">[</tt><tt class="py-name">e</tt><tt class="py-op">]</tt> </tt>
950 <a name="L665"></a><tt class="py-lineno"> 665</tt> <tt class="py-line"> </tt>
951 <a name="L666"></a><tt class="py-lineno"> 666</tt> <tt class="py-line"> <tt class="py-comment"># if iset is not empty, some elements were not removed</tt> </tt>
952 <a name="L667"></a><tt class="py-lineno"> 667</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">iset</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
953 <a name="L668"></a><tt class="py-lineno"> 668</tt> <tt class="py-line"> <tt class="py-comment"># give the user an indication of the range that cannot</tt> </tt>
954 <a name="L669"></a><tt class="py-lineno"> 669</tt> <tt class="py-line"> <tt class="py-comment"># be removed</tt> </tt>
955 <a name="L670"></a><tt class="py-lineno"> 670</tt> <tt class="py-line"> <tt class="py-name">missing</tt> <tt class="py-op">=</tt> <tt id="link-110" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-110', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
956 <a name="L671"></a><tt class="py-lineno"> 671</tt> <tt class="py-line"> <tt class="py-name">missing</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">,</tt> <tt class="py-name">missing</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._fold" class="py-name" href="#" onclick="return doclink('link-111', '_fold', 'link-77');">_fold</a></tt><tt class="py-op">(</tt><tt class="py-name">iset</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.keys()=ClusterShell.MsgTree.MsgTree-class.html#keys"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-112', 'keys', 'link-112');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">pad2</tt><tt class="py-op">)</tt> </tt>
957 <a name="L672"></a><tt class="py-lineno"> 672</tt> <tt class="py-line"> <tt class="py-comment"># repr(missing) is implicit here</tt> </tt>
958 <a name="L673"></a><tt class="py-lineno"> 673</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">KeyError</tt><tt class="py-op">,</tt> <tt class="py-name">missing</tt> </tt>
959 <a name="L674"></a><tt class="py-lineno"> 674</tt> <tt class="py-line"> </tt>
960 <a name="L675"></a><tt class="py-lineno"> 675</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._fold" class="py-name" href="#" onclick="return doclink('link-113', '_fold', 'link-77');">_fold</a></tt><tt class="py-op">(</tt><tt class="py-name">lst</tt><tt class="py-op">,</tt> <tt class="py-name">pad1</tt> <tt class="py-keyword">or</tt> <tt class="py-name">pad2</tt><tt class="py-op">)</tt> </tt>
961 <a name="L676"></a><tt class="py-lineno"> 676</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
962 <a name="L677"></a><tt class="py-lineno"> 677</tt> <tt class="py-line"> <tt class="py-comment"># fold items that are in set 1 and not in set 2</tt> </tt>
963 <a name="L678"></a><tt class="py-lineno"> 678</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._fold" class="py-name" href="#" onclick="return doclink('link-114', '_fold', 'link-77');">_fold</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">e</tt> <tt class="py-keyword">for</tt> <tt class="py-name">e</tt> <tt class="py-keyword">in</tt> <tt class="py-name">items1</tt> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">iset</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
964 <a name="L679"></a><tt class="py-lineno"> 679</tt> <tt class="py-line"> <tt class="py-name">pad1</tt> <tt class="py-keyword">or</tt> <tt class="py-name">pad2</tt><tt class="py-op">)</tt> </tt>
965 </div><a name="L680"></a><tt class="py-lineno"> 680</tt> <tt class="py-line"> </tt>
966 <a name="RangeSet.symmetric_difference"></a><div id="RangeSet.symmetric_difference-def"><a name="L681"></a><tt class="py-lineno"> 681</tt> <a class="py-toggle" href="#" id="RangeSet.symmetric_difference-toggle" onclick="return toggle('RangeSet.symmetric_difference');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference">symmetric_difference</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
967 </div><div id="RangeSet.symmetric_difference-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.symmetric_difference-expanded"><a name="L682"></a><tt class="py-lineno"> 682</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
968 <a name="L683"></a><tt class="py-lineno"> 683</tt> <tt class="py-line"><tt class="py-docstring"> s.symmetric_difference(t) returns the symmetric difference of</tt> </tt>
969 <a name="L684"></a><tt class="py-lineno"> 684</tt> <tt class="py-line"><tt class="py-docstring"> two rangesets as a new RangeSet.</tt> </tt>
970 <a name="L685"></a><tt class="py-lineno"> 685</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
971 <a name="L686"></a><tt class="py-lineno"> 686</tt> <tt class="py-line"><tt class="py-docstring"> (ie. all elements that are in exactly one of the rangesets.)</tt> </tt>
972 <a name="L687"></a><tt class="py-lineno"> 687</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
973 <a name="L688"></a><tt class="py-lineno"> 688</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt> <tt class="py-op">=</tt> <tt id="link-115" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-115', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
974 <a name="L689"></a><tt class="py-lineno"> 689</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.symmetric_difference_update()=ClusterShell.NodeSet.NodeSet-class.html#symmetric_difference_update,Method ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update()=ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference_update,Method ClusterShell.NodeSet.RangeSet.symmetric_difference_update()=ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference_update"><a title="ClusterShell.NodeSet.NodeSet.symmetric_difference_update
975 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update
976 ClusterShell.NodeSet.RangeSet.symmetric_difference_update" class="py-name" href="#" onclick="return doclink('link-116', 'symmetric_difference_update', 'link-116');">symmetric_difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
977 <a name="L690"></a><tt class="py-lineno"> 690</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self_copy</tt> </tt>
978 </div><a name="L691"></a><tt class="py-lineno"> 691</tt> <tt class="py-line"> </tt>
979 <a name="RangeSet.__xor__"></a><div id="RangeSet.__xor__-def"><a name="L692"></a><tt class="py-lineno"> 692</tt> <a class="py-toggle" href="#" id="RangeSet.__xor__-toggle" onclick="return toggle('RangeSet.__xor__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__xor__">__xor__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
980 </div><div id="RangeSet.__xor__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__xor__-expanded"><a name="L693"></a><tt class="py-lineno"> 693</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
981 <a name="L694"></a><tt class="py-lineno"> 694</tt> <tt class="py-line"><tt class="py-docstring"> Implement the ^ operator. So s ^ t returns a new rangeset with</tt> </tt>
982 <a name="L695"></a><tt class="py-lineno"> 695</tt> <tt class="py-line"><tt class="py-docstring"> elements that are in exactly one of the rangesets.</tt> </tt>
983 <a name="L696"></a><tt class="py-lineno"> 696</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
984 <a name="L697"></a><tt class="py-lineno"> 697</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-117" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-117', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
985 <a name="L698"></a><tt class="py-lineno"> 698</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
986 <a name="L699"></a><tt class="py-lineno"> 699</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase.symmetric_difference()=ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference,Method ClusterShell.NodeSet.RangeSet.symmetric_difference()=ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference"><a title="ClusterShell.NodeSet.NodeSetBase.symmetric_difference
987 ClusterShell.NodeSet.RangeSet.symmetric_difference" class="py-name" href="#" onclick="return doclink('link-118', 'symmetric_difference', 'link-118');">symmetric_difference</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
988 </div><a name="L700"></a><tt class="py-lineno"> 700</tt> <tt class="py-line"> </tt>
989 <a name="RangeSet.symmetric_difference_update"></a><div id="RangeSet.symmetric_difference_update-def"><a name="L701"></a><tt class="py-lineno"> 701</tt> <a class="py-toggle" href="#" id="RangeSet.symmetric_difference_update-toggle" onclick="return toggle('RangeSet.symmetric_difference_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference_update">symmetric_difference_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
990 </div><div id="RangeSet.symmetric_difference_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.symmetric_difference_update-expanded"><a name="L702"></a><tt class="py-lineno"> 702</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
991 <a name="L703"></a><tt class="py-lineno"> 703</tt> <tt class="py-line"><tt class="py-docstring"> s.symmetric_difference_update(t) returns rangeset s keeping all</tt> </tt>
992 <a name="L704"></a><tt class="py-lineno"> 704</tt> <tt class="py-line"><tt class="py-docstring"> elements that are in exactly one of the rangesets.</tt> </tt>
993 <a name="L705"></a><tt class="py-lineno"> 705</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
994 <a name="L706"></a><tt class="py-lineno"> 706</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name" targets="Method ClusterShell.NodeSet.RangeSet._xor_exfold()=ClusterShell.NodeSet.RangeSet-class.html#_xor_exfold"><a title="ClusterShell.NodeSet.RangeSet._xor_exfold" class="py-name" href="#" onclick="return doclink('link-119', '_xor_exfold', 'link-119');">_xor_exfold</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
995 </div><a name="L707"></a><tt class="py-lineno"> 707</tt> <tt class="py-line"> </tt>
996 <a name="RangeSet.__ixor__"></a><div id="RangeSet.__ixor__-def"><a name="L708"></a><tt class="py-lineno"> 708</tt> <a class="py-toggle" href="#" id="RangeSet.__ixor__-toggle" onclick="return toggle('RangeSet.__ixor__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#__ixor__">__ixor__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
997 </div><div id="RangeSet.__ixor__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet.__ixor__-expanded"><a name="L709"></a><tt class="py-lineno"> 709</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
998 <a name="L710"></a><tt class="py-lineno"> 710</tt> <tt class="py-line"><tt class="py-docstring"> Implement the ^= operator. So s ^= t returns rangeset s after</tt> </tt>
999 <a name="L711"></a><tt class="py-lineno"> 711</tt> <tt class="py-line"><tt class="py-docstring"> keeping all elements that are in exactly one of the rangesets.</tt> </tt>
1000 <a name="L712"></a><tt class="py-lineno"> 712</tt> <tt class="py-line"><tt class="py-docstring"> (Python version 2.5+ required)</tt> </tt>
1001 <a name="L713"></a><tt class="py-lineno"> 713</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1002 <a name="L714"></a><tt class="py-lineno"> 714</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1003 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-120', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1004 <a name="L715"></a><tt class="py-lineno"> 715</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.symmetric_difference_update
1005 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update
1006 ClusterShell.NodeSet.RangeSet.symmetric_difference_update" class="py-name" href="#" onclick="return doclink('link-121', 'symmetric_difference_update', 'link-116');">symmetric_difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1007 </div><a name="L716"></a><tt class="py-lineno"> 716</tt> <tt class="py-line"> </tt>
1008 <a name="RangeSet._xor_exfold"></a><div id="RangeSet._xor_exfold-def"><a name="L717"></a><tt class="py-lineno"> 717</tt> <a class="py-toggle" href="#" id="RangeSet._xor_exfold-toggle" onclick="return toggle('RangeSet._xor_exfold');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.RangeSet-class.html#_xor_exfold">_xor_exfold</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1009 </div><div id="RangeSet._xor_exfold-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RangeSet._xor_exfold-expanded"><a name="L718"></a><tt class="py-lineno"> 718</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1010 <a name="L719"></a><tt class="py-lineno"> 719</tt> <tt class="py-line"><tt class="py-docstring"> Calc symmetric difference (xor).</tt> </tt>
1011 <a name="L720"></a><tt class="py-lineno"> 720</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1012 <a name="L721"></a><tt class="py-lineno"> 721</tt> <tt class="py-line"> <tt class="py-comment"># expand both rangesets</tt> </tt>
1013 <a name="L722"></a><tt class="py-lineno"> 722</tt> <tt class="py-line"> <tt class="py-name">items1</tt><tt class="py-op">,</tt> <tt class="py-name">pad1</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._expand" class="py-name" href="#" onclick="return doclink('link-122', '_expand', 'link-74');">_expand</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1014 <a name="L723"></a><tt class="py-lineno"> 723</tt> <tt class="py-line"> <tt class="py-name">items2</tt><tt class="py-op">,</tt> <tt class="py-name">pad2</tt> <tt class="py-op">=</tt> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._expand" class="py-name" href="#" onclick="return doclink('link-123', '_expand', 'link-74');">_expand</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1015 <a name="L724"></a><tt class="py-lineno"> 724</tt> <tt class="py-line"> </tt>
1016 <a name="L725"></a><tt class="py-lineno"> 725</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pad1</tt> <tt class="py-op">!=</tt> <tt class="py-name">pad2</tt><tt class="py-op">:</tt> </tt>
1017 <a name="L726"></a><tt class="py-lineno"> 726</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-124" class="py-name" targets="Class ClusterShell.NodeSet.RangeSetPaddingError=ClusterShell.NodeSet.RangeSetPaddingError-class.html"><a title="ClusterShell.NodeSet.RangeSetPaddingError" class="py-name" href="#" onclick="return doclink('link-124', 'RangeSetPaddingError', 'link-124');">RangeSetPaddingError</a></tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">"%s != %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pad1</tt><tt class="py-op">,</tt> <tt class="py-name">pad2</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1018 <a name="L727"></a><tt class="py-lineno"> 727</tt> <tt class="py-line"> <tt class="py-comment"># same padding, we're clean...</tt> </tt>
1019 <a name="L728"></a><tt class="py-lineno"> 728</tt> <tt class="py-line"> </tt>
1020 <a name="L729"></a><tt class="py-lineno"> 729</tt> <tt class="py-line"> <tt class="py-comment"># create a temporary dicts</tt> </tt>
1021 <a name="L730"></a><tt class="py-lineno"> 730</tt> <tt class="py-line"> <tt class="py-name">iset1</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">.</tt><tt class="py-name">fromkeys</tt><tt class="py-op">(</tt><tt class="py-name">items1</tt><tt class="py-op">)</tt> </tt>
1022 <a name="L731"></a><tt class="py-lineno"> 731</tt> <tt class="py-line"> <tt class="py-name">iset2</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">.</tt><tt class="py-name">fromkeys</tt><tt class="py-op">(</tt><tt class="py-name">items2</tt><tt class="py-op">)</tt> </tt>
1023 <a name="L732"></a><tt class="py-lineno"> 732</tt> <tt class="py-line"> </tt>
1024 <a name="L733"></a><tt class="py-lineno"> 733</tt> <tt class="py-line"> <tt class="py-comment"># keep items that are in one list only</tt> </tt>
1025 <a name="L734"></a><tt class="py-lineno"> 734</tt> <tt class="py-line"> <tt class="py-name">allitems</tt> <tt class="py-op">=</tt> <tt class="py-name">items1</tt> <tt class="py-op">+</tt> <tt class="py-name">items2</tt> </tt>
1026 <a name="L735"></a><tt class="py-lineno"> 735</tt> <tt class="py-line"> <tt class="py-name">lst</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">e</tt> <tt class="py-keyword">for</tt> <tt class="py-name">e</tt> <tt class="py-keyword">in</tt> <tt class="py-name">allitems</tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">e</tt> <tt class="py-keyword">in</tt> <tt class="py-name">iset1</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">e</tt> <tt class="py-keyword">in</tt> <tt class="py-name">iset2</tt><tt class="py-op">]</tt> </tt>
1027 <a name="L736"></a><tt class="py-lineno"> 736</tt> <tt class="py-line"> <tt class="py-name">lst</tt><tt class="py-op">.</tt><tt class="py-name">sort</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1028 <a name="L737"></a><tt class="py-lineno"> 737</tt> <tt class="py-line"> </tt>
1029 <a name="L738"></a><tt class="py-lineno"> 738</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-125" class="py-name"><a title="ClusterShell.NodeSet.RangeSet._fold" class="py-name" href="#" onclick="return doclink('link-125', '_fold', 'link-77');">_fold</a></tt><tt class="py-op">(</tt><tt class="py-name">lst</tt><tt class="py-op">,</tt> <tt class="py-name">pad1</tt><tt class="py-op">)</tt> </tt>
1030 </div></div><a name="L739"></a><tt class="py-lineno"> 739</tt> <tt class="py-line"> </tt>
1031 <a name="NodeSetBase"></a><div id="NodeSetBase-def"><a name="L740"></a><tt class="py-lineno"> 740</tt> <tt class="py-line"> </tt>
1032 <a name="L741"></a><tt class="py-lineno"> 741</tt> <a class="py-toggle" href="#" id="NodeSetBase-toggle" onclick="return toggle('NodeSetBase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1033 </div><div id="NodeSetBase-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NodeSetBase-expanded"><a name="L742"></a><tt class="py-lineno"> 742</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1034 <a name="L743"></a><tt class="py-lineno"> 743</tt> <tt class="py-line"><tt class="py-docstring"> Base class for NodeSet.</tt> </tt>
1035 <a name="L744"></a><tt class="py-lineno"> 744</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1036 <a name="NodeSetBase.__init__"></a><div id="NodeSetBase.__init__-def"><a name="L745"></a><tt class="py-lineno"> 745</tt> <a class="py-toggle" href="#" id="NodeSetBase.__init__-toggle" onclick="return toggle('NodeSetBase.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-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">pattern</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1037 </div><div id="NodeSetBase.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__init__-expanded"><a name="L746"></a><tt class="py-lineno"> 746</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1038 <a name="L747"></a><tt class="py-lineno"> 747</tt> <tt class="py-line"><tt class="py-docstring"> Initialize an empty NodeSetBase.</tt> </tt>
1039 <a name="L748"></a><tt class="py-lineno"> 748</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1040 <a name="L749"></a><tt class="py-lineno"> 749</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
1041 <a name="L750"></a><tt class="py-lineno"> 750</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
1042 <a name="L751"></a><tt class="py-lineno"> 751</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pattern</tt><tt class="py-op">:</tt> </tt>
1043 <a name="L752"></a><tt class="py-lineno"> 752</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name" targets="Method ClusterShell.NodeSet.NodeGroupBase._add()=ClusterShell.NodeSet.NodeGroupBase-class.html#_add,Method ClusterShell.NodeSet.NodeSetBase._add()=ClusterShell.NodeSet.NodeSetBase-class.html#_add"><a title="ClusterShell.NodeSet.NodeGroupBase._add
1044 ClusterShell.NodeSet.NodeSetBase._add" class="py-name" href="#" onclick="return doclink('link-126', '_add', 'link-126');">_add</a></tt><tt class="py-op">(</tt><tt class="py-name">pattern</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1045 <a name="L753"></a><tt class="py-lineno"> 753</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">rangeset</tt><tt class="py-op">:</tt> </tt>
1046 <a name="L754"></a><tt class="py-lineno"> 754</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"missing pattern"</tt><tt class="py-op">)</tt> </tt>
1047 </div><a name="L755"></a><tt class="py-lineno"> 755</tt> <tt class="py-line"> </tt>
1048 <a name="NodeSetBase._iter"></a><div id="NodeSetBase._iter-def"><a name="L756"></a><tt class="py-lineno"> 756</tt> <a class="py-toggle" href="#" id="NodeSetBase._iter-toggle" onclick="return toggle('NodeSetBase._iter');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#_iter">_iter</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1049 </div><div id="NodeSetBase._iter-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase._iter-expanded"><a name="L757"></a><tt class="py-lineno"> 757</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1050 <a name="L758"></a><tt class="py-lineno"> 758</tt> <tt class="py-line"><tt class="py-docstring"> Iterator on internal item tuples (pattern, index, padding).</tt> </tt>
1051 <a name="L759"></a><tt class="py-lineno"> 759</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1052 <a name="L760"></a><tt class="py-lineno"> 760</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1053 <a name="L761"></a><tt class="py-lineno"> 761</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rangeset</tt><tt class="py-op">:</tt> </tt>
1054 <a name="L762"></a><tt class="py-lineno"> 762</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt class="py-name">_ranges</tt><tt class="py-op">:</tt> </tt>
1055 <a name="L763"></a><tt class="py-lineno"> 763</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">start</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">:</tt> </tt>
1056 <a name="L764"></a><tt class="py-lineno"> 764</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> </tt>
1057 <a name="L765"></a><tt class="py-lineno"> 765</tt> <tt class="py-line"> <tt class="py-name">start</tt> <tt class="py-op">+=</tt> <tt class="py-name">step</tt> </tt>
1058 <a name="L766"></a><tt class="py-lineno"> 766</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1059 <a name="L767"></a><tt class="py-lineno"> 767</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt> </tt>
1060 </div><a name="L768"></a><tt class="py-lineno"> 768</tt> <tt class="py-line"> </tt>
1061 <a name="NodeSetBase._iterbase"></a><div id="NodeSetBase._iterbase-def"><a name="L769"></a><tt class="py-lineno"> 769</tt> <a class="py-toggle" href="#" id="NodeSetBase._iterbase-toggle" onclick="return toggle('NodeSetBase._iterbase');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#_iterbase">_iterbase</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1062 </div><div id="NodeSetBase._iterbase-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase._iterbase-expanded"><a name="L770"></a><tt class="py-lineno"> 770</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1063 <a name="L771"></a><tt class="py-lineno"> 771</tt> <tt class="py-line"><tt class="py-docstring"> Iterator on single, one-item NodeSetBase objects.</tt> </tt>
1064 <a name="L772"></a><tt class="py-lineno"> 772</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1065 <a name="L773"></a><tt class="py-lineno"> 773</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase._iter()=ClusterShell.NodeSet.NodeSetBase-class.html#_iter"><a title="ClusterShell.NodeSet.NodeSetBase._iter" class="py-name" href="#" onclick="return doclink('link-127', '_iter', 'link-127');">_iter</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1066 <a name="L774"></a><tt class="py-lineno"> 774</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">start</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>
1067 <a name="L775"></a><tt class="py-lineno"> 775</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt id="link-128" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetBase=ClusterShell.NodeSet.NodeSetBase-class.html"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-128', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt id="link-129" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-129', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">.</tt><tt id="link-130" class="py-name" targets="Class Method ClusterShell.NodeSet.RangeSet.fromone()=ClusterShell.NodeSet.RangeSet-class.html#fromone"><a title="ClusterShell.NodeSet.RangeSet.fromone" class="py-name" href="#" onclick="return doclink('link-130', 'fromone', 'link-130');">fromone</a></tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1068 <a name="L776"></a><tt class="py-lineno"> 776</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1069 <a name="L777"></a><tt class="py-lineno"> 777</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt id="link-131" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-131', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> <tt class="py-comment"># no node index</tt> </tt>
1070 </div><a name="L778"></a><tt class="py-lineno"> 778</tt> <tt class="py-line"> </tt>
1071 <a name="NodeSetBase.__iter__"></a><div id="NodeSetBase.__iter__-def"><a name="L779"></a><tt class="py-lineno"> 779</tt> <a class="py-toggle" href="#" id="NodeSetBase.__iter__-toggle" onclick="return toggle('NodeSetBase.__iter__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__iter__">__iter__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1072 </div><div id="NodeSetBase.__iter__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__iter__-expanded"><a name="L780"></a><tt class="py-lineno"> 780</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1073 <a name="L781"></a><tt class="py-lineno"> 781</tt> <tt class="py-line"><tt class="py-docstring"> Iterator on single nodes as string.</tt> </tt>
1074 <a name="L782"></a><tt class="py-lineno"> 782</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1075 <a name="L783"></a><tt class="py-lineno"> 783</tt> <tt class="py-line"> <tt class="py-comment"># Does not call self._iterbase() + str() for better performance.</tt> </tt>
1076 <a name="L784"></a><tt class="py-lineno"> 784</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">pad</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._iter" class="py-name" href="#" onclick="return doclink('link-132', '_iter', 'link-127');">_iter</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1077 <a name="L785"></a><tt class="py-lineno"> 785</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">start</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>
1078 <a name="L786"></a><tt class="py-lineno"> 786</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">pat</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">"%0*d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pad</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1079 <a name="L787"></a><tt class="py-lineno"> 787</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1080 <a name="L788"></a><tt class="py-lineno"> 788</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">pat</tt> </tt>
1081 </div><a name="L789"></a><tt class="py-lineno"> 789</tt> <tt class="py-line"> </tt>
1082 <a name="NodeSetBase.__len__"></a><div id="NodeSetBase.__len__-def"><a name="L790"></a><tt class="py-lineno"> 790</tt> <a class="py-toggle" href="#" id="NodeSetBase.__len__-toggle" onclick="return toggle('NodeSetBase.__len__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__len__">__len__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1083 </div><div id="NodeSetBase.__len__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__len__-expanded"><a name="L791"></a><tt class="py-lineno"> 791</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1084 <a name="L792"></a><tt class="py-lineno"> 792</tt> <tt class="py-line"><tt class="py-docstring"> Get the number of nodes in NodeSet.</tt> </tt>
1085 <a name="L793"></a><tt class="py-lineno"> 793</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1086 <a name="L794"></a><tt class="py-lineno"> 794</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
1087 <a name="L795"></a><tt class="py-lineno"> 795</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">itervalues</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1088 <a name="L796"></a><tt class="py-lineno"> 796</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rangeset</tt><tt class="py-op">:</tt> </tt>
1089 <a name="L797"></a><tt class="py-lineno"> 797</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1090 <a name="L798"></a><tt class="py-lineno"> 798</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1091 <a name="L799"></a><tt class="py-lineno"> 799</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
1092 <a name="L800"></a><tt class="py-lineno"> 800</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cnt</tt> </tt>
1093 </div><a name="L801"></a><tt class="py-lineno"> 801</tt> <tt class="py-line"> </tt>
1094 <a name="NodeSetBase.__str__"></a><div id="NodeSetBase.__str__-def"><a name="L802"></a><tt class="py-lineno"> 802</tt> <a class="py-toggle" href="#" id="NodeSetBase.__str__-toggle" onclick="return toggle('NodeSetBase.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1095 </div><div id="NodeSetBase.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__str__-expanded"><a name="L803"></a><tt class="py-lineno"> 803</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1096 <a name="L804"></a><tt class="py-lineno"> 804</tt> <tt class="py-line"><tt class="py-docstring"> Get ranges-based pattern of node list.</tt> </tt>
1097 <a name="L805"></a><tt class="py-lineno"> 805</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1098 <a name="L806"></a><tt class="py-lineno"> 806</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
1099 <a name="L807"></a><tt class="py-lineno"> 807</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1100 <a name="L808"></a><tt class="py-lineno"> 808</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rangeset</tt><tt class="py-op">:</tt> </tt>
1101 <a name="L809"></a><tt class="py-lineno"> 809</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1102 <a name="L810"></a><tt class="py-lineno"> 810</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1103 <a name="L811"></a><tt class="py-lineno"> 811</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cnt</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
1104 <a name="L812"></a><tt class="py-lineno"> 812</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-string">"["</tt> <tt class="py-op">+</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">"]"</tt> </tt>
1105 <a name="L813"></a><tt class="py-lineno"> 813</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">+=</tt> <tt class="py-name">pat</tt> <tt class="py-op">%</tt> <tt class="py-name">s</tt> </tt>
1106 <a name="L814"></a><tt class="py-lineno"> 814</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1107 <a name="L815"></a><tt class="py-lineno"> 815</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">+=</tt> <tt class="py-name">pat</tt> </tt>
1108 <a name="L816"></a><tt class="py-lineno"> 816</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">+=</tt> <tt class="py-string">","</tt> </tt>
1109 <a name="L817"></a><tt class="py-lineno"> 817</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">result</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
1110 </div><a name="L818"></a><tt class="py-lineno"> 818</tt> <tt class="py-line"> </tt>
1111 <a name="NodeSetBase.__contains__"></a><div id="NodeSetBase.__contains__-def"><a name="L819"></a><tt class="py-lineno"> 819</tt> <a class="py-toggle" href="#" id="NodeSetBase.__contains__-toggle" onclick="return toggle('NodeSetBase.__contains__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__contains__">__contains__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1112 </div><div id="NodeSetBase.__contains__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__contains__-expanded"><a name="L820"></a><tt class="py-lineno"> 820</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1113 <a name="L821"></a><tt class="py-lineno"> 821</tt> <tt class="py-line"><tt class="py-docstring"> Is node contained in NodeSet ?</tt> </tt>
1114 <a name="L822"></a><tt class="py-lineno"> 822</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1115 <a name="L823"></a><tt class="py-lineno"> 823</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
1116 ClusterShell.NodeSet.NodeSetBase.issuperset
1117 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-133', 'issuperset', 'link-52');">issuperset</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1118 </div><a name="L824"></a><tt class="py-lineno"> 824</tt> <tt class="py-line"> </tt>
1119 <a name="NodeSetBase._binary_sanity_check"></a><div id="NodeSetBase._binary_sanity_check-def"><a name="L825"></a><tt class="py-lineno"> 825</tt> <a class="py-toggle" href="#" id="NodeSetBase._binary_sanity_check-toggle" onclick="return toggle('NodeSetBase._binary_sanity_check');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#_binary_sanity_check">_binary_sanity_check</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1120 </div><div id="NodeSetBase._binary_sanity_check-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase._binary_sanity_check-expanded"><a name="L826"></a><tt class="py-lineno"> 826</tt> <tt class="py-line"> <tt class="py-comment"># check that the other argument to a binary operation is also</tt> </tt>
1121 <a name="L827"></a><tt class="py-lineno"> 827</tt> <tt class="py-line"> <tt class="py-comment"># a NodeSet, raising a TypeError otherwise.</tt> </tt>
1122 <a name="L828"></a><tt class="py-lineno"> 828</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-134" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-134', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1123 <a name="L829"></a><tt class="py-lineno"> 829</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Binary operation only permitted between NodeSetBase"</tt> </tt>
1124 </div><a name="L830"></a><tt class="py-lineno"> 830</tt> <tt class="py-line"> </tt>
1125 <a name="NodeSetBase.issubset"></a><div id="NodeSetBase.issubset-def"><a name="L831"></a><tt class="py-lineno"> 831</tt> <a class="py-toggle" href="#" id="NodeSetBase.issubset-toggle" onclick="return toggle('NodeSetBase.issubset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#issubset">issubset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1126 </div><div id="NodeSetBase.issubset-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.issubset-expanded"><a name="L832"></a><tt class="py-lineno"> 832</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1127 <a name="L833"></a><tt class="py-lineno"> 833</tt> <tt class="py-line"><tt class="py-docstring"> Report whether another nodeset contains this nodeset.</tt> </tt>
1128 <a name="L834"></a><tt class="py-lineno"> 834</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1129 <a name="L835"></a><tt class="py-lineno"> 835</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1130 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-135', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1131 <a name="L836"></a><tt class="py-lineno"> 836</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
1132 ClusterShell.NodeSet.NodeSetBase.issuperset
1133 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-136', 'issuperset', 'link-52');">issuperset</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
1134 </div><a name="L837"></a><tt class="py-lineno"> 837</tt> <tt class="py-line"> </tt>
1135 <a name="NodeSetBase.issuperset"></a><div id="NodeSetBase.issuperset-def"><a name="L838"></a><tt class="py-lineno"> 838</tt> <a class="py-toggle" href="#" id="NodeSetBase.issuperset-toggle" onclick="return toggle('NodeSetBase.issuperset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#issuperset">issuperset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1136 </div><div id="NodeSetBase.issuperset-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.issuperset-expanded"><a name="L839"></a><tt class="py-lineno"> 839</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1137 <a name="L840"></a><tt class="py-lineno"> 840</tt> <tt class="py-line"><tt class="py-docstring"> Report whether this nodeset contains another nodeset.</tt> </tt>
1138 <a name="L841"></a><tt class="py-lineno"> 841</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1139 <a name="L842"></a><tt class="py-lineno"> 842</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1140 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-137', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1141 <a name="L843"></a><tt class="py-lineno"> 843</tt> <tt class="py-line"> <tt class="py-name">status</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
1142 <a name="L844"></a><tt class="py-lineno"> 844</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">erangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1143 <a name="L845"></a><tt class="py-lineno"> 845</tt> <tt class="py-line"> <tt class="py-name">rangeset</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
1144 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-138', 'get', 'link-138');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1145 <a name="L846"></a><tt class="py-lineno"> 846</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rangeset</tt><tt class="py-op">:</tt> </tt>
1146 <a name="L847"></a><tt class="py-lineno"> 847</tt> <tt class="py-line"> <tt class="py-name">status</tt> <tt class="py-op">=</tt> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
1147 ClusterShell.NodeSet.NodeSetBase.issuperset
1148 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-139', 'issuperset', 'link-52');">issuperset</a></tt><tt class="py-op">(</tt><tt class="py-name">erangeset</tt><tt class="py-op">)</tt> </tt>
1149 <a name="L848"></a><tt class="py-lineno"> 848</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1150 <a name="L849"></a><tt class="py-lineno"> 849</tt> <tt class="py-line"> <tt class="py-comment"># might be an unnumbered node (key in dict but no value)</tt> </tt>
1151 <a name="L850"></a><tt class="py-lineno"> 850</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">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1152 <a name="L851"></a><tt class="py-lineno"> 851</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">status</tt><tt class="py-op">:</tt> </tt>
1153 <a name="L852"></a><tt class="py-lineno"> 852</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
1154 <a name="L853"></a><tt class="py-lineno"> 853</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">status</tt> </tt>
1155 </div><a name="L854"></a><tt class="py-lineno"> 854</tt> <tt class="py-line"> </tt>
1156 <a name="NodeSetBase.__eq__"></a><div id="NodeSetBase.__eq__-def"><a name="L855"></a><tt class="py-lineno"> 855</tt> <a class="py-toggle" href="#" id="NodeSetBase.__eq__-toggle" onclick="return toggle('NodeSetBase.__eq__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__eq__">__eq__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1157 </div><div id="NodeSetBase.__eq__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__eq__-expanded"><a name="L856"></a><tt class="py-lineno"> 856</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1158 <a name="L857"></a><tt class="py-lineno"> 857</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet equality comparison.</tt> </tt>
1159 <a name="L858"></a><tt class="py-lineno"> 858</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1160 <a name="L859"></a><tt class="py-lineno"> 859</tt> <tt class="py-line"> <tt class="py-comment"># See comment for for RangeSet.__eq__()</tt> </tt>
1161 <a name="L860"></a><tt class="py-lineno"> 860</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-140" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-140', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1162 <a name="L861"></a><tt class="py-lineno"> 861</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
1163 <a name="L862"></a><tt class="py-lineno"> 862</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</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">len</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
1164 ClusterShell.NodeSet.NodeSetBase.issuperset
1165 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-141', 'issuperset', 'link-52');">issuperset</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1166 </div><a name="L863"></a><tt class="py-lineno"> 863</tt> <tt class="py-line"> </tt>
1167 <a name="L864"></a><tt class="py-lineno"> 864</tt> <tt class="py-line"> <tt class="py-comment"># inequality comparisons using the is-subset relation</tt> </tt>
1168 <a name="L865"></a><tt class="py-lineno"> 865</tt> <tt class="py-line"> <tt class="py-name">__le__</tt> <tt class="py-op">=</tt> <tt id="link-142" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issubset
1169 ClusterShell.NodeSet.NodeSetBase.issubset
1170 ClusterShell.NodeSet.RangeSet.issubset" class="py-name" href="#" onclick="return doclink('link-142', 'issubset', 'link-48');">issubset</a></tt> </tt>
1171 <a name="L866"></a><tt class="py-lineno"> 866</tt> <tt class="py-line"> <tt class="py-name">__ge__</tt> <tt class="py-op">=</tt> <tt id="link-143" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
1172 ClusterShell.NodeSet.NodeSetBase.issuperset
1173 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-143', 'issuperset', 'link-52');">issuperset</a></tt> </tt>
1174 <a name="L867"></a><tt class="py-lineno"> 867</tt> <tt class="py-line"> </tt>
1175 <a name="NodeSetBase.__lt__"></a><div id="NodeSetBase.__lt__-def"><a name="L868"></a><tt class="py-lineno"> 868</tt> <a class="py-toggle" href="#" id="NodeSetBase.__lt__-toggle" onclick="return toggle('NodeSetBase.__lt__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__lt__">__lt__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1176 </div><div id="NodeSetBase.__lt__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__lt__-expanded"><a name="L869"></a><tt class="py-lineno"> 869</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1177 <a name="L870"></a><tt class="py-lineno"> 870</tt> <tt class="py-line"><tt class="py-docstring"> x.__lt__(y) &lt;==&gt; x&lt;y</tt> </tt>
1178 <a name="L871"></a><tt class="py-lineno"> 871</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1179 <a name="L872"></a><tt class="py-lineno"> 872</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1180 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-144', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1181 <a name="L873"></a><tt class="py-lineno"> 873</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-145" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issubset
1182 ClusterShell.NodeSet.NodeSetBase.issubset
1183 ClusterShell.NodeSet.RangeSet.issubset" class="py-name" href="#" onclick="return doclink('link-145', 'issubset', 'link-48');">issubset</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1184 </div><a name="L874"></a><tt class="py-lineno"> 874</tt> <tt class="py-line"> </tt>
1185 <a name="NodeSetBase.__gt__"></a><div id="NodeSetBase.__gt__-def"><a name="L875"></a><tt class="py-lineno"> 875</tt> <a class="py-toggle" href="#" id="NodeSetBase.__gt__-toggle" onclick="return toggle('NodeSetBase.__gt__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__gt__">__gt__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1186 </div><div id="NodeSetBase.__gt__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__gt__-expanded"><a name="L876"></a><tt class="py-lineno"> 876</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1187 <a name="L877"></a><tt class="py-lineno"> 877</tt> <tt class="py-line"><tt class="py-docstring"> x.__gt__(y) &lt;==&gt; x&gt;y</tt> </tt>
1188 <a name="L878"></a><tt class="py-lineno"> 878</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1189 <a name="L879"></a><tt class="py-lineno"> 879</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1190 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-146', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1191 <a name="L880"></a><tt class="py-lineno"> 880</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
1192 ClusterShell.NodeSet.NodeSetBase.issuperset
1193 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-147', 'issuperset', 'link-52');">issuperset</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1194 </div><a name="L881"></a><tt class="py-lineno"> 881</tt> <tt class="py-line"> </tt>
1195 <a name="NodeSetBase.__getitem__"></a><div id="NodeSetBase.__getitem__-def"><a name="L882"></a><tt class="py-lineno"> 882</tt> <a class="py-toggle" href="#" id="NodeSetBase.__getitem__-toggle" onclick="return toggle('NodeSetBase.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">i</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1196 </div><div id="NodeSetBase.__getitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__getitem__-expanded"><a name="L883"></a><tt class="py-lineno"> 883</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1197 <a name="L884"></a><tt class="py-lineno"> 884</tt> <tt class="py-line"><tt class="py-docstring"> Return the node at index i. For convenience only, not</tt> </tt>
1198 <a name="L885"></a><tt class="py-lineno"> 885</tt> <tt class="py-line"><tt class="py-docstring"> optimized as of version 1.0.</tt> </tt>
1199 <a name="L886"></a><tt class="py-lineno"> 886</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1200 <a name="L887"></a><tt class="py-lineno"> 887</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">list</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">i</tt><tt class="py-op">]</tt> </tt>
1201 </div><a name="L888"></a><tt class="py-lineno"> 888</tt> <tt class="py-line"> </tt>
1202 <a name="NodeSetBase._add"></a><div id="NodeSetBase._add-def"><a name="L889"></a><tt class="py-lineno"> 889</tt> <a class="py-toggle" href="#" id="NodeSetBase._add-toggle" onclick="return toggle('NodeSetBase._add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#_add">_add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pat</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1203 </div><div id="NodeSetBase._add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase._add-expanded"><a name="L890"></a><tt class="py-lineno"> 890</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1204 <a name="L891"></a><tt class="py-lineno"> 891</tt> <tt class="py-line"><tt class="py-docstring"> Add nodes from a (pat, rangeset) tuple. `pat' may be an existing</tt> </tt>
1205 <a name="L892"></a><tt class="py-lineno"> 892</tt> <tt class="py-line"><tt class="py-docstring"> pattern and `rangeset' may be None.</tt> </tt>
1206 <a name="L893"></a><tt class="py-lineno"> 893</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1207 <a name="L894"></a><tt class="py-lineno"> 894</tt> <tt class="py-line"> <tt class="py-comment"># get patterns dict entry</tt> </tt>
1208 <a name="L895"></a><tt class="py-lineno"> 895</tt> <tt class="py-line"> <tt class="py-name">pat_e</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
1209 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-148', 'get', 'link-138');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1210 <a name="L896"></a><tt class="py-lineno"> 896</tt> <tt class="py-line"> </tt>
1211 <a name="L897"></a><tt class="py-lineno"> 897</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pat_e</tt><tt class="py-op">:</tt> </tt>
1212 <a name="L898"></a><tt class="py-lineno"> 898</tt> <tt class="py-line"> <tt class="py-comment"># don't play with prefix: if there is a value, there is a</tt> </tt>
1213 <a name="L899"></a><tt class="py-lineno"> 899</tt> <tt class="py-line"> <tt class="py-comment"># rangeset.</tt> </tt>
1214 <a name="L900"></a><tt class="py-lineno"> 900</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">rangeset</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt> </tt>
1215 <a name="L901"></a><tt class="py-lineno"> 901</tt> <tt class="py-line"> </tt>
1216 <a name="L902"></a><tt class="py-lineno"> 902</tt> <tt class="py-line"> <tt class="py-comment"># add rangeset in corresponding pattern rangeset</tt> </tt>
1217 <a name="L903"></a><tt class="py-lineno"> 903</tt> <tt class="py-line"> <tt class="py-name">pat_e</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1218 ClusterShell.NodeSet.NodeSetBase.update
1219 ClusterShell.NodeSet.RangeSet.update
1220 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-149', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1221 <a name="L904"></a><tt class="py-lineno"> 904</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1222 <a name="L905"></a><tt class="py-lineno"> 905</tt> <tt class="py-line"> <tt class="py-comment"># create new pattern (with possibly rangeset=None)</tt> </tt>
1223 <a name="L906"></a><tt class="py-lineno"> 906</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">[</tt><tt class="py-name">pat</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-150" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-150', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-151', 'copy', 'link-0');">copy</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1224 </div><a name="L907"></a><tt class="py-lineno"> 907</tt> <tt class="py-line"> </tt>
1225 <a name="NodeSetBase.union"></a><div id="NodeSetBase.union-def"><a name="L908"></a><tt class="py-lineno"> 908</tt> <a class="py-toggle" href="#" id="NodeSetBase.union-toggle" onclick="return toggle('NodeSetBase.union');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#union">union</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1226 </div><div id="NodeSetBase.union-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.union-expanded"><a name="L909"></a><tt class="py-lineno"> 909</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1227 <a name="L910"></a><tt class="py-lineno"> 910</tt> <tt class="py-line"><tt class="py-docstring"> s.union(t) returns a new set with elements from both s and t.</tt> </tt>
1228 <a name="L911"></a><tt class="py-lineno"> 911</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1229 <a name="L912"></a><tt class="py-lineno"> 912</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt> <tt class="py-op">=</tt> <tt id="link-152" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-152', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
1230 <a name="L913"></a><tt class="py-lineno"> 913</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1231 ClusterShell.NodeSet.NodeSetBase.update
1232 ClusterShell.NodeSet.RangeSet.update
1233 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-153', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1234 <a name="L914"></a><tt class="py-lineno"> 914</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self_copy</tt> </tt>
1235 </div><a name="L915"></a><tt class="py-lineno"> 915</tt> <tt class="py-line"> </tt>
1236 <a name="NodeSetBase.__or__"></a><div id="NodeSetBase.__or__-def"><a name="L916"></a><tt class="py-lineno"> 916</tt> <a class="py-toggle" href="#" id="NodeSetBase.__or__-toggle" onclick="return toggle('NodeSetBase.__or__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__or__">__or__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1237 </div><div id="NodeSetBase.__or__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__or__-expanded"><a name="L917"></a><tt class="py-lineno"> 917</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1238 <a name="L918"></a><tt class="py-lineno"> 918</tt> <tt class="py-line"><tt class="py-docstring"> Implements the | operator. So s | t returns a new nodeset with</tt> </tt>
1239 <a name="L919"></a><tt class="py-lineno"> 919</tt> <tt class="py-line"><tt class="py-docstring"> elements from both s and t.</tt> </tt>
1240 <a name="L920"></a><tt class="py-lineno"> 920</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1241 <a name="L921"></a><tt class="py-lineno"> 921</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-154" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-154', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1242 <a name="L922"></a><tt class="py-lineno"> 922</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
1243 <a name="L923"></a><tt class="py-lineno"> 923</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase.union
1244 ClusterShell.NodeSet.RangeSet.union" class="py-name" href="#" onclick="return doclink('link-155', 'union', 'link-82');">union</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1245 </div><a name="L924"></a><tt class="py-lineno"> 924</tt> <tt class="py-line"> </tt>
1246 <a name="NodeSetBase.add"></a><div id="NodeSetBase.add-def"><a name="L925"></a><tt class="py-lineno"> 925</tt> <a class="py-toggle" href="#" id="NodeSetBase.add-toggle" onclick="return toggle('NodeSetBase.add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#add">add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1247 </div><div id="NodeSetBase.add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.add-expanded"><a name="L926"></a><tt class="py-lineno"> 926</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1248 <a name="L927"></a><tt class="py-lineno"> 927</tt> <tt class="py-line"><tt class="py-docstring"> Add node to NodeSet.</tt> </tt>
1249 <a name="L928"></a><tt class="py-lineno"> 928</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1250 <a name="L929"></a><tt class="py-lineno"> 929</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1251 ClusterShell.NodeSet.NodeSetBase.update
1252 ClusterShell.NodeSet.RangeSet.update
1253 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-156', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1254 </div><a name="L930"></a><tt class="py-lineno"> 930</tt> <tt class="py-line"> </tt>
1255 <a name="NodeSetBase.update"></a><div id="NodeSetBase.update-def"><a name="L931"></a><tt class="py-lineno"> 931</tt> <a class="py-toggle" href="#" id="NodeSetBase.update-toggle" onclick="return toggle('NodeSetBase.update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#update">update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1256 </div><div id="NodeSetBase.update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.update-expanded"><a name="L932"></a><tt class="py-lineno"> 932</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1257 <a name="L933"></a><tt class="py-lineno"> 933</tt> <tt class="py-line"><tt class="py-docstring"> s.update(t) returns nodeset s with elements added from t.</tt> </tt>
1258 <a name="L934"></a><tt class="py-lineno"> 934</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1259 <a name="L935"></a><tt class="py-lineno"> 935</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1260 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-157', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1261 <a name="L936"></a><tt class="py-lineno"> 936</tt> <tt class="py-line"> </tt>
1262 <a name="L937"></a><tt class="py-lineno"> 937</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1263 <a name="L938"></a><tt class="py-lineno"> 938</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-158" class="py-name"><a title="ClusterShell.NodeSet.NodeGroupBase._add
1264 ClusterShell.NodeSet.NodeSetBase._add" class="py-name" href="#" onclick="return doclink('link-158', '_add', 'link-126');">_add</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1265 </div><a name="L939"></a><tt class="py-lineno"> 939</tt> <tt class="py-line"> </tt>
1266 <a name="NodeSetBase.clear"></a><div id="NodeSetBase.clear-def"><a name="L940"></a><tt class="py-lineno"> 940</tt> <a class="py-toggle" href="#" id="NodeSetBase.clear-toggle" onclick="return toggle('NodeSetBase.clear');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#clear">clear</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1267 </div><div id="NodeSetBase.clear-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.clear-expanded"><a name="L941"></a><tt class="py-lineno"> 941</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1268 <a name="L942"></a><tt class="py-lineno"> 942</tt> <tt class="py-line"><tt class="py-docstring"> Remove all nodes from this nodeset.</tt> </tt>
1269 <a name="L943"></a><tt class="py-lineno"> 943</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1270 <a name="L944"></a><tt class="py-lineno"> 944</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clear()=ClusterShell.Engine.Engine.Engine-class.html#clear,Method ClusterShell.Engine.Engine._EngineTimerQ.clear()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear,Method ClusterShell.MsgTree.MsgTree.clear()=ClusterShell.MsgTree.MsgTree-class.html#clear,Method ClusterShell.NodeSet.NodeSetBase.clear()=ClusterShell.NodeSet.NodeSetBase-class.html#clear,Method ClusterShell.NodeSet.RangeSet.clear()=ClusterShell.NodeSet.RangeSet-class.html#clear"><a title="ClusterShell.Engine.Engine.Engine.clear
1271 ClusterShell.Engine.Engine._EngineTimerQ.clear
1272 ClusterShell.MsgTree.MsgTree.clear
1273 ClusterShell.NodeSet.NodeSetBase.clear
1274 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-159', 'clear', 'link-159');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1275 <a name="L945"></a><tt class="py-lineno"> 945</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_length</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
1276 </div><a name="L946"></a><tt class="py-lineno"> 946</tt> <tt class="py-line"> </tt>
1277 <a name="NodeSetBase.__ior__"></a><div id="NodeSetBase.__ior__-def"><a name="L947"></a><tt class="py-lineno"> 947</tt> <a class="py-toggle" href="#" id="NodeSetBase.__ior__-toggle" onclick="return toggle('NodeSetBase.__ior__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__ior__">__ior__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1278 </div><div id="NodeSetBase.__ior__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__ior__-expanded"><a name="L948"></a><tt class="py-lineno"> 948</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1279 <a name="L949"></a><tt class="py-lineno"> 949</tt> <tt class="py-line"><tt class="py-docstring"> Implements the |= operator. So s |= t returns nodeset s with</tt> </tt>
1280 <a name="L950"></a><tt class="py-lineno"> 950</tt> <tt class="py-line"><tt class="py-docstring"> elements added from t. (Python version 2.5+ required)</tt> </tt>
1281 <a name="L951"></a><tt class="py-lineno"> 951</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1282 <a name="L952"></a><tt class="py-lineno"> 952</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1283 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-160', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1284 <a name="L953"></a><tt class="py-lineno"> 953</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1285 ClusterShell.NodeSet.NodeSetBase.update
1286 ClusterShell.NodeSet.RangeSet.update
1287 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-161', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1288 </div><a name="L954"></a><tt class="py-lineno"> 954</tt> <tt class="py-line"> </tt>
1289 <a name="NodeSetBase.intersection"></a><div id="NodeSetBase.intersection-def"><a name="L955"></a><tt class="py-lineno"> 955</tt> <a class="py-toggle" href="#" id="NodeSetBase.intersection-toggle" onclick="return toggle('NodeSetBase.intersection');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#intersection">intersection</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1290 </div><div id="NodeSetBase.intersection-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.intersection-expanded"><a name="L956"></a><tt class="py-lineno"> 956</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1291 <a name="L957"></a><tt class="py-lineno"> 957</tt> <tt class="py-line"><tt class="py-docstring"> s.intersection(t) returns a new set with elements common to s</tt> </tt>
1292 <a name="L958"></a><tt class="py-lineno"> 958</tt> <tt class="py-line"><tt class="py-docstring"> and t.</tt> </tt>
1293 <a name="L959"></a><tt class="py-lineno"> 959</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1294 <a name="L960"></a><tt class="py-lineno"> 960</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt> <tt class="py-op">=</tt> <tt id="link-162" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-162', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
1295 <a name="L961"></a><tt class="py-lineno"> 961</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.intersection_update
1296 ClusterShell.NodeSet.NodeSetBase.intersection_update
1297 ClusterShell.NodeSet.RangeSet.intersection_update" class="py-name" href="#" onclick="return doclink('link-163', 'intersection_update', 'link-88');">intersection_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1298 <a name="L962"></a><tt class="py-lineno"> 962</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self_copy</tt> </tt>
1299 </div><a name="L963"></a><tt class="py-lineno"> 963</tt> <tt class="py-line"> </tt>
1300 <a name="NodeSetBase.__and__"></a><div id="NodeSetBase.__and__-def"><a name="L964"></a><tt class="py-lineno"> 964</tt> <a class="py-toggle" href="#" id="NodeSetBase.__and__-toggle" onclick="return toggle('NodeSetBase.__and__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__and__">__and__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1301 </div><div id="NodeSetBase.__and__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__and__-expanded"><a name="L965"></a><tt class="py-lineno"> 965</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1302 <a name="L966"></a><tt class="py-lineno"> 966</tt> <tt class="py-line"><tt class="py-docstring"> Implements the &amp; operator. So s &amp; t returns a new nodeset with</tt> </tt>
1303 <a name="L967"></a><tt class="py-lineno"> 967</tt> <tt class="py-line"><tt class="py-docstring"> elements common to s and t.</tt> </tt>
1304 <a name="L968"></a><tt class="py-lineno"> 968</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1305 <a name="L969"></a><tt class="py-lineno"> 969</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-164" class="py-name" targets="Module ClusterShell.NodeSet=ClusterShell.NodeSet-module.html,Class ClusterShell.NodeSet.NodeSet=ClusterShell.NodeSet.NodeSet-class.html"><a title="ClusterShell.NodeSet
1306 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-164', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1307 <a name="L970"></a><tt class="py-lineno"> 970</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
1308 <a name="L971"></a><tt class="py-lineno"> 971</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase.intersection
1309 ClusterShell.NodeSet.RangeSet.intersection" class="py-name" href="#" onclick="return doclink('link-165', 'intersection', 'link-90');">intersection</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1310 </div><a name="L972"></a><tt class="py-lineno"> 972</tt> <tt class="py-line"> </tt>
1311 <a name="NodeSetBase.intersection_update"></a><div id="NodeSetBase.intersection_update-def"><a name="L973"></a><tt class="py-lineno"> 973</tt> <a class="py-toggle" href="#" id="NodeSetBase.intersection_update-toggle" onclick="return toggle('NodeSetBase.intersection_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#intersection_update">intersection_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1312 </div><div id="NodeSetBase.intersection_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.intersection_update-expanded"><a name="L974"></a><tt class="py-lineno"> 974</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1313 <a name="L975"></a><tt class="py-lineno"> 975</tt> <tt class="py-line"><tt class="py-docstring"> s.intersection_update(t) returns nodeset s keeping only</tt> </tt>
1314 <a name="L976"></a><tt class="py-lineno"> 976</tt> <tt class="py-line"><tt class="py-docstring"> elements also found in t.</tt> </tt>
1315 <a name="L977"></a><tt class="py-lineno"> 977</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1316 <a name="L978"></a><tt class="py-lineno"> 978</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1317 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-166', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1318 <a name="L979"></a><tt class="py-lineno"> 979</tt> <tt class="py-line"> </tt>
1319 <a name="L980"></a><tt class="py-lineno"> 980</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">other</tt> <tt class="py-keyword">is</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> </tt>
1320 <a name="L981"></a><tt class="py-lineno"> 981</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
1321 <a name="L982"></a><tt class="py-lineno"> 982</tt> <tt class="py-line"> </tt>
1322 <a name="L983"></a><tt class="py-lineno"> 983</tt> <tt class="py-line"> <tt class="py-name">tmp_ns</tt> <tt class="py-op">=</tt> <tt id="link-167" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-167', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1323 <a name="L984"></a><tt class="py-lineno"> 984</tt> <tt class="py-line"> </tt>
1324 <a name="L985"></a><tt class="py-lineno"> 985</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">irangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1325 <a name="L986"></a><tt class="py-lineno"> 986</tt> <tt class="py-line"> <tt class="py-name">rangeset</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
1326 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-168', 'get', 'link-138');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1327 <a name="L987"></a><tt class="py-lineno"> 987</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rangeset</tt><tt class="py-op">:</tt> </tt>
1328 <a name="L988"></a><tt class="py-lineno"> 988</tt> <tt class="py-line"> <tt class="py-name">rs</tt> <tt class="py-op">=</tt> <tt id="link-169" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-169', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-170', 'copy', 'link-0');">copy</a></tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1329 <a name="L989"></a><tt class="py-lineno"> 989</tt> <tt class="py-line"> <tt class="py-name">rs</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.intersection_update
1330 ClusterShell.NodeSet.NodeSetBase.intersection_update
1331 ClusterShell.NodeSet.RangeSet.intersection_update" class="py-name" href="#" onclick="return doclink('link-171', 'intersection_update', 'link-88');">intersection_update</a></tt><tt class="py-op">(</tt><tt class="py-name">irangeset</tt><tt class="py-op">)</tt> </tt>
1332 <a name="L990"></a><tt class="py-lineno"> 990</tt> <tt class="py-line"> <tt class="py-comment"># ignore pattern if empty rangeset</tt> </tt>
1333 <a name="L991"></a><tt class="py-lineno"> 991</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">rs</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1334 <a name="L992"></a><tt class="py-lineno"> 992</tt> <tt class="py-line"> <tt class="py-name">tmp_ns</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="ClusterShell.NodeSet.NodeGroupBase._add
1335 ClusterShell.NodeSet.NodeSetBase._add" class="py-name" href="#" onclick="return doclink('link-172', '_add', 'link-126');">_add</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rs</tt><tt class="py-op">)</tt> </tt>
1336 <a name="L993"></a><tt class="py-lineno"> 993</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-keyword">not</tt> <tt class="py-name">irangeset</tt> <tt class="py-keyword">and</tt> <tt class="py-name">pat</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">:</tt> </tt>
1337 <a name="L994"></a><tt class="py-lineno"> 994</tt> <tt class="py-line"> <tt class="py-comment"># intersect two nodes with no rangeset</tt> </tt>
1338 <a name="L995"></a><tt class="py-lineno"> 995</tt> <tt class="py-line"> <tt class="py-name">tmp_ns</tt><tt class="py-op">.</tt><tt id="link-173" class="py-name"><a title="ClusterShell.NodeSet.NodeGroupBase._add
1339 ClusterShell.NodeSet.NodeSetBase._add" class="py-name" href="#" onclick="return doclink('link-173', '_add', 'link-126');">_add</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
1340 <a name="L996"></a><tt class="py-lineno"> 996</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-keyword">not</tt> <tt class="py-name">irangeset</tt> <tt class="py-keyword">and</tt> <tt class="py-name">pat</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">:</tt> </tt>
1341 <a name="L997"></a><tt class="py-lineno"> 997</tt> <tt class="py-line"> <tt class="py-comment"># intersect two nodes with no rangeset</tt> </tt>
1342 <a name="L998"></a><tt class="py-lineno"> 998</tt> <tt class="py-line"> <tt class="py-name">tmp_ns</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="ClusterShell.NodeSet.NodeGroupBase._add
1343 ClusterShell.NodeSet.NodeSetBase._add" class="py-name" href="#" onclick="return doclink('link-174', '_add', 'link-126');">_add</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
1344 <a name="L999"></a><tt class="py-lineno"> 999</tt> <tt class="py-line"> </tt>
1345 <a name="L1000"></a><tt class="py-lineno">1000</tt> <tt class="py-line"> <tt class="py-comment"># Substitute </tt> </tt>
1346 <a name="L1001"></a><tt class="py-lineno">1001</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt> <tt class="py-op">=</tt> <tt class="py-name">tmp_ns</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt> </tt>
1347 </div><a name="L1002"></a><tt class="py-lineno">1002</tt> <tt class="py-line"> </tt>
1348 <a name="NodeSetBase.__iand__"></a><div id="NodeSetBase.__iand__-def"><a name="L1003"></a><tt class="py-lineno">1003</tt> <a class="py-toggle" href="#" id="NodeSetBase.__iand__-toggle" onclick="return toggle('NodeSetBase.__iand__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__iand__">__iand__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1349 </div><div id="NodeSetBase.__iand__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__iand__-expanded"><a name="L1004"></a><tt class="py-lineno">1004</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1350 <a name="L1005"></a><tt class="py-lineno">1005</tt> <tt class="py-line"><tt class="py-docstring"> Implements the &amp;= operator. So s &amp;= t returns nodeset s keeping</tt> </tt>
1351 <a name="L1006"></a><tt class="py-lineno">1006</tt> <tt class="py-line"><tt class="py-docstring"> only elements also found in t. (Python version 2.5+ required)</tt> </tt>
1352 <a name="L1007"></a><tt class="py-lineno">1007</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1353 <a name="L1008"></a><tt class="py-lineno">1008</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-175" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1354 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-175', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1355 <a name="L1009"></a><tt class="py-lineno">1009</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.intersection_update
1356 ClusterShell.NodeSet.NodeSetBase.intersection_update
1357 ClusterShell.NodeSet.RangeSet.intersection_update" class="py-name" href="#" onclick="return doclink('link-176', 'intersection_update', 'link-88');">intersection_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1358 </div><a name="L1010"></a><tt class="py-lineno">1010</tt> <tt class="py-line"> </tt>
1359 <a name="NodeSetBase.difference"></a><div id="NodeSetBase.difference-def"><a name="L1011"></a><tt class="py-lineno">1011</tt> <a class="py-toggle" href="#" id="NodeSetBase.difference-toggle" onclick="return toggle('NodeSetBase.difference');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#difference">difference</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1360 </div><div id="NodeSetBase.difference-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.difference-expanded"><a name="L1012"></a><tt class="py-lineno">1012</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1361 <a name="L1013"></a><tt class="py-lineno">1013</tt> <tt class="py-line"><tt class="py-docstring"> s.difference(t) returns a new NodeSet with elements in s but not</tt> </tt>
1362 <a name="L1014"></a><tt class="py-lineno">1014</tt> <tt class="py-line"><tt class="py-docstring"> in t.</tt> </tt>
1363 <a name="L1015"></a><tt class="py-lineno">1015</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1364 <a name="L1016"></a><tt class="py-lineno">1016</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt> <tt class="py-op">=</tt> <tt id="link-177" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-177', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
1365 <a name="L1017"></a><tt class="py-lineno">1017</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.difference_update
1366 ClusterShell.NodeSet.NodeSetBase.difference_update
1367 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-178', 'difference_update', 'link-98');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1368 <a name="L1018"></a><tt class="py-lineno">1018</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self_copy</tt> </tt>
1369 </div><a name="L1019"></a><tt class="py-lineno">1019</tt> <tt class="py-line"> </tt>
1370 <a name="NodeSetBase.__sub__"></a><div id="NodeSetBase.__sub__-def"><a name="L1020"></a><tt class="py-lineno">1020</tt> <a class="py-toggle" href="#" id="NodeSetBase.__sub__-toggle" onclick="return toggle('NodeSetBase.__sub__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__sub__">__sub__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1371 </div><div id="NodeSetBase.__sub__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__sub__-expanded"><a name="L1021"></a><tt class="py-lineno">1021</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1372 <a name="L1022"></a><tt class="py-lineno">1022</tt> <tt class="py-line"><tt class="py-docstring"> Implement the - operator. So s - t returns a new nodeset with</tt> </tt>
1373 <a name="L1023"></a><tt class="py-lineno">1023</tt> <tt class="py-line"><tt class="py-docstring"> elements in s but not in t.</tt> </tt>
1374 <a name="L1024"></a><tt class="py-lineno">1024</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1375 <a name="L1025"></a><tt class="py-lineno">1025</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-179" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-179', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1376 <a name="L1026"></a><tt class="py-lineno">1026</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
1377 <a name="L1027"></a><tt class="py-lineno">1027</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-180" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase.difference
1378 ClusterShell.NodeSet.RangeSet.difference" class="py-name" href="#" onclick="return doclink('link-180', 'difference', 'link-100');">difference</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1379 </div><a name="L1028"></a><tt class="py-lineno">1028</tt> <tt class="py-line"> </tt>
1380 <a name="NodeSetBase.difference_update"></a><div id="NodeSetBase.difference_update-def"><a name="L1029"></a><tt class="py-lineno">1029</tt> <a class="py-toggle" href="#" id="NodeSetBase.difference_update-toggle" onclick="return toggle('NodeSetBase.difference_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#difference_update">difference_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">,</tt> <tt class="py-param">strict</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1381 </div><div id="NodeSetBase.difference_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.difference_update-expanded"><a name="L1030"></a><tt class="py-lineno">1030</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1382 <a name="L1031"></a><tt class="py-lineno">1031</tt> <tt class="py-line"><tt class="py-docstring"> s.difference_update(t) returns nodeset s after removing</tt> </tt>
1383 <a name="L1032"></a><tt class="py-lineno">1032</tt> <tt class="py-line"><tt class="py-docstring"> elements found in t. If strict is True, raise KeyError</tt> </tt>
1384 <a name="L1033"></a><tt class="py-lineno">1033</tt> <tt class="py-line"><tt class="py-docstring"> if an element cannot be removed.</tt> </tt>
1385 <a name="L1034"></a><tt class="py-lineno">1034</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1386 <a name="L1035"></a><tt class="py-lineno">1035</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-181" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1387 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-181', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1388 <a name="L1036"></a><tt class="py-lineno">1036</tt> <tt class="py-line"> <tt class="py-comment"># the purge of each empty pattern is done afterward to allow self = ns</tt> </tt>
1389 <a name="L1037"></a><tt class="py-lineno">1037</tt> <tt class="py-line"> <tt class="py-name">purge_patterns</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
1390 <a name="L1038"></a><tt class="py-lineno">1038</tt> <tt class="py-line"> </tt>
1391 <a name="L1039"></a><tt class="py-lineno">1039</tt> <tt class="py-line"> <tt class="py-comment"># iterate first over exclude nodeset rangesets which is usually smaller</tt> </tt>
1392 <a name="L1040"></a><tt class="py-lineno">1040</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">erangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1393 <a name="L1041"></a><tt class="py-lineno">1041</tt> <tt class="py-line"> <tt class="py-comment"># if pattern is found, deal with it</tt> </tt>
1394 <a name="L1042"></a><tt class="py-lineno">1042</tt> <tt class="py-line"> <tt class="py-name">rangeset</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
1395 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-182', 'get', 'link-138');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1396 <a name="L1043"></a><tt class="py-lineno">1043</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rangeset</tt><tt class="py-op">:</tt> </tt>
1397 <a name="L1044"></a><tt class="py-lineno">1044</tt> <tt class="py-line"> <tt class="py-comment"># sub rangeset, raise KeyError if not found</tt> </tt>
1398 <a name="L1045"></a><tt class="py-lineno">1045</tt> <tt class="py-line"> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.difference_update
1399 ClusterShell.NodeSet.NodeSetBase.difference_update
1400 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-183', 'difference_update', 'link-98');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">erangeset</tt><tt class="py-op">,</tt> <tt class="py-name">strict</tt><tt class="py-op">)</tt> </tt>
1401 <a name="L1046"></a><tt class="py-lineno">1046</tt> <tt class="py-line"> </tt>
1402 <a name="L1047"></a><tt class="py-lineno">1047</tt> <tt class="py-line"> <tt class="py-comment"># check if no range left and add pattern to purge list</tt> </tt>
1403 <a name="L1048"></a><tt class="py-lineno">1048</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1404 <a name="L1049"></a><tt class="py-lineno">1049</tt> <tt class="py-line"> <tt class="py-name">purge_patterns</tt><tt class="py-op">.</tt><tt id="link-184" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-184', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1405 <a name="L1050"></a><tt class="py-lineno">1050</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1406 <a name="L1051"></a><tt class="py-lineno">1051</tt> <tt class="py-line"> <tt class="py-comment"># unnumbered node exclusion</tt> </tt>
1407 <a name="L1052"></a><tt class="py-lineno">1052</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">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1408 <a name="L1053"></a><tt class="py-lineno">1053</tt> <tt class="py-line"> <tt class="py-name">purge_patterns</tt><tt class="py-op">.</tt><tt id="link-185" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-185', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1409 <a name="L1054"></a><tt class="py-lineno">1054</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">strict</tt><tt class="py-op">:</tt> </tt>
1410 <a name="L1055"></a><tt class="py-lineno">1055</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">KeyError</tt><tt class="py-op">,</tt> <tt class="py-name">pat</tt> </tt>
1411 <a name="L1056"></a><tt class="py-lineno">1056</tt> <tt class="py-line"> </tt>
1412 <a name="L1057"></a><tt class="py-lineno">1057</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt> <tt class="py-keyword">in</tt> <tt class="py-name">purge_patterns</tt><tt class="py-op">:</tt> </tt>
1413 <a name="L1058"></a><tt class="py-lineno">1058</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">[</tt><tt class="py-name">pat</tt><tt class="py-op">]</tt> </tt>
1414 </div><a name="L1059"></a><tt class="py-lineno">1059</tt> <tt class="py-line"> </tt>
1415 <a name="NodeSetBase.__isub__"></a><div id="NodeSetBase.__isub__-def"><a name="L1060"></a><tt class="py-lineno">1060</tt> <a class="py-toggle" href="#" id="NodeSetBase.__isub__-toggle" onclick="return toggle('NodeSetBase.__isub__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__isub__">__isub__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1416 </div><div id="NodeSetBase.__isub__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__isub__-expanded"><a name="L1061"></a><tt class="py-lineno">1061</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1417 <a name="L1062"></a><tt class="py-lineno">1062</tt> <tt class="py-line"><tt class="py-docstring"> Implement the -= operator. So s -= t returns nodeset s after</tt> </tt>
1418 <a name="L1063"></a><tt class="py-lineno">1063</tt> <tt class="py-line"><tt class="py-docstring"> removing elements found in t. (Python version 2.5+ required)</tt> </tt>
1419 <a name="L1064"></a><tt class="py-lineno">1064</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1420 <a name="L1065"></a><tt class="py-lineno">1065</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1421 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-186', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1422 <a name="L1066"></a><tt class="py-lineno">1066</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.difference_update
1423 ClusterShell.NodeSet.NodeSetBase.difference_update
1424 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-187', 'difference_update', 'link-98');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1425 </div><a name="L1067"></a><tt class="py-lineno">1067</tt> <tt class="py-line"> </tt>
1426 <a name="NodeSetBase.remove"></a><div id="NodeSetBase.remove-def"><a name="L1068"></a><tt class="py-lineno">1068</tt> <a class="py-toggle" href="#" id="NodeSetBase.remove-toggle" onclick="return toggle('NodeSetBase.remove');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#remove">remove</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">elem</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1427 </div><div id="NodeSetBase.remove-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.remove-expanded"><a name="L1069"></a><tt class="py-lineno">1069</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1428 <a name="L1070"></a><tt class="py-lineno">1070</tt> <tt class="py-line"><tt class="py-docstring"> Remove element elem from the nodeset. Raise KeyError if elem</tt> </tt>
1429 <a name="L1071"></a><tt class="py-lineno">1071</tt> <tt class="py-line"><tt class="py-docstring"> is not contained in the nodeset.</tt> </tt>
1430 <a name="L1072"></a><tt class="py-lineno">1072</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1431 <a name="L1073"></a><tt class="py-lineno">1073</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.difference_update
1432 ClusterShell.NodeSet.NodeSetBase.difference_update
1433 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-188', 'difference_update', 'link-98');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
1434 </div><a name="L1074"></a><tt class="py-lineno">1074</tt> <tt class="py-line"> </tt>
1435 <a name="NodeSetBase.symmetric_difference"></a><div id="NodeSetBase.symmetric_difference-def"><a name="L1075"></a><tt class="py-lineno">1075</tt> <a class="py-toggle" href="#" id="NodeSetBase.symmetric_difference-toggle" onclick="return toggle('NodeSetBase.symmetric_difference');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference">symmetric_difference</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1436 </div><div id="NodeSetBase.symmetric_difference-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.symmetric_difference-expanded"><a name="L1076"></a><tt class="py-lineno">1076</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1437 <a name="L1077"></a><tt class="py-lineno">1077</tt> <tt class="py-line"><tt class="py-docstring"> s.symmetric_difference(t) returns the symmetric difference of</tt> </tt>
1438 <a name="L1078"></a><tt class="py-lineno">1078</tt> <tt class="py-line"><tt class="py-docstring"> two nodesets as a new NodeSet.</tt> </tt>
1439 <a name="L1079"></a><tt class="py-lineno">1079</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
1440 <a name="L1080"></a><tt class="py-lineno">1080</tt> <tt class="py-line"><tt class="py-docstring"> (ie. all nodes that are in exactly one of the nodesets.)</tt> </tt>
1441 <a name="L1081"></a><tt class="py-lineno">1081</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1442 <a name="L1082"></a><tt class="py-lineno">1082</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt> <tt class="py-op">=</tt> <tt id="link-189" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-189', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt class="py-name">deepcopy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
1443 <a name="L1083"></a><tt class="py-lineno">1083</tt> <tt class="py-line"> <tt class="py-name">self_copy</tt><tt class="py-op">.</tt><tt id="link-190" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.symmetric_difference_update
1444 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update
1445 ClusterShell.NodeSet.RangeSet.symmetric_difference_update" class="py-name" href="#" onclick="return doclink('link-190', 'symmetric_difference_update', 'link-116');">symmetric_difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1446 <a name="L1084"></a><tt class="py-lineno">1084</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self_copy</tt> </tt>
1447 </div><a name="L1085"></a><tt class="py-lineno">1085</tt> <tt class="py-line"> </tt>
1448 <a name="NodeSetBase.__xor__"></a><div id="NodeSetBase.__xor__-def"><a name="L1086"></a><tt class="py-lineno">1086</tt> <a class="py-toggle" href="#" id="NodeSetBase.__xor__-toggle" onclick="return toggle('NodeSetBase.__xor__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__xor__">__xor__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1449 </div><div id="NodeSetBase.__xor__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__xor__-expanded"><a name="L1087"></a><tt class="py-lineno">1087</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1450 <a name="L1088"></a><tt class="py-lineno">1088</tt> <tt class="py-line"><tt class="py-docstring"> Implement the ^ operator. So s ^ t returns a new NodeSet with</tt> </tt>
1451 <a name="L1089"></a><tt class="py-lineno">1089</tt> <tt class="py-line"><tt class="py-docstring"> nodes that are in exactly one of the nodesets.</tt> </tt>
1452 <a name="L1090"></a><tt class="py-lineno">1090</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1453 <a name="L1091"></a><tt class="py-lineno">1091</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-191" class="py-name"><a title="ClusterShell.NodeSet
1454 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-191', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1455 <a name="L1092"></a><tt class="py-lineno">1092</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">NotImplemented</tt> </tt>
1456 <a name="L1093"></a><tt class="py-lineno">1093</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-192" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase.symmetric_difference
1457 ClusterShell.NodeSet.RangeSet.symmetric_difference" class="py-name" href="#" onclick="return doclink('link-192', 'symmetric_difference', 'link-118');">symmetric_difference</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1458 </div><a name="L1094"></a><tt class="py-lineno">1094</tt> <tt class="py-line"> </tt>
1459 <a name="NodeSetBase.symmetric_difference_update"></a><div id="NodeSetBase.symmetric_difference_update-def"><a name="L1095"></a><tt class="py-lineno">1095</tt> <a class="py-toggle" href="#" id="NodeSetBase.symmetric_difference_update-toggle" onclick="return toggle('NodeSetBase.symmetric_difference_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference_update">symmetric_difference_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1460 </div><div id="NodeSetBase.symmetric_difference_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.symmetric_difference_update-expanded"><a name="L1096"></a><tt class="py-lineno">1096</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1461 <a name="L1097"></a><tt class="py-lineno">1097</tt> <tt class="py-line"><tt class="py-docstring"> s.symmetric_difference_update(t) returns nodeset s keeping all</tt> </tt>
1462 <a name="L1098"></a><tt class="py-lineno">1098</tt> <tt class="py-line"><tt class="py-docstring"> nodes that are in exactly one of the nodesets.</tt> </tt>
1463 <a name="L1099"></a><tt class="py-lineno">1099</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1464 <a name="L1100"></a><tt class="py-lineno">1100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1465 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-193', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1466 <a name="L1101"></a><tt class="py-lineno">1101</tt> <tt class="py-line"> <tt class="py-name">purge_patterns</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
1467 <a name="L1102"></a><tt class="py-lineno">1102</tt> <tt class="py-line"> </tt>
1468 <a name="L1103"></a><tt class="py-lineno">1103</tt> <tt class="py-line"> <tt class="py-comment"># iterate over our rangesets</tt> </tt>
1469 <a name="L1104"></a><tt class="py-lineno">1104</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1470 <a name="L1105"></a><tt class="py-lineno">1105</tt> <tt class="py-line"> <tt class="py-name">brangeset</tt> <tt class="py-op">=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
1471 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-194', 'get', 'link-138');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1472 <a name="L1106"></a><tt class="py-lineno">1106</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">brangeset</tt><tt class="py-op">:</tt> </tt>
1473 <a name="L1107"></a><tt class="py-lineno">1107</tt> <tt class="py-line"> <tt class="py-name">rangeset</tt><tt class="py-op">.</tt><tt id="link-195" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.symmetric_difference_update
1474 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update
1475 ClusterShell.NodeSet.RangeSet.symmetric_difference_update" class="py-name" href="#" onclick="return doclink('link-195', 'symmetric_difference_update', 'link-116');">symmetric_difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">brangeset</tt><tt class="py-op">)</tt> </tt>
1476 <a name="L1108"></a><tt class="py-lineno">1108</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1477 <a name="L1109"></a><tt class="py-lineno">1109</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1478 <a name="L1110"></a><tt class="py-lineno">1110</tt> <tt class="py-line"> <tt class="py-name">purge_patterns</tt><tt class="py-op">.</tt><tt id="link-196" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-196', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1479 <a name="L1111"></a><tt class="py-lineno">1111</tt> <tt class="py-line"> </tt>
1480 <a name="L1112"></a><tt class="py-lineno">1112</tt> <tt class="py-line"> <tt class="py-comment"># iterate over other's rangesets</tt> </tt>
1481 <a name="L1113"></a><tt class="py-lineno">1113</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">brangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1482 <a name="L1114"></a><tt class="py-lineno">1114</tt> <tt class="py-line"> <tt class="py-name">rangeset</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
1483 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-197', 'get', 'link-138');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1484 <a name="L1115"></a><tt class="py-lineno">1115</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1485 <a name="L1116"></a><tt class="py-lineno">1116</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name"><a title="ClusterShell.NodeSet.NodeGroupBase._add
1486 ClusterShell.NodeSet.NodeSetBase._add" class="py-name" href="#" onclick="return doclink('link-198', '_add', 'link-126');">_add</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">brangeset</tt><tt class="py-op">)</tt> </tt>
1487 <a name="L1117"></a><tt class="py-lineno">1117</tt> <tt class="py-line"> </tt>
1488 <a name="L1118"></a><tt class="py-lineno">1118</tt> <tt class="py-line"> <tt class="py-comment"># check for patterns cleanup</tt> </tt>
1489 <a name="L1119"></a><tt class="py-lineno">1119</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1490 <a name="L1120"></a><tt class="py-lineno">1120</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">rangeset</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1491 <a name="L1121"></a><tt class="py-lineno">1121</tt> <tt class="py-line"> <tt class="py-name">purge_patterns</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-199', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1492 <a name="L1122"></a><tt class="py-lineno">1122</tt> <tt class="py-line"> </tt>
1493 <a name="L1123"></a><tt class="py-lineno">1123</tt> <tt class="py-line"> <tt class="py-comment"># cleanup</tt> </tt>
1494 <a name="L1124"></a><tt class="py-lineno">1124</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pat</tt> <tt class="py-keyword">in</tt> <tt class="py-name">purge_patterns</tt><tt class="py-op">:</tt> </tt>
1495 <a name="L1125"></a><tt class="py-lineno">1125</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_patterns</tt><tt class="py-op">[</tt><tt class="py-name">pat</tt><tt class="py-op">]</tt> </tt>
1496 </div><a name="L1126"></a><tt class="py-lineno">1126</tt> <tt class="py-line"> </tt>
1497 <a name="NodeSetBase.__ixor__"></a><div id="NodeSetBase.__ixor__-def"><a name="L1127"></a><tt class="py-lineno">1127</tt> <a class="py-toggle" href="#" id="NodeSetBase.__ixor__-toggle" onclick="return toggle('NodeSetBase.__ixor__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__">__ixor__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1498 </div><div id="NodeSetBase.__ixor__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSetBase.__ixor__-expanded"><a name="L1128"></a><tt class="py-lineno">1128</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1499 <a name="L1129"></a><tt class="py-lineno">1129</tt> <tt class="py-line"><tt class="py-docstring"> Implement the ^= operator. So s ^= t returns nodeset s after</tt> </tt>
1500 <a name="L1130"></a><tt class="py-lineno">1130</tt> <tt class="py-line"><tt class="py-docstring"> keeping all nodes that are in exactly one of the nodesets.</tt> </tt>
1501 <a name="L1131"></a><tt class="py-lineno">1131</tt> <tt class="py-line"><tt class="py-docstring"> (Python version 2.5+ required)</tt> </tt>
1502 <a name="L1132"></a><tt class="py-lineno">1132</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1503 <a name="L1133"></a><tt class="py-lineno">1133</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase._binary_sanity_check
1504 ClusterShell.NodeSet.RangeSet._binary_sanity_check" class="py-name" href="#" onclick="return doclink('link-200', '_binary_sanity_check', 'link-45');">_binary_sanity_check</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1505 <a name="L1134"></a><tt class="py-lineno">1134</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-201" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.symmetric_difference_update
1506 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update
1507 ClusterShell.NodeSet.RangeSet.symmetric_difference_update" class="py-name" href="#" onclick="return doclink('link-201', 'symmetric_difference_update', 'link-116');">symmetric_difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
1508 </div></div><a name="L1135"></a><tt class="py-lineno">1135</tt> <tt class="py-line"> </tt>
1509 <a name="NodeGroupBase"></a><div id="NodeGroupBase-def"><a name="L1136"></a><tt class="py-lineno">1136</tt> <tt class="py-line"> </tt>
1510 <a name="L1137"></a><tt class="py-lineno">1137</tt> <a class="py-toggle" href="#" id="NodeGroupBase-toggle" onclick="return toggle('NodeGroupBase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeGroupBase-class.html">NodeGroupBase</a><tt class="py-op">(</tt><tt class="py-base-class">NodeSetBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1511 </div><div id="NodeGroupBase-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NodeGroupBase-expanded"><a name="L1138"></a><tt class="py-lineno">1138</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1512 <a name="L1139"></a><tt class="py-lineno">1139</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1513 <a name="NodeGroupBase._add"></a><div id="NodeGroupBase._add-def"><a name="L1140"></a><tt class="py-lineno">1140</tt> <a class="py-toggle" href="#" id="NodeGroupBase._add-toggle" onclick="return toggle('NodeGroupBase._add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeGroupBase-class.html#_add">_add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pat</tt><tt class="py-op">,</tt> <tt class="py-param">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1514 </div><div id="NodeGroupBase._add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeGroupBase._add-expanded"><a name="L1141"></a><tt class="py-lineno">1141</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1515 <a name="L1142"></a><tt class="py-lineno">1142</tt> <tt class="py-line"><tt class="py-docstring"> Add groups from a (pat, rangeset) tuple. `pat' may be an existing</tt> </tt>
1516 <a name="L1143"></a><tt class="py-lineno">1143</tt> <tt class="py-line"><tt class="py-docstring"> pattern and `rangeset' may be None.</tt> </tt>
1517 <a name="L1144"></a><tt class="py-lineno">1144</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1518 <a name="L1145"></a><tt class="py-lineno">1145</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pat</tt> <tt class="py-keyword">and</tt> <tt class="py-name">pat</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-string">'@'</tt><tt class="py-op">:</tt> </tt>
1519 <a name="L1146"></a><tt class="py-lineno">1146</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"NodeGroup name must begin with character '@'"</tt><tt class="py-op">)</tt> </tt>
1520 <a name="L1147"></a><tt class="py-lineno">1147</tt> <tt class="py-line"> <tt id="link-202" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-202', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">.</tt><tt id="link-203" class="py-name"><a title="ClusterShell.NodeSet.NodeGroupBase._add
1521 ClusterShell.NodeSet.NodeSetBase._add" class="py-name" href="#" onclick="return doclink('link-203', '_add', 'link-126');">_add</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt><tt class="py-op">)</tt> </tt>
1522 </div></div><a name="L1148"></a><tt class="py-lineno">1148</tt> <tt class="py-line"> </tt>
1523 <a name="ParsingEngine"></a><div id="ParsingEngine-def"><a name="L1149"></a><tt class="py-lineno">1149</tt> <tt class="py-line"> </tt>
1524 <a name="L1150"></a><tt class="py-lineno">1150</tt> <a class="py-toggle" href="#" id="ParsingEngine-toggle" onclick="return toggle('ParsingEngine');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1525 </div><div id="ParsingEngine-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ParsingEngine-expanded"><a name="L1151"></a><tt class="py-lineno">1151</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1526 <a name="L1152"></a><tt class="py-lineno">1152</tt> <tt class="py-line"><tt class="py-docstring"> Class that is able to transform a source into a NodeSetBase.</tt> </tt>
1527 <a name="L1153"></a><tt class="py-lineno">1153</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1528 <a name="L1154"></a><tt class="py-lineno">1154</tt> <tt class="py-line"> <tt id="link-204" class="py-name" targets="Variable ClusterShell.NodeSet.ParsingEngine.OP_CODES=ClusterShell.NodeSet.ParsingEngine-class.html#OP_CODES"><a title="ClusterShell.NodeSet.ParsingEngine.OP_CODES" class="py-name" href="#" onclick="return doclink('link-204', 'OP_CODES', 'link-204');">OP_CODES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <tt class="py-string">'update'</tt><tt class="py-op">:</tt> <tt class="py-string">','</tt><tt class="py-op">,</tt> </tt>
1529 <a name="L1155"></a><tt class="py-lineno">1155</tt> <tt class="py-line"> <tt class="py-string">'difference_update'</tt><tt class="py-op">:</tt> <tt class="py-string">'!'</tt><tt class="py-op">,</tt> </tt>
1530 <a name="L1156"></a><tt class="py-lineno">1156</tt> <tt class="py-line"> <tt class="py-string">'intersection_update'</tt><tt class="py-op">:</tt> <tt class="py-string">'&amp;'</tt><tt class="py-op">,</tt> </tt>
1531 <a name="L1157"></a><tt class="py-lineno">1157</tt> <tt class="py-line"> <tt class="py-string">'symmetric_difference_update'</tt><tt class="py-op">:</tt> <tt class="py-string">'^'</tt> <tt class="py-op">}</tt> </tt>
1532 <a name="L1158"></a><tt class="py-lineno">1158</tt> <tt class="py-line"> </tt>
1533 <a name="ParsingEngine.__init__"></a><div id="ParsingEngine.__init__-def"><a name="L1159"></a><tt class="py-lineno">1159</tt> <a class="py-toggle" href="#" id="ParsingEngine.__init__-toggle" onclick="return toggle('ParsingEngine.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.ParsingEngine-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">group_resolver</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1534 </div><div id="ParsingEngine.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ParsingEngine.__init__-expanded"><a name="L1160"></a><tt class="py-lineno">1160</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1535 <a name="L1161"></a><tt class="py-lineno">1161</tt> <tt class="py-line"><tt class="py-docstring"> Initialize Parsing Engine.</tt> </tt>
1536 <a name="L1162"></a><tt class="py-lineno">1162</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1537 <a name="L1163"></a><tt class="py-lineno">1163</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">group_resolver</tt> <tt class="py-op">=</tt> <tt class="py-name">group_resolver</tt> </tt>
1538 </div><a name="L1164"></a><tt class="py-lineno">1164</tt> <tt class="py-line"> </tt>
1539 <a name="ParsingEngine.parse"></a><div id="ParsingEngine.parse-def"><a name="L1165"></a><tt class="py-lineno">1165</tt> <a class="py-toggle" href="#" id="ParsingEngine.parse-toggle" onclick="return toggle('ParsingEngine.parse');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.ParsingEngine-class.html#parse">parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nsobj</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1540 </div><div id="ParsingEngine.parse-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ParsingEngine.parse-expanded"><a name="L1166"></a><tt class="py-lineno">1166</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1541 <a name="L1167"></a><tt class="py-lineno">1167</tt> <tt class="py-line"><tt class="py-docstring"> Parse provided object if possible and return a NodeSetBase object.</tt> </tt>
1542 <a name="L1168"></a><tt class="py-lineno">1168</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1543 <a name="L1169"></a><tt class="py-lineno">1169</tt> <tt class="py-line"> <tt class="py-comment"># passing None is supported</tt> </tt>
1544 <a name="L1170"></a><tt class="py-lineno">1170</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">nsobj</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
1545 <a name="L1171"></a><tt class="py-lineno">1171</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-205" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-205', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1546 <a name="L1172"></a><tt class="py-lineno">1172</tt> <tt class="py-line"> </tt>
1547 <a name="L1173"></a><tt class="py-lineno">1173</tt> <tt class="py-line"> <tt class="py-comment"># is nsobj a NodeSetBase instance?</tt> </tt>
1548 <a name="L1174"></a><tt class="py-lineno">1174</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">nsobj</tt><tt class="py-op">,</tt> <tt id="link-206" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-206', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1549 <a name="L1175"></a><tt class="py-lineno">1175</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">nsobj</tt> </tt>
1550 <a name="L1176"></a><tt class="py-lineno">1176</tt> <tt class="py-line"> </tt>
1551 <a name="L1177"></a><tt class="py-lineno">1177</tt> <tt class="py-line"> <tt class="py-comment"># or is nsobj a string?</tt> </tt>
1552 <a name="L1178"></a><tt class="py-lineno">1178</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">nsobj</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">str</tt><tt class="py-op">:</tt> </tt>
1553 <a name="L1179"></a><tt class="py-lineno">1179</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1554 <a name="L1180"></a><tt class="py-lineno">1180</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-207" class="py-name" targets="Method ClusterShell.NodeSet.ParsingEngine.parse_string()=ClusterShell.NodeSet.ParsingEngine-class.html#parse_string"><a title="ClusterShell.NodeSet.ParsingEngine.parse_string" class="py-name" href="#" onclick="return doclink('link-207', 'parse_string', 'link-207');">parse_string</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">nsobj</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
1555 <a name="L1181"></a><tt class="py-lineno">1181</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-208" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-208', 'NodeUtils', 'link-2');">NodeUtils</a></tt><tt class="py-op">.</tt><tt id="link-209" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceQueryFailed=ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html"><a title="ClusterShell.NodeUtils.GroupSourceQueryFailed" class="py-name" href="#" onclick="return doclink('link-209', 'GroupSourceQueryFailed', 'link-209');">GroupSourceQueryFailed</a></tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt><tt class="py-op">:</tt> </tt>
1556 <a name="L1182"></a><tt class="py-lineno">1182</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-210" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-210', 'NodeSetParseError', 'link-24');">NodeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">nsobj</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">exc</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1557 <a name="L1183"></a><tt class="py-lineno">1183</tt> <tt class="py-line"> </tt>
1558 <a name="L1184"></a><tt class="py-lineno">1184</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">"Unsupported NodeSet input %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">nsobj</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1559 </div><a name="L1185"></a><tt class="py-lineno">1185</tt> <tt class="py-line"> </tt>
1560 <a name="ParsingEngine.parse_string"></a><div id="ParsingEngine.parse_string-def"><a name="L1186"></a><tt class="py-lineno">1186</tt> <a class="py-toggle" href="#" id="ParsingEngine.parse_string-toggle" onclick="return toggle('ParsingEngine.parse_string');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_string">parse_string</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nsstr</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1561 </div><div id="ParsingEngine.parse_string-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ParsingEngine.parse_string-expanded"><a name="L1187"></a><tt class="py-lineno">1187</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1562 <a name="L1188"></a><tt class="py-lineno">1188</tt> <tt class="py-line"><tt class="py-docstring"> Parse provided string and return a NodeSetBase object.</tt> </tt>
1563 <a name="L1189"></a><tt class="py-lineno">1189</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1564 <a name="L1190"></a><tt class="py-lineno">1190</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt id="link-211" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-211', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1565 <a name="L1191"></a><tt class="py-lineno">1191</tt> <tt class="py-line"> </tt>
1566 <a name="L1192"></a><tt class="py-lineno">1192</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">opc</tt><tt class="py-op">,</tt> <tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name" targets="Method ClusterShell.NodeSet.ParsingEngine._scan_string()=ClusterShell.NodeSet.ParsingEngine-class.html#_scan_string"><a title="ClusterShell.NodeSet.ParsingEngine._scan_string" class="py-name" href="#" onclick="return doclink('link-212', '_scan_string', 'link-212');">_scan_string</a></tt><tt class="py-op">(</tt><tt class="py-name">nsstr</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1567 <a name="L1193"></a><tt class="py-lineno">1193</tt> <tt class="py-line"> <tt class="py-comment"># Parser main debugging:</tt> </tt>
1568 <a name="L1194"></a><tt class="py-lineno">1194</tt> <tt class="py-line"> <tt class="py-comment">#print "OPC %s PAT %s RANGESET %s" % (opc, pat, rangeset)</tt> </tt>
1569 <a name="L1195"></a><tt class="py-lineno">1195</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">group_resolver</tt> <tt class="py-keyword">and</tt> <tt class="py-name">pat</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-string">'@'</tt><tt class="py-op">:</tt> </tt>
1570 <a name="L1196"></a><tt class="py-lineno">1196</tt> <tt class="py-line"> <tt class="py-name">ns_group</tt> <tt class="py-op">=</tt> <tt id="link-213" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-213', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1571 <a name="L1197"></a><tt class="py-lineno">1197</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">nodegroup</tt> <tt class="py-keyword">in</tt> <tt id="link-214" class="py-name" targets="Class ClusterShell.NodeSet.NodeGroupBase=ClusterShell.NodeSet.NodeGroupBase-class.html"><a title="ClusterShell.NodeSet.NodeGroupBase" class="py-name" href="#" onclick="return doclink('link-214', 'NodeGroupBase', 'link-214');">NodeGroupBase</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1572 <a name="L1198"></a><tt class="py-lineno">1198</tt> <tt class="py-line"> <tt class="py-comment"># parse/expand nodes group</tt> </tt>
1573 <a name="L1199"></a><tt class="py-lineno">1199</tt> <tt class="py-line"> <tt class="py-name">ns_string_ext</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name" targets="Method ClusterShell.NodeSet.ParsingEngine.parse_group_string()=ClusterShell.NodeSet.ParsingEngine-class.html#parse_group_string"><a title="ClusterShell.NodeSet.ParsingEngine.parse_group_string" class="py-name" href="#" onclick="return doclink('link-215', 'parse_group_string', 'link-215');">parse_group_string</a></tt><tt class="py-op">(</tt><tt class="py-name">nodegroup</tt><tt class="py-op">)</tt> </tt>
1574 <a name="L1200"></a><tt class="py-lineno">1200</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ns_string_ext</tt><tt class="py-op">:</tt> </tt>
1575 <a name="L1201"></a><tt class="py-lineno">1201</tt> <tt class="py-line"> <tt class="py-comment"># convert result and apply operation</tt> </tt>
1576 <a name="L1202"></a><tt class="py-lineno">1202</tt> <tt class="py-line"> <tt class="py-name">ns_group</tt><tt class="py-op">.</tt><tt id="link-216" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1577 ClusterShell.NodeSet.NodeSetBase.update
1578 ClusterShell.NodeSet.RangeSet.update
1579 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-216', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-217" class="py-name" targets="Method ClusterShell.NodeSet.ParsingEngine.parse()=ClusterShell.NodeSet.ParsingEngine-class.html#parse"><a title="ClusterShell.NodeSet.ParsingEngine.parse" class="py-name" href="#" onclick="return doclink('link-217', 'parse', 'link-217');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">ns_string_ext</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1580 <a name="L1203"></a><tt class="py-lineno">1203</tt> <tt class="py-line"> <tt class="py-comment"># perform operation</tt> </tt>
1581 <a name="L1204"></a><tt class="py-lineno">1204</tt> <tt class="py-line"> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">opc</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">ns_group</tt><tt class="py-op">)</tt> </tt>
1582 <a name="L1205"></a><tt class="py-lineno">1205</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1583 <a name="L1206"></a><tt class="py-lineno">1206</tt> <tt class="py-line"> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">opc</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt id="link-218" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-218', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-name">rangeset</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1584 <a name="L1207"></a><tt class="py-lineno">1207</tt> <tt class="py-line"> </tt>
1585 <a name="L1208"></a><tt class="py-lineno">1208</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ns</tt> </tt>
1586 </div><a name="L1209"></a><tt class="py-lineno">1209</tt> <tt class="py-line"> </tt>
1587 <a name="ParsingEngine.parse_group"></a><div id="ParsingEngine.parse_group-def"><a name="L1210"></a><tt class="py-lineno">1210</tt> <a class="py-toggle" href="#" id="ParsingEngine.parse_group-toggle" onclick="return toggle('ParsingEngine.parse_group');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_group">parse_group</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">group</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1588 </div><div id="ParsingEngine.parse_group-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ParsingEngine.parse_group-expanded"><a name="L1211"></a><tt class="py-lineno">1211</tt> <tt class="py-line"> <tt class="py-docstring">"""Parse provided single group name (without @ prefix)."""</tt> </tt>
1589 <a name="L1212"></a><tt class="py-lineno">1212</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">group_resolver</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> </tt>
1590 <a name="L1213"></a><tt class="py-lineno">1213</tt> <tt class="py-line"> <tt class="py-name">nodestr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">group_resolver</tt><tt class="py-op">.</tt><tt id="link-219" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.group_nodes()=ClusterShell.NodeUtils.GroupResolver-class.html#group_nodes"><a title="ClusterShell.NodeUtils.GroupResolver.group_nodes" class="py-name" href="#" onclick="return doclink('link-219', 'group_nodes', 'link-219');">group_nodes</a></tt><tt class="py-op">(</tt><tt class="py-name">group</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
1591 <a name="L1214"></a><tt class="py-lineno">1214</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-220" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.parse" class="py-name" href="#" onclick="return doclink('link-220', 'parse', 'link-217');">parse</a></tt><tt class="py-op">(</tt><tt class="py-string">","</tt><tt class="py-op">.</tt><tt id="link-221" class="py-name" targets="Method ClusterShell.Task.Task.join()=ClusterShell.Task.Task-class.html#join"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-221', 'join', 'link-221');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">nodestr</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
1592 </div><a name="L1215"></a><tt class="py-lineno">1215</tt> <tt class="py-line"> </tt>
1593 <a name="ParsingEngine.parse_group_string"></a><div id="ParsingEngine.parse_group_string-def"><a name="L1216"></a><tt class="py-lineno">1216</tt> <a class="py-toggle" href="#" id="ParsingEngine.parse_group_string-toggle" onclick="return toggle('ParsingEngine.parse_group_string');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_group_string">parse_group_string</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodegroup</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1594 </div><div id="ParsingEngine.parse_group_string-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ParsingEngine.parse_group_string-expanded"><a name="L1217"></a><tt class="py-lineno">1217</tt> <tt class="py-line"> <tt class="py-docstring">"""Parse provided group string and return a string."""</tt> </tt>
1595 <a name="L1218"></a><tt class="py-lineno">1218</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">nodegroup</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-string">'@'</tt> </tt>
1596 <a name="L1219"></a><tt class="py-lineno">1219</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">group_resolver</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> </tt>
1597 <a name="L1220"></a><tt class="py-lineno">1220</tt> <tt class="py-line"> <tt class="py-name">grpstr</tt> <tt class="py-op">=</tt> <tt class="py-name">nodegroup</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
1598 <a name="L1221"></a><tt class="py-lineno">1221</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">grpstr</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1599 <a name="L1222"></a><tt class="py-lineno">1222</tt> <tt class="py-line"> <tt class="py-comment"># default namespace</tt> </tt>
1600 <a name="L1223"></a><tt class="py-lineno">1223</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">","</tt><tt class="py-op">.</tt><tt id="link-222" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-222', 'join', 'link-221');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">group_resolver</tt><tt class="py-op">.</tt><tt id="link-223" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver.group_nodes" class="py-name" href="#" onclick="return doclink('link-223', 'group_nodes', 'link-219');">group_nodes</a></tt><tt class="py-op">(</tt><tt class="py-name">grpstr</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1601 <a name="L1224"></a><tt class="py-lineno">1224</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1602 <a name="L1225"></a><tt class="py-lineno">1225</tt> <tt class="py-line"> <tt class="py-comment"># specified namespace</tt> </tt>
1603 <a name="L1226"></a><tt class="py-lineno">1226</tt> <tt class="py-line"> <tt class="py-name">namespace</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt> <tt class="py-op">=</tt> <tt class="py-name">grpstr</tt><tt class="py-op">.</tt><tt id="link-224" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.split
1604 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-224', 'split', 'link-26');">split</a></tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
1605 <a name="L1227"></a><tt class="py-lineno">1227</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">","</tt><tt class="py-op">.</tt><tt id="link-225" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-225', 'join', 'link-221');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">group_resolver</tt><tt class="py-op">.</tt><tt id="link-226" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver.group_nodes" class="py-name" href="#" onclick="return doclink('link-226', 'group_nodes', 'link-219');">group_nodes</a></tt><tt class="py-op">(</tt><tt class="py-name">group</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1606 </div><a name="L1228"></a><tt class="py-lineno">1228</tt> <tt class="py-line"> </tt>
1607 <a name="ParsingEngine._next_op"></a><div id="ParsingEngine._next_op-def"><a name="L1229"></a><tt class="py-lineno">1229</tt> <a class="py-toggle" href="#" id="ParsingEngine._next_op-toggle" onclick="return toggle('ParsingEngine._next_op');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.ParsingEngine-class.html#_next_op">_next_op</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pat</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1608 </div><div id="ParsingEngine._next_op-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ParsingEngine._next_op-expanded"><a name="L1230"></a><tt class="py-lineno">1230</tt> <tt class="py-line"> <tt class="py-docstring">"""Opcode parsing subroutine."""</tt> </tt>
1609 <a name="L1231"></a><tt class="py-lineno">1231</tt> <tt class="py-line"> <tt class="py-name">op_idx</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
1610 <a name="L1232"></a><tt class="py-lineno">1232</tt> <tt class="py-line"> <tt class="py-name">next_op_code</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
1611 <a name="L1233"></a><tt class="py-lineno">1233</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">opc</tt><tt class="py-op">,</tt> <tt class="py-name">idx</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">pat</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> \ </tt>
1612 <a name="L1234"></a><tt class="py-lineno">1234</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt id="link-227" class="py-name" targets="Class ClusterShell.NodeSet.ParsingEngine=ClusterShell.NodeSet.ParsingEngine-class.html"><a title="ClusterShell.NodeSet.ParsingEngine" class="py-name" href="#" onclick="return doclink('link-227', 'ParsingEngine', 'link-227');">ParsingEngine</a></tt><tt class="py-op">.</tt><tt id="link-228" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.OP_CODES" class="py-name" href="#" onclick="return doclink('link-228', 'OP_CODES', 'link-204');">OP_CODES</a></tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
1613 <a name="L1235"></a><tt class="py-lineno">1235</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">idx</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">op_idx</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">or</tt> <tt class="py-name">idx</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">op_idx</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1614 <a name="L1236"></a><tt class="py-lineno">1236</tt> <tt class="py-line"> <tt class="py-name">next_op_code</tt> <tt class="py-op">=</tt> <tt class="py-name">opc</tt> </tt>
1615 <a name="L1237"></a><tt class="py-lineno">1237</tt> <tt class="py-line"> <tt class="py-name">op_idx</tt> <tt class="py-op">=</tt> <tt class="py-name">idx</tt> </tt>
1616 <a name="L1238"></a><tt class="py-lineno">1238</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">op_idx</tt><tt class="py-op">,</tt> <tt class="py-name">next_op_code</tt> </tt>
1617 </div><a name="L1239"></a><tt class="py-lineno">1239</tt> <tt class="py-line"> </tt>
1618 <a name="ParsingEngine._scan_string"></a><div id="ParsingEngine._scan_string-def"><a name="L1240"></a><tt class="py-lineno">1240</tt> <a class="py-toggle" href="#" id="ParsingEngine._scan_string-toggle" onclick="return toggle('ParsingEngine._scan_string');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.ParsingEngine-class.html#_scan_string">_scan_string</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nsstr</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1619 </div><div id="ParsingEngine._scan_string-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ParsingEngine._scan_string-expanded"><a name="L1241"></a><tt class="py-lineno">1241</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1620 <a name="L1242"></a><tt class="py-lineno">1242</tt> <tt class="py-line"><tt class="py-docstring"> Parsing engine's string scanner method.</tt> </tt>
1621 <a name="L1243"></a><tt class="py-lineno">1243</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1622 <a name="L1244"></a><tt class="py-lineno">1244</tt> <tt class="py-line"> <tt class="py-name">single_node_re</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
1623 <a name="L1245"></a><tt class="py-lineno">1245</tt> <tt class="py-line"> <tt class="py-name">pat</tt> <tt class="py-op">=</tt> <tt class="py-name">nsstr</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1624 <a name="L1246"></a><tt class="py-lineno">1246</tt> <tt class="py-line"> <tt class="py-comment"># avoid misformatting</tt> </tt>
1625 <a name="L1247"></a><tt class="py-lineno">1247</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pat</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'%'</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1626 <a name="L1248"></a><tt class="py-lineno">1248</tt> <tt class="py-line"> <tt class="py-name">pat</tt> <tt class="py-op">=</tt> <tt class="py-name">pat</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'%'</tt><tt class="py-op">,</tt> <tt class="py-string">'%%'</tt><tt class="py-op">)</tt> </tt>
1627 <a name="L1249"></a><tt class="py-lineno">1249</tt> <tt class="py-line"> <tt class="py-name">next_op_code</tt> <tt class="py-op">=</tt> <tt class="py-string">'update'</tt> </tt>
1628 <a name="L1250"></a><tt class="py-lineno">1250</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">pat</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>
1629 <a name="L1251"></a><tt class="py-lineno">1251</tt> <tt class="py-line"> <tt class="py-comment"># Ignore whitespace(s) for convenience</tt> </tt>
1630 <a name="L1252"></a><tt class="py-lineno">1252</tt> <tt class="py-line"> <tt class="py-name">pat</tt> <tt class="py-op">=</tt> <tt class="py-name">pat</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1631 <a name="L1253"></a><tt class="py-lineno">1253</tt> <tt class="py-line"> </tt>
1632 <a name="L1254"></a><tt class="py-lineno">1254</tt> <tt class="py-line"> <tt class="py-name">op_code</tt><tt class="py-op">,</tt> <tt class="py-name">next_op_code</tt> <tt class="py-op">=</tt> <tt class="py-name">next_op_code</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt> </tt>
1633 <a name="L1255"></a><tt class="py-lineno">1255</tt> <tt class="py-line"> <tt class="py-name">op_idx</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
1634 <a name="L1256"></a><tt class="py-lineno">1256</tt> <tt class="py-line"> <tt class="py-name">op_idx</tt><tt class="py-op">,</tt> <tt class="py-name">next_op_code</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-229" class="py-name" targets="Method ClusterShell.NodeSet.ParsingEngine._next_op()=ClusterShell.NodeSet.ParsingEngine-class.html#_next_op"><a title="ClusterShell.NodeSet.ParsingEngine._next_op" class="py-name" href="#" onclick="return doclink('link-229', '_next_op', 'link-229');">_next_op</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt> </tt>
1635 <a name="L1257"></a><tt class="py-lineno">1257</tt> <tt class="py-line"> <tt class="py-name">bracket_idx</tt> <tt class="py-op">=</tt> <tt class="py-name">pat</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'['</tt><tt class="py-op">)</tt> </tt>
1636 <a name="L1258"></a><tt class="py-lineno">1258</tt> <tt class="py-line"> </tt>
1637 <a name="L1259"></a><tt class="py-lineno">1259</tt> <tt class="py-line"> <tt class="py-comment"># Check if the operator is after the bracket, or if there</tt> </tt>
1638 <a name="L1260"></a><tt class="py-lineno">1260</tt> <tt class="py-line"> <tt class="py-comment"># is no operator at all but some brackets.</tt> </tt>
1639 <a name="L1261"></a><tt class="py-lineno">1261</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">bracket_idx</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">op_idx</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">bracket_idx</tt> <tt class="py-keyword">or</tt> <tt class="py-name">op_idx</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1640 <a name="L1262"></a><tt class="py-lineno">1262</tt> <tt class="py-line"> <tt class="py-comment"># In this case, we have a pattern of potentially several</tt> </tt>
1641 <a name="L1263"></a><tt class="py-lineno">1263</tt> <tt class="py-line"> <tt class="py-comment"># nodes.</tt> </tt>
1642 <a name="L1264"></a><tt class="py-lineno">1264</tt> <tt class="py-line"> <tt class="py-comment"># Fill prefix, range and suffix from pattern</tt> </tt>
1643 <a name="L1265"></a><tt class="py-lineno">1265</tt> <tt class="py-line"> <tt class="py-comment"># eg. "forbin[3,4-10]-ilo" -&gt; "forbin", "3,4-10", "-ilo"</tt> </tt>
1644 <a name="L1266"></a><tt class="py-lineno">1266</tt> <tt class="py-line"> <tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">sfx</tt> <tt class="py-op">=</tt> <tt class="py-name">pat</tt><tt class="py-op">.</tt><tt id="link-230" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.split
1645 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-230', 'split', 'link-26');">split</a></tt><tt class="py-op">(</tt><tt class="py-string">'['</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
1646 <a name="L1267"></a><tt class="py-lineno">1267</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1647 <a name="L1268"></a><tt class="py-lineno">1268</tt> <tt class="py-line"> <tt class="py-name">rg</tt><tt class="py-op">,</tt> <tt class="py-name">sfx</tt> <tt class="py-op">=</tt> <tt class="py-name">sfx</tt><tt class="py-op">.</tt><tt id="link-231" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.split
1648 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-231', 'split', 'link-26');">split</a></tt><tt class="py-op">(</tt><tt class="py-string">']'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
1649 <a name="L1269"></a><tt class="py-lineno">1269</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
1650 <a name="L1270"></a><tt class="py-lineno">1270</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-232" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-232', 'NodeSetParseError', 'link-24');">NodeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-string">"missing bracket"</tt><tt class="py-op">)</tt> </tt>
1651 <a name="L1271"></a><tt class="py-lineno">1271</tt> <tt class="py-line"> </tt>
1652 <a name="L1272"></a><tt class="py-lineno">1272</tt> <tt class="py-line"> <tt class="py-comment"># Check if we have a next op-separated node or pattern</tt> </tt>
1653 <a name="L1273"></a><tt class="py-lineno">1273</tt> <tt class="py-line"> <tt class="py-name">op_idx</tt><tt class="py-op">,</tt> <tt class="py-name">next_op_code</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-233" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine._next_op" class="py-name" href="#" onclick="return doclink('link-233', '_next_op', 'link-229');">_next_op</a></tt><tt class="py-op">(</tt><tt class="py-name">sfx</tt><tt class="py-op">)</tt> </tt>
1654 <a name="L1274"></a><tt class="py-lineno">1274</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">op_idx</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1655 <a name="L1275"></a><tt class="py-lineno">1275</tt> <tt class="py-line"> <tt class="py-name">pat</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
1656 <a name="L1276"></a><tt class="py-lineno">1276</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1657 <a name="L1277"></a><tt class="py-lineno">1277</tt> <tt class="py-line"> <tt class="py-name">sfx</tt><tt class="py-op">,</tt> <tt class="py-name">pat</tt> <tt class="py-op">=</tt> <tt class="py-name">sfx</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.split
1658 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-234', 'split', 'link-26');">split</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-235" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.OP_CODES" class="py-name" href="#" onclick="return doclink('link-235', 'OP_CODES', 'link-204');">OP_CODES</a></tt><tt class="py-op">[</tt><tt class="py-name">next_op_code</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
1659 <a name="L1278"></a><tt class="py-lineno">1278</tt> <tt class="py-line"> </tt>
1660 <a name="L1279"></a><tt class="py-lineno">1279</tt> <tt class="py-line"> <tt class="py-comment"># Ignore whitespace(s)</tt> </tt>
1661 <a name="L1280"></a><tt class="py-lineno">1280</tt> <tt class="py-line"> <tt class="py-name">sfx</tt> <tt class="py-op">=</tt> <tt class="py-name">sfx</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1662 <a name="L1281"></a><tt class="py-lineno">1281</tt> <tt class="py-line"> </tt>
1663 <a name="L1282"></a><tt class="py-lineno">1282</tt> <tt class="py-line"> <tt class="py-comment"># pfx + sfx cannot be empty</tt> </tt>
1664 <a name="L1283"></a><tt class="py-lineno">1283</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">pfx</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">sfx</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1665 <a name="L1284"></a><tt class="py-lineno">1284</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-236" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-236', 'NodeSetParseError', 'link-24');">NodeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-string">"empty node name"</tt><tt class="py-op">)</tt> </tt>
1666 <a name="L1285"></a><tt class="py-lineno">1285</tt> <tt class="py-line"> </tt>
1667 <a name="L1286"></a><tt class="py-lineno">1286</tt> <tt class="py-line"> <tt class="py-comment"># Process comma-separated ranges</tt> </tt>
1668 <a name="L1287"></a><tt class="py-lineno">1287</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1669 <a name="L1288"></a><tt class="py-lineno">1288</tt> <tt class="py-line"> <tt class="py-name">rset</tt> <tt class="py-op">=</tt> <tt id="link-237" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-237', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">rg</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
1670 <a name="L1289"></a><tt class="py-lineno">1289</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-238" class="py-name"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-238', 'RangeSetParseError', 'link-16');">RangeSetParseError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
1671 <a name="L1290"></a><tt class="py-lineno">1290</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-239" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetParseRangeError=ClusterShell.NodeSet.NodeSetParseRangeError-class.html"><a title="ClusterShell.NodeSet.NodeSetParseRangeError" class="py-name" href="#" onclick="return doclink('link-239', 'NodeSetParseRangeError', 'link-239');">NodeSetParseRangeError</a></tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
1672 <a name="L1291"></a><tt class="py-lineno">1291</tt> <tt class="py-line"> </tt>
1673 <a name="L1292"></a><tt class="py-lineno">1292</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">op_code</tt><tt class="py-op">,</tt> <tt class="py-string">"%s%%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">sfx</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">rset</tt> </tt>
1674 <a name="L1293"></a><tt class="py-lineno">1293</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1675 <a name="L1294"></a><tt class="py-lineno">1294</tt> <tt class="py-line"> <tt class="py-comment"># In this case, either there is no comma and no bracket,</tt> </tt>
1676 <a name="L1295"></a><tt class="py-lineno">1295</tt> <tt class="py-line"> <tt class="py-comment"># or the bracket is after the comma, then just return</tt> </tt>
1677 <a name="L1296"></a><tt class="py-lineno">1296</tt> <tt class="py-line"> <tt class="py-comment"># the node.</tt> </tt>
1678 <a name="L1297"></a><tt class="py-lineno">1297</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">op_idx</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1679 <a name="L1298"></a><tt class="py-lineno">1298</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-name">pat</tt> </tt>
1680 <a name="L1299"></a><tt class="py-lineno">1299</tt> <tt class="py-line"> <tt class="py-name">pat</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> <tt class="py-comment"># break next time</tt> </tt>
1681 <a name="L1300"></a><tt class="py-lineno">1300</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1682 <a name="L1301"></a><tt class="py-lineno">1301</tt> <tt class="py-line"> <tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">pat</tt> <tt class="py-op">=</tt> <tt class="py-name">pat</tt><tt class="py-op">.</tt><tt id="link-240" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.split
1683 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-240', 'split', 'link-26');">split</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.OP_CODES" class="py-name" href="#" onclick="return doclink('link-241', 'OP_CODES', 'link-204');">OP_CODES</a></tt><tt class="py-op">[</tt><tt class="py-name">next_op_code</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
1684 <a name="L1302"></a><tt class="py-lineno">1302</tt> <tt class="py-line"> <tt class="py-comment"># Ignore whitespace(s)</tt> </tt>
1685 <a name="L1303"></a><tt class="py-lineno">1303</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1686 <a name="L1304"></a><tt class="py-lineno">1304</tt> <tt class="py-line"> </tt>
1687 <a name="L1305"></a><tt class="py-lineno">1305</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1688 <a name="L1306"></a><tt class="py-lineno">1306</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-242" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-242', 'NodeSetParseError', 'link-24');">NodeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-string">"empty node name"</tt><tt class="py-op">)</tt> </tt>
1689 <a name="L1307"></a><tt class="py-lineno">1307</tt> <tt class="py-line"> </tt>
1690 <a name="L1308"></a><tt class="py-lineno">1308</tt> <tt class="py-line"> <tt class="py-comment"># single node parsing</tt> </tt>
1691 <a name="L1309"></a><tt class="py-lineno">1309</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">single_node_re</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
1692 <a name="L1310"></a><tt class="py-lineno">1310</tt> <tt class="py-line"> <tt class="py-name">single_node_re</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">"(\D*)(\d*)(.*)"</tt><tt class="py-op">)</tt> </tt>
1693 <a name="L1311"></a><tt class="py-lineno">1311</tt> <tt class="py-line"> </tt>
1694 <a name="L1312"></a><tt class="py-lineno">1312</tt> <tt class="py-line"> <tt class="py-name">mo</tt> <tt class="py-op">=</tt> <tt class="py-name">single_node_re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
1695 <a name="L1313"></a><tt class="py-lineno">1313</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">mo</tt><tt class="py-op">:</tt> </tt>
1696 <a name="L1314"></a><tt class="py-lineno">1314</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-243" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-243', 'NodeSetParseError', 'link-24');">NodeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-string">"parse error"</tt><tt class="py-op">)</tt> </tt>
1697 <a name="L1315"></a><tt class="py-lineno">1315</tt> <tt class="py-line"> <tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">idx</tt><tt class="py-op">,</tt> <tt class="py-name">sfx</tt> <tt class="py-op">=</tt> <tt class="py-name">mo</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1698 <a name="L1316"></a><tt class="py-lineno">1316</tt> <tt class="py-line"> <tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">sfx</tt> <tt class="py-op">=</tt> <tt class="py-name">pfx</tt> <tt class="py-keyword">or</tt> <tt class="py-string">""</tt><tt class="py-op">,</tt> <tt class="py-name">sfx</tt> <tt class="py-keyword">or</tt> <tt class="py-string">""</tt> </tt>
1699 <a name="L1317"></a><tt class="py-lineno">1317</tt> <tt class="py-line"> </tt>
1700 <a name="L1318"></a><tt class="py-lineno">1318</tt> <tt class="py-line"> <tt class="py-comment"># pfx+sfx cannot be empty</tt> </tt>
1701 <a name="L1319"></a><tt class="py-lineno">1319</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">pfx</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">sfx</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1702 <a name="L1320"></a><tt class="py-lineno">1320</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-244" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-244', 'NodeSetParseError', 'link-24');">NodeSetParseError</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">,</tt> <tt class="py-string">"empty node name"</tt><tt class="py-op">)</tt> </tt>
1703 <a name="L1321"></a><tt class="py-lineno">1321</tt> <tt class="py-line"> </tt>
1704 <a name="L1322"></a><tt class="py-lineno">1322</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">idx</tt><tt class="py-op">:</tt> </tt>
1705 <a name="L1323"></a><tt class="py-lineno">1323</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1706 <a name="L1324"></a><tt class="py-lineno">1324</tt> <tt class="py-line"> <tt class="py-name">rset</tt> <tt class="py-op">=</tt> <tt id="link-245" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-245', 'RangeSet', 'link-34');">RangeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">idx</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
1707 <a name="L1325"></a><tt class="py-lineno">1325</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-246" class="py-name"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-246', 'RangeSetParseError', 'link-16');">RangeSetParseError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
1708 <a name="L1326"></a><tt class="py-lineno">1326</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-247" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseRangeError" class="py-name" href="#" onclick="return doclink('link-247', 'NodeSetParseRangeError', 'link-239');">NodeSetParseRangeError</a></tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
1709 <a name="L1327"></a><tt class="py-lineno">1327</tt> <tt class="py-line"> <tt class="py-name">p</tt> <tt class="py-op">=</tt> <tt class="py-string">"%s%%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">sfx</tt><tt class="py-op">)</tt> </tt>
1710 <a name="L1328"></a><tt class="py-lineno">1328</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">op_code</tt><tt class="py-op">,</tt> <tt class="py-name">p</tt><tt class="py-op">,</tt> <tt class="py-name">rset</tt> </tt>
1711 <a name="L1329"></a><tt class="py-lineno">1329</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1712 <a name="L1330"></a><tt class="py-lineno">1330</tt> <tt class="py-line"> <tt class="py-comment"># undefined pad means no node index</tt> </tt>
1713 <a name="L1331"></a><tt class="py-lineno">1331</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">op_code</tt><tt class="py-op">,</tt> <tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt> </tt>
1714 </div></div><a name="L1332"></a><tt class="py-lineno">1332</tt> <tt class="py-line"> </tt>
1715 <a name="L1333"></a><tt class="py-lineno">1333</tt> <tt class="py-line"> </tt>
1716 <a name="L1334"></a><tt class="py-lineno">1334</tt> <tt class="py-line"><tt class="py-comment"># Special constant for NodeSet's resolver parameter to avoid any group</tt> </tt>
1717 <a name="L1335"></a><tt class="py-lineno">1335</tt> <tt class="py-line"><tt class="py-comment"># resolution at all.</tt> </tt>
1718 <a name="L1336"></a><tt class="py-lineno">1336</tt> <tt class="py-line"><tt id="link-248" class="py-name" targets="Variable ClusterShell.NodeSet.NOGROUP_RESOLVER=ClusterShell.NodeSet-module.html#NOGROUP_RESOLVER"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-248', 'NOGROUP_RESOLVER', 'link-248');">NOGROUP_RESOLVER</a></tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
1719 <a name="NodeSet"></a><div id="NodeSet-def"><a name="L1337"></a><tt class="py-lineno">1337</tt> <tt class="py-line"> </tt>
1720 <a name="L1338"></a><tt class="py-lineno">1338</tt> <tt class="py-line"> </tt>
1721 <a name="L1339"></a><tt class="py-lineno">1339</tt> <a class="py-toggle" href="#" id="NodeSet-toggle" onclick="return toggle('NodeSet');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a><tt class="py-op">(</tt><tt class="py-base-class">NodeSetBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1722 </div><div id="NodeSet-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NodeSet-expanded"><a name="L1340"></a><tt class="py-lineno">1340</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1723 <a name="L1341"></a><tt class="py-lineno">1341</tt> <tt class="py-line"><tt class="py-docstring"> Iterable class of nodes with node ranges support.</tt> </tt>
1724 <a name="L1342"></a><tt class="py-lineno">1342</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1725 <a name="L1343"></a><tt class="py-lineno">1343</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet creation examples:</tt> </tt>
1726 <a name="L1344"></a><tt class="py-lineno">1344</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; nodeset = NodeSet() # empty NodeSet</tt> </tt>
1727 <a name="L1345"></a><tt class="py-lineno">1345</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; nodeset = NodeSet("cluster3") # contains only cluster3</tt> </tt>
1728 <a name="L1346"></a><tt class="py-lineno">1346</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; nodeset = NodeSet("cluster[5,10-42]")</tt> </tt>
1729 <a name="L1347"></a><tt class="py-lineno">1347</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; nodeset = NodeSet("cluster[0-10/2]")</tt> </tt>
1730 <a name="L1348"></a><tt class="py-lineno">1348</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; nodeset = NodeSet("cluster[0-10/2],othername[7-9,120-300]")</tt> </tt>
1731 <a name="L1349"></a><tt class="py-lineno">1349</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1732 <a name="L1350"></a><tt class="py-lineno">1350</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet provides methods like update(), intersection_update() or</tt> </tt>
1733 <a name="L1351"></a><tt class="py-lineno">1351</tt> <tt class="py-line"><tt class="py-docstring"> difference_update() methods, which conform to the Python Set API.</tt> </tt>
1734 <a name="L1352"></a><tt class="py-lineno">1352</tt> <tt class="py-line"><tt class="py-docstring"> However, unlike RangeSet or standard Set, NodeSet is somewhat not</tt> </tt>
1735 <a name="L1353"></a><tt class="py-lineno">1353</tt> <tt class="py-line"><tt class="py-docstring"> so strict for convenience, and understands NodeSet instance or</tt> </tt>
1736 <a name="L1354"></a><tt class="py-lineno">1354</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet string as argument. Also, there is no strict definition of</tt> </tt>
1737 <a name="L1355"></a><tt class="py-lineno">1355</tt> <tt class="py-line"><tt class="py-docstring"> one element, for example, it IS allowed to do:</tt> </tt>
1738 <a name="L1356"></a><tt class="py-lineno">1356</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; nodeset.remove("blue[36-40]").</tt> </tt>
1739 <a name="L1357"></a><tt class="py-lineno">1357</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1740 <a name="NodeSet.__init__"></a><div id="NodeSet.__init__-def"><a name="L1358"></a><tt class="py-lineno">1358</tt> <a class="py-toggle" href="#" id="NodeSet.__init__-toggle" onclick="return toggle('NodeSet.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-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">nodes</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">resolver</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1741 </div><div id="NodeSet.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.__init__-expanded"><a name="L1359"></a><tt class="py-lineno">1359</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1742 <a name="L1360"></a><tt class="py-lineno">1360</tt> <tt class="py-line"><tt class="py-docstring"> Initialize a NodeSet.</tt> </tt>
1743 <a name="L1361"></a><tt class="py-lineno">1361</tt> <tt class="py-line"><tt class="py-docstring"> The `nodes' argument may be a valid nodeset string or a NodeSet</tt> </tt>
1744 <a name="L1362"></a><tt class="py-lineno">1362</tt> <tt class="py-line"><tt class="py-docstring"> object. If no nodes are specified, an empty NodeSet is created.</tt> </tt>
1745 <a name="L1363"></a><tt class="py-lineno">1363</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1746 <a name="L1364"></a><tt class="py-lineno">1364</tt> <tt class="py-line"> <tt id="link-249" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-249', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">.</tt><tt id="link-250" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
1747 ClusterShell.Engine.Engine.Engine.__init__
1748 ClusterShell.Engine.Engine.EngineAbortException.__init__
1749 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
1750 ClusterShell.Engine.Engine.EngineTimer.__init__
1751 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
1752 ClusterShell.Engine.Engine._EngineTimerQ.__init__
1753 ClusterShell.Engine.Poll.EnginePoll.__init__
1754 ClusterShell.MsgTree.MsgTree.__init__
1755 ClusterShell.MsgTree.MsgTreeElem.__init__
1756 ClusterShell.NodeSet.NodeSet.__init__
1757 ClusterShell.NodeSet.NodeSetBase.__init__
1758 ClusterShell.NodeSet.NodeSetParseError.__init__
1759 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
1760 ClusterShell.NodeSet.ParsingEngine.__init__
1761 ClusterShell.NodeSet.RangeSet.__init__
1762 ClusterShell.NodeSet.RangeSetPaddingError.__init__
1763 ClusterShell.NodeSet.RangeSetParseError.__init__
1764 ClusterShell.NodeUtils.GroupResolver.__init__
1765 ClusterShell.NodeUtils.GroupResolverConfig.__init__
1766 ClusterShell.NodeUtils.GroupSource.__init__
1767 ClusterShell.NodeUtils.GroupSourceException.__init__
1768 ClusterShell.Task.Task._SuspendCondition.__init__
1769 ClusterShell.Task.Task.__init__
1770 ClusterShell.Task._TaskMsgTree.__init__
1771 ClusterShell.Worker.EngineClient.EngineClient.__init__
1772 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
1773 ClusterShell.Worker.EngineClient.EnginePort.__init__
1774 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
1775 ClusterShell.Worker.Popen.WorkerPopen.__init__
1776 ClusterShell.Worker.Ssh.Scp.__init__
1777 ClusterShell.Worker.Ssh.Ssh.__init__
1778 ClusterShell.Worker.Ssh.WorkerSsh.__init__
1779 ClusterShell.Worker.Worker.DistantWorker.__init__
1780 ClusterShell.Worker.Worker.Worker.__init__
1781 ClusterShell.Worker.Worker.WorkerSimple.__init__
1782 clubak.Display.__init__
1783 clush.ClushConfig.__init__
1784 clush.ClushConfigError.__init__
1785 clush.DirectOutputHandler.__init__
1786 clush.Display.__init__
1787 clush.GatherOutputHandler.__init__
1788 clush.RunTimer.__init__
1789 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-250', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
1790 <a name="L1365"></a><tt class="py-lineno">1365</tt> <tt class="py-line"> </tt>
1791 <a name="L1366"></a><tt class="py-lineno">1366</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt> <tt class="py-op">=</tt> <tt class="py-name">autostep</tt> </tt>
1792 <a name="L1367"></a><tt class="py-lineno">1367</tt> <tt class="py-line"> </tt>
1793 <a name="L1368"></a><tt class="py-lineno">1368</tt> <tt class="py-line"> <tt class="py-comment"># Set group resolver.</tt> </tt>
1794 <a name="L1369"></a><tt class="py-lineno">1369</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
1795 <a name="L1370"></a><tt class="py-lineno">1370</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">resolver</tt> <tt class="py-op">!=</tt> <tt id="link-251" class="py-name"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-251', 'NOGROUP_RESOLVER', 'link-248');">NOGROUP_RESOLVER</a></tt><tt class="py-op">:</tt> </tt>
1796 <a name="L1371"></a><tt class="py-lineno">1371</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt> <tt class="py-op">=</tt> <tt class="py-name">resolver</tt> <tt class="py-keyword">or</tt> <tt id="link-252" class="py-name"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-252', 'STD_GROUP_RESOLVER', 'link-9');">STD_GROUP_RESOLVER</a></tt> </tt>
1797 <a name="L1372"></a><tt class="py-lineno">1372</tt> <tt class="py-line"> </tt>
1798 <a name="L1373"></a><tt class="py-lineno">1373</tt> <tt class="py-line"> <tt class="py-comment"># Initialize default parser.</tt> </tt>
1799 <a name="L1374"></a><tt class="py-lineno">1374</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt> <tt class="py-op">=</tt> <tt id="link-253" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine" class="py-name" href="#" onclick="return doclink('link-253', 'ParsingEngine', 'link-227');">ParsingEngine</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt><tt class="py-op">)</tt> </tt>
1800 <a name="L1375"></a><tt class="py-lineno">1375</tt> <tt class="py-line"> </tt>
1801 <a name="L1376"></a><tt class="py-lineno">1376</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-254" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1802 ClusterShell.NodeSet.NodeSetBase.update
1803 ClusterShell.NodeSet.RangeSet.update
1804 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-254', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">nodes</tt><tt class="py-op">)</tt> </tt>
1805 </div><a name="L1377"></a><tt class="py-lineno">1377</tt> <tt class="py-line"> </tt>
1806 <a name="L1378"></a><tt class="py-lineno">1378</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
1807 <a name="NodeSet.fromlist"></a><div id="NodeSet.fromlist-def"><a name="L1379"></a><tt class="py-lineno">1379</tt> <a class="py-toggle" href="#" id="NodeSet.fromlist-toggle" onclick="return toggle('NodeSet.fromlist');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#fromlist">fromlist</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">nodelist</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">resolver</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1808 </div><div id="NodeSet.fromlist-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.fromlist-expanded"><a name="L1380"></a><tt class="py-lineno">1380</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1809 <a name="L1381"></a><tt class="py-lineno">1381</tt> <tt class="py-line"><tt class="py-docstring"> Class method that returns a new NodeSet with nodes from</tt> </tt>
1810 <a name="L1382"></a><tt class="py-lineno">1382</tt> <tt class="py-line"><tt class="py-docstring"> provided list.</tt> </tt>
1811 <a name="L1383"></a><tt class="py-lineno">1383</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1812 <a name="L1384"></a><tt class="py-lineno">1384</tt> <tt class="py-line"> <tt class="py-name">inst</tt> <tt class="py-op">=</tt> <tt id="link-255" class="py-name"><a title="ClusterShell.NodeSet
1813 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-255', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">,</tt> <tt class="py-name">resolver</tt><tt class="py-op">=</tt><tt class="py-name">resolver</tt><tt class="py-op">)</tt> </tt>
1814 <a name="L1385"></a><tt class="py-lineno">1385</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-name">nodelist</tt><tt class="py-op">:</tt> </tt>
1815 <a name="L1386"></a><tt class="py-lineno">1386</tt> <tt class="py-line"> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt id="link-256" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1816 ClusterShell.NodeSet.NodeSetBase.update
1817 ClusterShell.NodeSet.RangeSet.update
1818 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-256', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
1819 <a name="L1387"></a><tt class="py-lineno">1387</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">inst</tt> </tt>
1820 </div><a name="L1388"></a><tt class="py-lineno">1388</tt> <tt class="py-line"> </tt>
1821 <a name="L1389"></a><tt class="py-lineno">1389</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
1822 <a name="NodeSet.fromall"></a><div id="NodeSet.fromall-def"><a name="L1390"></a><tt class="py-lineno">1390</tt> <a class="py-toggle" href="#" id="NodeSet.fromall-toggle" onclick="return toggle('NodeSet.fromall');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#fromall">fromall</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">groupsource</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">resolver</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1823 </div><div id="NodeSet.fromall-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.fromall-expanded"><a name="L1391"></a><tt class="py-lineno">1391</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1824 <a name="L1392"></a><tt class="py-lineno">1392</tt> <tt class="py-line"><tt class="py-docstring"> Class method that returns a new NodeSet with all nodes from</tt> </tt>
1825 <a name="L1393"></a><tt class="py-lineno">1393</tt> <tt class="py-line"><tt class="py-docstring"> optional groupsource.</tt> </tt>
1826 <a name="L1394"></a><tt class="py-lineno">1394</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1827 <a name="L1395"></a><tt class="py-lineno">1395</tt> <tt class="py-line"> <tt class="py-name">inst</tt> <tt class="py-op">=</tt> <tt id="link-257" class="py-name"><a title="ClusterShell.NodeSet
1828 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-257', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">,</tt> <tt class="py-name">resolver</tt><tt class="py-op">=</tt><tt class="py-name">resolver</tt><tt class="py-op">)</tt> </tt>
1829 <a name="L1396"></a><tt class="py-lineno">1396</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt><tt class="py-op">:</tt> </tt>
1830 <a name="L1397"></a><tt class="py-lineno">1397</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-258" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetExternalError=ClusterShell.NodeSet.NodeSetExternalError-class.html"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-258', 'NodeSetExternalError', 'link-258');">NodeSetExternalError</a></tt><tt class="py-op">(</tt><tt class="py-string">"No node group resolver"</tt><tt class="py-op">)</tt> </tt>
1831 <a name="L1398"></a><tt class="py-lineno">1398</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1832 <a name="L1399"></a><tt class="py-lineno">1399</tt> <tt class="py-line"> <tt class="py-comment"># Ask resolver to provide all nodes.</tt> </tt>
1833 <a name="L1400"></a><tt class="py-lineno">1400</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">nodes</tt> <tt class="py-keyword">in</tt> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt><tt class="py-op">.</tt><tt id="link-259" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.all_nodes()=ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes"><a title="ClusterShell.NodeUtils.GroupResolver.all_nodes" class="py-name" href="#" onclick="return doclink('link-259', 'all_nodes', 'link-259');">all_nodes</a></tt><tt class="py-op">(</tt><tt class="py-name">groupsource</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1834 <a name="L1401"></a><tt class="py-lineno">1401</tt> <tt class="py-line"> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt id="link-260" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1835 ClusterShell.NodeSet.NodeSetBase.update
1836 ClusterShell.NodeSet.RangeSet.update
1837 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-260', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">nodes</tt><tt class="py-op">)</tt> </tt>
1838 <a name="L1402"></a><tt class="py-lineno">1402</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-261" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-261', 'NodeUtils', 'link-2');">NodeUtils</a></tt><tt class="py-op">.</tt><tt id="link-262" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceNoUpcall=ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-262', 'GroupSourceNoUpcall', 'link-262');">GroupSourceNoUpcall</a></tt><tt class="py-op">:</tt> </tt>
1839 <a name="L1403"></a><tt class="py-lineno">1403</tt> <tt class="py-line"> <tt class="py-comment"># As the resolver is not able to provide all nodes directly,</tt> </tt>
1840 <a name="L1404"></a><tt class="py-lineno">1404</tt> <tt class="py-line"> <tt class="py-comment"># failback to list + map(s) method:</tt> </tt>
1841 <a name="L1405"></a><tt class="py-lineno">1405</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1842 <a name="L1406"></a><tt class="py-lineno">1406</tt> <tt class="py-line"> <tt class="py-comment"># Like in regroup(), we get a NodeSet of all groups in</tt> </tt>
1843 <a name="L1407"></a><tt class="py-lineno">1407</tt> <tt class="py-line"> <tt class="py-comment"># specified group source.</tt> </tt>
1844 <a name="L1408"></a><tt class="py-lineno">1408</tt> <tt class="py-line"> <tt class="py-name">allgrpns</tt> <tt class="py-op">=</tt> <tt id="link-263" class="py-name"><a title="ClusterShell.NodeSet
1845 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-263', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-264" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
1846 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-264', 'fromlist', 'link-58');">fromlist</a></tt><tt class="py-op">(</tt> \ </tt>
1847 <a name="L1409"></a><tt class="py-lineno">1409</tt> <tt class="py-line"> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt><tt class="py-op">.</tt><tt id="link-265" class="py-name" targets="Function ClusterShell.NodeSet.grouplist()=ClusterShell.NodeSet-module.html#grouplist,Method ClusterShell.NodeUtils.GroupResolver.grouplist()=ClusterShell.NodeUtils.GroupResolver-class.html#grouplist"><a title="ClusterShell.NodeSet.grouplist
1848 ClusterShell.NodeUtils.GroupResolver.grouplist" class="py-name" href="#" onclick="return doclink('link-265', 'grouplist', 'link-265');">grouplist</a></tt><tt class="py-op">(</tt><tt class="py-name">groupsource</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
1849 <a name="L1410"></a><tt class="py-lineno">1410</tt> <tt class="py-line"> <tt class="py-name">resolver</tt><tt class="py-op">=</tt><tt id="link-266" class="py-name"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-266', 'NOGROUP_RESOLVER', 'link-248');">NOGROUP_RESOLVER</a></tt><tt class="py-op">)</tt> </tt>
1850 <a name="L1411"></a><tt class="py-lineno">1411</tt> <tt class="py-line"> <tt class="py-comment"># For each individual group, resolve it to node and accumulate.</tt> </tt>
1851 <a name="L1412"></a><tt class="py-lineno">1412</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">grp</tt> <tt class="py-keyword">in</tt> <tt class="py-name">allgrpns</tt><tt class="py-op">:</tt> </tt>
1852 <a name="L1413"></a><tt class="py-lineno">1413</tt> <tt class="py-line"> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt id="link-267" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1853 ClusterShell.NodeSet.NodeSetBase.update
1854 ClusterShell.NodeSet.RangeSet.update
1855 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-267', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt id="link-268" class="py-name"><a title="ClusterShell.NodeSet
1856 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-268', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-269" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
1857 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-269', 'fromlist', 'link-58');">fromlist</a></tt><tt class="py-op">(</tt> \ </tt>
1858 <a name="L1414"></a><tt class="py-lineno">1414</tt> <tt class="py-line"> <tt class="py-name">inst</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt><tt class="py-op">.</tt><tt id="link-270" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver.group_nodes" class="py-name" href="#" onclick="return doclink('link-270', 'group_nodes', 'link-219');">group_nodes</a></tt><tt class="py-op">(</tt><tt class="py-name">grp</tt><tt class="py-op">,</tt> <tt class="py-name">groupsource</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1859 <a name="L1415"></a><tt class="py-lineno">1415</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-271" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-271', 'NodeUtils', 'link-2');">NodeUtils</a></tt><tt class="py-op">.</tt><tt id="link-272" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-272', 'GroupSourceNoUpcall', 'link-262');">GroupSourceNoUpcall</a></tt><tt class="py-op">:</tt> </tt>
1860 <a name="L1416"></a><tt class="py-lineno">1416</tt> <tt class="py-line"> <tt class="py-comment"># We are not able to find "all" nodes, definitely.</tt> </tt>
1861 <a name="L1417"></a><tt class="py-lineno">1417</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-273" class="py-name"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-273', 'NodeSetExternalError', 'link-258');">NodeSetExternalError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Not enough working external "</tt> \ </tt>
1862 <a name="L1418"></a><tt class="py-lineno">1418</tt> <tt class="py-line"> <tt class="py-string">"calls (all, or map + list) defined to get all nodes"</tt><tt class="py-op">)</tt> </tt>
1863 <a name="L1419"></a><tt class="py-lineno">1419</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-274" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-274', 'NodeUtils', 'link-2');">NodeUtils</a></tt><tt class="py-op">.</tt><tt id="link-275" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceQueryFailed" class="py-name" href="#" onclick="return doclink('link-275', 'GroupSourceQueryFailed', 'link-209');">GroupSourceQueryFailed</a></tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt><tt class="py-op">:</tt> </tt>
1864 <a name="L1420"></a><tt class="py-lineno">1420</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-276" class="py-name"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-276', 'NodeSetExternalError', 'link-258');">NodeSetExternalError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Unable to get all nodes due to the "</tt> \ </tt>
1865 <a name="L1421"></a><tt class="py-lineno">1421</tt> <tt class="py-line"> <tt class="py-string">"following external failure:\n\t%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">exc</tt><tt class="py-op">)</tt> </tt>
1866 <a name="L1422"></a><tt class="py-lineno">1422</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">inst</tt> </tt>
1867 </div><a name="L1423"></a><tt class="py-lineno">1423</tt> <tt class="py-line"> </tt>
1868 <a name="NodeSet.__getstate__"></a><div id="NodeSet.__getstate__-def"><a name="L1424"></a><tt class="py-lineno">1424</tt> <a class="py-toggle" href="#" id="NodeSet.__getstate__-toggle" onclick="return toggle('NodeSet.__getstate__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#__getstate__">__getstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1869 </div><div id="NodeSet.__getstate__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.__getstate__-expanded"><a name="L1425"></a><tt class="py-lineno">1425</tt> <tt class="py-line"> <tt class="py-docstring">"""Called when pickling: remove references to group resolver."""</tt> </tt>
1870 <a name="L1426"></a><tt class="py-lineno">1426</tt> <tt class="py-line"> <tt class="py-name">odict</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt id="link-277" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-277', 'copy', 'link-0');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1871 <a name="L1427"></a><tt class="py-lineno">1427</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">odict</tt><tt class="py-op">[</tt><tt class="py-string">'_resolver'</tt><tt class="py-op">]</tt> </tt>
1872 <a name="L1428"></a><tt class="py-lineno">1428</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">odict</tt><tt class="py-op">[</tt><tt class="py-string">'_parser'</tt><tt class="py-op">]</tt> </tt>
1873 <a name="L1429"></a><tt class="py-lineno">1429</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">odict</tt> </tt>
1874 </div><a name="L1430"></a><tt class="py-lineno">1430</tt> <tt class="py-line"> </tt>
1875 <a name="NodeSet.__setstate__"></a><div id="NodeSet.__setstate__-def"><a name="L1431"></a><tt class="py-lineno">1431</tt> <a class="py-toggle" href="#" id="NodeSet.__setstate__-toggle" onclick="return toggle('NodeSet.__setstate__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#__setstate__">__setstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">dict</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1876 </div><div id="NodeSet.__setstate__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.__setstate__-expanded"><a name="L1432"></a><tt class="py-lineno">1432</tt> <tt class="py-line"> <tt class="py-docstring">"""Called when unpickling: restore parser using non group</tt> </tt>
1877 <a name="L1433"></a><tt class="py-lineno">1433</tt> <tt class="py-line"><tt class="py-docstring"> resolver."""</tt> </tt>
1878 <a name="L1434"></a><tt class="py-lineno">1434</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt id="link-278" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1879 ClusterShell.NodeSet.NodeSetBase.update
1880 ClusterShell.NodeSet.RangeSet.update
1881 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-278', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">dict</tt><tt class="py-op">)</tt> </tt>
1882 <a name="L1435"></a><tt class="py-lineno">1435</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
1883 <a name="L1436"></a><tt class="py-lineno">1436</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt> <tt class="py-op">=</tt> <tt id="link-279" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine" class="py-name" href="#" onclick="return doclink('link-279', 'ParsingEngine', 'link-227');">ParsingEngine</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
1884 </div><a name="L1437"></a><tt class="py-lineno">1437</tt> <tt class="py-line"> </tt>
1885 <a name="NodeSet._find_groups"></a><div id="NodeSet._find_groups-def"><a name="L1438"></a><tt class="py-lineno">1438</tt> <a class="py-toggle" href="#" id="NodeSet._find_groups-toggle" onclick="return toggle('NodeSet._find_groups');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#_find_groups">_find_groups</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">,</tt> <tt class="py-param">allgroups</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1886 </div><div id="NodeSet._find_groups-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet._find_groups-expanded"><a name="L1439"></a><tt class="py-lineno">1439</tt> <tt class="py-line"> <tt class="py-docstring">"""Find groups of node by namespace."""</tt> </tt>
1887 <a name="L1440"></a><tt class="py-lineno">1440</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">allgroups</tt><tt class="py-op">:</tt> </tt>
1888 <a name="L1441"></a><tt class="py-lineno">1441</tt> <tt class="py-line"> <tt class="py-comment"># find node groups using in-memory allgroups</tt> </tt>
1889 <a name="L1442"></a><tt class="py-lineno">1442</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">grp</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt> <tt class="py-keyword">in</tt> <tt class="py-name">allgroups</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1890 <a name="L1443"></a><tt class="py-lineno">1443</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ns</tt><tt class="py-op">:</tt> </tt>
1891 <a name="L1444"></a><tt class="py-lineno">1444</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">grp</tt> </tt>
1892 <a name="L1445"></a><tt class="py-lineno">1445</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1893 <a name="L1446"></a><tt class="py-lineno">1446</tt> <tt class="py-line"> <tt class="py-comment"># find node groups using resolver</tt> </tt>
1894 <a name="L1447"></a><tt class="py-lineno">1447</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">group</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt><tt class="py-op">.</tt><tt id="link-280" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.node_groups()=ClusterShell.NodeUtils.GroupResolver-class.html#node_groups"><a title="ClusterShell.NodeUtils.GroupResolver.node_groups" class="py-name" href="#" onclick="return doclink('link-280', 'node_groups', 'link-280');">node_groups</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1895 <a name="L1448"></a><tt class="py-lineno">1448</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">group</tt> </tt>
1896 </div><a name="L1449"></a><tt class="py-lineno">1449</tt> <tt class="py-line"> </tt>
1897 <a name="NodeSet.regroup"></a><div id="NodeSet.regroup-def"><a name="L1450"></a><tt class="py-lineno">1450</tt> <a class="py-toggle" href="#" id="NodeSet.regroup-toggle" onclick="return toggle('NodeSet.regroup');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#regroup">regroup</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">groupsource</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">overlap</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> </tt>
1898 <a name="L1451"></a><tt class="py-lineno">1451</tt> <tt class="py-line"> <tt class="py-param">noprefix</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1899 </div><div id="NodeSet.regroup-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.regroup-expanded"><a name="L1452"></a><tt class="py-lineno">1452</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1900 <a name="L1453"></a><tt class="py-lineno">1453</tt> <tt class="py-line"><tt class="py-docstring"> Regroup nodeset using groups.</tt> </tt>
1901 <a name="L1454"></a><tt class="py-lineno">1454</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1902 <a name="L1455"></a><tt class="py-lineno">1455</tt> <tt class="py-line"> <tt class="py-name">groups</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
1903 <a name="L1456"></a><tt class="py-lineno">1456</tt> <tt class="py-line"> <tt class="py-name">rest</tt> <tt class="py-op">=</tt> <tt id="link-281" class="py-name"><a title="ClusterShell.NodeSet
1904 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-281', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">resolver</tt><tt class="py-op">=</tt><tt id="link-282" class="py-name"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-282', 'NOGROUP_RESOLVER', 'link-248');">NOGROUP_RESOLVER</a></tt><tt class="py-op">)</tt> </tt>
1905 <a name="L1457"></a><tt class="py-lineno">1457</tt> <tt class="py-line"> </tt>
1906 <a name="L1458"></a><tt class="py-lineno">1458</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1907 <a name="L1459"></a><tt class="py-lineno">1459</tt> <tt class="py-line"> <tt class="py-comment"># Get a NodeSet of all groups in specified group source.</tt> </tt>
1908 <a name="L1460"></a><tt class="py-lineno">1460</tt> <tt class="py-line"> <tt class="py-name">allgrpns</tt> <tt class="py-op">=</tt> <tt id="link-283" class="py-name"><a title="ClusterShell.NodeSet
1909 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-283', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-284" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
1910 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-284', 'fromlist', 'link-58');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt><tt class="py-op">.</tt><tt id="link-285" class="py-name"><a title="ClusterShell.NodeSet.grouplist
1911 ClusterShell.NodeUtils.GroupResolver.grouplist" class="py-name" href="#" onclick="return doclink('link-285', 'grouplist', 'link-265');">grouplist</a></tt><tt class="py-op">(</tt><tt class="py-name">groupsource</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
1912 <a name="L1461"></a><tt class="py-lineno">1461</tt> <tt class="py-line"> <tt class="py-name">resolver</tt><tt class="py-op">=</tt><tt id="link-286" class="py-name"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-286', 'NOGROUP_RESOLVER', 'link-248');">NOGROUP_RESOLVER</a></tt><tt class="py-op">)</tt> </tt>
1913 <a name="L1462"></a><tt class="py-lineno">1462</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-287" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-287', 'NodeUtils', 'link-2');">NodeUtils</a></tt><tt class="py-op">.</tt><tt id="link-288" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceException=ClusterShell.NodeUtils.GroupSourceException-class.html"><a title="ClusterShell.NodeUtils.GroupSourceException" class="py-name" href="#" onclick="return doclink('link-288', 'GroupSourceException', 'link-288');">GroupSourceException</a></tt><tt class="py-op">:</tt> </tt>
1914 <a name="L1463"></a><tt class="py-lineno">1463</tt> <tt class="py-line"> <tt class="py-comment"># If list query failed, we still might be able to regroup</tt> </tt>
1915 <a name="L1464"></a><tt class="py-lineno">1464</tt> <tt class="py-line"> <tt class="py-comment"># using reverse.</tt> </tt>
1916 <a name="L1465"></a><tt class="py-lineno">1465</tt> <tt class="py-line"> <tt class="py-name">allgrpns</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
1917 <a name="L1466"></a><tt class="py-lineno">1466</tt> <tt class="py-line"> </tt>
1918 <a name="L1467"></a><tt class="py-lineno">1467</tt> <tt class="py-line"> <tt class="py-name">allgroups</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
1919 <a name="L1468"></a><tt class="py-lineno">1468</tt> <tt class="py-line"> </tt>
1920 <a name="L1469"></a><tt class="py-lineno">1469</tt> <tt class="py-line"> <tt class="py-comment"># Check for external reverse presence, and also use the</tt> </tt>
1921 <a name="L1470"></a><tt class="py-lineno">1470</tt> <tt class="py-line"> <tt class="py-comment"># following heuristic: external reverse is used only when number</tt> </tt>
1922 <a name="L1471"></a><tt class="py-lineno">1471</tt> <tt class="py-line"> <tt class="py-comment"># of groups is greater than the NodeSet size.</tt> </tt>
1923 <a name="L1472"></a><tt class="py-lineno">1472</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">_resolver</tt><tt class="py-op">.</tt><tt id="link-289" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.has_node_groups()=ClusterShell.NodeUtils.GroupResolver-class.html#has_node_groups"><a title="ClusterShell.NodeUtils.GroupResolver.has_node_groups" class="py-name" href="#" onclick="return doclink('link-289', 'has_node_groups', 'link-289');">has_node_groups</a></tt><tt class="py-op">(</tt><tt class="py-name">groupsource</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> \ </tt>
1924 <a name="L1473"></a><tt class="py-lineno">1473</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-keyword">not</tt> <tt class="py-name">allgrpns</tt> <tt class="py-keyword">or</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">allgrpns</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">len</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-op">:</tt> </tt>
1925 <a name="L1474"></a><tt class="py-lineno">1474</tt> <tt class="py-line"> <tt class="py-comment"># use external reverse</tt> </tt>
1926 <a name="L1475"></a><tt class="py-lineno">1475</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
1927 <a name="L1476"></a><tt class="py-lineno">1476</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1928 <a name="L1477"></a><tt class="py-lineno">1477</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">allgrpns</tt><tt class="py-op">:</tt> <tt class="py-comment"># list query failed and no way to reverse!</tt> </tt>
1929 <a name="L1478"></a><tt class="py-lineno">1478</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">rest</tt><tt class="py-op">)</tt> </tt>
1930 <a name="L1479"></a><tt class="py-lineno">1479</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1931 <a name="L1480"></a><tt class="py-lineno">1480</tt> <tt class="py-line"> <tt class="py-comment"># use internal reverse: populate allgroups</tt> </tt>
1932 <a name="L1481"></a><tt class="py-lineno">1481</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">grp</tt> <tt class="py-keyword">in</tt> <tt class="py-name">allgrpns</tt><tt class="py-op">:</tt> </tt>
1933 <a name="L1482"></a><tt class="py-lineno">1482</tt> <tt class="py-line"> <tt class="py-name">nodelist</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resolver</tt><tt class="py-op">.</tt><tt id="link-290" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver.group_nodes" class="py-name" href="#" onclick="return doclink('link-290', 'group_nodes', 'link-219');">group_nodes</a></tt><tt class="py-op">(</tt><tt class="py-name">grp</tt><tt class="py-op">,</tt> <tt class="py-name">groupsource</tt><tt class="py-op">)</tt> </tt>
1934 <a name="L1483"></a><tt class="py-lineno">1483</tt> <tt class="py-line"> <tt class="py-name">allgroups</tt><tt class="py-op">[</tt><tt class="py-name">grp</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-291" class="py-name"><a title="ClusterShell.NodeSet
1935 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-291', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-string">","</tt><tt class="py-op">.</tt><tt id="link-292" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-292', 'join', 'link-221');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">nodelist</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1936 <a name="L1484"></a><tt class="py-lineno">1484</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-293" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-293', 'NodeUtils', 'link-2');">NodeUtils</a></tt><tt class="py-op">.</tt><tt id="link-294" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceQueryFailed" class="py-name" href="#" onclick="return doclink('link-294', 'GroupSourceQueryFailed', 'link-209');">GroupSourceQueryFailed</a></tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt><tt class="py-op">:</tt> </tt>
1937 <a name="L1485"></a><tt class="py-lineno">1485</tt> <tt class="py-line"> <tt class="py-comment"># External result inconsistency</tt> </tt>
1938 <a name="L1486"></a><tt class="py-lineno">1486</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-295" class="py-name"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-295', 'NodeSetExternalError', 'link-258');">NodeSetExternalError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Unable to map a group "</tt> \ </tt>
1939 <a name="L1487"></a><tt class="py-lineno">1487</tt> <tt class="py-line"> <tt class="py-string">"previously listed\n\tFailed command: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">exc</tt><tt class="py-op">)</tt> </tt>
1940 <a name="L1488"></a><tt class="py-lineno">1488</tt> <tt class="py-line"> </tt>
1941 <a name="L1489"></a><tt class="py-lineno">1489</tt> <tt class="py-line"> <tt class="py-comment"># For each NodeSetBase in self, finds its groups.</tt> </tt>
1942 <a name="L1490"></a><tt class="py-lineno">1490</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-296" class="py-name" targets="Method ClusterShell.NodeSet.NodeSetBase._iterbase()=ClusterShell.NodeSet.NodeSetBase-class.html#_iterbase"><a title="ClusterShell.NodeSet.NodeSetBase._iterbase" class="py-name" href="#" onclick="return doclink('link-296', '_iterbase', 'link-296');">_iterbase</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1943 <a name="L1491"></a><tt class="py-lineno">1491</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">grp</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-297" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet._find_groups()=ClusterShell.NodeSet.NodeSet-class.html#_find_groups"><a title="ClusterShell.NodeSet.NodeSet._find_groups" class="py-name" href="#" onclick="return doclink('link-297', '_find_groups', 'link-297');">_find_groups</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">groupsource</tt><tt class="py-op">,</tt> <tt class="py-name">allgroups</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1944 <a name="L1492"></a><tt class="py-lineno">1492</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">grp</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">groups</tt><tt class="py-op">:</tt> </tt>
1945 <a name="L1493"></a><tt class="py-lineno">1493</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt id="link-298" class="py-name" targets="Method ClusterShell.NodeSet.ParsingEngine.parse_group()=ClusterShell.NodeSet.ParsingEngine-class.html#parse_group"><a title="ClusterShell.NodeSet.ParsingEngine.parse_group" class="py-name" href="#" onclick="return doclink('link-298', 'parse_group', 'link-298');">parse_group</a></tt><tt class="py-op">(</tt><tt class="py-name">grp</tt><tt class="py-op">,</tt> <tt class="py-name">groupsource</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
1946 <a name="L1494"></a><tt class="py-lineno">1494</tt> <tt class="py-line"> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-name">grp</tt><tt class="py-op">]</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-name">ns</tt><tt class="py-op">)</tt> </tt>
1947 <a name="L1495"></a><tt class="py-lineno">1495</tt> <tt class="py-line"> <tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-name">grp</tt><tt class="py-op">]</tt> </tt>
1948 <a name="L1496"></a><tt class="py-lineno">1496</tt> <tt class="py-line"> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-name">grp</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">i</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
1949 <a name="L1497"></a><tt class="py-lineno">1497</tt> <tt class="py-line"> </tt>
1950 <a name="L1498"></a><tt class="py-lineno">1498</tt> <tt class="py-line"> <tt class="py-comment"># Keep only groups that are full.</tt> </tt>
1951 <a name="L1499"></a><tt class="py-lineno">1499</tt> <tt class="py-line"> <tt class="py-name">fulls</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
1952 <a name="L1500"></a><tt class="py-lineno">1500</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">m</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">groups</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1953 <a name="L1501"></a><tt class="py-lineno">1501</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">i</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt> </tt>
1954 <a name="L1502"></a><tt class="py-lineno">1502</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">i</tt> <tt class="py-op">==</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1955 <a name="L1503"></a><tt class="py-lineno">1503</tt> <tt class="py-line"> <tt class="py-name">fulls</tt><tt class="py-op">.</tt><tt id="link-299" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-299', 'append', 'link-63');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1956 <a name="L1504"></a><tt class="py-lineno">1504</tt> <tt class="py-line"> </tt>
1957 <a name="L1505"></a><tt class="py-lineno">1505</tt> <tt class="py-line"> <tt class="py-name">regrouped</tt> <tt class="py-op">=</tt> <tt id="link-300" class="py-name"><a title="ClusterShell.NodeSet
1958 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-300', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">resolver</tt><tt class="py-op">=</tt><tt id="link-301" class="py-name"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-301', 'NOGROUP_RESOLVER', 'link-248');">NOGROUP_RESOLVER</a></tt><tt class="py-op">)</tt> </tt>
1959 <a name="L1506"></a><tt class="py-lineno">1506</tt> <tt class="py-line"> </tt>
1960 <a name="L1507"></a><tt class="py-lineno">1507</tt> <tt class="py-line"> <tt class="py-name">bigalpha</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">x</tt><tt class="py-op">,</tt><tt class="py-name">y</tt><tt class="py-op">:</tt> <tt class="py-name">cmp</tt><tt class="py-op">(</tt><tt class="py-name">y</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">x</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-keyword">or</tt> <tt class="py-name">cmp</tt><tt class="py-op">(</tt><tt class="py-name">x</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">y</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
1961 <a name="L1508"></a><tt class="py-lineno">1508</tt> <tt class="py-line"> </tt>
1962 <a name="L1509"></a><tt class="py-lineno">1509</tt> <tt class="py-line"> <tt class="py-comment"># Build regrouped NodeSet by selecting largest groups first.</tt> </tt>
1963 <a name="L1510"></a><tt class="py-lineno">1510</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">num</tt><tt class="py-op">,</tt> <tt class="py-name">grp</tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">fulls</tt><tt class="py-op">,</tt> <tt class="py-name">cmp</tt><tt class="py-op">=</tt><tt class="py-name">bigalpha</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1964 <a name="L1511"></a><tt class="py-lineno">1511</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">overlap</tt> <tt class="py-keyword">and</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-name">grp</tt><tt class="py-op">]</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">rest</tt><tt class="py-op">:</tt> </tt>
1965 <a name="L1512"></a><tt class="py-lineno">1512</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
1966 <a name="L1513"></a><tt class="py-lineno">1513</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">groupsource</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">noprefix</tt><tt class="py-op">:</tt> </tt>
1967 <a name="L1514"></a><tt class="py-lineno">1514</tt> <tt class="py-line"> <tt class="py-name">regrouped</tt><tt class="py-op">.</tt><tt id="link-302" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1968 ClusterShell.NodeSet.NodeSetBase.update
1969 ClusterShell.NodeSet.RangeSet.update
1970 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-302', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-string">"@%s:%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">groupsource</tt><tt class="py-op">,</tt> <tt class="py-name">grp</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1971 <a name="L1515"></a><tt class="py-lineno">1515</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1972 <a name="L1516"></a><tt class="py-lineno">1516</tt> <tt class="py-line"> <tt class="py-name">regrouped</tt><tt class="py-op">.</tt><tt id="link-303" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1973 ClusterShell.NodeSet.NodeSetBase.update
1974 ClusterShell.NodeSet.RangeSet.update
1975 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-303', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-string">"@"</tt> <tt class="py-op">+</tt> <tt class="py-name">grp</tt><tt class="py-op">)</tt> </tt>
1976 <a name="L1517"></a><tt class="py-lineno">1517</tt> <tt class="py-line"> <tt class="py-name">rest</tt><tt class="py-op">.</tt><tt id="link-304" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.difference_update
1977 ClusterShell.NodeSet.NodeSetBase.difference_update
1978 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-304', 'difference_update', 'link-98');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-name">grp</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
1979 <a name="L1518"></a><tt class="py-lineno">1518</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">rest</tt><tt class="py-op">:</tt> </tt>
1980 <a name="L1519"></a><tt class="py-lineno">1519</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">regrouped</tt><tt class="py-op">)</tt> </tt>
1981 <a name="L1520"></a><tt class="py-lineno">1520</tt> <tt class="py-line"> </tt>
1982 <a name="L1521"></a><tt class="py-lineno">1521</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">regrouped</tt><tt class="py-op">:</tt> </tt>
1983 <a name="L1522"></a><tt class="py-lineno">1522</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s,%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">regrouped</tt><tt class="py-op">,</tt> <tt class="py-name">rest</tt><tt class="py-op">)</tt> </tt>
1984 <a name="L1523"></a><tt class="py-lineno">1523</tt> <tt class="py-line"> </tt>
1985 <a name="L1524"></a><tt class="py-lineno">1524</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">rest</tt><tt class="py-op">)</tt> </tt>
1986 </div><a name="L1525"></a><tt class="py-lineno">1525</tt> <tt class="py-line"> </tt>
1987 <a name="NodeSet.issubset"></a><div id="NodeSet.issubset-def"><a name="L1526"></a><tt class="py-lineno">1526</tt> <a class="py-toggle" href="#" id="NodeSet.issubset-toggle" onclick="return toggle('NodeSet.issubset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#issubset">issubset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1988 </div><div id="NodeSet.issubset-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.issubset-expanded"><a name="L1527"></a><tt class="py-lineno">1527</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1989 <a name="L1528"></a><tt class="py-lineno">1528</tt> <tt class="py-line"><tt class="py-docstring"> Report whether another nodeset contains this nodeset.</tt> </tt>
1990 <a name="L1529"></a><tt class="py-lineno">1529</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1991 <a name="L1530"></a><tt class="py-lineno">1530</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt id="link-305" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.parse" class="py-name" href="#" onclick="return doclink('link-305', 'parse', 'link-217');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt><tt class="py-op">)</tt> </tt>
1992 <a name="L1531"></a><tt class="py-lineno">1531</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-306" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-306', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">.</tt><tt id="link-307" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
1993 ClusterShell.NodeSet.NodeSetBase.issuperset
1994 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-307', 'issuperset', 'link-52');">issuperset</a></tt><tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
1995 </div><a name="L1532"></a><tt class="py-lineno">1532</tt> <tt class="py-line"> </tt>
1996 <a name="NodeSet.issuperset"></a><div id="NodeSet.issuperset-def"><a name="L1533"></a><tt class="py-lineno">1533</tt> <a class="py-toggle" href="#" id="NodeSet.issuperset-toggle" onclick="return toggle('NodeSet.issuperset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#issuperset">issuperset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1997 </div><div id="NodeSet.issuperset-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.issuperset-expanded"><a name="L1534"></a><tt class="py-lineno">1534</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1998 <a name="L1535"></a><tt class="py-lineno">1535</tt> <tt class="py-line"><tt class="py-docstring"> Report whether this nodeset contains another nodeset.</tt> </tt>
1999 <a name="L1536"></a><tt class="py-lineno">1536</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2000 <a name="L1537"></a><tt class="py-lineno">1537</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt id="link-308" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.parse" class="py-name" href="#" onclick="return doclink('link-308', 'parse', 'link-217');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt><tt class="py-op">)</tt> </tt>
2001 <a name="L1538"></a><tt class="py-lineno">1538</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-309" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-309', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">.</tt><tt id="link-310" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.issuperset
2002 ClusterShell.NodeSet.NodeSetBase.issuperset
2003 ClusterShell.NodeSet.RangeSet.issuperset" class="py-name" href="#" onclick="return doclink('link-310', 'issuperset', 'link-52');">issuperset</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">)</tt> </tt>
2004 </div><a name="L1539"></a><tt class="py-lineno">1539</tt> <tt class="py-line"> </tt>
2005 <a name="NodeSet.__getslice__"></a><div id="NodeSet.__getslice__-def"><a name="L1540"></a><tt class="py-lineno">1540</tt> <a class="py-toggle" href="#" id="NodeSet.__getslice__-toggle" onclick="return toggle('NodeSet.__getslice__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#__getslice__">__getslice__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">i</tt><tt class="py-op">,</tt> <tt class="py-param">j</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2006 </div><div id="NodeSet.__getslice__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.__getslice__-expanded"><a name="L1541"></a><tt class="py-lineno">1541</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2007 <a name="L1542"></a><tt class="py-lineno">1542</tt> <tt class="py-line"><tt class="py-docstring"> Return the slice from index i to index j-1. For convenience</tt> </tt>
2008 <a name="L1543"></a><tt class="py-lineno">1543</tt> <tt class="py-line"><tt class="py-docstring"> only, not optimized as of version 1.0.</tt> </tt>
2009 <a name="L1544"></a><tt class="py-lineno">1544</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2010 <a name="L1545"></a><tt class="py-lineno">1545</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-311" class="py-name"><a title="ClusterShell.NodeSet
2011 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-311', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-312" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
2012 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-312', 'fromlist', 'link-58');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">list</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">i</tt><tt class="py-op">:</tt><tt class="py-name">j</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
2013 </div><a name="L1546"></a><tt class="py-lineno">1546</tt> <tt class="py-line"> </tt>
2014 <a name="NodeSet.split"></a><div id="NodeSet.split-def"><a name="L1547"></a><tt class="py-lineno">1547</tt> <a class="py-toggle" href="#" id="NodeSet.split-toggle" onclick="return toggle('NodeSet.split');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#split">split</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nbr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2015 </div><div id="NodeSet.split-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.split-expanded"><a name="L1548"></a><tt class="py-lineno">1548</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2016 <a name="L1549"></a><tt class="py-lineno">1549</tt> <tt class="py-line"><tt class="py-docstring"> Split the nodeset into nbr sub-nodeset. Each sub-nodeset will have the</tt> </tt>
2017 <a name="L1550"></a><tt class="py-lineno">1550</tt> <tt class="py-line"><tt class="py-docstring"> same number of element more or less 1. Current nodeset remains</tt> </tt>
2018 <a name="L1551"></a><tt class="py-lineno">1551</tt> <tt class="py-line"><tt class="py-docstring"> unmodified.</tt> </tt>
2019 <a name="L1552"></a><tt class="py-lineno">1552</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
2020 <a name="L1553"></a><tt class="py-lineno">1553</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; NodeSet("foo[1-5]").split(3) </tt> </tt>
2021 <a name="L1554"></a><tt class="py-lineno">1554</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet("foo[1-2]")</tt> </tt>
2022 <a name="L1555"></a><tt class="py-lineno">1555</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet("foo[3-4]")</tt> </tt>
2023 <a name="L1556"></a><tt class="py-lineno">1556</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet("foo5")</tt> </tt>
2024 <a name="L1557"></a><tt class="py-lineno">1557</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2025 <a name="L1558"></a><tt class="py-lineno">1558</tt> <tt class="py-line"> <tt class="py-comment"># XXX: This uses the non-optimized __getslice__ method.</tt> </tt>
2026 <a name="L1559"></a><tt class="py-lineno">1559</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt><tt class="py-op">(</tt><tt class="py-name">nbr</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
2027 <a name="L1560"></a><tt class="py-lineno">1560</tt> <tt class="py-line"> </tt>
2028 <a name="L1561"></a><tt class="py-lineno">1561</tt> <tt class="py-line"> <tt class="py-comment"># We put the same number of element in each sub-nodeset.</tt> </tt>
2029 <a name="L1562"></a><tt class="py-lineno">1562</tt> <tt class="py-line"> <tt class="py-name">slice_size</tt> <tt class="py-op">=</tt> <tt class="py-name">len</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">nbr</tt> </tt>
2030 <a name="L1563"></a><tt class="py-lineno">1563</tt> <tt class="py-line"> <tt class="py-name">left</tt> <tt class="py-op">=</tt> <tt class="py-name">len</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">nbr</tt> </tt>
2031 <a name="L1564"></a><tt class="py-lineno">1564</tt> <tt class="py-line"> </tt>
2032 <a name="L1565"></a><tt class="py-lineno">1565</tt> <tt class="py-line"> <tt class="py-name">begin</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
2033 <a name="L1566"></a><tt class="py-lineno">1566</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">nbr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2034 <a name="L1567"></a><tt class="py-lineno">1567</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-name">slice_size</tt> <tt class="py-op">+</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">left</tt><tt class="py-op">)</tt> </tt>
2035 <a name="L1568"></a><tt class="py-lineno">1568</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-name">begin</tt><tt class="py-op">:</tt><tt class="py-name">begin</tt> <tt class="py-op">+</tt> <tt class="py-name">length</tt><tt class="py-op">]</tt> </tt>
2036 <a name="L1569"></a><tt class="py-lineno">1569</tt> <tt class="py-line"> <tt class="py-name">begin</tt> <tt class="py-op">+=</tt> <tt class="py-name">length</tt> </tt>
2037 </div><a name="L1570"></a><tt class="py-lineno">1570</tt> <tt class="py-line"> </tt>
2038 <a name="NodeSet.update"></a><div id="NodeSet.update-def"><a name="L1571"></a><tt class="py-lineno">1571</tt> <a class="py-toggle" href="#" id="NodeSet.update-toggle" onclick="return toggle('NodeSet.update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#update">update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2039 </div><div id="NodeSet.update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.update-expanded"><a name="L1572"></a><tt class="py-lineno">1572</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2040 <a name="L1573"></a><tt class="py-lineno">1573</tt> <tt class="py-line"><tt class="py-docstring"> s.update(t) returns nodeset s with elements added from t.</tt> </tt>
2041 <a name="L1574"></a><tt class="py-lineno">1574</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2042 <a name="L1575"></a><tt class="py-lineno">1575</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt id="link-313" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.parse" class="py-name" href="#" onclick="return doclink('link-313', 'parse', 'link-217');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt><tt class="py-op">)</tt> </tt>
2043 <a name="L1576"></a><tt class="py-lineno">1576</tt> <tt class="py-line"> <tt id="link-314" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-314', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">.</tt><tt id="link-315" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
2044 ClusterShell.NodeSet.NodeSetBase.update
2045 ClusterShell.NodeSet.RangeSet.update
2046 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-315', 'update', 'link-36');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">)</tt> </tt>
2047 </div><a name="L1577"></a><tt class="py-lineno">1577</tt> <tt class="py-line"> </tt>
2048 <a name="NodeSet.intersection_update"></a><div id="NodeSet.intersection_update-def"><a name="L1578"></a><tt class="py-lineno">1578</tt> <a class="py-toggle" href="#" id="NodeSet.intersection_update-toggle" onclick="return toggle('NodeSet.intersection_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#intersection_update">intersection_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2049 </div><div id="NodeSet.intersection_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.intersection_update-expanded"><a name="L1579"></a><tt class="py-lineno">1579</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2050 <a name="L1580"></a><tt class="py-lineno">1580</tt> <tt class="py-line"><tt class="py-docstring"> s.intersection_update(t) returns nodeset s keeping only</tt> </tt>
2051 <a name="L1581"></a><tt class="py-lineno">1581</tt> <tt class="py-line"><tt class="py-docstring"> elements also found in t.</tt> </tt>
2052 <a name="L1582"></a><tt class="py-lineno">1582</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2053 <a name="L1583"></a><tt class="py-lineno">1583</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt id="link-316" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.parse" class="py-name" href="#" onclick="return doclink('link-316', 'parse', 'link-217');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt><tt class="py-op">)</tt> </tt>
2054 <a name="L1584"></a><tt class="py-lineno">1584</tt> <tt class="py-line"> <tt id="link-317" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-317', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">.</tt><tt id="link-318" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.intersection_update
2055 ClusterShell.NodeSet.NodeSetBase.intersection_update
2056 ClusterShell.NodeSet.RangeSet.intersection_update" class="py-name" href="#" onclick="return doclink('link-318', 'intersection_update', 'link-88');">intersection_update</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">)</tt> </tt>
2057 </div><a name="L1585"></a><tt class="py-lineno">1585</tt> <tt class="py-line"> </tt>
2058 <a name="NodeSet.difference_update"></a><div id="NodeSet.difference_update-def"><a name="L1586"></a><tt class="py-lineno">1586</tt> <a class="py-toggle" href="#" id="NodeSet.difference_update-toggle" onclick="return toggle('NodeSet.difference_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#difference_update">difference_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">,</tt> <tt class="py-param">strict</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2059 </div><div id="NodeSet.difference_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.difference_update-expanded"><a name="L1587"></a><tt class="py-lineno">1587</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2060 <a name="L1588"></a><tt class="py-lineno">1588</tt> <tt class="py-line"><tt class="py-docstring"> s.difference_update(t) returns nodeset s after removing</tt> </tt>
2061 <a name="L1589"></a><tt class="py-lineno">1589</tt> <tt class="py-line"><tt class="py-docstring"> elements found in t. If strict is True, raise KeyError</tt> </tt>
2062 <a name="L1590"></a><tt class="py-lineno">1590</tt> <tt class="py-line"><tt class="py-docstring"> if an element cannot be removed.</tt> </tt>
2063 <a name="L1591"></a><tt class="py-lineno">1591</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2064 <a name="L1592"></a><tt class="py-lineno">1592</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt id="link-319" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.parse" class="py-name" href="#" onclick="return doclink('link-319', 'parse', 'link-217');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt><tt class="py-op">)</tt> </tt>
2065 <a name="L1593"></a><tt class="py-lineno">1593</tt> <tt class="py-line"> <tt id="link-320" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-320', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">.</tt><tt id="link-321" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.difference_update
2066 ClusterShell.NodeSet.NodeSetBase.difference_update
2067 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-321', 'difference_update', 'link-98');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">strict</tt><tt class="py-op">)</tt> </tt>
2068 </div><a name="L1594"></a><tt class="py-lineno">1594</tt> <tt class="py-line"> </tt>
2069 <a name="NodeSet.symmetric_difference_update"></a><div id="NodeSet.symmetric_difference_update-def"><a name="L1595"></a><tt class="py-lineno">1595</tt> <a class="py-toggle" href="#" id="NodeSet.symmetric_difference_update-toggle" onclick="return toggle('NodeSet.symmetric_difference_update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet.NodeSet-class.html#symmetric_difference_update">symmetric_difference_update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2070 </div><div id="NodeSet.symmetric_difference_update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="NodeSet.symmetric_difference_update-expanded"><a name="L1596"></a><tt class="py-lineno">1596</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2071 <a name="L1597"></a><tt class="py-lineno">1597</tt> <tt class="py-line"><tt class="py-docstring"> s.symmetric_difference_update(t) returns nodeset s keeping all</tt> </tt>
2072 <a name="L1598"></a><tt class="py-lineno">1598</tt> <tt class="py-line"><tt class="py-docstring"> nodes that are in exactly one of the nodesets.</tt> </tt>
2073 <a name="L1599"></a><tt class="py-lineno">1599</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2074 <a name="L1600"></a><tt class="py-lineno">1600</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt id="link-322" class="py-name"><a title="ClusterShell.NodeSet.ParsingEngine.parse" class="py-name" href="#" onclick="return doclink('link-322', 'parse', 'link-217');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_autostep</tt><tt class="py-op">)</tt> </tt>
2075 <a name="L1601"></a><tt class="py-lineno">1601</tt> <tt class="py-line"> <tt id="link-323" class="py-name"><a title="ClusterShell.NodeSet.NodeSetBase" class="py-name" href="#" onclick="return doclink('link-323', 'NodeSetBase', 'link-128');">NodeSetBase</a></tt><tt class="py-op">.</tt><tt id="link-324" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.symmetric_difference_update
2076 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update
2077 ClusterShell.NodeSet.RangeSet.symmetric_difference_update" class="py-name" href="#" onclick="return doclink('link-324', 'symmetric_difference_update', 'link-116');">symmetric_difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">)</tt> </tt>
2078 </div></div><a name="L1602"></a><tt class="py-lineno">1602</tt> <tt class="py-line"> </tt>
2079 <a name="expand"></a><div id="expand-def"><a name="L1603"></a><tt class="py-lineno">1603</tt> <tt class="py-line"> </tt>
2080 <a name="L1604"></a><tt class="py-lineno">1604</tt> <a class="py-toggle" href="#" id="expand-toggle" onclick="return toggle('expand');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet-module.html#expand">expand</a><tt class="py-op">(</tt><tt class="py-param">pat</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2081 </div><div id="expand-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="expand-expanded"><a name="L1605"></a><tt class="py-lineno">1605</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2082 <a name="L1606"></a><tt class="py-lineno">1606</tt> <tt class="py-line"><tt class="py-docstring"> Commodity function that expands a pdsh-like pattern into a list of</tt> </tt>
2083 <a name="L1607"></a><tt class="py-lineno">1607</tt> <tt class="py-line"><tt class="py-docstring"> nodes.</tt> </tt>
2084 <a name="L1608"></a><tt class="py-lineno">1608</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2085 <a name="L1609"></a><tt class="py-lineno">1609</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-325" class="py-name"><a title="ClusterShell.NodeSet
2086 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-325', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
2087 </div><a name="L1610"></a><tt class="py-lineno">1610</tt> <tt class="py-line"> </tt>
2088 <a name="fold"></a><div id="fold-def"><a name="L1611"></a><tt class="py-lineno">1611</tt> <a class="py-toggle" href="#" id="fold-toggle" onclick="return toggle('fold');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet-module.html#fold">fold</a><tt class="py-op">(</tt><tt class="py-param">pat</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2089 </div><div id="fold-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="fold-expanded"><a name="L1612"></a><tt class="py-lineno">1612</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2090 <a name="L1613"></a><tt class="py-lineno">1613</tt> <tt class="py-line"><tt class="py-docstring"> Commodity function that clean dups and fold provided pattern with</tt> </tt>
2091 <a name="L1614"></a><tt class="py-lineno">1614</tt> <tt class="py-line"><tt class="py-docstring"> ranges and "/step" support.</tt> </tt>
2092 <a name="L1615"></a><tt class="py-lineno">1615</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2093 <a name="L1616"></a><tt class="py-lineno">1616</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-326" class="py-name"><a title="ClusterShell.NodeSet
2094 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-326', 'NodeSet', 'link-164');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">pat</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
2095 </div><a name="L1617"></a><tt class="py-lineno">1617</tt> <tt class="py-line"> </tt>
2096 <a name="grouplist"></a><div id="grouplist-def"><a name="L1618"></a><tt class="py-lineno">1618</tt> <a class="py-toggle" href="#" id="grouplist-toggle" onclick="return toggle('grouplist');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet-module.html#grouplist">grouplist</a><tt class="py-op">(</tt><tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2097 </div><div id="grouplist-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="grouplist-expanded"><a name="L1619"></a><tt class="py-lineno">1619</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
2098 <a name="L1620"></a><tt class="py-lineno">1620</tt> <tt class="py-line"><tt class="py-docstring"> Commodity function that retrieves the list of groups for a specified</tt> </tt>
2099 <a name="L1621"></a><tt class="py-lineno">1621</tt> <tt class="py-line"><tt class="py-docstring"> group namespace (or use default namespace).</tt> </tt>
2100 <a name="L1622"></a><tt class="py-lineno">1622</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
2101 <a name="L1623"></a><tt class="py-lineno">1623</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-327" class="py-name"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-327', 'STD_GROUP_RESOLVER', 'link-9');">STD_GROUP_RESOLVER</a></tt><tt class="py-op">.</tt><tt id="link-328" class="py-name"><a title="ClusterShell.NodeSet.grouplist
2102 ClusterShell.NodeUtils.GroupResolver.grouplist" class="py-name" href="#" onclick="return doclink('link-328', 'grouplist', 'link-265');">grouplist</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
2103 </div><a name="L1624"></a><tt class="py-lineno">1624</tt> <tt class="py-line"> </tt>
2104 <a name="_test"></a><div id="_test-def"><a name="L1625"></a><tt class="py-lineno">1625</tt> <tt class="py-line"> </tt>
2105 <a name="L1626"></a><tt class="py-lineno">1626</tt> <tt class="py-line"><tt class="py-comment"># doctest</tt> </tt>
2106 <a name="L1627"></a><tt class="py-lineno">1627</tt> <tt class="py-line"> </tt>
2107 <a name="L1628"></a><tt class="py-lineno">1628</tt> <a class="py-toggle" href="#" id="_test-toggle" onclick="return toggle('_test');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeSet-module.html#_test">_test</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2108 </div><div id="_test-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_test-expanded"><a name="L1629"></a><tt class="py-lineno">1629</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">doctest</tt> </tt>
2109 <a name="L1630"></a><tt class="py-lineno">1630</tt> <tt class="py-line"> <tt class="py-name">doctest</tt><tt class="py-op">.</tt><tt class="py-name">testmod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
2110 </div><a name="L1631"></a><tt class="py-lineno">1631</tt> <tt class="py-line"> </tt>
2111 <a name="L1632"></a><tt class="py-lineno">1632</tt> <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
2112 <a name="L1633"></a><tt class="py-lineno">1633</tt> <tt class="py-line"> <tt id="link-329" class="py-name" targets="Function ClusterShell.NodeSet._test()=ClusterShell.NodeSet-module.html#_test"><a title="ClusterShell.NodeSet._test" class="py-name" href="#" onclick="return doclink('link-329', '_test', 'link-329');">_test</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
2113 <a name="L1634"></a><tt class="py-lineno">1634</tt> <tt class="py-line"> </tt><script type="text/javascript">
2114 <!--
2115 expandto(location.href);
2116 // -->
2117 </script>
2118 </pre>
2119 <br />
2120 <!-- ==================== NAVIGATION BAR ==================== -->
2121 <table class="navbar" border="0" width="100%" cellpadding="0"
2122 bgcolor="#a0c0ff" cellspacing="0">
2123 <tr valign="middle">
2124
2125 <!-- Tree link -->
2126 <th>&nbsp;&nbsp;&nbsp;<a
2127 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
2128
2129 <!-- Index link -->
2130 <th>&nbsp;&nbsp;&nbsp;<a
2131 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
2132
2133 <!-- Help link -->
2134 <th>&nbsp;&nbsp;&nbsp;<a
2135 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
2136
2137 <!-- Project homepage -->
2138 <th class="navbar" align="right" width="100%">
2139 <table border="0" cellpadding="0" cellspacing="0">
2140 <tr><th class="navbar" align="center"
2141 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
2142 </tr></table></th>
2143 </tr>
2144 </table>
2145 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
2146 <tr>
2147 <td align="left" class="footer">
2148 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:24 2010
2149 </td>
2150 <td align="right" class="footer">
2151 <a target="mainFrame" href="http://epydoc.sourceforge.net"
2152 >http://epydoc.sourceforge.net</a>
2153 </td>
2154 </tr>
2155 </table>
2156
2157 <script type="text/javascript">
2158 <!--
2159 // Private objects are initially displayed (because if
2160 // javascript is turned off then we want them to be
2161 // visible); but by default, we want to hide them. So hide
2162 // them unless we have a cookie that says to show them.
2163 checkCookie();
2164 // -->
2165 </script>
2166 </body>
2167 </html>
+0
-294
doc/epydoc/html/ClusterShell.NodeSet.NodeGroupBase-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.NodeGroupBase</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;NodeGroupBase
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.NodeGroupBase-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class NodeGroupBase</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeGroupBase">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_17" name="uml_class_diagram_for_clusters_17">
63 <area shape="rect" id="node1" href="ClusterShell.NodeSet.NodeGroupBase-class.html" title="ClusterShell.NodeSet.NodeGroupBase" alt="" coords="89,345,212,389"/>
64 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__init__" title="Initialize an empty NodeSetBase." alt="" coords="17,39,283,57"/>
65 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__iter__" title="Iterator on single nodes as string." alt="" coords="17,57,283,76"/>
66 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__len__" title="Get the number of nodes in NodeSet." alt="" coords="17,76,283,95"/>
67 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__str__" title="Get ranges&#45;based pattern of node list." alt="" coords="17,95,283,113"/>
68 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__contains__" title="Is node contained in NodeSet ?" alt="" coords="17,113,283,132"/>
69 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#issubset" title="Report whether another nodeset contains this nodeset." alt="" coords="17,132,283,151"/>
70 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#issuperset" title="Report whether this nodeset contains another nodeset." alt="" coords="17,151,283,169"/>
71 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__eq__" title="NodeSet equality comparison." alt="" coords="17,169,283,188"/>
72 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__le__" title="Report whether another nodeset contains this nodeset." alt="" coords="17,188,283,207"/>
73 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__ge__" title="Report whether this nodeset contains another nodeset." alt="" coords="17,207,283,225"/>
74 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__lt__" title="x&lt;y" alt="" coords="17,225,283,244"/>
75 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__gt__" title="x&gt;y" alt="" coords="17,244,283,263"/>
76 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__" title="Return the node at index i." alt="" coords="17,263,283,281"/>
77 <area shape="rect" id="node63" href="ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__" title="Implement the ^= operator." alt="" coords="17,300,283,319"/>
78 <area shape="rect" id="node2" href="ClusterShell.NodeSet.NodeSetBase-class.html" title="Base class for NodeSet." alt="" coords="5,6,293,325"/>
79 </map>
80 <img src="uml_class_diagram_for_clusters_17.png" alt='' usemap="#uml_class_diagram_for_clusters_17" ismap="ismap" class="graph-without-title" />
81 </center>
82 </center>
83 <hr />
84 <!-- ==================== INSTANCE METHODS ==================== -->
85 <a name="section-InstanceMethods"></a>
86 <table class="summary" border="1" cellpadding="3"
87 cellspacing="0" width="100%" bgcolor="white">
88 <tr bgcolor="#70b0f0" class="table-header">
89 <td colspan="2" class="table-header">
90 <table border="0" cellpadding="0" cellspacing="0" width="100%">
91 <tr valign="top">
92 <td align="left"><span class="table-header">Instance Methods</span></td>
93 <td align="right" valign="top"
94 ><span class="options">[<a href="#section-InstanceMethods"
95 class="privatelink" onclick="toggle_private();"
96 >hide private</a>]</span></td>
97 </tr>
98 </table>
99 </td>
100 </tr>
101 <tr class="private">
102 <td width="15%" align="right" valign="top" class="summary">
103 <span class="summary-type">&nbsp;</span>
104 </td><td class="summary">
105 <table width="100%" cellpadding="0" cellspacing="0" border="0">
106 <tr>
107 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeGroupBase-class.html#_add" class="summary-sig-name" onclick="show_private();">_add</a>(<span class="summary-sig-arg">self</span>,
108 <span class="summary-sig-arg">pat</span>,
109 <span class="summary-sig-arg">rangeset</span>)</span><br />
110 Add groups from a (pat, rangeset) tuple.</td>
111 <td align="right" valign="top">
112 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeGroupBase._add">source&nbsp;code</a></span>
113
114 </td>
115 </tr>
116 </table>
117
118 </td>
119 </tr>
120 <tr>
121 <td colspan="2" class="summary">
122 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a></code></b>:
123 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__and__">__and__</a></code>,
124 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__contains__">__contains__</a></code>,
125 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__eq__">__eq__</a></code>,
126 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ge__">__ge__</a></code>,
127 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__">__getitem__</a></code>,
128 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__gt__">__gt__</a></code>,
129 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__iand__">__iand__</a></code>,
130 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__init__">__init__</a></code>,
131 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ior__">__ior__</a></code>,
132 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__isub__">__isub__</a></code>,
133 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__iter__">__iter__</a></code>,
134 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__">__ixor__</a></code>,
135 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__le__">__le__</a></code>,
136 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__len__">__len__</a></code>,
137 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__lt__">__lt__</a></code>,
138 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__or__">__or__</a></code>,
139 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__str__">__str__</a></code>,
140 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__sub__">__sub__</a></code>,
141 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__xor__">__xor__</a></code>,
142 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#add">add</a></code>,
143 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#clear">clear</a></code>,
144 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#difference">difference</a></code>,
145 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#difference_update">difference_update</a></code>,
146 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#intersection">intersection</a></code>,
147 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#intersection_update">intersection_update</a></code>,
148 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#issubset">issubset</a></code>,
149 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#issuperset">issuperset</a></code>,
150 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#remove">remove</a></code>,
151 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference">symmetric_difference</a></code>,
152 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference_update">symmetric_difference_update</a></code>,
153 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#union">union</a></code>,
154 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#update">update</a></code>
155 </p>
156 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a></code></b> (private):
157 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_binary_sanity_check" onclick="show_private();">_binary_sanity_check</a></code>,
158 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_iter" onclick="show_private();">_iter</a></code>,
159 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_iterbase" onclick="show_private();">_iterbase</a></code>
160 </p></div>
161 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
162 <code>__delattr__</code>,
163 <code>__format__</code>,
164 <code>__getattribute__</code>,
165 <code>__hash__</code>,
166 <code>__new__</code>,
167 <code>__reduce__</code>,
168 <code>__reduce_ex__</code>,
169 <code>__repr__</code>,
170 <code>__setattr__</code>,
171 <code>__sizeof__</code>,
172 <code>__subclasshook__</code>
173 </p>
174 </td>
175 </tr>
176 </table>
177 <!-- ==================== PROPERTIES ==================== -->
178 <a name="section-Properties"></a>
179 <table class="summary" border="1" cellpadding="3"
180 cellspacing="0" width="100%" bgcolor="white">
181 <tr bgcolor="#70b0f0" class="table-header">
182 <td colspan="2" class="table-header">
183 <table border="0" cellpadding="0" cellspacing="0" width="100%">
184 <tr valign="top">
185 <td align="left"><span class="table-header">Properties</span></td>
186 <td align="right" valign="top"
187 ><span class="options">[<a href="#section-Properties"
188 class="privatelink" onclick="toggle_private();"
189 >hide private</a>]</span></td>
190 </tr>
191 </table>
192 </td>
193 </tr>
194 <tr>
195 <td colspan="2" class="summary">
196 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
197 <code>__class__</code>
198 </p>
199 </td>
200 </tr>
201 </table>
202 <!-- ==================== METHOD DETAILS ==================== -->
203 <a name="section-MethodDetails"></a>
204 <table class="details" border="1" cellpadding="3"
205 cellspacing="0" width="100%" bgcolor="white">
206 <tr bgcolor="#70b0f0" class="table-header">
207 <td colspan="2" class="table-header">
208 <table border="0" cellpadding="0" cellspacing="0" width="100%">
209 <tr valign="top">
210 <td align="left"><span class="table-header">Method Details</span></td>
211 <td align="right" valign="top"
212 ><span class="options">[<a href="#section-MethodDetails"
213 class="privatelink" onclick="toggle_private();"
214 >hide private</a>]</span></td>
215 </tr>
216 </table>
217 </td>
218 </tr>
219 </table>
220 <a name="_add"></a>
221 <div class="private">
222 <table class="details" border="1" cellpadding="3"
223 cellspacing="0" width="100%" bgcolor="white">
224 <tr><td>
225 <table width="100%" cellpadding="0" cellspacing="0" border="0">
226 <tr valign="top"><td>
227 <h3 class="epydoc"><span class="sig"><span class="sig-name">_add</span>(<span class="sig-arg">self</span>,
228 <span class="sig-arg">pat</span>,
229 <span class="sig-arg">rangeset</span>)</span>
230 </h3>
231 </td><td align="right" valign="top"
232 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeGroupBase._add">source&nbsp;code</a></span>&nbsp;
233 </td>
234 </tr></table>
235
236 <p>Add groups from a (pat, rangeset) tuple. `pat' may be an existing
237 pattern and `rangeset' may be None.</p>
238 <dl class="fields">
239 <dt>Overrides:
240 <a href="ClusterShell.NodeSet.NodeSetBase-class.html#_add" onclick="show_private();">NodeSetBase._add</a>
241 </dt>
242 </dl>
243 </td></tr></table>
244 </div>
245 <br />
246 <!-- ==================== NAVIGATION BAR ==================== -->
247 <table class="navbar" border="0" width="100%" cellpadding="0"
248 bgcolor="#a0c0ff" cellspacing="0">
249 <tr valign="middle">
250
251 <!-- Tree link -->
252 <th>&nbsp;&nbsp;&nbsp;<a
253 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
254
255 <!-- Index link -->
256 <th>&nbsp;&nbsp;&nbsp;<a
257 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
258
259 <!-- Help link -->
260 <th>&nbsp;&nbsp;&nbsp;<a
261 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
262
263 <!-- Project homepage -->
264 <th class="navbar" align="right" width="100%">
265 <table border="0" cellpadding="0" cellspacing="0">
266 <tr><th class="navbar" align="center"
267 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
268 </tr></table></th>
269 </tr>
270 </table>
271 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
272 <tr>
273 <td align="left" class="footer">
274 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
275 </td>
276 <td align="right" class="footer">
277 <a target="mainFrame" href="http://epydoc.sourceforge.net"
278 >http://epydoc.sourceforge.net</a>
279 </td>
280 </tr>
281 </table>
282
283 <script type="text/javascript">
284 <!--
285 // Private objects are initially displayed (because if
286 // javascript is turned off then we want them to be
287 // visible); but by default, we want to hide them. So hide
288 // them unless we have a cookie that says to show them.
289 checkCookie();
290 // -->
291 </script>
292 </body>
293 </html>
+0
-800
doc/epydoc/html/ClusterShell.NodeSet.NodeSet-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.NodeSet</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;NodeSet
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class NodeSet</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_18" name="uml_class_diagram_for_clusters_18">
63 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#__init__" title="Initialize a NodeSet." alt="" coords="17,377,496,396"/>
64 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#fromlist" title="Class method that returns a new NodeSet with nodes from provided list." alt="" coords="17,396,496,415"/>
65 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#fromall" title="Class method that returns a new NodeSet with all nodes from optional &#160;groupsource." alt="" coords="17,415,496,433"/>
66 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#__getstate__" title="Called when pickling: remove references to group resolver." alt="" coords="17,433,496,452"/>
67 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#__setstate__" title="Called when unpickling: restore parser using non group resolver." alt="" coords="17,452,496,471"/>
68 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#regroup" title="Regroup nodeset using groups." alt="" coords="17,471,496,489"/>
69 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#issubset" title="Report whether another nodeset contains this nodeset." alt="" coords="17,489,496,508"/>
70 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#issuperset" title="Report whether this nodeset contains another nodeset." alt="" coords="17,508,496,527"/>
71 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#__getslice__" title="Return the slice from index i to index j&#45;1." alt="" coords="17,527,496,545"/>
72 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#split" title="Split the nodeset into nbr sub&#45;nodeset." alt="" coords="17,545,496,564"/>
73 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#update" title="s.update(t) returns nodeset s with elements added from t." alt="" coords="17,564,496,583"/>
74 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#intersection_update" title="s.intersection_update(t) returns nodeset s keeping only elements also found in t." alt="" coords="17,583,496,601"/>
75 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#difference_update" title="s.difference_update(t) returns nodeset s after removing elements found in &#160;t." alt="" coords="17,601,496,620"/>
76 <area shape="rect" id="node64" href="ClusterShell.NodeSet.NodeSet-class.html#symmetric_difference_update" title="s.symmetric_difference_update(t) returns nodeset s keeping all nodes that &#160;are in exactly one of the nodesets." alt="" coords="17,620,496,639"/>
77 <area shape="rect" id="node1" href="ClusterShell.NodeSet.NodeSet-class.html" title="Iterable class of nodes with node ranges support." alt="" coords="5,345,507,645"/>
78 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__iter__" title="Iterator on single nodes as string." alt="" coords="181,39,332,57"/>
79 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__len__" title="Get the number of nodes in NodeSet." alt="" coords="181,57,332,76"/>
80 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__str__" title="Get ranges&#45;based pattern of node list." alt="" coords="181,76,332,95"/>
81 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__contains__" title="Is node contained in NodeSet ?" alt="" coords="181,95,332,113"/>
82 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__eq__" title="NodeSet equality comparison." alt="" coords="181,113,332,132"/>
83 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__le__" title="Report whether another nodeset contains this nodeset." alt="" coords="181,132,332,151"/>
84 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__ge__" title="Report whether this nodeset contains another nodeset." alt="" coords="181,151,332,169"/>
85 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__lt__" title="x&lt;y" alt="" coords="181,169,332,188"/>
86 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__gt__" title="x&gt;y" alt="" coords="181,188,332,207"/>
87 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__" title="Return the node at index i." alt="" coords="181,207,332,225"/>
88 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#union" title="s.union(t) returns a new set with elements from both s and t." alt="" coords="181,225,332,244"/>
89 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__or__" title="Implements the | operator." alt="" coords="181,244,332,263"/>
90 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#add" title="Add node to NodeSet." alt="" coords="181,263,332,281"/>
91 <area shape="rect" id="node65" href="ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__" title="Implement the ^= operator." alt="" coords="181,300,332,319"/>
92 <area shape="rect" id="node2" href="ClusterShell.NodeSet.NodeSetBase-class.html" title="Base class for NodeSet." alt="" coords="169,6,343,325"/>
93 </map>
94 <img src="uml_class_diagram_for_clusters_18.png" alt='' usemap="#uml_class_diagram_for_clusters_18" ismap="ismap" class="graph-without-title" />
95 </center>
96 </center>
97 <hr />
98 <p>Iterable class of nodes with node ranges support.</p>
99 <p>NodeSet creation examples:</p>
100 <pre class="py-doctest">
101 <span class="py-prompt">&gt;&gt;&gt; </span>nodeset = NodeSet() <span class="py-comment"># empty NodeSet</span>
102 <span class="py-prompt">&gt;&gt;&gt; </span>nodeset = NodeSet(<span class="py-string">&quot;cluster3&quot;</span>) <span class="py-comment"># contains only cluster3</span>
103 <span class="py-prompt">&gt;&gt;&gt; </span>nodeset = NodeSet(<span class="py-string">&quot;cluster[5,10-42]&quot;</span>)
104 <span class="py-prompt">&gt;&gt;&gt; </span>nodeset = NodeSet(<span class="py-string">&quot;cluster[0-10/2]&quot;</span>)
105 <span class="py-prompt">&gt;&gt;&gt; </span>nodeset = NodeSet(<span class="py-string">&quot;cluster[0-10/2],othername[7-9,120-300]&quot;</span>)</pre>
106 <p>NodeSet provides methods like update(), intersection_update() or
107 difference_update() methods, which conform to the Python Set API.
108 However, unlike RangeSet or standard Set, NodeSet is somewhat not so
109 strict for convenience, and understands NodeSet instance or NodeSet
110 string as argument. Also, there is no strict definition of one element,
111 for example, it IS allowed to do: &gt;&gt;&gt;
112 nodeset.remove(&quot;blue[36-40]&quot;).</p>
113
114 <!-- ==================== INSTANCE METHODS ==================== -->
115 <a name="section-InstanceMethods"></a>
116 <table class="summary" border="1" cellpadding="3"
117 cellspacing="0" width="100%" bgcolor="white">
118 <tr bgcolor="#70b0f0" class="table-header">
119 <td colspan="2" class="table-header">
120 <table border="0" cellpadding="0" cellspacing="0" width="100%">
121 <tr valign="top">
122 <td align="left"><span class="table-header">Instance Methods</span></td>
123 <td align="right" valign="top"
124 ><span class="options">[<a href="#section-InstanceMethods"
125 class="privatelink" onclick="toggle_private();"
126 >hide private</a>]</span></td>
127 </tr>
128 </table>
129 </td>
130 </tr>
131 <tr>
132 <td width="15%" align="right" valign="top" class="summary">
133 <span class="summary-type">&nbsp;</span>
134 </td><td class="summary">
135 <table width="100%" cellpadding="0" cellspacing="0" border="0">
136 <tr>
137 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
138 <span class="summary-sig-arg">nodes</span>=<span class="summary-sig-default">None</span>,
139 <span class="summary-sig-arg">autostep</span>=<span class="summary-sig-default">None</span>,
140 <span class="summary-sig-arg">resolver</span>=<span class="summary-sig-default">None</span>)</span><br />
141 Initialize a NodeSet.</td>
142 <td align="right" valign="top">
143 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.__init__">source&nbsp;code</a></span>
144
145 </td>
146 </tr>
147 </table>
148
149 </td>
150 </tr>
151 <tr>
152 <td width="15%" align="right" valign="top" class="summary">
153 <span class="summary-type">&nbsp;</span>
154 </td><td class="summary">
155 <table width="100%" cellpadding="0" cellspacing="0" border="0">
156 <tr>
157 <td><span class="summary-sig"><a name="__getstate__"></a><span class="summary-sig-name">__getstate__</span>(<span class="summary-sig-arg">self</span>)</span><br />
158 Called when pickling: remove references to group resolver.</td>
159 <td align="right" valign="top">
160 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.__getstate__">source&nbsp;code</a></span>
161
162 </td>
163 </tr>
164 </table>
165
166 </td>
167 </tr>
168 <tr>
169 <td width="15%" align="right" valign="top" class="summary">
170 <span class="summary-type">&nbsp;</span>
171 </td><td class="summary">
172 <table width="100%" cellpadding="0" cellspacing="0" border="0">
173 <tr>
174 <td><span class="summary-sig"><a name="__setstate__"></a><span class="summary-sig-name">__setstate__</span>(<span class="summary-sig-arg">self</span>,
175 <span class="summary-sig-arg">dict</span>)</span><br />
176 Called when unpickling: restore parser using non group resolver.</td>
177 <td align="right" valign="top">
178 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.__setstate__">source&nbsp;code</a></span>
179
180 </td>
181 </tr>
182 </table>
183
184 </td>
185 </tr>
186 <tr class="private">
187 <td width="15%" align="right" valign="top" class="summary">
188 <span class="summary-type">&nbsp;</span>
189 </td><td class="summary">
190 <table width="100%" cellpadding="0" cellspacing="0" border="0">
191 <tr>
192 <td><span class="summary-sig"><a name="_find_groups"></a><span class="summary-sig-name">_find_groups</span>(<span class="summary-sig-arg">self</span>,
193 <span class="summary-sig-arg">node</span>,
194 <span class="summary-sig-arg">namespace</span>,
195 <span class="summary-sig-arg">allgroups</span>)</span><br />
196 Find groups of node by namespace.</td>
197 <td align="right" valign="top">
198 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet._find_groups">source&nbsp;code</a></span>
199
200 </td>
201 </tr>
202 </table>
203
204 </td>
205 </tr>
206 <tr>
207 <td width="15%" align="right" valign="top" class="summary">
208 <span class="summary-type">&nbsp;</span>
209 </td><td class="summary">
210 <table width="100%" cellpadding="0" cellspacing="0" border="0">
211 <tr>
212 <td><span class="summary-sig"><a name="regroup"></a><span class="summary-sig-name">regroup</span>(<span class="summary-sig-arg">self</span>,
213 <span class="summary-sig-arg">groupsource</span>=<span class="summary-sig-default">None</span>,
214 <span class="summary-sig-arg">autostep</span>=<span class="summary-sig-default">None</span>,
215 <span class="summary-sig-arg">overlap</span>=<span class="summary-sig-default">False</span>,
216 <span class="summary-sig-arg">noprefix</span>=<span class="summary-sig-default">False</span>)</span><br />
217 Regroup nodeset using groups.</td>
218 <td align="right" valign="top">
219 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.regroup">source&nbsp;code</a></span>
220
221 </td>
222 </tr>
223 </table>
224
225 </td>
226 </tr>
227 <tr>
228 <td width="15%" align="right" valign="top" class="summary">
229 <span class="summary-type">&nbsp;</span>
230 </td><td class="summary">
231 <table width="100%" cellpadding="0" cellspacing="0" border="0">
232 <tr>
233 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#issubset" class="summary-sig-name">issubset</a>(<span class="summary-sig-arg">self</span>,
234 <span class="summary-sig-arg">other</span>)</span><br />
235 Report whether another nodeset contains this nodeset.</td>
236 <td align="right" valign="top">
237 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.issubset">source&nbsp;code</a></span>
238
239 </td>
240 </tr>
241 </table>
242
243 </td>
244 </tr>
245 <tr>
246 <td width="15%" align="right" valign="top" class="summary">
247 <span class="summary-type">&nbsp;</span>
248 </td><td class="summary">
249 <table width="100%" cellpadding="0" cellspacing="0" border="0">
250 <tr>
251 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#issuperset" class="summary-sig-name">issuperset</a>(<span class="summary-sig-arg">self</span>,
252 <span class="summary-sig-arg">other</span>)</span><br />
253 Report whether this nodeset contains another nodeset.</td>
254 <td align="right" valign="top">
255 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.issuperset">source&nbsp;code</a></span>
256
257 </td>
258 </tr>
259 </table>
260
261 </td>
262 </tr>
263 <tr>
264 <td width="15%" align="right" valign="top" class="summary">
265 <span class="summary-type">&nbsp;</span>
266 </td><td class="summary">
267 <table width="100%" cellpadding="0" cellspacing="0" border="0">
268 <tr>
269 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#__getslice__" class="summary-sig-name">__getslice__</a>(<span class="summary-sig-arg">self</span>,
270 <span class="summary-sig-arg">i</span>,
271 <span class="summary-sig-arg">j</span>)</span><br />
272 Return the slice from index i to index j-1.</td>
273 <td align="right" valign="top">
274 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.__getslice__">source&nbsp;code</a></span>
275
276 </td>
277 </tr>
278 </table>
279
280 </td>
281 </tr>
282 <tr>
283 <td width="15%" align="right" valign="top" class="summary">
284 <span class="summary-type">&nbsp;</span>
285 </td><td class="summary">
286 <table width="100%" cellpadding="0" cellspacing="0" border="0">
287 <tr>
288 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#split" class="summary-sig-name">split</a>(<span class="summary-sig-arg">self</span>,
289 <span class="summary-sig-arg">nbr</span>)</span><br />
290 Split the nodeset into nbr sub-nodeset.</td>
291 <td align="right" valign="top">
292 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.split">source&nbsp;code</a></span>
293
294 </td>
295 </tr>
296 </table>
297
298 </td>
299 </tr>
300 <tr>
301 <td width="15%" align="right" valign="top" class="summary">
302 <span class="summary-type">&nbsp;</span>
303 </td><td class="summary">
304 <table width="100%" cellpadding="0" cellspacing="0" border="0">
305 <tr>
306 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#update" class="summary-sig-name">update</a>(<span class="summary-sig-arg">self</span>,
307 <span class="summary-sig-arg">other</span>)</span><br />
308 s.update(t) returns nodeset s with elements added from t.</td>
309 <td align="right" valign="top">
310 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.update">source&nbsp;code</a></span>
311
312 </td>
313 </tr>
314 </table>
315
316 </td>
317 </tr>
318 <tr>
319 <td width="15%" align="right" valign="top" class="summary">
320 <span class="summary-type">&nbsp;</span>
321 </td><td class="summary">
322 <table width="100%" cellpadding="0" cellspacing="0" border="0">
323 <tr>
324 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#intersection_update" class="summary-sig-name">intersection_update</a>(<span class="summary-sig-arg">self</span>,
325 <span class="summary-sig-arg">other</span>)</span><br />
326 s.intersection_update(t) returns nodeset s keeping only elements also
327 found in t.</td>
328 <td align="right" valign="top">
329 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.intersection_update">source&nbsp;code</a></span>
330
331 </td>
332 </tr>
333 </table>
334
335 </td>
336 </tr>
337 <tr>
338 <td width="15%" align="right" valign="top" class="summary">
339 <span class="summary-type">&nbsp;</span>
340 </td><td class="summary">
341 <table width="100%" cellpadding="0" cellspacing="0" border="0">
342 <tr>
343 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#difference_update" class="summary-sig-name">difference_update</a>(<span class="summary-sig-arg">self</span>,
344 <span class="summary-sig-arg">other</span>,
345 <span class="summary-sig-arg">strict</span>=<span class="summary-sig-default">False</span>)</span><br />
346 s.difference_update(t) returns nodeset s after removing elements
347 found in t.</td>
348 <td align="right" valign="top">
349 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.difference_update">source&nbsp;code</a></span>
350
351 </td>
352 </tr>
353 </table>
354
355 </td>
356 </tr>
357 <tr>
358 <td width="15%" align="right" valign="top" class="summary">
359 <span class="summary-type">&nbsp;</span>
360 </td><td class="summary">
361 <table width="100%" cellpadding="0" cellspacing="0" border="0">
362 <tr>
363 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSet-class.html#symmetric_difference_update" class="summary-sig-name">symmetric_difference_update</a>(<span class="summary-sig-arg">self</span>,
364 <span class="summary-sig-arg">other</span>)</span><br />
365 s.symmetric_difference_update(t) returns nodeset s keeping all nodes
366 that are in exactly one of the nodesets.</td>
367 <td align="right" valign="top">
368 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.symmetric_difference_update">source&nbsp;code</a></span>
369
370 </td>
371 </tr>
372 </table>
373
374 </td>
375 </tr>
376 <tr>
377 <td colspan="2" class="summary">
378 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a></code></b>:
379 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__and__">__and__</a></code>,
380 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__contains__">__contains__</a></code>,
381 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__eq__">__eq__</a></code>,
382 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ge__">__ge__</a></code>,
383 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__">__getitem__</a></code>,
384 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__gt__">__gt__</a></code>,
385 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__iand__">__iand__</a></code>,
386 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ior__">__ior__</a></code>,
387 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__isub__">__isub__</a></code>,
388 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__iter__">__iter__</a></code>,
389 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__">__ixor__</a></code>,
390 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__le__">__le__</a></code>,
391 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__len__">__len__</a></code>,
392 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__lt__">__lt__</a></code>,
393 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__or__">__or__</a></code>,
394 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__str__">__str__</a></code>,
395 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__sub__">__sub__</a></code>,
396 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__xor__">__xor__</a></code>,
397 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#add">add</a></code>,
398 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#clear">clear</a></code>,
399 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#difference">difference</a></code>,
400 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#intersection">intersection</a></code>,
401 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#remove">remove</a></code>,
402 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference">symmetric_difference</a></code>,
403 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#union">union</a></code>
404 </p>
405 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a></code></b> (private):
406 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_add" onclick="show_private();">_add</a></code>,
407 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_binary_sanity_check" onclick="show_private();">_binary_sanity_check</a></code>,
408 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_iter" onclick="show_private();">_iter</a></code>,
409 <code><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_iterbase" onclick="show_private();">_iterbase</a></code>
410 </p></div>
411 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
412 <code>__delattr__</code>,
413 <code>__format__</code>,
414 <code>__getattribute__</code>,
415 <code>__hash__</code>,
416 <code>__new__</code>,
417 <code>__reduce__</code>,
418 <code>__reduce_ex__</code>,
419 <code>__repr__</code>,
420 <code>__setattr__</code>,
421 <code>__sizeof__</code>,
422 <code>__subclasshook__</code>
423 </p>
424 </td>
425 </tr>
426 </table>
427 <!-- ==================== CLASS METHODS ==================== -->
428 <a name="section-ClassMethods"></a>
429 <table class="summary" border="1" cellpadding="3"
430 cellspacing="0" width="100%" bgcolor="white">
431 <tr bgcolor="#70b0f0" class="table-header">
432 <td colspan="2" class="table-header">
433 <table border="0" cellpadding="0" cellspacing="0" width="100%">
434 <tr valign="top">
435 <td align="left"><span class="table-header">Class Methods</span></td>
436 <td align="right" valign="top"
437 ><span class="options">[<a href="#section-ClassMethods"
438 class="privatelink" onclick="toggle_private();"
439 >hide private</a>]</span></td>
440 </tr>
441 </table>
442 </td>
443 </tr>
444 <tr>
445 <td width="15%" align="right" valign="top" class="summary">
446 <span class="summary-type">&nbsp;</span>
447 </td><td class="summary">
448 <table width="100%" cellpadding="0" cellspacing="0" border="0">
449 <tr>
450 <td><span class="summary-sig"><a name="fromlist"></a><span class="summary-sig-name">fromlist</span>(<span class="summary-sig-arg">cls</span>,
451 <span class="summary-sig-arg">nodelist</span>,
452 <span class="summary-sig-arg">autostep</span>=<span class="summary-sig-default">None</span>,
453 <span class="summary-sig-arg">resolver</span>=<span class="summary-sig-default">None</span>)</span><br />
454 Class method that returns a new NodeSet with nodes from provided
455 list.</td>
456 <td align="right" valign="top">
457 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.fromlist">source&nbsp;code</a></span>
458
459 </td>
460 </tr>
461 </table>
462
463 </td>
464 </tr>
465 <tr>
466 <td width="15%" align="right" valign="top" class="summary">
467 <span class="summary-type">&nbsp;</span>
468 </td><td class="summary">
469 <table width="100%" cellpadding="0" cellspacing="0" border="0">
470 <tr>
471 <td><span class="summary-sig"><a name="fromall"></a><span class="summary-sig-name">fromall</span>(<span class="summary-sig-arg">cls</span>,
472 <span class="summary-sig-arg">groupsource</span>=<span class="summary-sig-default">None</span>,
473 <span class="summary-sig-arg">autostep</span>=<span class="summary-sig-default">None</span>,
474 <span class="summary-sig-arg">resolver</span>=<span class="summary-sig-default">None</span>)</span><br />
475 Class method that returns a new NodeSet with all nodes from optional
476 groupsource.</td>
477 <td align="right" valign="top">
478 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.fromall">source&nbsp;code</a></span>
479
480 </td>
481 </tr>
482 </table>
483
484 </td>
485 </tr>
486 </table>
487 <!-- ==================== PROPERTIES ==================== -->
488 <a name="section-Properties"></a>
489 <table class="summary" border="1" cellpadding="3"
490 cellspacing="0" width="100%" bgcolor="white">
491 <tr bgcolor="#70b0f0" class="table-header">
492 <td colspan="2" class="table-header">
493 <table border="0" cellpadding="0" cellspacing="0" width="100%">
494 <tr valign="top">
495 <td align="left"><span class="table-header">Properties</span></td>
496 <td align="right" valign="top"
497 ><span class="options">[<a href="#section-Properties"
498 class="privatelink" onclick="toggle_private();"
499 >hide private</a>]</span></td>
500 </tr>
501 </table>
502 </td>
503 </tr>
504 <tr>
505 <td colspan="2" class="summary">
506 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
507 <code>__class__</code>
508 </p>
509 </td>
510 </tr>
511 </table>
512 <!-- ==================== METHOD DETAILS ==================== -->
513 <a name="section-MethodDetails"></a>
514 <table class="details" border="1" cellpadding="3"
515 cellspacing="0" width="100%" bgcolor="white">
516 <tr bgcolor="#70b0f0" class="table-header">
517 <td colspan="2" class="table-header">
518 <table border="0" cellpadding="0" cellspacing="0" width="100%">
519 <tr valign="top">
520 <td align="left"><span class="table-header">Method Details</span></td>
521 <td align="right" valign="top"
522 ><span class="options">[<a href="#section-MethodDetails"
523 class="privatelink" onclick="toggle_private();"
524 >hide private</a>]</span></td>
525 </tr>
526 </table>
527 </td>
528 </tr>
529 </table>
530 <a name="__init__"></a>
531 <div>
532 <table class="details" border="1" cellpadding="3"
533 cellspacing="0" width="100%" bgcolor="white">
534 <tr><td>
535 <table width="100%" cellpadding="0" cellspacing="0" border="0">
536 <tr valign="top"><td>
537 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
538 <span class="sig-arg">nodes</span>=<span class="sig-default">None</span>,
539 <span class="sig-arg">autostep</span>=<span class="sig-default">None</span>,
540 <span class="sig-arg">resolver</span>=<span class="sig-default">None</span>)</span>
541 <br /><em class="fname">(Constructor)</em>
542 </h3>
543 </td><td align="right" valign="top"
544 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.__init__">source&nbsp;code</a></span>&nbsp;
545 </td>
546 </tr></table>
547
548 <p>Initialize a NodeSet. The `nodes' argument may be a valid nodeset
549 string or a NodeSet object. If no nodes are specified, an empty NodeSet
550 is created.</p>
551 <dl class="fields">
552 <dt>Overrides:
553 object.__init__
554 </dt>
555 </dl>
556 </td></tr></table>
557 </div>
558 <a name="issubset"></a>
559 <div>
560 <table class="details" border="1" cellpadding="3"
561 cellspacing="0" width="100%" bgcolor="white">
562 <tr><td>
563 <table width="100%" cellpadding="0" cellspacing="0" border="0">
564 <tr valign="top"><td>
565 <h3 class="epydoc"><span class="sig"><span class="sig-name">issubset</span>(<span class="sig-arg">self</span>,
566 <span class="sig-arg">other</span>)</span>
567 </h3>
568 </td><td align="right" valign="top"
569 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.issubset">source&nbsp;code</a></span>&nbsp;
570 </td>
571 </tr></table>
572
573 <p>Report whether another nodeset contains this nodeset.</p>
574 <dl class="fields">
575 <dt>Overrides:
576 <a href="ClusterShell.NodeSet.NodeSetBase-class.html#issubset">NodeSetBase.issubset</a>
577 </dt>
578 </dl>
579 </td></tr></table>
580 </div>
581 <a name="issuperset"></a>
582 <div>
583 <table class="details" border="1" cellpadding="3"
584 cellspacing="0" width="100%" bgcolor="white">
585 <tr><td>
586 <table width="100%" cellpadding="0" cellspacing="0" border="0">
587 <tr valign="top"><td>
588 <h3 class="epydoc"><span class="sig"><span class="sig-name">issuperset</span>(<span class="sig-arg">self</span>,
589 <span class="sig-arg">other</span>)</span>
590 </h3>
591 </td><td align="right" valign="top"
592 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.issuperset">source&nbsp;code</a></span>&nbsp;
593 </td>
594 </tr></table>
595
596 <p>Report whether this nodeset contains another nodeset.</p>
597 <dl class="fields">
598 <dt>Overrides:
599 <a href="ClusterShell.NodeSet.NodeSetBase-class.html#issuperset">NodeSetBase.issuperset</a>
600 </dt>
601 </dl>
602 </td></tr></table>
603 </div>
604 <a name="__getslice__"></a>
605 <div>
606 <table class="details" border="1" cellpadding="3"
607 cellspacing="0" width="100%" bgcolor="white">
608 <tr><td>
609 <table width="100%" cellpadding="0" cellspacing="0" border="0">
610 <tr valign="top"><td>
611 <h3 class="epydoc"><span class="sig"><span class="sig-name">__getslice__</span>(<span class="sig-arg">self</span>,
612 <span class="sig-arg">i</span>,
613 <span class="sig-arg">j</span>)</span>
614 <br /><em class="fname">(Slicling operator)</em>
615 </h3>
616 </td><td align="right" valign="top"
617 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.__getslice__">source&nbsp;code</a></span>&nbsp;
618 </td>
619 </tr></table>
620
621 <p>Return the slice from index i to index j-1. For convenience only, not
622 optimized as of version 1.0.</p>
623 <dl class="fields">
624 </dl>
625 </td></tr></table>
626 </div>
627 <a name="split"></a>
628 <div>
629 <table class="details" border="1" cellpadding="3"
630 cellspacing="0" width="100%" bgcolor="white">
631 <tr><td>
632 <table width="100%" cellpadding="0" cellspacing="0" border="0">
633 <tr valign="top"><td>
634 <h3 class="epydoc"><span class="sig"><span class="sig-name">split</span>(<span class="sig-arg">self</span>,
635 <span class="sig-arg">nbr</span>)</span>
636 </h3>
637 </td><td align="right" valign="top"
638 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.split">source&nbsp;code</a></span>&nbsp;
639 </td>
640 </tr></table>
641
642 <p>Split the nodeset into nbr sub-nodeset. Each sub-nodeset will have the
643 same number of element more or less 1. Current nodeset remains
644 unmodified.</p>
645 <pre class="py-doctest">
646 <span class="py-prompt">&gt;&gt;&gt; </span>NodeSet(<span class="py-string">&quot;foo[1-5]&quot;</span>).split(3)
647 <span class="py-output">NodeSet(&quot;foo[1-2]&quot;)</span>
648 <span class="py-output">NodeSet(&quot;foo[3-4]&quot;)</span>
649 <span class="py-output">NodeSet(&quot;foo5&quot;)</span></pre>
650 <dl class="fields">
651 </dl>
652 </td></tr></table>
653 </div>
654 <a name="update"></a>
655 <div>
656 <table class="details" border="1" cellpadding="3"
657 cellspacing="0" width="100%" bgcolor="white">
658 <tr><td>
659 <table width="100%" cellpadding="0" cellspacing="0" border="0">
660 <tr valign="top"><td>
661 <h3 class="epydoc"><span class="sig"><span class="sig-name">update</span>(<span class="sig-arg">self</span>,
662 <span class="sig-arg">other</span>)</span>
663 </h3>
664 </td><td align="right" valign="top"
665 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.update">source&nbsp;code</a></span>&nbsp;
666 </td>
667 </tr></table>
668
669 <p>s.update(t) returns nodeset s with elements added from t.</p>
670 <dl class="fields">
671 <dt>Overrides:
672 <a href="ClusterShell.NodeSet.NodeSetBase-class.html#update">NodeSetBase.update</a>
673 </dt>
674 </dl>
675 </td></tr></table>
676 </div>
677 <a name="intersection_update"></a>
678 <div>
679 <table class="details" border="1" cellpadding="3"
680 cellspacing="0" width="100%" bgcolor="white">
681 <tr><td>
682 <table width="100%" cellpadding="0" cellspacing="0" border="0">
683 <tr valign="top"><td>
684 <h3 class="epydoc"><span class="sig"><span class="sig-name">intersection_update</span>(<span class="sig-arg">self</span>,
685 <span class="sig-arg">other</span>)</span>
686 </h3>
687 </td><td align="right" valign="top"
688 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.intersection_update">source&nbsp;code</a></span>&nbsp;
689 </td>
690 </tr></table>
691
692 <p>s.intersection_update(t) returns nodeset s keeping only elements also
693 found in t.</p>
694 <dl class="fields">
695 <dt>Overrides:
696 <a href="ClusterShell.NodeSet.NodeSetBase-class.html#intersection_update">NodeSetBase.intersection_update</a>
697 </dt>
698 </dl>
699 </td></tr></table>
700 </div>
701 <a name="difference_update"></a>
702 <div>
703 <table class="details" border="1" cellpadding="3"
704 cellspacing="0" width="100%" bgcolor="white">
705 <tr><td>
706 <table width="100%" cellpadding="0" cellspacing="0" border="0">
707 <tr valign="top"><td>
708 <h3 class="epydoc"><span class="sig"><span class="sig-name">difference_update</span>(<span class="sig-arg">self</span>,
709 <span class="sig-arg">other</span>,
710 <span class="sig-arg">strict</span>=<span class="sig-default">False</span>)</span>
711 </h3>
712 </td><td align="right" valign="top"
713 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.difference_update">source&nbsp;code</a></span>&nbsp;
714 </td>
715 </tr></table>
716
717 <p>s.difference_update(t) returns nodeset s after removing elements found
718 in t. If strict is True, raise KeyError if an element cannot be
719 removed.</p>
720 <dl class="fields">
721 <dt>Overrides:
722 <a href="ClusterShell.NodeSet.NodeSetBase-class.html#difference_update">NodeSetBase.difference_update</a>
723 </dt>
724 </dl>
725 </td></tr></table>
726 </div>
727 <a name="symmetric_difference_update"></a>
728 <div>
729 <table class="details" border="1" cellpadding="3"
730 cellspacing="0" width="100%" bgcolor="white">
731 <tr><td>
732 <table width="100%" cellpadding="0" cellspacing="0" border="0">
733 <tr valign="top"><td>
734 <h3 class="epydoc"><span class="sig"><span class="sig-name">symmetric_difference_update</span>(<span class="sig-arg">self</span>,
735 <span class="sig-arg">other</span>)</span>
736 </h3>
737 </td><td align="right" valign="top"
738 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSet.symmetric_difference_update">source&nbsp;code</a></span>&nbsp;
739 </td>
740 </tr></table>
741
742 <p>s.symmetric_difference_update(t) returns nodeset s keeping all nodes
743 that are in exactly one of the nodesets.</p>
744 <dl class="fields">
745 <dt>Overrides:
746 <a href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference_update">NodeSetBase.symmetric_difference_update</a>
747 </dt>
748 </dl>
749 </td></tr></table>
750 </div>
751 <br />
752 <!-- ==================== NAVIGATION BAR ==================== -->
753 <table class="navbar" border="0" width="100%" cellpadding="0"
754 bgcolor="#a0c0ff" cellspacing="0">
755 <tr valign="middle">
756
757 <!-- Tree link -->
758 <th>&nbsp;&nbsp;&nbsp;<a
759 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
760
761 <!-- Index link -->
762 <th>&nbsp;&nbsp;&nbsp;<a
763 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
764
765 <!-- Help link -->
766 <th>&nbsp;&nbsp;&nbsp;<a
767 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
768
769 <!-- Project homepage -->
770 <th class="navbar" align="right" width="100%">
771 <table border="0" cellpadding="0" cellspacing="0">
772 <tr><th class="navbar" align="center"
773 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
774 </tr></table></th>
775 </tr>
776 </table>
777 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
778 <tr>
779 <td align="left" class="footer">
780 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
781 </td>
782 <td align="right" class="footer">
783 <a target="mainFrame" href="http://epydoc.sourceforge.net"
784 >http://epydoc.sourceforge.net</a>
785 </td>
786 </tr>
787 </table>
788
789 <script type="text/javascript">
790 <!--
791 // Private objects are initially displayed (because if
792 // javascript is turned off then we want them to be
793 // visible); but by default, we want to hide them. So hide
794 // them unless we have a cookie that says to show them.
795 checkCookie();
796 // -->
797 </script>
798 </body>
799 </html>
+0
-1194
doc/epydoc/html/ClusterShell.NodeSet.NodeSetBase-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.NodeSetBase</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;NodeSetBase
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class NodeSetBase</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_19" name="uml_class_diagram_for_clusters_19">
63 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__init__" title="Initialize an empty NodeSetBase." alt="" coords="17,39,283,57"/>
64 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__iter__" title="Iterator on single nodes as string." alt="" coords="17,57,283,76"/>
65 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__len__" title="Get the number of nodes in NodeSet." alt="" coords="17,76,283,95"/>
66 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__str__" title="Get ranges&#45;based pattern of node list." alt="" coords="17,95,283,113"/>
67 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__contains__" title="Is node contained in NodeSet ?" alt="" coords="17,113,283,132"/>
68 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#issubset" title="Report whether another nodeset contains this nodeset." alt="" coords="17,132,283,151"/>
69 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#issuperset" title="Report whether this nodeset contains another nodeset." alt="" coords="17,151,283,169"/>
70 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__eq__" title="NodeSet equality comparison." alt="" coords="17,169,283,188"/>
71 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__le__" title="Report whether another nodeset contains this nodeset." alt="" coords="17,188,283,207"/>
72 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__ge__" title="Report whether this nodeset contains another nodeset." alt="" coords="17,207,283,225"/>
73 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__lt__" title="x&lt;y" alt="" coords="17,225,283,244"/>
74 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__gt__" title="x&gt;y" alt="" coords="17,244,283,263"/>
75 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__" title="Return the node at index i." alt="" coords="17,263,283,281"/>
76 <area shape="rect" id="node66" href="ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__" title="Implement the ^= operator." alt="" coords="17,300,283,319"/>
77 <area shape="rect" id="node1" href="ClusterShell.NodeSet.NodeSetBase-class.html" title="Base class for NodeSet." alt="" coords="5,6,293,325"/>
78 <area shape="rect" id="node2" href="ClusterShell.NodeSet.NodeGroupBase-class.html" title="ClusterShell.NodeSet.NodeGroupBase" alt="" coords="15,345,148,383"/>
79 <area shape="rect" id="node3" href="ClusterShell.NodeSet.NodeSet-class.html" title="Iterable class of nodes with node ranges support." alt="" coords="177,345,265,383"/>
80 </map>
81 <img src="uml_class_diagram_for_clusters_19.png" alt='' usemap="#uml_class_diagram_for_clusters_19" ismap="ismap" class="graph-without-title" />
82 </center>
83 </center>
84 <hr />
85 <p>Base class for NodeSet.</p>
86
87 <!-- ==================== INSTANCE METHODS ==================== -->
88 <a name="section-InstanceMethods"></a>
89 <table class="summary" border="1" cellpadding="3"
90 cellspacing="0" width="100%" bgcolor="white">
91 <tr bgcolor="#70b0f0" class="table-header">
92 <td colspan="2" class="table-header">
93 <table border="0" cellpadding="0" cellspacing="0" width="100%">
94 <tr valign="top">
95 <td align="left"><span class="table-header">Instance Methods</span></td>
96 <td align="right" valign="top"
97 ><span class="options">[<a href="#section-InstanceMethods"
98 class="privatelink" onclick="toggle_private();"
99 >hide private</a>]</span></td>
100 </tr>
101 </table>
102 </td>
103 </tr>
104 <tr>
105 <td width="15%" align="right" valign="top" class="summary">
106 <span class="summary-type">&nbsp;</span>
107 </td><td class="summary">
108 <table width="100%" cellpadding="0" cellspacing="0" border="0">
109 <tr>
110 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
111 <span class="summary-sig-arg">pattern</span>=<span class="summary-sig-default">None</span>,
112 <span class="summary-sig-arg">rangeset</span>=<span class="summary-sig-default">None</span>)</span><br />
113 Initialize an empty NodeSetBase.</td>
114 <td align="right" valign="top">
115 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__init__">source&nbsp;code</a></span>
116
117 </td>
118 </tr>
119 </table>
120
121 </td>
122 </tr>
123 <tr class="private">
124 <td width="15%" align="right" valign="top" class="summary">
125 <span class="summary-type">&nbsp;</span>
126 </td><td class="summary">
127 <table width="100%" cellpadding="0" cellspacing="0" border="0">
128 <tr>
129 <td><span class="summary-sig"><a name="_iter"></a><span class="summary-sig-name">_iter</span>(<span class="summary-sig-arg">self</span>)</span><br />
130 Iterator on internal item tuples (pattern, index, padding).</td>
131 <td align="right" valign="top">
132 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase._iter">source&nbsp;code</a></span>
133
134 </td>
135 </tr>
136 </table>
137
138 </td>
139 </tr>
140 <tr class="private">
141 <td width="15%" align="right" valign="top" class="summary">
142 <span class="summary-type">&nbsp;</span>
143 </td><td class="summary">
144 <table width="100%" cellpadding="0" cellspacing="0" border="0">
145 <tr>
146 <td><span class="summary-sig"><a name="_iterbase"></a><span class="summary-sig-name">_iterbase</span>(<span class="summary-sig-arg">self</span>)</span><br />
147 Iterator on single, one-item NodeSetBase objects.</td>
148 <td align="right" valign="top">
149 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase._iterbase">source&nbsp;code</a></span>
150
151 </td>
152 </tr>
153 </table>
154
155 </td>
156 </tr>
157 <tr>
158 <td width="15%" align="right" valign="top" class="summary">
159 <span class="summary-type">&nbsp;</span>
160 </td><td class="summary">
161 <table width="100%" cellpadding="0" cellspacing="0" border="0">
162 <tr>
163 <td><span class="summary-sig"><a name="__iter__"></a><span class="summary-sig-name">__iter__</span>(<span class="summary-sig-arg">self</span>)</span><br />
164 Iterator on single nodes as string.</td>
165 <td align="right" valign="top">
166 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__iter__">source&nbsp;code</a></span>
167
168 </td>
169 </tr>
170 </table>
171
172 </td>
173 </tr>
174 <tr>
175 <td width="15%" align="right" valign="top" class="summary">
176 <span class="summary-type">&nbsp;</span>
177 </td><td class="summary">
178 <table width="100%" cellpadding="0" cellspacing="0" border="0">
179 <tr>
180 <td><span class="summary-sig"><a name="__len__"></a><span class="summary-sig-name">__len__</span>(<span class="summary-sig-arg">self</span>)</span><br />
181 Get the number of nodes in NodeSet.</td>
182 <td align="right" valign="top">
183 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__len__">source&nbsp;code</a></span>
184
185 </td>
186 </tr>
187 </table>
188
189 </td>
190 </tr>
191 <tr>
192 <td width="15%" align="right" valign="top" class="summary">
193 <span class="summary-type">&nbsp;</span>
194 </td><td class="summary">
195 <table width="100%" cellpadding="0" cellspacing="0" border="0">
196 <tr>
197 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
198 Get ranges-based pattern of node list.</td>
199 <td align="right" valign="top">
200 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__str__">source&nbsp;code</a></span>
201
202 </td>
203 </tr>
204 </table>
205
206 </td>
207 </tr>
208 <tr>
209 <td width="15%" align="right" valign="top" class="summary">
210 <span class="summary-type">&nbsp;</span>
211 </td><td class="summary">
212 <table width="100%" cellpadding="0" cellspacing="0" border="0">
213 <tr>
214 <td><span class="summary-sig"><a name="__contains__"></a><span class="summary-sig-name">__contains__</span>(<span class="summary-sig-arg">self</span>,
215 <span class="summary-sig-arg">other</span>)</span><br />
216 Is node contained in NodeSet ?</td>
217 <td align="right" valign="top">
218 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__contains__">source&nbsp;code</a></span>
219
220 </td>
221 </tr>
222 </table>
223
224 </td>
225 </tr>
226 <tr class="private">
227 <td width="15%" align="right" valign="top" class="summary">
228 <span class="summary-type">&nbsp;</span>
229 </td><td class="summary">
230 <table width="100%" cellpadding="0" cellspacing="0" border="0">
231 <tr>
232 <td><span class="summary-sig"><a name="_binary_sanity_check"></a><span class="summary-sig-name">_binary_sanity_check</span>(<span class="summary-sig-arg">self</span>,
233 <span class="summary-sig-arg">other</span>)</span></td>
234 <td align="right" valign="top">
235 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase._binary_sanity_check">source&nbsp;code</a></span>
236
237 </td>
238 </tr>
239 </table>
240
241 </td>
242 </tr>
243 <tr>
244 <td width="15%" align="right" valign="top" class="summary">
245 <span class="summary-type">&nbsp;</span>
246 </td><td class="summary">
247 <table width="100%" cellpadding="0" cellspacing="0" border="0">
248 <tr>
249 <td><span class="summary-sig"><a name="issubset"></a><span class="summary-sig-name">issubset</span>(<span class="summary-sig-arg">self</span>,
250 <span class="summary-sig-arg">other</span>)</span><br />
251 Report whether another nodeset contains this nodeset.</td>
252 <td align="right" valign="top">
253 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.issubset">source&nbsp;code</a></span>
254
255 </td>
256 </tr>
257 </table>
258
259 </td>
260 </tr>
261 <tr>
262 <td width="15%" align="right" valign="top" class="summary">
263 <span class="summary-type">&nbsp;</span>
264 </td><td class="summary">
265 <table width="100%" cellpadding="0" cellspacing="0" border="0">
266 <tr>
267 <td><span class="summary-sig"><a name="issuperset"></a><span class="summary-sig-name">issuperset</span>(<span class="summary-sig-arg">self</span>,
268 <span class="summary-sig-arg">other</span>)</span><br />
269 Report whether this nodeset contains another nodeset.</td>
270 <td align="right" valign="top">
271 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.issuperset">source&nbsp;code</a></span>
272
273 </td>
274 </tr>
275 </table>
276
277 </td>
278 </tr>
279 <tr>
280 <td width="15%" align="right" valign="top" class="summary">
281 <span class="summary-type">&nbsp;</span>
282 </td><td class="summary">
283 <table width="100%" cellpadding="0" cellspacing="0" border="0">
284 <tr>
285 <td><span class="summary-sig"><a name="__eq__"></a><span class="summary-sig-name">__eq__</span>(<span class="summary-sig-arg">self</span>,
286 <span class="summary-sig-arg">other</span>)</span><br />
287 NodeSet equality comparison.</td>
288 <td align="right" valign="top">
289 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__eq__">source&nbsp;code</a></span>
290
291 </td>
292 </tr>
293 </table>
294
295 </td>
296 </tr>
297 <tr>
298 <td width="15%" align="right" valign="top" class="summary">
299 <span class="summary-type">&nbsp;</span>
300 </td><td class="summary">
301 <table width="100%" cellpadding="0" cellspacing="0" border="0">
302 <tr>
303 <td><span class="summary-sig"><a name="__le__"></a><span class="summary-sig-name">__le__</span>(<span class="summary-sig-arg">self</span>,
304 <span class="summary-sig-arg">other</span>)</span><br />
305 Report whether another nodeset contains this nodeset.</td>
306 <td align="right" valign="top">
307 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.issubset">source&nbsp;code</a></span>
308
309 </td>
310 </tr>
311 </table>
312
313 </td>
314 </tr>
315 <tr>
316 <td width="15%" align="right" valign="top" class="summary">
317 <span class="summary-type">&nbsp;</span>
318 </td><td class="summary">
319 <table width="100%" cellpadding="0" cellspacing="0" border="0">
320 <tr>
321 <td><span class="summary-sig"><a name="__ge__"></a><span class="summary-sig-name">__ge__</span>(<span class="summary-sig-arg">self</span>,
322 <span class="summary-sig-arg">other</span>)</span><br />
323 Report whether this nodeset contains another nodeset.</td>
324 <td align="right" valign="top">
325 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.issuperset">source&nbsp;code</a></span>
326
327 </td>
328 </tr>
329 </table>
330
331 </td>
332 </tr>
333 <tr>
334 <td width="15%" align="right" valign="top" class="summary">
335 <span class="summary-type">&nbsp;</span>
336 </td><td class="summary">
337 <table width="100%" cellpadding="0" cellspacing="0" border="0">
338 <tr>
339 <td><span class="summary-sig"><a name="__lt__"></a><span class="summary-sig-name">__lt__</span>(<span class="summary-sig-arg">x</span>,
340 <span class="summary-sig-arg">y</span>)</span><br />
341 x&lt;y</td>
342 <td align="right" valign="top">
343 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__lt__">source&nbsp;code</a></span>
344
345 </td>
346 </tr>
347 </table>
348
349 </td>
350 </tr>
351 <tr>
352 <td width="15%" align="right" valign="top" class="summary">
353 <span class="summary-type">&nbsp;</span>
354 </td><td class="summary">
355 <table width="100%" cellpadding="0" cellspacing="0" border="0">
356 <tr>
357 <td><span class="summary-sig"><a name="__gt__"></a><span class="summary-sig-name">__gt__</span>(<span class="summary-sig-arg">x</span>,
358 <span class="summary-sig-arg">y</span>)</span><br />
359 x&gt;y</td>
360 <td align="right" valign="top">
361 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__gt__">source&nbsp;code</a></span>
362
363 </td>
364 </tr>
365 </table>
366
367 </td>
368 </tr>
369 <tr>
370 <td width="15%" align="right" valign="top" class="summary">
371 <span class="summary-type">&nbsp;</span>
372 </td><td class="summary">
373 <table width="100%" cellpadding="0" cellspacing="0" border="0">
374 <tr>
375 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__" class="summary-sig-name">__getitem__</a>(<span class="summary-sig-arg">self</span>,
376 <span class="summary-sig-arg">i</span>)</span><br />
377 Return the node at index i.</td>
378 <td align="right" valign="top">
379 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__getitem__">source&nbsp;code</a></span>
380
381 </td>
382 </tr>
383 </table>
384
385 </td>
386 </tr>
387 <tr class="private">
388 <td width="15%" align="right" valign="top" class="summary">
389 <span class="summary-type">&nbsp;</span>
390 </td><td class="summary">
391 <table width="100%" cellpadding="0" cellspacing="0" border="0">
392 <tr>
393 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_add" class="summary-sig-name" onclick="show_private();">_add</a>(<span class="summary-sig-arg">self</span>,
394 <span class="summary-sig-arg">pat</span>,
395 <span class="summary-sig-arg">rangeset</span>)</span><br />
396 Add nodes from a (pat, rangeset) tuple.</td>
397 <td align="right" valign="top">
398 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase._add">source&nbsp;code</a></span>
399
400 </td>
401 </tr>
402 </table>
403
404 </td>
405 </tr>
406 <tr>
407 <td width="15%" align="right" valign="top" class="summary">
408 <span class="summary-type">&nbsp;</span>
409 </td><td class="summary">
410 <table width="100%" cellpadding="0" cellspacing="0" border="0">
411 <tr>
412 <td><span class="summary-sig"><a name="union"></a><span class="summary-sig-name">union</span>(<span class="summary-sig-arg">self</span>,
413 <span class="summary-sig-arg">other</span>)</span><br />
414 s.union(t) returns a new set with elements from both s and t.</td>
415 <td align="right" valign="top">
416 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.union">source&nbsp;code</a></span>
417
418 </td>
419 </tr>
420 </table>
421
422 </td>
423 </tr>
424 <tr>
425 <td width="15%" align="right" valign="top" class="summary">
426 <span class="summary-type">&nbsp;</span>
427 </td><td class="summary">
428 <table width="100%" cellpadding="0" cellspacing="0" border="0">
429 <tr>
430 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__or__" class="summary-sig-name">__or__</a>(<span class="summary-sig-arg">self</span>,
431 <span class="summary-sig-arg">other</span>)</span><br />
432 Implements the | operator.</td>
433 <td align="right" valign="top">
434 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__or__">source&nbsp;code</a></span>
435
436 </td>
437 </tr>
438 </table>
439
440 </td>
441 </tr>
442 <tr>
443 <td width="15%" align="right" valign="top" class="summary">
444 <span class="summary-type">&nbsp;</span>
445 </td><td class="summary">
446 <table width="100%" cellpadding="0" cellspacing="0" border="0">
447 <tr>
448 <td><span class="summary-sig"><a name="add"></a><span class="summary-sig-name">add</span>(<span class="summary-sig-arg">self</span>,
449 <span class="summary-sig-arg">other</span>)</span><br />
450 Add node to NodeSet.</td>
451 <td align="right" valign="top">
452 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.add">source&nbsp;code</a></span>
453
454 </td>
455 </tr>
456 </table>
457
458 </td>
459 </tr>
460 <tr>
461 <td width="15%" align="right" valign="top" class="summary">
462 <span class="summary-type">&nbsp;</span>
463 </td><td class="summary">
464 <table width="100%" cellpadding="0" cellspacing="0" border="0">
465 <tr>
466 <td><span class="summary-sig"><a name="update"></a><span class="summary-sig-name">update</span>(<span class="summary-sig-arg">self</span>,
467 <span class="summary-sig-arg">other</span>)</span><br />
468 s.update(t) returns nodeset s with elements added from t.</td>
469 <td align="right" valign="top">
470 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.update">source&nbsp;code</a></span>
471
472 </td>
473 </tr>
474 </table>
475
476 </td>
477 </tr>
478 <tr>
479 <td width="15%" align="right" valign="top" class="summary">
480 <span class="summary-type">&nbsp;</span>
481 </td><td class="summary">
482 <table width="100%" cellpadding="0" cellspacing="0" border="0">
483 <tr>
484 <td><span class="summary-sig"><a name="clear"></a><span class="summary-sig-name">clear</span>(<span class="summary-sig-arg">self</span>)</span><br />
485 Remove all nodes from this nodeset.</td>
486 <td align="right" valign="top">
487 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.clear">source&nbsp;code</a></span>
488
489 </td>
490 </tr>
491 </table>
492
493 </td>
494 </tr>
495 <tr>
496 <td width="15%" align="right" valign="top" class="summary">
497 <span class="summary-type">&nbsp;</span>
498 </td><td class="summary">
499 <table width="100%" cellpadding="0" cellspacing="0" border="0">
500 <tr>
501 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ior__" class="summary-sig-name">__ior__</a>(<span class="summary-sig-arg">self</span>,
502 <span class="summary-sig-arg">other</span>)</span><br />
503 Implements the |= operator.</td>
504 <td align="right" valign="top">
505 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__ior__">source&nbsp;code</a></span>
506
507 </td>
508 </tr>
509 </table>
510
511 </td>
512 </tr>
513 <tr>
514 <td width="15%" align="right" valign="top" class="summary">
515 <span class="summary-type">&nbsp;</span>
516 </td><td class="summary">
517 <table width="100%" cellpadding="0" cellspacing="0" border="0">
518 <tr>
519 <td><span class="summary-sig"><a name="intersection"></a><span class="summary-sig-name">intersection</span>(<span class="summary-sig-arg">self</span>,
520 <span class="summary-sig-arg">other</span>)</span><br />
521 s.intersection(t) returns a new set with elements common to s and t.</td>
522 <td align="right" valign="top">
523 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.intersection">source&nbsp;code</a></span>
524
525 </td>
526 </tr>
527 </table>
528
529 </td>
530 </tr>
531 <tr>
532 <td width="15%" align="right" valign="top" class="summary">
533 <span class="summary-type">&nbsp;</span>
534 </td><td class="summary">
535 <table width="100%" cellpadding="0" cellspacing="0" border="0">
536 <tr>
537 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__and__" class="summary-sig-name">__and__</a>(<span class="summary-sig-arg">self</span>,
538 <span class="summary-sig-arg">other</span>)</span><br />
539 Implements the &amp; operator.</td>
540 <td align="right" valign="top">
541 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__and__">source&nbsp;code</a></span>
542
543 </td>
544 </tr>
545 </table>
546
547 </td>
548 </tr>
549 <tr>
550 <td width="15%" align="right" valign="top" class="summary">
551 <span class="summary-type">&nbsp;</span>
552 </td><td class="summary">
553 <table width="100%" cellpadding="0" cellspacing="0" border="0">
554 <tr>
555 <td><span class="summary-sig"><a name="intersection_update"></a><span class="summary-sig-name">intersection_update</span>(<span class="summary-sig-arg">self</span>,
556 <span class="summary-sig-arg">other</span>)</span><br />
557 s.intersection_update(t) returns nodeset s keeping only elements also
558 found in t.</td>
559 <td align="right" valign="top">
560 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.intersection_update">source&nbsp;code</a></span>
561
562 </td>
563 </tr>
564 </table>
565
566 </td>
567 </tr>
568 <tr>
569 <td width="15%" align="right" valign="top" class="summary">
570 <span class="summary-type">&nbsp;</span>
571 </td><td class="summary">
572 <table width="100%" cellpadding="0" cellspacing="0" border="0">
573 <tr>
574 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__iand__" class="summary-sig-name">__iand__</a>(<span class="summary-sig-arg">self</span>,
575 <span class="summary-sig-arg">other</span>)</span><br />
576 Implements the &amp;= operator.</td>
577 <td align="right" valign="top">
578 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__iand__">source&nbsp;code</a></span>
579
580 </td>
581 </tr>
582 </table>
583
584 </td>
585 </tr>
586 <tr>
587 <td width="15%" align="right" valign="top" class="summary">
588 <span class="summary-type">&nbsp;</span>
589 </td><td class="summary">
590 <table width="100%" cellpadding="0" cellspacing="0" border="0">
591 <tr>
592 <td><span class="summary-sig"><a name="difference"></a><span class="summary-sig-name">difference</span>(<span class="summary-sig-arg">self</span>,
593 <span class="summary-sig-arg">other</span>)</span><br />
594 s.difference(t) returns a new NodeSet with elements in s but not in
595 t.</td>
596 <td align="right" valign="top">
597 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.difference">source&nbsp;code</a></span>
598
599 </td>
600 </tr>
601 </table>
602
603 </td>
604 </tr>
605 <tr>
606 <td width="15%" align="right" valign="top" class="summary">
607 <span class="summary-type">&nbsp;</span>
608 </td><td class="summary">
609 <table width="100%" cellpadding="0" cellspacing="0" border="0">
610 <tr>
611 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__sub__" class="summary-sig-name">__sub__</a>(<span class="summary-sig-arg">self</span>,
612 <span class="summary-sig-arg">other</span>)</span><br />
613 Implement the - operator.</td>
614 <td align="right" valign="top">
615 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__sub__">source&nbsp;code</a></span>
616
617 </td>
618 </tr>
619 </table>
620
621 </td>
622 </tr>
623 <tr>
624 <td width="15%" align="right" valign="top" class="summary">
625 <span class="summary-type">&nbsp;</span>
626 </td><td class="summary">
627 <table width="100%" cellpadding="0" cellspacing="0" border="0">
628 <tr>
629 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#difference_update" class="summary-sig-name">difference_update</a>(<span class="summary-sig-arg">self</span>,
630 <span class="summary-sig-arg">other</span>,
631 <span class="summary-sig-arg">strict</span>=<span class="summary-sig-default">False</span>)</span><br />
632 s.difference_update(t) returns nodeset s after removing elements
633 found in t.</td>
634 <td align="right" valign="top">
635 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.difference_update">source&nbsp;code</a></span>
636
637 </td>
638 </tr>
639 </table>
640
641 </td>
642 </tr>
643 <tr>
644 <td width="15%" align="right" valign="top" class="summary">
645 <span class="summary-type">&nbsp;</span>
646 </td><td class="summary">
647 <table width="100%" cellpadding="0" cellspacing="0" border="0">
648 <tr>
649 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__isub__" class="summary-sig-name">__isub__</a>(<span class="summary-sig-arg">self</span>,
650 <span class="summary-sig-arg">other</span>)</span><br />
651 Implement the -= operator.</td>
652 <td align="right" valign="top">
653 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__isub__">source&nbsp;code</a></span>
654
655 </td>
656 </tr>
657 </table>
658
659 </td>
660 </tr>
661 <tr>
662 <td width="15%" align="right" valign="top" class="summary">
663 <span class="summary-type">&nbsp;</span>
664 </td><td class="summary">
665 <table width="100%" cellpadding="0" cellspacing="0" border="0">
666 <tr>
667 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#remove" class="summary-sig-name">remove</a>(<span class="summary-sig-arg">self</span>,
668 <span class="summary-sig-arg">elem</span>)</span><br />
669 Remove element elem from the nodeset.</td>
670 <td align="right" valign="top">
671 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.remove">source&nbsp;code</a></span>
672
673 </td>
674 </tr>
675 </table>
676
677 </td>
678 </tr>
679 <tr>
680 <td width="15%" align="right" valign="top" class="summary">
681 <span class="summary-type">&nbsp;</span>
682 </td><td class="summary">
683 <table width="100%" cellpadding="0" cellspacing="0" border="0">
684 <tr>
685 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference" class="summary-sig-name">symmetric_difference</a>(<span class="summary-sig-arg">self</span>,
686 <span class="summary-sig-arg">other</span>)</span><br />
687 s.symmetric_difference(t) returns the symmetric difference of two
688 nodesets as a new NodeSet.</td>
689 <td align="right" valign="top">
690 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.symmetric_difference">source&nbsp;code</a></span>
691
692 </td>
693 </tr>
694 </table>
695
696 </td>
697 </tr>
698 <tr>
699 <td width="15%" align="right" valign="top" class="summary">
700 <span class="summary-type">&nbsp;</span>
701 </td><td class="summary">
702 <table width="100%" cellpadding="0" cellspacing="0" border="0">
703 <tr>
704 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__xor__" class="summary-sig-name">__xor__</a>(<span class="summary-sig-arg">self</span>,
705 <span class="summary-sig-arg">other</span>)</span><br />
706 Implement the ^ operator.</td>
707 <td align="right" valign="top">
708 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__xor__">source&nbsp;code</a></span>
709
710 </td>
711 </tr>
712 </table>
713
714 </td>
715 </tr>
716 <tr>
717 <td width="15%" align="right" valign="top" class="summary">
718 <span class="summary-type">&nbsp;</span>
719 </td><td class="summary">
720 <table width="100%" cellpadding="0" cellspacing="0" border="0">
721 <tr>
722 <td><span class="summary-sig"><a name="symmetric_difference_update"></a><span class="summary-sig-name">symmetric_difference_update</span>(<span class="summary-sig-arg">self</span>,
723 <span class="summary-sig-arg">other</span>)</span><br />
724 s.symmetric_difference_update(t) returns nodeset s keeping all nodes
725 that are in exactly one of the nodesets.</td>
726 <td align="right" valign="top">
727 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.symmetric_difference_update">source&nbsp;code</a></span>
728
729 </td>
730 </tr>
731 </table>
732
733 </td>
734 </tr>
735 <tr>
736 <td width="15%" align="right" valign="top" class="summary">
737 <span class="summary-type">&nbsp;</span>
738 </td><td class="summary">
739 <table width="100%" cellpadding="0" cellspacing="0" border="0">
740 <tr>
741 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__" class="summary-sig-name">__ixor__</a>(<span class="summary-sig-arg">self</span>,
742 <span class="summary-sig-arg">other</span>)</span><br />
743 Implement the ^= operator.</td>
744 <td align="right" valign="top">
745 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__ixor__">source&nbsp;code</a></span>
746
747 </td>
748 </tr>
749 </table>
750
751 </td>
752 </tr>
753 <tr>
754 <td colspan="2" class="summary">
755 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
756 <code>__delattr__</code>,
757 <code>__format__</code>,
758 <code>__getattribute__</code>,
759 <code>__hash__</code>,
760 <code>__new__</code>,
761 <code>__reduce__</code>,
762 <code>__reduce_ex__</code>,
763 <code>__repr__</code>,
764 <code>__setattr__</code>,
765 <code>__sizeof__</code>,
766 <code>__subclasshook__</code>
767 </p>
768 </td>
769 </tr>
770 </table>
771 <!-- ==================== PROPERTIES ==================== -->
772 <a name="section-Properties"></a>
773 <table class="summary" border="1" cellpadding="3"
774 cellspacing="0" width="100%" bgcolor="white">
775 <tr bgcolor="#70b0f0" class="table-header">
776 <td colspan="2" class="table-header">
777 <table border="0" cellpadding="0" cellspacing="0" width="100%">
778 <tr valign="top">
779 <td align="left"><span class="table-header">Properties</span></td>
780 <td align="right" valign="top"
781 ><span class="options">[<a href="#section-Properties"
782 class="privatelink" onclick="toggle_private();"
783 >hide private</a>]</span></td>
784 </tr>
785 </table>
786 </td>
787 </tr>
788 <tr>
789 <td colspan="2" class="summary">
790 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
791 <code>__class__</code>
792 </p>
793 </td>
794 </tr>
795 </table>
796 <!-- ==================== METHOD DETAILS ==================== -->
797 <a name="section-MethodDetails"></a>
798 <table class="details" border="1" cellpadding="3"
799 cellspacing="0" width="100%" bgcolor="white">
800 <tr bgcolor="#70b0f0" class="table-header">
801 <td colspan="2" class="table-header">
802 <table border="0" cellpadding="0" cellspacing="0" width="100%">
803 <tr valign="top">
804 <td align="left"><span class="table-header">Method Details</span></td>
805 <td align="right" valign="top"
806 ><span class="options">[<a href="#section-MethodDetails"
807 class="privatelink" onclick="toggle_private();"
808 >hide private</a>]</span></td>
809 </tr>
810 </table>
811 </td>
812 </tr>
813 </table>
814 <a name="__init__"></a>
815 <div>
816 <table class="details" border="1" cellpadding="3"
817 cellspacing="0" width="100%" bgcolor="white">
818 <tr><td>
819 <table width="100%" cellpadding="0" cellspacing="0" border="0">
820 <tr valign="top"><td>
821 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
822 <span class="sig-arg">pattern</span>=<span class="sig-default">None</span>,
823 <span class="sig-arg">rangeset</span>=<span class="sig-default">None</span>)</span>
824 <br /><em class="fname">(Constructor)</em>
825 </h3>
826 </td><td align="right" valign="top"
827 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__init__">source&nbsp;code</a></span>&nbsp;
828 </td>
829 </tr></table>
830
831 <p>Initialize an empty NodeSetBase.</p>
832 <dl class="fields">
833 <dt>Overrides:
834 object.__init__
835 </dt>
836 </dl>
837 </td></tr></table>
838 </div>
839 <a name="__str__"></a>
840 <div>
841 <table class="details" border="1" cellpadding="3"
842 cellspacing="0" width="100%" bgcolor="white">
843 <tr><td>
844 <table width="100%" cellpadding="0" cellspacing="0" border="0">
845 <tr valign="top"><td>
846 <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
847 <br /><em class="fname">(Informal representation operator)</em>
848 </h3>
849 </td><td align="right" valign="top"
850 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__str__">source&nbsp;code</a></span>&nbsp;
851 </td>
852 </tr></table>
853
854 <p>Get ranges-based pattern of node list.</p>
855 <dl class="fields">
856 <dt>Overrides:
857 object.__str__
858 </dt>
859 </dl>
860 </td></tr></table>
861 </div>
862 <a name="__getitem__"></a>
863 <div>
864 <table class="details" border="1" cellpadding="3"
865 cellspacing="0" width="100%" bgcolor="white">
866 <tr><td>
867 <table width="100%" cellpadding="0" cellspacing="0" border="0">
868 <tr valign="top"><td>
869 <h3 class="epydoc"><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,
870 <span class="sig-arg">i</span>)</span>
871 <br /><em class="fname">(Indexing operator)</em>
872 </h3>
873 </td><td align="right" valign="top"
874 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__getitem__">source&nbsp;code</a></span>&nbsp;
875 </td>
876 </tr></table>
877
878 <p>Return the node at index i. For convenience only, not optimized as of
879 version 1.0.</p>
880 <dl class="fields">
881 </dl>
882 </td></tr></table>
883 </div>
884 <a name="_add"></a>
885 <div class="private">
886 <table class="details" border="1" cellpadding="3"
887 cellspacing="0" width="100%" bgcolor="white">
888 <tr><td>
889 <table width="100%" cellpadding="0" cellspacing="0" border="0">
890 <tr valign="top"><td>
891 <h3 class="epydoc"><span class="sig"><span class="sig-name">_add</span>(<span class="sig-arg">self</span>,
892 <span class="sig-arg">pat</span>,
893 <span class="sig-arg">rangeset</span>)</span>
894 </h3>
895 </td><td align="right" valign="top"
896 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase._add">source&nbsp;code</a></span>&nbsp;
897 </td>
898 </tr></table>
899
900 <p>Add nodes from a (pat, rangeset) tuple. `pat' may be an existing
901 pattern and `rangeset' may be None.</p>
902 <dl class="fields">
903 </dl>
904 </td></tr></table>
905 </div>
906 <a name="__or__"></a>
907 <div>
908 <table class="details" border="1" cellpadding="3"
909 cellspacing="0" width="100%" bgcolor="white">
910 <tr><td>
911 <table width="100%" cellpadding="0" cellspacing="0" border="0">
912 <tr valign="top"><td>
913 <h3 class="epydoc"><span class="sig"><span class="sig-name">__or__</span>(<span class="sig-arg">self</span>,
914 <span class="sig-arg">other</span>)</span>
915 <br /><em class="fname">(Or operator)</em>
916 </h3>
917 </td><td align="right" valign="top"
918 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__or__">source&nbsp;code</a></span>&nbsp;
919 </td>
920 </tr></table>
921
922 <p>Implements the | operator. So s | t returns a new nodeset with
923 elements from both s and t.</p>
924 <dl class="fields">
925 </dl>
926 </td></tr></table>
927 </div>
928 <a name="__ior__"></a>
929 <div>
930 <table class="details" border="1" cellpadding="3"
931 cellspacing="0" width="100%" bgcolor="white">
932 <tr><td>
933 <table width="100%" cellpadding="0" cellspacing="0" border="0">
934 <tr valign="top"><td>
935 <h3 class="epydoc"><span class="sig"><span class="sig-name">__ior__</span>(<span class="sig-arg">self</span>,
936 <span class="sig-arg">other</span>)</span>
937 </h3>
938 </td><td align="right" valign="top"
939 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__ior__">source&nbsp;code</a></span>&nbsp;
940 </td>
941 </tr></table>
942
943 <p>Implements the |= operator. So s |= t returns nodeset s with elements
944 added from t. (Python version 2.5+ required)</p>
945 <dl class="fields">
946 </dl>
947 </td></tr></table>
948 </div>
949 <a name="__and__"></a>
950 <div>
951 <table class="details" border="1" cellpadding="3"
952 cellspacing="0" width="100%" bgcolor="white">
953 <tr><td>
954 <table width="100%" cellpadding="0" cellspacing="0" border="0">
955 <tr valign="top"><td>
956 <h3 class="epydoc"><span class="sig"><span class="sig-name">__and__</span>(<span class="sig-arg">self</span>,
957 <span class="sig-arg">other</span>)</span>
958 <br /><em class="fname">(And operator)</em>
959 </h3>
960 </td><td align="right" valign="top"
961 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__and__">source&nbsp;code</a></span>&nbsp;
962 </td>
963 </tr></table>
964
965 <p>Implements the &amp; operator. So s &amp; t returns a new nodeset with
966 elements common to s and t.</p>
967 <dl class="fields">
968 </dl>
969 </td></tr></table>
970 </div>
971 <a name="__iand__"></a>
972 <div>
973 <table class="details" border="1" cellpadding="3"
974 cellspacing="0" width="100%" bgcolor="white">
975 <tr><td>
976 <table width="100%" cellpadding="0" cellspacing="0" border="0">
977 <tr valign="top"><td>
978 <h3 class="epydoc"><span class="sig"><span class="sig-name">__iand__</span>(<span class="sig-arg">self</span>,
979 <span class="sig-arg">other</span>)</span>
980 </h3>
981 </td><td align="right" valign="top"
982 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__iand__">source&nbsp;code</a></span>&nbsp;
983 </td>
984 </tr></table>
985
986 <p>Implements the &amp;= operator. So s &amp;= t returns nodeset s
987 keeping only elements also found in t. (Python version 2.5+ required)</p>
988 <dl class="fields">
989 </dl>
990 </td></tr></table>
991 </div>
992 <a name="__sub__"></a>
993 <div>
994 <table class="details" border="1" cellpadding="3"
995 cellspacing="0" width="100%" bgcolor="white">
996 <tr><td>
997 <table width="100%" cellpadding="0" cellspacing="0" border="0">
998 <tr valign="top"><td>
999 <h3 class="epydoc"><span class="sig"><span class="sig-name">__sub__</span>(<span class="sig-arg">self</span>,
1000 <span class="sig-arg">other</span>)</span>
1001 <br /><em class="fname">(Subtraction operator)</em>
1002 </h3>
1003 </td><td align="right" valign="top"
1004 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__sub__">source&nbsp;code</a></span>&nbsp;
1005 </td>
1006 </tr></table>
1007
1008 <p>Implement the - operator. So s - t returns a new nodeset with elements
1009 in s but not in t.</p>
1010 <dl class="fields">
1011 </dl>
1012 </td></tr></table>
1013 </div>
1014 <a name="difference_update"></a>
1015 <div>
1016 <table class="details" border="1" cellpadding="3"
1017 cellspacing="0" width="100%" bgcolor="white">
1018 <tr><td>
1019 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1020 <tr valign="top"><td>
1021 <h3 class="epydoc"><span class="sig"><span class="sig-name">difference_update</span>(<span class="sig-arg">self</span>,
1022 <span class="sig-arg">other</span>,
1023 <span class="sig-arg">strict</span>=<span class="sig-default">False</span>)</span>
1024 </h3>
1025 </td><td align="right" valign="top"
1026 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.difference_update">source&nbsp;code</a></span>&nbsp;
1027 </td>
1028 </tr></table>
1029
1030 <p>s.difference_update(t) returns nodeset s after removing elements found
1031 in t. If strict is True, raise KeyError if an element cannot be
1032 removed.</p>
1033 <dl class="fields">
1034 </dl>
1035 </td></tr></table>
1036 </div>
1037 <a name="__isub__"></a>
1038 <div>
1039 <table class="details" border="1" cellpadding="3"
1040 cellspacing="0" width="100%" bgcolor="white">
1041 <tr><td>
1042 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1043 <tr valign="top"><td>
1044 <h3 class="epydoc"><span class="sig"><span class="sig-name">__isub__</span>(<span class="sig-arg">self</span>,
1045 <span class="sig-arg">other</span>)</span>
1046 </h3>
1047 </td><td align="right" valign="top"
1048 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__isub__">source&nbsp;code</a></span>&nbsp;
1049 </td>
1050 </tr></table>
1051
1052 <p>Implement the -= operator. So s -= t returns nodeset s after removing
1053 elements found in t. (Python version 2.5+ required)</p>
1054 <dl class="fields">
1055 </dl>
1056 </td></tr></table>
1057 </div>
1058 <a name="remove"></a>
1059 <div>
1060 <table class="details" border="1" cellpadding="3"
1061 cellspacing="0" width="100%" bgcolor="white">
1062 <tr><td>
1063 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1064 <tr valign="top"><td>
1065 <h3 class="epydoc"><span class="sig"><span class="sig-name">remove</span>(<span class="sig-arg">self</span>,
1066 <span class="sig-arg">elem</span>)</span>
1067 </h3>
1068 </td><td align="right" valign="top"
1069 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.remove">source&nbsp;code</a></span>&nbsp;
1070 </td>
1071 </tr></table>
1072
1073 <p>Remove element elem from the nodeset. Raise KeyError if elem is not
1074 contained in the nodeset.</p>
1075 <dl class="fields">
1076 </dl>
1077 </td></tr></table>
1078 </div>
1079 <a name="symmetric_difference"></a>
1080 <div>
1081 <table class="details" border="1" cellpadding="3"
1082 cellspacing="0" width="100%" bgcolor="white">
1083 <tr><td>
1084 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1085 <tr valign="top"><td>
1086 <h3 class="epydoc"><span class="sig"><span class="sig-name">symmetric_difference</span>(<span class="sig-arg">self</span>,
1087 <span class="sig-arg">other</span>)</span>
1088 </h3>
1089 </td><td align="right" valign="top"
1090 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.symmetric_difference">source&nbsp;code</a></span>&nbsp;
1091 </td>
1092 </tr></table>
1093
1094 <p>s.symmetric_difference(t) returns the symmetric difference of two
1095 nodesets as a new NodeSet.</p>
1096 <p>(ie. all nodes that are in exactly one of the nodesets.)</p>
1097 <dl class="fields">
1098 </dl>
1099 </td></tr></table>
1100 </div>
1101 <a name="__xor__"></a>
1102 <div>
1103 <table class="details" border="1" cellpadding="3"
1104 cellspacing="0" width="100%" bgcolor="white">
1105 <tr><td>
1106 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1107 <tr valign="top"><td>
1108 <h3 class="epydoc"><span class="sig"><span class="sig-name">__xor__</span>(<span class="sig-arg">self</span>,
1109 <span class="sig-arg">other</span>)</span>
1110 <br /><em class="fname">(Exclusive-Or operator)</em>
1111 </h3>
1112 </td><td align="right" valign="top"
1113 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__xor__">source&nbsp;code</a></span>&nbsp;
1114 </td>
1115 </tr></table>
1116
1117 <p>Implement the ^ operator. So s ^ t returns a new NodeSet with nodes
1118 that are in exactly one of the nodesets.</p>
1119 <dl class="fields">
1120 </dl>
1121 </td></tr></table>
1122 </div>
1123 <a name="__ixor__"></a>
1124 <div>
1125 <table class="details" border="1" cellpadding="3"
1126 cellspacing="0" width="100%" bgcolor="white">
1127 <tr><td>
1128 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1129 <tr valign="top"><td>
1130 <h3 class="epydoc"><span class="sig"><span class="sig-name">__ixor__</span>(<span class="sig-arg">self</span>,
1131 <span class="sig-arg">other</span>)</span>
1132 </h3>
1133 </td><td align="right" valign="top"
1134 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetBase.__ixor__">source&nbsp;code</a></span>&nbsp;
1135 </td>
1136 </tr></table>
1137
1138 <p>Implement the ^= operator. So s ^= t returns nodeset s after keeping
1139 all nodes that are in exactly one of the nodesets. (Python version 2.5+
1140 required)</p>
1141 <dl class="fields">
1142 </dl>
1143 </td></tr></table>
1144 </div>
1145 <br />
1146 <!-- ==================== NAVIGATION BAR ==================== -->
1147 <table class="navbar" border="0" width="100%" cellpadding="0"
1148 bgcolor="#a0c0ff" cellspacing="0">
1149 <tr valign="middle">
1150
1151 <!-- Tree link -->
1152 <th>&nbsp;&nbsp;&nbsp;<a
1153 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
1154
1155 <!-- Index link -->
1156 <th>&nbsp;&nbsp;&nbsp;<a
1157 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
1158
1159 <!-- Help link -->
1160 <th>&nbsp;&nbsp;&nbsp;<a
1161 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
1162
1163 <!-- Project homepage -->
1164 <th class="navbar" align="right" width="100%">
1165 <table border="0" cellpadding="0" cellspacing="0">
1166 <tr><th class="navbar" align="center"
1167 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
1168 </tr></table></th>
1169 </tr>
1170 </table>
1171 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
1172 <tr>
1173 <td align="left" class="footer">
1174 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:18 2010
1175 </td>
1176 <td align="right" class="footer">
1177 <a target="mainFrame" href="http://epydoc.sourceforge.net"
1178 >http://epydoc.sourceforge.net</a>
1179 </td>
1180 </tr>
1181 </table>
1182
1183 <script type="text/javascript">
1184 <!--
1185 // Private objects are initially displayed (because if
1186 // javascript is turned off then we want them to be
1187 // visible); but by default, we want to hide them. So hide
1188 // them unless we have a cookie that says to show them.
1189 checkCookie();
1190 // -->
1191 </script>
1192 </body>
1193 </html>
+0
-212
doc/epydoc/html/ClusterShell.NodeSet.NodeSetException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.NodeSetException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;NodeSetException
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.NodeSetException-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class NodeSetException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetException">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_20" name="uml_class_diagram_for_clusters_20">
63 <area shape="rect" id="node1" href="ClusterShell.NodeSet.NodeSetException-class.html" title="Base NodeSet exception class." alt="" coords="123,379,256,423"/>
64 <area shape="rect" id="node4" href="ClusterShell.NodeSet.NodeSetParseError-class.html" title="Raised when NodeSet parsing cannot be done properly." alt="" coords="24,443,173,482"/>
65 <area shape="rect" id="node5" href="ClusterShell.NodeSet.NodeSetExternalError-class.html" title="Raised when an external error is encountered." alt="" coords="203,443,365,482"/>
66 <area shape="rect" id="node2" href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html" title="Raised when bad range is encountered during NodeSet parsing." alt="" coords="5,502,192,541"/>
67 <area shape="rect" id="node70" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="127,316,253,335"/>
68 <area shape="rect" id="node70" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="127,335,253,353"/>
69 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="115,283,264,359"/>
70 <area shape="rect" id="node71" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="112,31,269,49"/>
71 <area shape="rect" id="node71" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="112,49,269,68"/>
72 <area shape="rect" id="node71" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="112,71,269,89"/>
73 <area shape="rect" id="node71" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="112,89,269,108"/>
74 <area shape="rect" id="node71" href="javascript:void(0);" title="x[y]" alt="" coords="112,108,269,127"/>
75 <area shape="rect" id="node71" href="javascript:void(0);" title="x[i:j]" alt="" coords="112,127,269,145"/>
76 <area shape="rect" id="node71" href="javascript:void(0);" title="helper for pickle" alt="" coords="112,145,269,164"/>
77 <area shape="rect" id="node71" href="javascript:void(0);" title="repr(x)" alt="" coords="112,164,269,183"/>
78 <area shape="rect" id="node71" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="112,183,269,201"/>
79 <area shape="rect" id="node71" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="112,201,269,220"/>
80 <area shape="rect" id="node71" href="javascript:void(0);" title="str(x)" alt="" coords="112,220,269,239"/>
81 <area shape="rect" id="node71" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="112,239,269,257"/>
82 <area shape="rect" id="node6" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="100,6,281,263"/>
83 </map>
84 <img src="uml_class_diagram_for_clusters_20.png" alt='' usemap="#uml_class_diagram_for_clusters_20" ismap="ismap" class="graph-without-title" />
85 </center>
86 </center>
87 <hr />
88 <p>Base NodeSet exception class.</p>
89
90 <!-- ==================== INSTANCE METHODS ==================== -->
91 <a name="section-InstanceMethods"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Instance Methods</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-InstanceMethods"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td colspan="2" class="summary">
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
110 <code>__init__</code>,
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-210
doc/epydoc/html/ClusterShell.NodeSet.NodeSetExternalError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.NodeSetExternalError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;NodeSetExternalError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.NodeSetExternalError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class NodeSetExternalError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetExternalError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_21" name="uml_class_diagram_for_clusters_21">
63 <area shape="rect" id="node1" href="ClusterShell.NodeSet.NodeSetExternalError-class.html" title="Raised when an external error is encountered." alt="" coords="19,443,171,487"/>
64 <area shape="rect" id="node2" href="ClusterShell.NodeSet.NodeSetException-class.html" title="Base NodeSet exception class." alt="" coords="28,379,161,423"/>
65 <area shape="rect" id="node77" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
66 <area shape="rect" id="node77" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
68 <area shape="rect" id="node78" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
69 <area shape="rect" id="node78" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
70 <area shape="rect" id="node78" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
71 <area shape="rect" id="node78" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
72 <area shape="rect" id="node78" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
73 <area shape="rect" id="node78" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
74 <area shape="rect" id="node78" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
75 <area shape="rect" id="node78" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
76 <area shape="rect" id="node78" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
77 <area shape="rect" id="node78" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
78 <area shape="rect" id="node78" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
79 <area shape="rect" id="node78" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
80 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
81 </map>
82 <img src="uml_class_diagram_for_clusters_21.png" alt='' usemap="#uml_class_diagram_for_clusters_21" ismap="ismap" class="graph-without-title" />
83 </center>
84 </center>
85 <hr />
86 <p>Raised when an external error is encountered.</p>
87
88 <!-- ==================== INSTANCE METHODS ==================== -->
89 <a name="section-InstanceMethods"></a>
90 <table class="summary" border="1" cellpadding="3"
91 cellspacing="0" width="100%" bgcolor="white">
92 <tr bgcolor="#70b0f0" class="table-header">
93 <td colspan="2" class="table-header">
94 <table border="0" cellpadding="0" cellspacing="0" width="100%">
95 <tr valign="top">
96 <td align="left"><span class="table-header">Instance Methods</span></td>
97 <td align="right" valign="top"
98 ><span class="options">[<a href="#section-InstanceMethods"
99 class="privatelink" onclick="toggle_private();"
100 >hide private</a>]</span></td>
101 </tr>
102 </table>
103 </td>
104 </tr>
105 <tr>
106 <td colspan="2" class="summary">
107 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
108 <code>__init__</code>,
109 <code>__new__</code>
110 </p>
111 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
112 <code>__delattr__</code>,
113 <code>__getattribute__</code>,
114 <code>__getitem__</code>,
115 <code>__getslice__</code>,
116 <code>__reduce__</code>,
117 <code>__repr__</code>,
118 <code>__setattr__</code>,
119 <code>__setstate__</code>,
120 <code>__str__</code>,
121 <code>__unicode__</code>
122 </p>
123 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
124 <code>__format__</code>,
125 <code>__hash__</code>,
126 <code>__reduce_ex__</code>,
127 <code>__sizeof__</code>,
128 <code>__subclasshook__</code>
129 </p>
130 </td>
131 </tr>
132 </table>
133 <!-- ==================== PROPERTIES ==================== -->
134 <a name="section-Properties"></a>
135 <table class="summary" border="1" cellpadding="3"
136 cellspacing="0" width="100%" bgcolor="white">
137 <tr bgcolor="#70b0f0" class="table-header">
138 <td colspan="2" class="table-header">
139 <table border="0" cellpadding="0" cellspacing="0" width="100%">
140 <tr valign="top">
141 <td align="left"><span class="table-header">Properties</span></td>
142 <td align="right" valign="top"
143 ><span class="options">[<a href="#section-Properties"
144 class="privatelink" onclick="toggle_private();"
145 >hide private</a>]</span></td>
146 </tr>
147 </table>
148 </td>
149 </tr>
150 <tr>
151 <td colspan="2" class="summary">
152 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
153 <code>args</code>,
154 <code>message</code>
155 </p>
156 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
157 <code>__class__</code>
158 </p>
159 </td>
160 </tr>
161 </table>
162 <!-- ==================== NAVIGATION BAR ==================== -->
163 <table class="navbar" border="0" width="100%" cellpadding="0"
164 bgcolor="#a0c0ff" cellspacing="0">
165 <tr valign="middle">
166
167 <!-- Tree link -->
168 <th>&nbsp;&nbsp;&nbsp;<a
169 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
170
171 <!-- Index link -->
172 <th>&nbsp;&nbsp;&nbsp;<a
173 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
174
175 <!-- Help link -->
176 <th>&nbsp;&nbsp;&nbsp;<a
177 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
178
179 <!-- Project homepage -->
180 <th class="navbar" align="right" width="100%">
181 <table border="0" cellpadding="0" cellspacing="0">
182 <tr><th class="navbar" align="center"
183 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
184 </tr></table></th>
185 </tr>
186 </table>
187 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
188 <tr>
189 <td align="left" class="footer">
190 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
191 </td>
192 <td align="right" class="footer">
193 <a target="mainFrame" href="http://epydoc.sourceforge.net"
194 >http://epydoc.sourceforge.net</a>
195 </td>
196 </tr>
197 </table>
198
199 <script type="text/javascript">
200 <!--
201 // Private objects are initially displayed (because if
202 // javascript is turned off then we want them to be
203 // visible); but by default, we want to hide them. So hide
204 // them unless we have a cookie that says to show them.
205 checkCookie();
206 // -->
207 </script>
208 </body>
209 </html>
+0
-275
doc/epydoc/html/ClusterShell.NodeSet.NodeSetParseError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.NodeSetParseError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;NodeSetParseError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.NodeSetParseError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class NodeSetParseError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetParseError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_22" name="uml_class_diagram_for_clusters_22">
63 <area shape="rect" id="node79" href="ClusterShell.NodeSet.NodeSetParseError-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="27,457,171,476"/>
64 <area shape="rect" id="node1" href="ClusterShell.NodeSet.NodeSetParseError-class.html" title="Raised when NodeSet parsing cannot be done properly." alt="" coords="15,425,183,482"/>
65 <area shape="rect" id="node3" href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html" title="Raised when bad range is encountered during NodeSet parsing." alt="" coords="5,502,192,541"/>
66 <area shape="rect" id="node2" href="ClusterShell.NodeSet.NodeSetException-class.html" title="Base NodeSet exception class." alt="" coords="31,361,164,405"/>
67 <area shape="rect" id="node81" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="35,316,161,335"/>
68 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="23,283,172,341"/>
69 <area shape="rect" id="node82" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="20,31,177,49"/>
70 <area shape="rect" id="node82" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="20,49,177,68"/>
71 <area shape="rect" id="node82" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="20,71,177,89"/>
72 <area shape="rect" id="node82" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="20,89,177,108"/>
73 <area shape="rect" id="node82" href="javascript:void(0);" title="x[y]" alt="" coords="20,108,177,127"/>
74 <area shape="rect" id="node82" href="javascript:void(0);" title="x[i:j]" alt="" coords="20,127,177,145"/>
75 <area shape="rect" id="node82" href="javascript:void(0);" title="helper for pickle" alt="" coords="20,145,177,164"/>
76 <area shape="rect" id="node82" href="javascript:void(0);" title="repr(x)" alt="" coords="20,164,177,183"/>
77 <area shape="rect" id="node82" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="20,183,177,201"/>
78 <area shape="rect" id="node82" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="20,201,177,220"/>
79 <area shape="rect" id="node82" href="javascript:void(0);" title="str(x)" alt="" coords="20,220,177,239"/>
80 <area shape="rect" id="node82" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="20,239,177,257"/>
81 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="8,6,189,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_22.png" alt='' usemap="#uml_class_diagram_for_clusters_22" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised when NodeSet parsing cannot be done properly.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <table width="100%" cellpadding="0" cellspacing="0" border="0">
111 <tr>
112 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetParseError-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
113 <span class="summary-sig-arg">part</span>,
114 <span class="summary-sig-arg">msg</span>)</span><br />
115 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
116 <td align="right" valign="top">
117 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetParseError.__init__">source&nbsp;code</a></span>
118
119 </td>
120 </tr>
121 </table>
122
123 </td>
124 </tr>
125 <tr>
126 <td colspan="2" class="summary">
127 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
128 <code>__new__</code>
129 </p>
130 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
131 <code>__delattr__</code>,
132 <code>__getattribute__</code>,
133 <code>__getitem__</code>,
134 <code>__getslice__</code>,
135 <code>__reduce__</code>,
136 <code>__repr__</code>,
137 <code>__setattr__</code>,
138 <code>__setstate__</code>,
139 <code>__str__</code>,
140 <code>__unicode__</code>
141 </p>
142 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
143 <code>__format__</code>,
144 <code>__hash__</code>,
145 <code>__reduce_ex__</code>,
146 <code>__sizeof__</code>,
147 <code>__subclasshook__</code>
148 </p>
149 </td>
150 </tr>
151 </table>
152 <!-- ==================== PROPERTIES ==================== -->
153 <a name="section-Properties"></a>
154 <table class="summary" border="1" cellpadding="3"
155 cellspacing="0" width="100%" bgcolor="white">
156 <tr bgcolor="#70b0f0" class="table-header">
157 <td colspan="2" class="table-header">
158 <table border="0" cellpadding="0" cellspacing="0" width="100%">
159 <tr valign="top">
160 <td align="left"><span class="table-header">Properties</span></td>
161 <td align="right" valign="top"
162 ><span class="options">[<a href="#section-Properties"
163 class="privatelink" onclick="toggle_private();"
164 >hide private</a>]</span></td>
165 </tr>
166 </table>
167 </td>
168 </tr>
169 <tr>
170 <td colspan="2" class="summary">
171 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
172 <code>args</code>,
173 <code>message</code>
174 </p>
175 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
176 <code>__class__</code>
177 </p>
178 </td>
179 </tr>
180 </table>
181 <!-- ==================== METHOD DETAILS ==================== -->
182 <a name="section-MethodDetails"></a>
183 <table class="details" border="1" cellpadding="3"
184 cellspacing="0" width="100%" bgcolor="white">
185 <tr bgcolor="#70b0f0" class="table-header">
186 <td colspan="2" class="table-header">
187 <table border="0" cellpadding="0" cellspacing="0" width="100%">
188 <tr valign="top">
189 <td align="left"><span class="table-header">Method Details</span></td>
190 <td align="right" valign="top"
191 ><span class="options">[<a href="#section-MethodDetails"
192 class="privatelink" onclick="toggle_private();"
193 >hide private</a>]</span></td>
194 </tr>
195 </table>
196 </td>
197 </tr>
198 </table>
199 <a name="__init__"></a>
200 <div>
201 <table class="details" border="1" cellpadding="3"
202 cellspacing="0" width="100%" bgcolor="white">
203 <tr><td>
204 <table width="100%" cellpadding="0" cellspacing="0" border="0">
205 <tr valign="top"><td>
206 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
207 <span class="sig-arg">part</span>,
208 <span class="sig-arg">msg</span>)</span>
209 <br /><em class="fname">(Constructor)</em>
210 </h3>
211 </td><td align="right" valign="top"
212 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetParseError.__init__">source&nbsp;code</a></span>&nbsp;
213 </td>
214 </tr></table>
215
216 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
217 signature</p>
218 <dl class="fields">
219 <dt>Overrides:
220 object.__init__
221 <dd><em class="note">(inherited documentation)</em></dd>
222 </dt>
223 </dl>
224 </td></tr></table>
225 </div>
226 <br />
227 <!-- ==================== NAVIGATION BAR ==================== -->
228 <table class="navbar" border="0" width="100%" cellpadding="0"
229 bgcolor="#a0c0ff" cellspacing="0">
230 <tr valign="middle">
231
232 <!-- Tree link -->
233 <th>&nbsp;&nbsp;&nbsp;<a
234 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
235
236 <!-- Index link -->
237 <th>&nbsp;&nbsp;&nbsp;<a
238 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
239
240 <!-- Help link -->
241 <th>&nbsp;&nbsp;&nbsp;<a
242 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
243
244 <!-- Project homepage -->
245 <th class="navbar" align="right" width="100%">
246 <table border="0" cellpadding="0" cellspacing="0">
247 <tr><th class="navbar" align="center"
248 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
249 </tr></table></th>
250 </tr>
251 </table>
252 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
253 <tr>
254 <td align="left" class="footer">
255 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
256 </td>
257 <td align="right" class="footer">
258 <a target="mainFrame" href="http://epydoc.sourceforge.net"
259 >http://epydoc.sourceforge.net</a>
260 </td>
261 </tr>
262 </table>
263
264 <script type="text/javascript">
265 <!--
266 // Private objects are initially displayed (because if
267 // javascript is turned off then we want them to be
268 // visible); but by default, we want to hide them. So hide
269 // them unless we have a cookie that says to show them.
270 checkCookie();
271 // -->
272 </script>
273 </body>
274 </html>
+0
-273
doc/epydoc/html/ClusterShell.NodeSet.NodeSetParseRangeError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.NodeSetParseRangeError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;NodeSetParseRangeError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class NodeSetParseRangeError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetParseRangeError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_23" name="uml_class_diagram_for_clusters_23">
63 <area shape="rect" id="node84" href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="19,521,172,540"/>
64 <area shape="rect" id="node1" href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html" title="Raised when bad range is encountered during NodeSet parsing." alt="" coords="7,489,183,546"/>
65 <area shape="rect" id="node2" href="ClusterShell.NodeSet.NodeSetParseError-class.html" title="Raised when NodeSet parsing cannot be done properly." alt="" coords="27,425,165,469"/>
66 <area shape="rect" id="node87" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,316,159,335"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,341"/>
68 <area shape="rect" id="node5" href="ClusterShell.NodeSet.NodeSetException-class.html" title="Base NodeSet exception class." alt="" coords="28,361,161,405"/>
69 <area shape="rect" id="node88" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node88" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node88" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node88" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node88" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node88" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node88" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node88" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node88" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node88" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node88" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node88" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_23.png" alt='' usemap="#uml_class_diagram_for_clusters_23" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised when bad range is encountered during NodeSet parsing.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <table width="100%" cellpadding="0" cellspacing="0" border="0">
111 <tr>
112 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
113 <span class="summary-sig-arg">rset_exc</span>)</span><br />
114 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
115 <td align="right" valign="top">
116 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetParseRangeError.__init__">source&nbsp;code</a></span>
117
118 </td>
119 </tr>
120 </table>
121
122 </td>
123 </tr>
124 <tr>
125 <td colspan="2" class="summary">
126 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
127 <code>__new__</code>
128 </p>
129 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
130 <code>__delattr__</code>,
131 <code>__getattribute__</code>,
132 <code>__getitem__</code>,
133 <code>__getslice__</code>,
134 <code>__reduce__</code>,
135 <code>__repr__</code>,
136 <code>__setattr__</code>,
137 <code>__setstate__</code>,
138 <code>__str__</code>,
139 <code>__unicode__</code>
140 </p>
141 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
142 <code>__format__</code>,
143 <code>__hash__</code>,
144 <code>__reduce_ex__</code>,
145 <code>__sizeof__</code>,
146 <code>__subclasshook__</code>
147 </p>
148 </td>
149 </tr>
150 </table>
151 <!-- ==================== PROPERTIES ==================== -->
152 <a name="section-Properties"></a>
153 <table class="summary" border="1" cellpadding="3"
154 cellspacing="0" width="100%" bgcolor="white">
155 <tr bgcolor="#70b0f0" class="table-header">
156 <td colspan="2" class="table-header">
157 <table border="0" cellpadding="0" cellspacing="0" width="100%">
158 <tr valign="top">
159 <td align="left"><span class="table-header">Properties</span></td>
160 <td align="right" valign="top"
161 ><span class="options">[<a href="#section-Properties"
162 class="privatelink" onclick="toggle_private();"
163 >hide private</a>]</span></td>
164 </tr>
165 </table>
166 </td>
167 </tr>
168 <tr>
169 <td colspan="2" class="summary">
170 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
171 <code>args</code>,
172 <code>message</code>
173 </p>
174 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
175 <code>__class__</code>
176 </p>
177 </td>
178 </tr>
179 </table>
180 <!-- ==================== METHOD DETAILS ==================== -->
181 <a name="section-MethodDetails"></a>
182 <table class="details" border="1" cellpadding="3"
183 cellspacing="0" width="100%" bgcolor="white">
184 <tr bgcolor="#70b0f0" class="table-header">
185 <td colspan="2" class="table-header">
186 <table border="0" cellpadding="0" cellspacing="0" width="100%">
187 <tr valign="top">
188 <td align="left"><span class="table-header">Method Details</span></td>
189 <td align="right" valign="top"
190 ><span class="options">[<a href="#section-MethodDetails"
191 class="privatelink" onclick="toggle_private();"
192 >hide private</a>]</span></td>
193 </tr>
194 </table>
195 </td>
196 </tr>
197 </table>
198 <a name="__init__"></a>
199 <div>
200 <table class="details" border="1" cellpadding="3"
201 cellspacing="0" width="100%" bgcolor="white">
202 <tr><td>
203 <table width="100%" cellpadding="0" cellspacing="0" border="0">
204 <tr valign="top"><td>
205 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
206 <span class="sig-arg">rset_exc</span>)</span>
207 <br /><em class="fname">(Constructor)</em>
208 </h3>
209 </td><td align="right" valign="top"
210 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#NodeSetParseRangeError.__init__">source&nbsp;code</a></span>&nbsp;
211 </td>
212 </tr></table>
213
214 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
215 signature</p>
216 <dl class="fields">
217 <dt>Overrides:
218 object.__init__
219 <dd><em class="note">(inherited documentation)</em></dd>
220 </dt>
221 </dl>
222 </td></tr></table>
223 </div>
224 <br />
225 <!-- ==================== NAVIGATION BAR ==================== -->
226 <table class="navbar" border="0" width="100%" cellpadding="0"
227 bgcolor="#a0c0ff" cellspacing="0">
228 <tr valign="middle">
229
230 <!-- Tree link -->
231 <th>&nbsp;&nbsp;&nbsp;<a
232 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
233
234 <!-- Index link -->
235 <th>&nbsp;&nbsp;&nbsp;<a
236 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
237
238 <!-- Help link -->
239 <th>&nbsp;&nbsp;&nbsp;<a
240 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
241
242 <!-- Project homepage -->
243 <th class="navbar" align="right" width="100%">
244 <table border="0" cellpadding="0" cellspacing="0">
245 <tr><th class="navbar" align="center"
246 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
247 </tr></table></th>
248 </tr>
249 </table>
250 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
251 <tr>
252 <td align="left" class="footer">
253 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
254 </td>
255 <td align="right" class="footer">
256 <a target="mainFrame" href="http://epydoc.sourceforge.net"
257 >http://epydoc.sourceforge.net</a>
258 </td>
259 </tr>
260 </table>
261
262 <script type="text/javascript">
263 <!--
264 // Private objects are initially displayed (because if
265 // javascript is turned off then we want them to be
266 // visible); but by default, we want to hide them. So hide
267 // them unless we have a cookie that says to show them.
268 checkCookie();
269 // -->
270 </script>
271 </body>
272 </html>
+0
-428
doc/epydoc/html/ClusterShell.NodeSet.ParsingEngine-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.ParsingEngine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;ParsingEngine
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class ParsingEngine</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_24" name="uml_class_diagram_for_clusters_24">
63 <area shape="rect" id="node89" href="ClusterShell.NodeSet.ParsingEngine-class.html#OP_CODES" title="ClusterShell.NodeSet.ParsingEngine.OP_CODES" alt="" coords="17,31,376,49"/>
64 <area shape="rect" id="node89" href="ClusterShell.NodeSet.ParsingEngine-class.html#__init__" title="Initialize Parsing Engine." alt="" coords="17,52,376,71"/>
65 <area shape="rect" id="node89" href="ClusterShell.NodeSet.ParsingEngine-class.html#parse" title="Parse provided object if possible and return a NodeSetBase object." alt="" coords="17,71,376,89"/>
66 <area shape="rect" id="node89" href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_string" title="Parse provided string and return a NodeSetBase object." alt="" coords="17,89,376,108"/>
67 <area shape="rect" id="node89" href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_group" title="Parse provided single group name (without @ prefix)." alt="" coords="17,108,376,127"/>
68 <area shape="rect" id="node89" href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_group_string" title="Parse provided group string and return a string." alt="" coords="17,127,376,145"/>
69 <area shape="rect" id="node1" href="ClusterShell.NodeSet.ParsingEngine-class.html" title="Class that is able to transform a source into a NodeSetBase." alt="" coords="5,6,387,151"/>
70 </map>
71 <img src="uml_class_diagram_for_clusters_24.png" alt='' usemap="#uml_class_diagram_for_clusters_24" ismap="ismap" class="graph-without-title" />
72 </center>
73 </center>
74 <hr />
75 <p>Class that is able to transform a source into a NodeSetBase.</p>
76
77 <!-- ==================== INSTANCE METHODS ==================== -->
78 <a name="section-InstanceMethods"></a>
79 <table class="summary" border="1" cellpadding="3"
80 cellspacing="0" width="100%" bgcolor="white">
81 <tr bgcolor="#70b0f0" class="table-header">
82 <td colspan="2" class="table-header">
83 <table border="0" cellpadding="0" cellspacing="0" width="100%">
84 <tr valign="top">
85 <td align="left"><span class="table-header">Instance Methods</span></td>
86 <td align="right" valign="top"
87 ><span class="options">[<a href="#section-InstanceMethods"
88 class="privatelink" onclick="toggle_private();"
89 >hide private</a>]</span></td>
90 </tr>
91 </table>
92 </td>
93 </tr>
94 <tr>
95 <td width="15%" align="right" valign="top" class="summary">
96 <span class="summary-type">&nbsp;</span>
97 </td><td class="summary">
98 <table width="100%" cellpadding="0" cellspacing="0" border="0">
99 <tr>
100 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
101 <span class="summary-sig-arg">group_resolver</span>)</span><br />
102 Initialize Parsing Engine.</td>
103 <td align="right" valign="top">
104 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine.__init__">source&nbsp;code</a></span>
105
106 </td>
107 </tr>
108 </table>
109
110 </td>
111 </tr>
112 <tr>
113 <td width="15%" align="right" valign="top" class="summary">
114 <span class="summary-type">&nbsp;</span>
115 </td><td class="summary">
116 <table width="100%" cellpadding="0" cellspacing="0" border="0">
117 <tr>
118 <td><span class="summary-sig"><a name="parse"></a><span class="summary-sig-name">parse</span>(<span class="summary-sig-arg">self</span>,
119 <span class="summary-sig-arg">nsobj</span>,
120 <span class="summary-sig-arg">autostep</span>)</span><br />
121 Parse provided object if possible and return a NodeSetBase object.</td>
122 <td align="right" valign="top">
123 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine.parse">source&nbsp;code</a></span>
124
125 </td>
126 </tr>
127 </table>
128
129 </td>
130 </tr>
131 <tr>
132 <td width="15%" align="right" valign="top" class="summary">
133 <span class="summary-type">&nbsp;</span>
134 </td><td class="summary">
135 <table width="100%" cellpadding="0" cellspacing="0" border="0">
136 <tr>
137 <td><span class="summary-sig"><a name="parse_string"></a><span class="summary-sig-name">parse_string</span>(<span class="summary-sig-arg">self</span>,
138 <span class="summary-sig-arg">nsstr</span>,
139 <span class="summary-sig-arg">autostep</span>)</span><br />
140 Parse provided string and return a NodeSetBase object.</td>
141 <td align="right" valign="top">
142 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine.parse_string">source&nbsp;code</a></span>
143
144 </td>
145 </tr>
146 </table>
147
148 </td>
149 </tr>
150 <tr>
151 <td width="15%" align="right" valign="top" class="summary">
152 <span class="summary-type">&nbsp;</span>
153 </td><td class="summary">
154 <table width="100%" cellpadding="0" cellspacing="0" border="0">
155 <tr>
156 <td><span class="summary-sig"><a name="parse_group"></a><span class="summary-sig-name">parse_group</span>(<span class="summary-sig-arg">self</span>,
157 <span class="summary-sig-arg">group</span>,
158 <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>,
159 <span class="summary-sig-arg">autostep</span>=<span class="summary-sig-default">None</span>)</span><br />
160 Parse provided single group name (without @ prefix).</td>
161 <td align="right" valign="top">
162 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine.parse_group">source&nbsp;code</a></span>
163
164 </td>
165 </tr>
166 </table>
167
168 </td>
169 </tr>
170 <tr>
171 <td width="15%" align="right" valign="top" class="summary">
172 <span class="summary-type">&nbsp;</span>
173 </td><td class="summary">
174 <table width="100%" cellpadding="0" cellspacing="0" border="0">
175 <tr>
176 <td><span class="summary-sig"><a name="parse_group_string"></a><span class="summary-sig-name">parse_group_string</span>(<span class="summary-sig-arg">self</span>,
177 <span class="summary-sig-arg">nodegroup</span>)</span><br />
178 Parse provided group string and return a string.</td>
179 <td align="right" valign="top">
180 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine.parse_group_string">source&nbsp;code</a></span>
181
182 </td>
183 </tr>
184 </table>
185
186 </td>
187 </tr>
188 <tr class="private">
189 <td width="15%" align="right" valign="top" class="summary">
190 <span class="summary-type">&nbsp;</span>
191 </td><td class="summary">
192 <table width="100%" cellpadding="0" cellspacing="0" border="0">
193 <tr>
194 <td><span class="summary-sig"><a name="_next_op"></a><span class="summary-sig-name">_next_op</span>(<span class="summary-sig-arg">self</span>,
195 <span class="summary-sig-arg">pat</span>)</span><br />
196 Opcode parsing subroutine.</td>
197 <td align="right" valign="top">
198 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine._next_op">source&nbsp;code</a></span>
199
200 </td>
201 </tr>
202 </table>
203
204 </td>
205 </tr>
206 <tr class="private">
207 <td width="15%" align="right" valign="top" class="summary">
208 <span class="summary-type">&nbsp;</span>
209 </td><td class="summary">
210 <table width="100%" cellpadding="0" cellspacing="0" border="0">
211 <tr>
212 <td><span class="summary-sig"><a name="_scan_string"></a><span class="summary-sig-name">_scan_string</span>(<span class="summary-sig-arg">self</span>,
213 <span class="summary-sig-arg">nsstr</span>,
214 <span class="summary-sig-arg">autostep</span>)</span><br />
215 Parsing engine's string scanner method.</td>
216 <td align="right" valign="top">
217 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine._scan_string">source&nbsp;code</a></span>
218
219 </td>
220 </tr>
221 </table>
222
223 </td>
224 </tr>
225 <tr>
226 <td colspan="2" class="summary">
227 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
228 <code>__delattr__</code>,
229 <code>__format__</code>,
230 <code>__getattribute__</code>,
231 <code>__hash__</code>,
232 <code>__new__</code>,
233 <code>__reduce__</code>,
234 <code>__reduce_ex__</code>,
235 <code>__repr__</code>,
236 <code>__setattr__</code>,
237 <code>__sizeof__</code>,
238 <code>__str__</code>,
239 <code>__subclasshook__</code>
240 </p>
241 </td>
242 </tr>
243 </table>
244 <!-- ==================== CLASS VARIABLES ==================== -->
245 <a name="section-ClassVariables"></a>
246 <table class="summary" border="1" cellpadding="3"
247 cellspacing="0" width="100%" bgcolor="white">
248 <tr bgcolor="#70b0f0" class="table-header">
249 <td colspan="2" class="table-header">
250 <table border="0" cellpadding="0" cellspacing="0" width="100%">
251 <tr valign="top">
252 <td align="left"><span class="table-header">Class Variables</span></td>
253 <td align="right" valign="top"
254 ><span class="options">[<a href="#section-ClassVariables"
255 class="privatelink" onclick="toggle_private();"
256 >hide private</a>]</span></td>
257 </tr>
258 </table>
259 </td>
260 </tr>
261 <tr>
262 <td width="15%" align="right" valign="top" class="summary">
263 <span class="summary-type">&nbsp;</span>
264 </td><td class="summary">
265 <a href="ClusterShell.NodeSet.ParsingEngine-class.html#OP_CODES" class="summary-name">OP_CODES</a> = <code title="{'difference_update': '!',
266 'intersection_update': '&amp;',
267 'symmetric_difference_update': '^',
268 'update': ','}"><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">difference_update</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">intersection_update</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-ellipsis">...</code></code>
269 </td>
270 </tr>
271 </table>
272 <!-- ==================== PROPERTIES ==================== -->
273 <a name="section-Properties"></a>
274 <table class="summary" border="1" cellpadding="3"
275 cellspacing="0" width="100%" bgcolor="white">
276 <tr bgcolor="#70b0f0" class="table-header">
277 <td colspan="2" class="table-header">
278 <table border="0" cellpadding="0" cellspacing="0" width="100%">
279 <tr valign="top">
280 <td align="left"><span class="table-header">Properties</span></td>
281 <td align="right" valign="top"
282 ><span class="options">[<a href="#section-Properties"
283 class="privatelink" onclick="toggle_private();"
284 >hide private</a>]</span></td>
285 </tr>
286 </table>
287 </td>
288 </tr>
289 <tr>
290 <td colspan="2" class="summary">
291 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
292 <code>__class__</code>
293 </p>
294 </td>
295 </tr>
296 </table>
297 <!-- ==================== METHOD DETAILS ==================== -->
298 <a name="section-MethodDetails"></a>
299 <table class="details" border="1" cellpadding="3"
300 cellspacing="0" width="100%" bgcolor="white">
301 <tr bgcolor="#70b0f0" class="table-header">
302 <td colspan="2" class="table-header">
303 <table border="0" cellpadding="0" cellspacing="0" width="100%">
304 <tr valign="top">
305 <td align="left"><span class="table-header">Method Details</span></td>
306 <td align="right" valign="top"
307 ><span class="options">[<a href="#section-MethodDetails"
308 class="privatelink" onclick="toggle_private();"
309 >hide private</a>]</span></td>
310 </tr>
311 </table>
312 </td>
313 </tr>
314 </table>
315 <a name="__init__"></a>
316 <div>
317 <table class="details" border="1" cellpadding="3"
318 cellspacing="0" width="100%" bgcolor="white">
319 <tr><td>
320 <table width="100%" cellpadding="0" cellspacing="0" border="0">
321 <tr valign="top"><td>
322 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
323 <span class="sig-arg">group_resolver</span>)</span>
324 <br /><em class="fname">(Constructor)</em>
325 </h3>
326 </td><td align="right" valign="top"
327 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#ParsingEngine.__init__">source&nbsp;code</a></span>&nbsp;
328 </td>
329 </tr></table>
330
331 <p>Initialize Parsing Engine.</p>
332 <dl class="fields">
333 <dt>Overrides:
334 object.__init__
335 </dt>
336 </dl>
337 </td></tr></table>
338 </div>
339 <br />
340 <!-- ==================== CLASS VARIABLE DETAILS ==================== -->
341 <a name="section-ClassVariableDetails"></a>
342 <table class="details" border="1" cellpadding="3"
343 cellspacing="0" width="100%" bgcolor="white">
344 <tr bgcolor="#70b0f0" class="table-header">
345 <td colspan="2" class="table-header">
346 <table border="0" cellpadding="0" cellspacing="0" width="100%">
347 <tr valign="top">
348 <td align="left"><span class="table-header">Class Variable Details</span></td>
349 <td align="right" valign="top"
350 ><span class="options">[<a href="#section-ClassVariableDetails"
351 class="privatelink" onclick="toggle_private();"
352 >hide private</a>]</span></td>
353 </tr>
354 </table>
355 </td>
356 </tr>
357 </table>
358 <a name="OP_CODES"></a>
359 <div>
360 <table class="details" border="1" cellpadding="3"
361 cellspacing="0" width="100%" bgcolor="white">
362 <tr><td>
363 <h3 class="epydoc">OP_CODES</h3>
364
365 <dl class="fields">
366 </dl>
367 <dl class="fields">
368 <dt>Value:</dt>
369 <dd><table><tr><td><pre class="variable">
370 <code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">difference_update</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>
371 <code class="variable-quote">'</code><code class="variable-string">intersection_update</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">&amp;</code><code class="variable-quote">'</code><code class="variable-op">,</code>
372 <code class="variable-quote">'</code><code class="variable-string">symmetric_difference_update</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>
373 <code class="variable-quote">'</code><code class="variable-string">update</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-group">}</code>
374 </pre></td></tr></table>
375 </dd>
376 </dl>
377 </td></tr></table>
378 </div>
379 <br />
380 <!-- ==================== NAVIGATION BAR ==================== -->
381 <table class="navbar" border="0" width="100%" cellpadding="0"
382 bgcolor="#a0c0ff" cellspacing="0">
383 <tr valign="middle">
384
385 <!-- Tree link -->
386 <th>&nbsp;&nbsp;&nbsp;<a
387 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
388
389 <!-- Index link -->
390 <th>&nbsp;&nbsp;&nbsp;<a
391 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
392
393 <!-- Help link -->
394 <th>&nbsp;&nbsp;&nbsp;<a
395 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
396
397 <!-- Project homepage -->
398 <th class="navbar" align="right" width="100%">
399 <table border="0" cellpadding="0" cellspacing="0">
400 <tr><th class="navbar" align="center"
401 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
402 </tr></table></th>
403 </tr>
404 </table>
405 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
406 <tr>
407 <td align="left" class="footer">
408 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
409 </td>
410 <td align="right" class="footer">
411 <a target="mainFrame" href="http://epydoc.sourceforge.net"
412 >http://epydoc.sourceforge.net</a>
413 </td>
414 </tr>
415 </table>
416
417 <script type="text/javascript">
418 <!--
419 // Private objects are initially displayed (because if
420 // javascript is turned off then we want them to be
421 // visible); but by default, we want to hide them. So hide
422 // them unless we have a cookie that says to show them.
423 checkCookie();
424 // -->
425 </script>
426 </body>
427 </html>
+0
-1432
doc/epydoc/html/ClusterShell.NodeSet.RangeSet-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.RangeSet</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;RangeSet
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class RangeSet</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet">source&nbsp;code</a></span></p>
61 <p>Advanced range sets.</p>
62 <p>RangeSet creation examples:</p>
63 <pre class="py-doctest">
64 <span class="py-prompt">&gt;&gt;&gt; </span>rset = RangeSet() <span class="py-comment"># empty RangeSet</span>
65 <span class="py-prompt">&gt;&gt;&gt; </span>rset = RangeSet(<span class="py-string">&quot;5,10-42&quot;</span>) <span class="py-comment"># contains 5, 10 to 42</span>
66 <span class="py-prompt">&gt;&gt;&gt; </span>rset = RangeSet(<span class="py-string">&quot;0-10/2&quot;</span>) <span class="py-comment"># contains 0, 2, 4, 6, 8, 10</span></pre>
67 <p>Also, RangeSet provides methods like update(), intersection_update()
68 or difference_update(), which conform to the Python Set API.</p>
69
70 <!-- ==================== INSTANCE METHODS ==================== -->
71 <a name="section-InstanceMethods"></a>
72 <table class="summary" border="1" cellpadding="3"
73 cellspacing="0" width="100%" bgcolor="white">
74 <tr bgcolor="#70b0f0" class="table-header">
75 <td colspan="2" class="table-header">
76 <table border="0" cellpadding="0" cellspacing="0" width="100%">
77 <tr valign="top">
78 <td align="left"><span class="table-header">Instance Methods</span></td>
79 <td align="right" valign="top"
80 ><span class="options">[<a href="#section-InstanceMethods"
81 class="privatelink" onclick="toggle_private();"
82 >hide private</a>]</span></td>
83 </tr>
84 </table>
85 </td>
86 </tr>
87 <tr>
88 <td width="15%" align="right" valign="top" class="summary">
89 <span class="summary-type">&nbsp;</span>
90 </td><td class="summary">
91 <table width="100%" cellpadding="0" cellspacing="0" border="0">
92 <tr>
93 <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
94 <span class="summary-sig-arg">pattern</span>=<span class="summary-sig-default">None</span>,
95 <span class="summary-sig-arg">autostep</span>=<span class="summary-sig-default">None</span>)</span><br />
96 Initialize RangeSet with optional pdsh-like string pattern and
97 autostep threshold.</td>
98 <td align="right" valign="top">
99 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__init__">source&nbsp;code</a></span>
100
101 </td>
102 </tr>
103 </table>
104
105 </td>
106 </tr>
107 <tr>
108 <td width="15%" align="right" valign="top" class="summary">
109 <span class="summary-type">&nbsp;</span>
110 </td><td class="summary">
111 <table width="100%" cellpadding="0" cellspacing="0" border="0">
112 <tr>
113 <td><span class="summary-sig"><a name="__iter__"></a><span class="summary-sig-name">__iter__</span>(<span class="summary-sig-arg">self</span>)</span><br />
114 Iterate over each item in RangeSet.</td>
115 <td align="right" valign="top">
116 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__iter__">source&nbsp;code</a></span>
117
118 </td>
119 </tr>
120 </table>
121
122 </td>
123 </tr>
124 <tr>
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type">&nbsp;</span>
127 </td><td class="summary">
128 <table width="100%" cellpadding="0" cellspacing="0" border="0">
129 <tr>
130 <td><span class="summary-sig"><a name="__len__"></a><span class="summary-sig-name">__len__</span>(<span class="summary-sig-arg">self</span>)</span><br />
131 Get the number of items in RangeSet.</td>
132 <td align="right" valign="top">
133 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__len__">source&nbsp;code</a></span>
134
135 </td>
136 </tr>
137 </table>
138
139 </td>
140 </tr>
141 <tr>
142 <td width="15%" align="right" valign="top" class="summary">
143 <span class="summary-type">&nbsp;</span>
144 </td><td class="summary">
145 <table width="100%" cellpadding="0" cellspacing="0" border="0">
146 <tr>
147 <td><span class="summary-sig"><a name="__str__"></a><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span><br />
148 Get range-based string.</td>
149 <td align="right" valign="top">
150 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__str__">source&nbsp;code</a></span>
151
152 </td>
153 </tr>
154 </table>
155
156 </td>
157 </tr>
158 <tr>
159 <td width="15%" align="right" valign="top" class="summary">
160 <span class="summary-type">&nbsp;</span>
161 </td><td class="summary">
162 <table width="100%" cellpadding="0" cellspacing="0" border="0">
163 <tr>
164 <td><span class="summary-sig"><a name="__repr__"></a><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">self</span>)</span><br />
165 Get range-based string.</td>
166 <td align="right" valign="top">
167 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__str__">source&nbsp;code</a></span>
168
169 </td>
170 </tr>
171 </table>
172
173 </td>
174 </tr>
175 <tr>
176 <td width="15%" align="right" valign="top" class="summary">
177 <span class="summary-type">&nbsp;</span>
178 </td><td class="summary">
179 <table width="100%" cellpadding="0" cellspacing="0" border="0">
180 <tr>
181 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__contains__" class="summary-sig-name">__contains__</a>(<span class="summary-sig-arg">self</span>,
182 <span class="summary-sig-arg">elem</span>)</span><br />
183 Is element contained in RangeSet? Element can be either a string with
184 optional padding (eg.</td>
185 <td align="right" valign="top">
186 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__contains__">source&nbsp;code</a></span>
187
188 </td>
189 </tr>
190 </table>
191
192 </td>
193 </tr>
194 <tr class="private">
195 <td width="15%" align="right" valign="top" class="summary">
196 <span class="summary-type">&nbsp;</span>
197 </td><td class="summary">
198 <table width="100%" cellpadding="0" cellspacing="0" border="0">
199 <tr>
200 <td><span class="summary-sig"><a name="_contains"></a><span class="summary-sig-name">_contains</span>(<span class="summary-sig-arg">self</span>,
201 <span class="summary-sig-arg">ielem</span>)</span><br />
202 Contains subroutine that takes an integer.</td>
203 <td align="right" valign="top">
204 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._contains">source&nbsp;code</a></span>
205
206 </td>
207 </tr>
208 </table>
209
210 </td>
211 </tr>
212 <tr class="private">
213 <td width="15%" align="right" valign="top" class="summary">
214 <span class="summary-type">&nbsp;</span>
215 </td><td class="summary">
216 <table width="100%" cellpadding="0" cellspacing="0" border="0">
217 <tr>
218 <td><span class="summary-sig"><a name="_contains_with_padding"></a><span class="summary-sig-name">_contains_with_padding</span>(<span class="summary-sig-arg">self</span>,
219 <span class="summary-sig-arg">ielem</span>,
220 <span class="summary-sig-arg">pad</span>)</span><br />
221 Contains subroutine that takes an integer and a padding value.</td>
222 <td align="right" valign="top">
223 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._contains_with_padding">source&nbsp;code</a></span>
224
225 </td>
226 </tr>
227 </table>
228
229 </td>
230 </tr>
231 <tr class="private">
232 <td width="15%" align="right" valign="top" class="summary">
233 <span class="summary-type">&nbsp;</span>
234 </td><td class="summary">
235 <table width="100%" cellpadding="0" cellspacing="0" border="0">
236 <tr>
237 <td><span class="summary-sig"><a name="_binary_sanity_check"></a><span class="summary-sig-name">_binary_sanity_check</span>(<span class="summary-sig-arg">self</span>,
238 <span class="summary-sig-arg">other</span>)</span></td>
239 <td align="right" valign="top">
240 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._binary_sanity_check">source&nbsp;code</a></span>
241
242 </td>
243 </tr>
244 </table>
245
246 </td>
247 </tr>
248 <tr>
249 <td width="15%" align="right" valign="top" class="summary">
250 <span class="summary-type">&nbsp;</span>
251 </td><td class="summary">
252 <table width="100%" cellpadding="0" cellspacing="0" border="0">
253 <tr>
254 <td><span class="summary-sig"><a name="issubset"></a><span class="summary-sig-name">issubset</span>(<span class="summary-sig-arg">self</span>,
255 <span class="summary-sig-arg">rangeset</span>)</span><br />
256 Report whether another rangeset contains this rangeset.</td>
257 <td align="right" valign="top">
258 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.issubset">source&nbsp;code</a></span>
259
260 </td>
261 </tr>
262 </table>
263
264 </td>
265 </tr>
266 <tr>
267 <td width="15%" align="right" valign="top" class="summary">
268 <span class="summary-type">&nbsp;</span>
269 </td><td class="summary">
270 <table width="100%" cellpadding="0" cellspacing="0" border="0">
271 <tr>
272 <td><span class="summary-sig"><a name="issuperset"></a><span class="summary-sig-name">issuperset</span>(<span class="summary-sig-arg">self</span>,
273 <span class="summary-sig-arg">rangeset</span>)</span><br />
274 Report whether this rangeset contains another rangeset.</td>
275 <td align="right" valign="top">
276 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.issuperset">source&nbsp;code</a></span>
277
278 </td>
279 </tr>
280 </table>
281
282 </td>
283 </tr>
284 <tr>
285 <td width="15%" align="right" valign="top" class="summary">
286 <span class="summary-type">&nbsp;</span>
287 </td><td class="summary">
288 <table width="100%" cellpadding="0" cellspacing="0" border="0">
289 <tr>
290 <td><span class="summary-sig"><a name="__eq__"></a><span class="summary-sig-name">__eq__</span>(<span class="summary-sig-arg">self</span>,
291 <span class="summary-sig-arg">other</span>)</span><br />
292 RangeSet equality comparison.</td>
293 <td align="right" valign="top">
294 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__eq__">source&nbsp;code</a></span>
295
296 </td>
297 </tr>
298 </table>
299
300 </td>
301 </tr>
302 <tr>
303 <td width="15%" align="right" valign="top" class="summary">
304 <span class="summary-type">&nbsp;</span>
305 </td><td class="summary">
306 <table width="100%" cellpadding="0" cellspacing="0" border="0">
307 <tr>
308 <td><span class="summary-sig"><a name="__le__"></a><span class="summary-sig-name">__le__</span>(<span class="summary-sig-arg">self</span>,
309 <span class="summary-sig-arg">rangeset</span>)</span><br />
310 Report whether another rangeset contains this rangeset.</td>
311 <td align="right" valign="top">
312 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.issubset">source&nbsp;code</a></span>
313
314 </td>
315 </tr>
316 </table>
317
318 </td>
319 </tr>
320 <tr>
321 <td width="15%" align="right" valign="top" class="summary">
322 <span class="summary-type">&nbsp;</span>
323 </td><td class="summary">
324 <table width="100%" cellpadding="0" cellspacing="0" border="0">
325 <tr>
326 <td><span class="summary-sig"><a name="__ge__"></a><span class="summary-sig-name">__ge__</span>(<span class="summary-sig-arg">self</span>,
327 <span class="summary-sig-arg">rangeset</span>)</span><br />
328 Report whether this rangeset contains another rangeset.</td>
329 <td align="right" valign="top">
330 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.issuperset">source&nbsp;code</a></span>
331
332 </td>
333 </tr>
334 </table>
335
336 </td>
337 </tr>
338 <tr>
339 <td width="15%" align="right" valign="top" class="summary">
340 <span class="summary-type">&nbsp;</span>
341 </td><td class="summary">
342 <table width="100%" cellpadding="0" cellspacing="0" border="0">
343 <tr>
344 <td><span class="summary-sig"><a name="__lt__"></a><span class="summary-sig-name">__lt__</span>(<span class="summary-sig-arg">x</span>,
345 <span class="summary-sig-arg">y</span>)</span><br />
346 x&lt;y</td>
347 <td align="right" valign="top">
348 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__lt__">source&nbsp;code</a></span>
349
350 </td>
351 </tr>
352 </table>
353
354 </td>
355 </tr>
356 <tr>
357 <td width="15%" align="right" valign="top" class="summary">
358 <span class="summary-type">&nbsp;</span>
359 </td><td class="summary">
360 <table width="100%" cellpadding="0" cellspacing="0" border="0">
361 <tr>
362 <td><span class="summary-sig"><a name="__gt__"></a><span class="summary-sig-name">__gt__</span>(<span class="summary-sig-arg">x</span>,
363 <span class="summary-sig-arg">y</span>)</span><br />
364 x&gt;y</td>
365 <td align="right" valign="top">
366 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__gt__">source&nbsp;code</a></span>
367
368 </td>
369 </tr>
370 </table>
371
372 </td>
373 </tr>
374 <tr>
375 <td width="15%" align="right" valign="top" class="summary">
376 <span class="summary-type">&nbsp;</span>
377 </td><td class="summary">
378 <table width="100%" cellpadding="0" cellspacing="0" border="0">
379 <tr>
380 <td><span class="summary-sig"><a name="__getitem__"></a><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-arg">self</span>,
381 <span class="summary-sig-arg">i</span>)</span><br />
382 Return the element at index i.</td>
383 <td align="right" valign="top">
384 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__getitem__">source&nbsp;code</a></span>
385
386 </td>
387 </tr>
388 </table>
389
390 </td>
391 </tr>
392 <tr>
393 <td width="15%" align="right" valign="top" class="summary">
394 <span class="summary-type">&nbsp;</span>
395 </td><td class="summary">
396 <table width="100%" cellpadding="0" cellspacing="0" border="0">
397 <tr>
398 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__getslice__" class="summary-sig-name">__getslice__</a>(<span class="summary-sig-arg">self</span>,
399 <span class="summary-sig-arg">i</span>,
400 <span class="summary-sig-arg">j</span>)</span><br />
401 Return the slice from index i to index j-1.</td>
402 <td align="right" valign="top">
403 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__getslice__">source&nbsp;code</a></span>
404
405 </td>
406 </tr>
407 </table>
408
409 </td>
410 </tr>
411 <tr>
412 <td width="15%" align="right" valign="top" class="summary">
413 <span class="summary-type">&nbsp;</span>
414 </td><td class="summary">
415 <table width="100%" cellpadding="0" cellspacing="0" border="0">
416 <tr>
417 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#split" class="summary-sig-name">split</a>(<span class="summary-sig-arg">self</span>,
418 <span class="summary-sig-arg">nbr</span>)</span><br />
419 Split the rangeset into nbr sub-rangeset.</td>
420 <td align="right" valign="top">
421 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.split">source&nbsp;code</a></span>
422
423 </td>
424 </tr>
425 </table>
426
427 </td>
428 </tr>
429 <tr class="private">
430 <td width="15%" align="right" valign="top" class="summary">
431 <span class="summary-type">&nbsp;</span>
432 </td><td class="summary">
433 <table width="100%" cellpadding="0" cellspacing="0" border="0">
434 <tr>
435 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#_expand" class="summary-sig-name" onclick="show_private();">_expand</a>(<span class="summary-sig-arg">self</span>)</span><br />
436 Expand all items.</td>
437 <td align="right" valign="top">
438 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._expand">source&nbsp;code</a></span>
439
440 </td>
441 </tr>
442 </table>
443
444 </td>
445 </tr>
446 <tr class="private">
447 <td width="15%" align="right" valign="top" class="summary">
448 <span class="summary-type">&nbsp;</span>
449 </td><td class="summary">
450 <table width="100%" cellpadding="0" cellspacing="0" border="0">
451 <tr>
452 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#_fold" class="summary-sig-name" onclick="show_private();">_fold</a>(<span class="summary-sig-arg">self</span>,
453 <span class="summary-sig-arg">items</span>,
454 <span class="summary-sig-arg">pad</span>)</span><br />
455 Fold items as ranges and group them by step.</td>
456 <td align="right" valign="top">
457 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._fold">source&nbsp;code</a></span>
458
459 </td>
460 </tr>
461 </table>
462
463 </td>
464 </tr>
465 <tr>
466 <td width="15%" align="right" valign="top" class="summary">
467 <span class="summary-type">&nbsp;</span>
468 </td><td class="summary">
469 <table width="100%" cellpadding="0" cellspacing="0" border="0">
470 <tr>
471 <td><span class="summary-sig"><a name="add_range"></a><span class="summary-sig-name">add_range</span>(<span class="summary-sig-arg">self</span>,
472 <span class="summary-sig-arg">start</span>,
473 <span class="summary-sig-arg">stop</span>,
474 <span class="summary-sig-arg">step</span>=<span class="summary-sig-default">1</span>,
475 <span class="summary-sig-arg">pad</span>=<span class="summary-sig-default">0</span>)</span><br />
476 Add a range (start, stop, step and padding length) to RangeSet.</td>
477 <td align="right" valign="top">
478 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.add_range">source&nbsp;code</a></span>
479
480 </td>
481 </tr>
482 </table>
483
484 </td>
485 </tr>
486 <tr class="private">
487 <td width="15%" align="right" valign="top" class="summary">
488 <span class="summary-type">&nbsp;</span>
489 </td><td class="summary">
490 <table width="100%" cellpadding="0" cellspacing="0" border="0">
491 <tr>
492 <td><span class="summary-sig"><a name="_add_range_exfold"></a><span class="summary-sig-name">_add_range_exfold</span>(<span class="summary-sig-arg">self</span>,
493 <span class="summary-sig-arg">start</span>,
494 <span class="summary-sig-arg">stop</span>,
495 <span class="summary-sig-arg">step</span>,
496 <span class="summary-sig-arg">pad</span>)</span><br />
497 Add range expanding then folding all items.</td>
498 <td align="right" valign="top">
499 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._add_range_exfold">source&nbsp;code</a></span>
500
501 </td>
502 </tr>
503 </table>
504
505 </td>
506 </tr>
507 <tr>
508 <td width="15%" align="right" valign="top" class="summary">
509 <span class="summary-type">&nbsp;</span>
510 </td><td class="summary">
511 <table width="100%" cellpadding="0" cellspacing="0" border="0">
512 <tr>
513 <td><span class="summary-sig"><a name="union"></a><span class="summary-sig-name">union</span>(<span class="summary-sig-arg">self</span>,
514 <span class="summary-sig-arg">other</span>)</span><br />
515 s.union(t) returns a new rangeset with elements from both s and t.</td>
516 <td align="right" valign="top">
517 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.union">source&nbsp;code</a></span>
518
519 </td>
520 </tr>
521 </table>
522
523 </td>
524 </tr>
525 <tr>
526 <td width="15%" align="right" valign="top" class="summary">
527 <span class="summary-type">&nbsp;</span>
528 </td><td class="summary">
529 <table width="100%" cellpadding="0" cellspacing="0" border="0">
530 <tr>
531 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__or__" class="summary-sig-name">__or__</a>(<span class="summary-sig-arg">self</span>,
532 <span class="summary-sig-arg">other</span>)</span><br />
533 Implements the | operator.</td>
534 <td align="right" valign="top">
535 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__or__">source&nbsp;code</a></span>
536
537 </td>
538 </tr>
539 </table>
540
541 </td>
542 </tr>
543 <tr>
544 <td width="15%" align="right" valign="top" class="summary">
545 <span class="summary-type">&nbsp;</span>
546 </td><td class="summary">
547 <table width="100%" cellpadding="0" cellspacing="0" border="0">
548 <tr>
549 <td><span class="summary-sig"><a name="add"></a><span class="summary-sig-name">add</span>(<span class="summary-sig-arg">self</span>,
550 <span class="summary-sig-arg">elem</span>,
551 <span class="summary-sig-arg">pad</span>=<span class="summary-sig-default">0</span>)</span><br />
552 Add element to RangeSet.</td>
553 <td align="right" valign="top">
554 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.add">source&nbsp;code</a></span>
555
556 </td>
557 </tr>
558 </table>
559
560 </td>
561 </tr>
562 <tr>
563 <td width="15%" align="right" valign="top" class="summary">
564 <span class="summary-type">&nbsp;</span>
565 </td><td class="summary">
566 <table width="100%" cellpadding="0" cellspacing="0" border="0">
567 <tr>
568 <td><span class="summary-sig"><a name="update"></a><span class="summary-sig-name">update</span>(<span class="summary-sig-arg">self</span>,
569 <span class="summary-sig-arg">rangeset</span>)</span><br />
570 Update a rangeset with the union of itself and another.</td>
571 <td align="right" valign="top">
572 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.update">source&nbsp;code</a></span>
573
574 </td>
575 </tr>
576 </table>
577
578 </td>
579 </tr>
580 <tr>
581 <td width="15%" align="right" valign="top" class="summary">
582 <span class="summary-type">&nbsp;</span>
583 </td><td class="summary">
584 <table width="100%" cellpadding="0" cellspacing="0" border="0">
585 <tr>
586 <td><span class="summary-sig"><a name="clear"></a><span class="summary-sig-name">clear</span>(<span class="summary-sig-arg">self</span>)</span><br />
587 Remove all ranges from this rangeset.</td>
588 <td align="right" valign="top">
589 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.clear">source&nbsp;code</a></span>
590
591 </td>
592 </tr>
593 </table>
594
595 </td>
596 </tr>
597 <tr>
598 <td width="15%" align="right" valign="top" class="summary">
599 <span class="summary-type">&nbsp;</span>
600 </td><td class="summary">
601 <table width="100%" cellpadding="0" cellspacing="0" border="0">
602 <tr>
603 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__ior__" class="summary-sig-name">__ior__</a>(<span class="summary-sig-arg">self</span>,
604 <span class="summary-sig-arg">other</span>)</span><br />
605 Implements the |= operator.</td>
606 <td align="right" valign="top">
607 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__ior__">source&nbsp;code</a></span>
608
609 </td>
610 </tr>
611 </table>
612
613 </td>
614 </tr>
615 <tr>
616 <td width="15%" align="right" valign="top" class="summary">
617 <span class="summary-type">&nbsp;</span>
618 </td><td class="summary">
619 <table width="100%" cellpadding="0" cellspacing="0" border="0">
620 <tr>
621 <td><span class="summary-sig"><a name="intersection"></a><span class="summary-sig-name">intersection</span>(<span class="summary-sig-arg">self</span>,
622 <span class="summary-sig-arg">rangeset</span>)</span><br />
623 s.intersection(t) returns a new rangeset with elements common to s
624 and t.</td>
625 <td align="right" valign="top">
626 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.intersection">source&nbsp;code</a></span>
627
628 </td>
629 </tr>
630 </table>
631
632 </td>
633 </tr>
634 <tr>
635 <td width="15%" align="right" valign="top" class="summary">
636 <span class="summary-type">&nbsp;</span>
637 </td><td class="summary">
638 <table width="100%" cellpadding="0" cellspacing="0" border="0">
639 <tr>
640 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__and__" class="summary-sig-name">__and__</a>(<span class="summary-sig-arg">self</span>,
641 <span class="summary-sig-arg">other</span>)</span><br />
642 Implements the &amp; operator.</td>
643 <td align="right" valign="top">
644 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__and__">source&nbsp;code</a></span>
645
646 </td>
647 </tr>
648 </table>
649
650 </td>
651 </tr>
652 <tr>
653 <td width="15%" align="right" valign="top" class="summary">
654 <span class="summary-type">&nbsp;</span>
655 </td><td class="summary">
656 <table width="100%" cellpadding="0" cellspacing="0" border="0">
657 <tr>
658 <td><span class="summary-sig"><a name="intersection_update"></a><span class="summary-sig-name">intersection_update</span>(<span class="summary-sig-arg">self</span>,
659 <span class="summary-sig-arg">rangeset</span>)</span><br />
660 Intersection with provided RangeSet.</td>
661 <td align="right" valign="top">
662 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.intersection_update">source&nbsp;code</a></span>
663
664 </td>
665 </tr>
666 </table>
667
668 </td>
669 </tr>
670 <tr>
671 <td width="15%" align="right" valign="top" class="summary">
672 <span class="summary-type">&nbsp;</span>
673 </td><td class="summary">
674 <table width="100%" cellpadding="0" cellspacing="0" border="0">
675 <tr>
676 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__iand__" class="summary-sig-name">__iand__</a>(<span class="summary-sig-arg">self</span>,
677 <span class="summary-sig-arg">other</span>)</span><br />
678 Implements the &amp;= operator.</td>
679 <td align="right" valign="top">
680 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__iand__">source&nbsp;code</a></span>
681
682 </td>
683 </tr>
684 </table>
685
686 </td>
687 </tr>
688 <tr class="private">
689 <td width="15%" align="right" valign="top" class="summary">
690 <span class="summary-type">&nbsp;</span>
691 </td><td class="summary">
692 <table width="100%" cellpadding="0" cellspacing="0" border="0">
693 <tr>
694 <td><span class="summary-sig"><a name="_intersect_exfold"></a><span class="summary-sig-name">_intersect_exfold</span>(<span class="summary-sig-arg">self</span>,
695 <span class="summary-sig-arg">rangeset</span>)</span><br />
696 Calc intersection with the expand/fold method.</td>
697 <td align="right" valign="top">
698 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._intersect_exfold">source&nbsp;code</a></span>
699
700 </td>
701 </tr>
702 </table>
703
704 </td>
705 </tr>
706 <tr>
707 <td width="15%" align="right" valign="top" class="summary">
708 <span class="summary-type">&nbsp;</span>
709 </td><td class="summary">
710 <table width="100%" cellpadding="0" cellspacing="0" border="0">
711 <tr>
712 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#difference" class="summary-sig-name">difference</a>(<span class="summary-sig-arg">self</span>,
713 <span class="summary-sig-arg">rangeset</span>)</span><br />
714 s.difference(t) returns a new rangeset with elements in s but not in
715 t.</td>
716 <td align="right" valign="top">
717 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.difference">source&nbsp;code</a></span>
718
719 </td>
720 </tr>
721 </table>
722
723 </td>
724 </tr>
725 <tr>
726 <td width="15%" align="right" valign="top" class="summary">
727 <span class="summary-type">&nbsp;</span>
728 </td><td class="summary">
729 <table width="100%" cellpadding="0" cellspacing="0" border="0">
730 <tr>
731 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__sub__" class="summary-sig-name">__sub__</a>(<span class="summary-sig-arg">self</span>,
732 <span class="summary-sig-arg">other</span>)</span><br />
733 Implement the - operator.</td>
734 <td align="right" valign="top">
735 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__sub__">source&nbsp;code</a></span>
736
737 </td>
738 </tr>
739 </table>
740
741 </td>
742 </tr>
743 <tr>
744 <td width="15%" align="right" valign="top" class="summary">
745 <span class="summary-type">&nbsp;</span>
746 </td><td class="summary">
747 <table width="100%" cellpadding="0" cellspacing="0" border="0">
748 <tr>
749 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#difference_update" class="summary-sig-name">difference_update</a>(<span class="summary-sig-arg">self</span>,
750 <span class="summary-sig-arg">rangeset</span>,
751 <span class="summary-sig-arg">strict</span>=<span class="summary-sig-default">False</span>)</span><br />
752 s.difference_update(t) returns rangeset s after removing elements
753 found in t.</td>
754 <td align="right" valign="top">
755 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.difference_update">source&nbsp;code</a></span>
756
757 </td>
758 </tr>
759 </table>
760
761 </td>
762 </tr>
763 <tr>
764 <td width="15%" align="right" valign="top" class="summary">
765 <span class="summary-type">&nbsp;</span>
766 </td><td class="summary">
767 <table width="100%" cellpadding="0" cellspacing="0" border="0">
768 <tr>
769 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__isub__" class="summary-sig-name">__isub__</a>(<span class="summary-sig-arg">self</span>,
770 <span class="summary-sig-arg">other</span>)</span><br />
771 Implement the -= operator.</td>
772 <td align="right" valign="top">
773 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__isub__">source&nbsp;code</a></span>
774
775 </td>
776 </tr>
777 </table>
778
779 </td>
780 </tr>
781 <tr>
782 <td width="15%" align="right" valign="top" class="summary">
783 <span class="summary-type">&nbsp;</span>
784 </td><td class="summary">
785 <table width="100%" cellpadding="0" cellspacing="0" border="0">
786 <tr>
787 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#remove" class="summary-sig-name">remove</a>(<span class="summary-sig-arg">self</span>,
788 <span class="summary-sig-arg">elem</span>)</span><br />
789 Remove element elem from the RangeSet.</td>
790 <td align="right" valign="top">
791 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.remove">source&nbsp;code</a></span>
792
793 </td>
794 </tr>
795 </table>
796
797 </td>
798 </tr>
799 <tr class="private">
800 <td width="15%" align="right" valign="top" class="summary">
801 <span class="summary-type">&nbsp;</span>
802 </td><td class="summary">
803 <table width="100%" cellpadding="0" cellspacing="0" border="0">
804 <tr>
805 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#_sub_exfold" class="summary-sig-name" onclick="show_private();">_sub_exfold</a>(<span class="summary-sig-arg">self</span>,
806 <span class="summary-sig-arg">rangeset</span>,
807 <span class="summary-sig-arg">strict</span>)</span><br />
808 Calc sub/exclusion with the expand/fold method.</td>
809 <td align="right" valign="top">
810 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._sub_exfold">source&nbsp;code</a></span>
811
812 </td>
813 </tr>
814 </table>
815
816 </td>
817 </tr>
818 <tr>
819 <td width="15%" align="right" valign="top" class="summary">
820 <span class="summary-type">&nbsp;</span>
821 </td><td class="summary">
822 <table width="100%" cellpadding="0" cellspacing="0" border="0">
823 <tr>
824 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference" class="summary-sig-name">symmetric_difference</a>(<span class="summary-sig-arg">self</span>,
825 <span class="summary-sig-arg">other</span>)</span><br />
826 s.symmetric_difference(t) returns the symmetric difference of two
827 rangesets as a new RangeSet.</td>
828 <td align="right" valign="top">
829 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.symmetric_difference">source&nbsp;code</a></span>
830
831 </td>
832 </tr>
833 </table>
834
835 </td>
836 </tr>
837 <tr>
838 <td width="15%" align="right" valign="top" class="summary">
839 <span class="summary-type">&nbsp;</span>
840 </td><td class="summary">
841 <table width="100%" cellpadding="0" cellspacing="0" border="0">
842 <tr>
843 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__xor__" class="summary-sig-name">__xor__</a>(<span class="summary-sig-arg">self</span>,
844 <span class="summary-sig-arg">other</span>)</span><br />
845 Implement the ^ operator.</td>
846 <td align="right" valign="top">
847 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__xor__">source&nbsp;code</a></span>
848
849 </td>
850 </tr>
851 </table>
852
853 </td>
854 </tr>
855 <tr>
856 <td width="15%" align="right" valign="top" class="summary">
857 <span class="summary-type">&nbsp;</span>
858 </td><td class="summary">
859 <table width="100%" cellpadding="0" cellspacing="0" border="0">
860 <tr>
861 <td><span class="summary-sig"><a name="symmetric_difference_update"></a><span class="summary-sig-name">symmetric_difference_update</span>(<span class="summary-sig-arg">self</span>,
862 <span class="summary-sig-arg">rangeset</span>)</span><br />
863 s.symmetric_difference_update(t) returns rangeset s keeping all
864 elements that are in exactly one of the rangesets.</td>
865 <td align="right" valign="top">
866 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.symmetric_difference_update">source&nbsp;code</a></span>
867
868 </td>
869 </tr>
870 </table>
871
872 </td>
873 </tr>
874 <tr>
875 <td width="15%" align="right" valign="top" class="summary">
876 <span class="summary-type">&nbsp;</span>
877 </td><td class="summary">
878 <table width="100%" cellpadding="0" cellspacing="0" border="0">
879 <tr>
880 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSet-class.html#__ixor__" class="summary-sig-name">__ixor__</a>(<span class="summary-sig-arg">self</span>,
881 <span class="summary-sig-arg">other</span>)</span><br />
882 Implement the ^= operator.</td>
883 <td align="right" valign="top">
884 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__ixor__">source&nbsp;code</a></span>
885
886 </td>
887 </tr>
888 </table>
889
890 </td>
891 </tr>
892 <tr class="private">
893 <td width="15%" align="right" valign="top" class="summary">
894 <span class="summary-type">&nbsp;</span>
895 </td><td class="summary">
896 <table width="100%" cellpadding="0" cellspacing="0" border="0">
897 <tr>
898 <td><span class="summary-sig"><a name="_xor_exfold"></a><span class="summary-sig-name">_xor_exfold</span>(<span class="summary-sig-arg">self</span>,
899 <span class="summary-sig-arg">rangeset</span>)</span><br />
900 Calc symmetric difference (xor).</td>
901 <td align="right" valign="top">
902 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._xor_exfold">source&nbsp;code</a></span>
903
904 </td>
905 </tr>
906 </table>
907
908 </td>
909 </tr>
910 </table>
911 <!-- ==================== CLASS METHODS ==================== -->
912 <a name="section-ClassMethods"></a>
913 <table class="summary" border="1" cellpadding="3"
914 cellspacing="0" width="100%" bgcolor="white">
915 <tr bgcolor="#70b0f0" class="table-header">
916 <td colspan="2" class="table-header">
917 <table border="0" cellpadding="0" cellspacing="0" width="100%">
918 <tr valign="top">
919 <td align="left"><span class="table-header">Class Methods</span></td>
920 <td align="right" valign="top"
921 ><span class="options">[<a href="#section-ClassMethods"
922 class="privatelink" onclick="toggle_private();"
923 >hide private</a>]</span></td>
924 </tr>
925 </table>
926 </td>
927 </tr>
928 <tr>
929 <td width="15%" align="right" valign="top" class="summary">
930 <span class="summary-type">&nbsp;</span>
931 </td><td class="summary">
932 <table width="100%" cellpadding="0" cellspacing="0" border="0">
933 <tr>
934 <td><span class="summary-sig"><a name="fromlist"></a><span class="summary-sig-name">fromlist</span>(<span class="summary-sig-arg">cls</span>,
935 <span class="summary-sig-arg">rglist</span>,
936 <span class="summary-sig-arg">autostep</span>=<span class="summary-sig-default">None</span>)</span><br />
937 Class method that returns a new RangeSet with ranges from provided
938 list.</td>
939 <td align="right" valign="top">
940 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.fromlist">source&nbsp;code</a></span>
941
942 </td>
943 </tr>
944 </table>
945
946 </td>
947 </tr>
948 <tr>
949 <td width="15%" align="right" valign="top" class="summary">
950 <span class="summary-type">&nbsp;</span>
951 </td><td class="summary">
952 <table width="100%" cellpadding="0" cellspacing="0" border="0">
953 <tr>
954 <td><span class="summary-sig"><a name="fromone"></a><span class="summary-sig-name">fromone</span>(<span class="summary-sig-arg">cls</span>,
955 <span class="summary-sig-arg">index</span>,
956 <span class="summary-sig-arg">pad</span>=<span class="summary-sig-default">0</span>,
957 <span class="summary-sig-arg">autostep</span>=<span class="summary-sig-default">None</span>)</span><br />
958 Class method that returns a new RangeSet of one single item.</td>
959 <td align="right" valign="top">
960 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.fromone">source&nbsp;code</a></span>
961
962 </td>
963 </tr>
964 </table>
965
966 </td>
967 </tr>
968 </table>
969 <!-- ==================== METHOD DETAILS ==================== -->
970 <a name="section-MethodDetails"></a>
971 <table class="details" border="1" cellpadding="3"
972 cellspacing="0" width="100%" bgcolor="white">
973 <tr bgcolor="#70b0f0" class="table-header">
974 <td colspan="2" class="table-header">
975 <table border="0" cellpadding="0" cellspacing="0" width="100%">
976 <tr valign="top">
977 <td align="left"><span class="table-header">Method Details</span></td>
978 <td align="right" valign="top"
979 ><span class="options">[<a href="#section-MethodDetails"
980 class="privatelink" onclick="toggle_private();"
981 >hide private</a>]</span></td>
982 </tr>
983 </table>
984 </td>
985 </tr>
986 </table>
987 <a name="__contains__"></a>
988 <div>
989 <table class="details" border="1" cellpadding="3"
990 cellspacing="0" width="100%" bgcolor="white">
991 <tr><td>
992 <table width="100%" cellpadding="0" cellspacing="0" border="0">
993 <tr valign="top"><td>
994 <h3 class="epydoc"><span class="sig"><span class="sig-name">__contains__</span>(<span class="sig-arg">self</span>,
995 <span class="sig-arg">elem</span>)</span>
996 <br /><em class="fname">(In operator)</em>
997 </h3>
998 </td><td align="right" valign="top"
999 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__contains__">source&nbsp;code</a></span>&nbsp;
1000 </td>
1001 </tr></table>
1002
1003 <p>Is element contained in RangeSet? Element can be either a string with
1004 optional padding (eg. &quot;002&quot;) or an integer (obviously, no
1005 padding check is performed for integer).</p>
1006 <dl class="fields">
1007 </dl>
1008 </td></tr></table>
1009 </div>
1010 <a name="__getslice__"></a>
1011 <div>
1012 <table class="details" border="1" cellpadding="3"
1013 cellspacing="0" width="100%" bgcolor="white">
1014 <tr><td>
1015 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1016 <tr valign="top"><td>
1017 <h3 class="epydoc"><span class="sig"><span class="sig-name">__getslice__</span>(<span class="sig-arg">self</span>,
1018 <span class="sig-arg">i</span>,
1019 <span class="sig-arg">j</span>)</span>
1020 <br /><em class="fname">(Slicling operator)</em>
1021 </h3>
1022 </td><td align="right" valign="top"
1023 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__getslice__">source&nbsp;code</a></span>&nbsp;
1024 </td>
1025 </tr></table>
1026
1027 <p>Return the slice from index i to index j-1. For convenience only, not
1028 optimized as of version 1.0.</p>
1029 <dl class="fields">
1030 </dl>
1031 </td></tr></table>
1032 </div>
1033 <a name="split"></a>
1034 <div>
1035 <table class="details" border="1" cellpadding="3"
1036 cellspacing="0" width="100%" bgcolor="white">
1037 <tr><td>
1038 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1039 <tr valign="top"><td>
1040 <h3 class="epydoc"><span class="sig"><span class="sig-name">split</span>(<span class="sig-arg">self</span>,
1041 <span class="sig-arg">nbr</span>)</span>
1042 </h3>
1043 </td><td align="right" valign="top"
1044 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.split">source&nbsp;code</a></span>&nbsp;
1045 </td>
1046 </tr></table>
1047
1048 <p>Split the rangeset into nbr sub-rangeset. Each sub-rangeset will have
1049 the same number of element more or less 1. Current rangeset remains
1050 unmodified. Returns an iterator.</p>
1051 <pre class="py-doctest">
1052 <span class="py-prompt">&gt;&gt;&gt; </span>RangeSet(<span class="py-string">&quot;1-5&quot;</span>).split(3)
1053 <span class="py-output">RangeSet(&quot;1-2&quot;)</span>
1054 <span class="py-output">RangeSet(&quot;3-4&quot;)</span>
1055 <span class="py-output">RangeSet(&quot;foo5&quot;)</span></pre>
1056 <dl class="fields">
1057 </dl>
1058 </td></tr></table>
1059 </div>
1060 <a name="_expand"></a>
1061 <div class="private">
1062 <table class="details" border="1" cellpadding="3"
1063 cellspacing="0" width="100%" bgcolor="white">
1064 <tr><td>
1065 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1066 <tr valign="top"><td>
1067 <h3 class="epydoc"><span class="sig"><span class="sig-name">_expand</span>(<span class="sig-arg">self</span>)</span>
1068 </h3>
1069 </td><td align="right" valign="top"
1070 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._expand">source&nbsp;code</a></span>&nbsp;
1071 </td>
1072 </tr></table>
1073
1074 <p>Expand all items. Internal use.</p>
1075 <dl class="fields">
1076 </dl>
1077 </td></tr></table>
1078 </div>
1079 <a name="_fold"></a>
1080 <div class="private">
1081 <table class="details" border="1" cellpadding="3"
1082 cellspacing="0" width="100%" bgcolor="white">
1083 <tr><td>
1084 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1085 <tr valign="top"><td>
1086 <h3 class="epydoc"><span class="sig"><span class="sig-name">_fold</span>(<span class="sig-arg">self</span>,
1087 <span class="sig-arg">items</span>,
1088 <span class="sig-arg">pad</span>)</span>
1089 </h3>
1090 </td><td align="right" valign="top"
1091 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._fold">source&nbsp;code</a></span>&nbsp;
1092 </td>
1093 </tr></table>
1094
1095 <p>Fold items as ranges and group them by step. Return: (ranges,
1096 total_length)</p>
1097 <dl class="fields">
1098 </dl>
1099 </td></tr></table>
1100 </div>
1101 <a name="__or__"></a>
1102 <div>
1103 <table class="details" border="1" cellpadding="3"
1104 cellspacing="0" width="100%" bgcolor="white">
1105 <tr><td>
1106 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1107 <tr valign="top"><td>
1108 <h3 class="epydoc"><span class="sig"><span class="sig-name">__or__</span>(<span class="sig-arg">self</span>,
1109 <span class="sig-arg">other</span>)</span>
1110 <br /><em class="fname">(Or operator)</em>
1111 </h3>
1112 </td><td align="right" valign="top"
1113 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__or__">source&nbsp;code</a></span>&nbsp;
1114 </td>
1115 </tr></table>
1116
1117 <p>Implements the | operator. So s | t returns a new rangeset with
1118 elements from both s and t.</p>
1119 <dl class="fields">
1120 </dl>
1121 </td></tr></table>
1122 </div>
1123 <a name="__ior__"></a>
1124 <div>
1125 <table class="details" border="1" cellpadding="3"
1126 cellspacing="0" width="100%" bgcolor="white">
1127 <tr><td>
1128 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1129 <tr valign="top"><td>
1130 <h3 class="epydoc"><span class="sig"><span class="sig-name">__ior__</span>(<span class="sig-arg">self</span>,
1131 <span class="sig-arg">other</span>)</span>
1132 </h3>
1133 </td><td align="right" valign="top"
1134 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__ior__">source&nbsp;code</a></span>&nbsp;
1135 </td>
1136 </tr></table>
1137
1138 <p>Implements the |= operator. So s |= t returns rangeset s with elements
1139 added from t. (Python version 2.5+ required)</p>
1140 <dl class="fields">
1141 </dl>
1142 </td></tr></table>
1143 </div>
1144 <a name="__and__"></a>
1145 <div>
1146 <table class="details" border="1" cellpadding="3"
1147 cellspacing="0" width="100%" bgcolor="white">
1148 <tr><td>
1149 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1150 <tr valign="top"><td>
1151 <h3 class="epydoc"><span class="sig"><span class="sig-name">__and__</span>(<span class="sig-arg">self</span>,
1152 <span class="sig-arg">other</span>)</span>
1153 <br /><em class="fname">(And operator)</em>
1154 </h3>
1155 </td><td align="right" valign="top"
1156 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__and__">source&nbsp;code</a></span>&nbsp;
1157 </td>
1158 </tr></table>
1159
1160 <p>Implements the &amp; operator. So s &amp; t returns a new rangeset
1161 with elements common to s and t.</p>
1162 <dl class="fields">
1163 </dl>
1164 </td></tr></table>
1165 </div>
1166 <a name="__iand__"></a>
1167 <div>
1168 <table class="details" border="1" cellpadding="3"
1169 cellspacing="0" width="100%" bgcolor="white">
1170 <tr><td>
1171 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1172 <tr valign="top"><td>
1173 <h3 class="epydoc"><span class="sig"><span class="sig-name">__iand__</span>(<span class="sig-arg">self</span>,
1174 <span class="sig-arg">other</span>)</span>
1175 </h3>
1176 </td><td align="right" valign="top"
1177 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__iand__">source&nbsp;code</a></span>&nbsp;
1178 </td>
1179 </tr></table>
1180
1181 <p>Implements the &amp;= operator. So s &amp;= t returns rangeset s
1182 keeping only elements also found in t. (Python version 2.5+ required)</p>
1183 <dl class="fields">
1184 </dl>
1185 </td></tr></table>
1186 </div>
1187 <a name="difference"></a>
1188 <div>
1189 <table class="details" border="1" cellpadding="3"
1190 cellspacing="0" width="100%" bgcolor="white">
1191 <tr><td>
1192 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1193 <tr valign="top"><td>
1194 <h3 class="epydoc"><span class="sig"><span class="sig-name">difference</span>(<span class="sig-arg">self</span>,
1195 <span class="sig-arg">rangeset</span>)</span>
1196 </h3>
1197 </td><td align="right" valign="top"
1198 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.difference">source&nbsp;code</a></span>&nbsp;
1199 </td>
1200 </tr></table>
1201
1202 <p>s.difference(t) returns a new rangeset with elements in s but not in
1203 t. in t.</p>
1204 <dl class="fields">
1205 </dl>
1206 </td></tr></table>
1207 </div>
1208 <a name="__sub__"></a>
1209 <div>
1210 <table class="details" border="1" cellpadding="3"
1211 cellspacing="0" width="100%" bgcolor="white">
1212 <tr><td>
1213 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1214 <tr valign="top"><td>
1215 <h3 class="epydoc"><span class="sig"><span class="sig-name">__sub__</span>(<span class="sig-arg">self</span>,
1216 <span class="sig-arg">other</span>)</span>
1217 <br /><em class="fname">(Subtraction operator)</em>
1218 </h3>
1219 </td><td align="right" valign="top"
1220 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__sub__">source&nbsp;code</a></span>&nbsp;
1221 </td>
1222 </tr></table>
1223
1224 <p>Implement the - operator. So s - t returns a new rangeset with
1225 elements in s but not in t.</p>
1226 <dl class="fields">
1227 </dl>
1228 </td></tr></table>
1229 </div>
1230 <a name="difference_update"></a>
1231 <div>
1232 <table class="details" border="1" cellpadding="3"
1233 cellspacing="0" width="100%" bgcolor="white">
1234 <tr><td>
1235 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1236 <tr valign="top"><td>
1237 <h3 class="epydoc"><span class="sig"><span class="sig-name">difference_update</span>(<span class="sig-arg">self</span>,
1238 <span class="sig-arg">rangeset</span>,
1239 <span class="sig-arg">strict</span>=<span class="sig-default">False</span>)</span>
1240 </h3>
1241 </td><td align="right" valign="top"
1242 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.difference_update">source&nbsp;code</a></span>&nbsp;
1243 </td>
1244 </tr></table>
1245
1246 <p>s.difference_update(t) returns rangeset s after removing elements
1247 found in t. If strict is True, raise KeyError if an element cannot be
1248 removed.</p>
1249 <dl class="fields">
1250 </dl>
1251 </td></tr></table>
1252 </div>
1253 <a name="__isub__"></a>
1254 <div>
1255 <table class="details" border="1" cellpadding="3"
1256 cellspacing="0" width="100%" bgcolor="white">
1257 <tr><td>
1258 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1259 <tr valign="top"><td>
1260 <h3 class="epydoc"><span class="sig"><span class="sig-name">__isub__</span>(<span class="sig-arg">self</span>,
1261 <span class="sig-arg">other</span>)</span>
1262 </h3>
1263 </td><td align="right" valign="top"
1264 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__isub__">source&nbsp;code</a></span>&nbsp;
1265 </td>
1266 </tr></table>
1267
1268 <p>Implement the -= operator. So s -= t returns rangeset s after removing
1269 elements found in t. (Python version 2.5+ required)</p>
1270 <dl class="fields">
1271 </dl>
1272 </td></tr></table>
1273 </div>
1274 <a name="remove"></a>
1275 <div>
1276 <table class="details" border="1" cellpadding="3"
1277 cellspacing="0" width="100%" bgcolor="white">
1278 <tr><td>
1279 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1280 <tr valign="top"><td>
1281 <h3 class="epydoc"><span class="sig"><span class="sig-name">remove</span>(<span class="sig-arg">self</span>,
1282 <span class="sig-arg">elem</span>)</span>
1283 </h3>
1284 </td><td align="right" valign="top"
1285 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.remove">source&nbsp;code</a></span>&nbsp;
1286 </td>
1287 </tr></table>
1288
1289 <p>Remove element elem from the RangeSet. Raise KeyError if elem is not
1290 contained in the RangeSet.</p>
1291 <dl class="fields">
1292 </dl>
1293 </td></tr></table>
1294 </div>
1295 <a name="_sub_exfold"></a>
1296 <div class="private">
1297 <table class="details" border="1" cellpadding="3"
1298 cellspacing="0" width="100%" bgcolor="white">
1299 <tr><td>
1300 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1301 <tr valign="top"><td>
1302 <h3 class="epydoc"><span class="sig"><span class="sig-name">_sub_exfold</span>(<span class="sig-arg">self</span>,
1303 <span class="sig-arg">rangeset</span>,
1304 <span class="sig-arg">strict</span>)</span>
1305 </h3>
1306 </td><td align="right" valign="top"
1307 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet._sub_exfold">source&nbsp;code</a></span>&nbsp;
1308 </td>
1309 </tr></table>
1310
1311 <p>Calc sub/exclusion with the expand/fold method. If strict is True,
1312 raise KeyError if the rangeset is not included.</p>
1313 <dl class="fields">
1314 </dl>
1315 </td></tr></table>
1316 </div>
1317 <a name="symmetric_difference"></a>
1318 <div>
1319 <table class="details" border="1" cellpadding="3"
1320 cellspacing="0" width="100%" bgcolor="white">
1321 <tr><td>
1322 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1323 <tr valign="top"><td>
1324 <h3 class="epydoc"><span class="sig"><span class="sig-name">symmetric_difference</span>(<span class="sig-arg">self</span>,
1325 <span class="sig-arg">other</span>)</span>
1326 </h3>
1327 </td><td align="right" valign="top"
1328 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.symmetric_difference">source&nbsp;code</a></span>&nbsp;
1329 </td>
1330 </tr></table>
1331
1332 <p>s.symmetric_difference(t) returns the symmetric difference of two
1333 rangesets as a new RangeSet.</p>
1334 <p>(ie. all elements that are in exactly one of the rangesets.)</p>
1335 <dl class="fields">
1336 </dl>
1337 </td></tr></table>
1338 </div>
1339 <a name="__xor__"></a>
1340 <div>
1341 <table class="details" border="1" cellpadding="3"
1342 cellspacing="0" width="100%" bgcolor="white">
1343 <tr><td>
1344 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1345 <tr valign="top"><td>
1346 <h3 class="epydoc"><span class="sig"><span class="sig-name">__xor__</span>(<span class="sig-arg">self</span>,
1347 <span class="sig-arg">other</span>)</span>
1348 <br /><em class="fname">(Exclusive-Or operator)</em>
1349 </h3>
1350 </td><td align="right" valign="top"
1351 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__xor__">source&nbsp;code</a></span>&nbsp;
1352 </td>
1353 </tr></table>
1354
1355 <p>Implement the ^ operator. So s ^ t returns a new rangeset with
1356 elements that are in exactly one of the rangesets.</p>
1357 <dl class="fields">
1358 </dl>
1359 </td></tr></table>
1360 </div>
1361 <a name="__ixor__"></a>
1362 <div>
1363 <table class="details" border="1" cellpadding="3"
1364 cellspacing="0" width="100%" bgcolor="white">
1365 <tr><td>
1366 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1367 <tr valign="top"><td>
1368 <h3 class="epydoc"><span class="sig"><span class="sig-name">__ixor__</span>(<span class="sig-arg">self</span>,
1369 <span class="sig-arg">other</span>)</span>
1370 </h3>
1371 </td><td align="right" valign="top"
1372 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSet.__ixor__">source&nbsp;code</a></span>&nbsp;
1373 </td>
1374 </tr></table>
1375
1376 <p>Implement the ^= operator. So s ^= t returns rangeset s after keeping
1377 all elements that are in exactly one of the rangesets. (Python version
1378 2.5+ required)</p>
1379 <dl class="fields">
1380 </dl>
1381 </td></tr></table>
1382 </div>
1383 <br />
1384 <!-- ==================== NAVIGATION BAR ==================== -->
1385 <table class="navbar" border="0" width="100%" cellpadding="0"
1386 bgcolor="#a0c0ff" cellspacing="0">
1387 <tr valign="middle">
1388
1389 <!-- Tree link -->
1390 <th>&nbsp;&nbsp;&nbsp;<a
1391 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
1392
1393 <!-- Index link -->
1394 <th>&nbsp;&nbsp;&nbsp;<a
1395 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
1396
1397 <!-- Help link -->
1398 <th>&nbsp;&nbsp;&nbsp;<a
1399 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
1400
1401 <!-- Project homepage -->
1402 <th class="navbar" align="right" width="100%">
1403 <table border="0" cellpadding="0" cellspacing="0">
1404 <tr><th class="navbar" align="center"
1405 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
1406 </tr></table></th>
1407 </tr>
1408 </table>
1409 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
1410 <tr>
1411 <td align="left" class="footer">
1412 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
1413 </td>
1414 <td align="right" class="footer">
1415 <a target="mainFrame" href="http://epydoc.sourceforge.net"
1416 >http://epydoc.sourceforge.net</a>
1417 </td>
1418 </tr>
1419 </table>
1420
1421 <script type="text/javascript">
1422 <!--
1423 // Private objects are initially displayed (because if
1424 // javascript is turned off then we want them to be
1425 // visible); but by default, we want to hide them. So hide
1426 // them unless we have a cookie that says to show them.
1427 checkCookie();
1428 // -->
1429 </script>
1430 </body>
1431 </html>
+0
-211
doc/epydoc/html/ClusterShell.NodeSet.RangeSetException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.RangeSetException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;RangeSetException
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.RangeSetException-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class RangeSetException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSetException">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_25" name="uml_class_diagram_for_clusters_25">
63 <area shape="rect" id="node1" href="ClusterShell.NodeSet.RangeSetException-class.html" title="Base RangeSet exception class." alt="" coords="24,379,165,423"/>
64 <area shape="rect" id="node3" href="ClusterShell.NodeSet.RangeSetParseError-class.html" title="Raised when RangeSet parsing cannot be done properly." alt="" coords="17,443,175,482"/>
65 <area shape="rect" id="node91" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
66 <area shape="rect" id="node91" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
67 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
68 <area shape="rect" id="node4" href="ClusterShell.NodeSet.RangeSetPaddingError-class.html" title="Raised when a fatal padding incoherency occurs" alt="" coords="12,502,180,541"/>
69 <area shape="rect" id="node92" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node92" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node92" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node92" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node92" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node92" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node92" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node92" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node92" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node92" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node92" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node92" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_25.png" alt='' usemap="#uml_class_diagram_for_clusters_25" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Base RangeSet exception class.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td colspan="2" class="summary">
108 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
109 <code>__init__</code>,
110 <code>__new__</code>
111 </p>
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
113 <code>__delattr__</code>,
114 <code>__getattribute__</code>,
115 <code>__getitem__</code>,
116 <code>__getslice__</code>,
117 <code>__reduce__</code>,
118 <code>__repr__</code>,
119 <code>__setattr__</code>,
120 <code>__setstate__</code>,
121 <code>__str__</code>,
122 <code>__unicode__</code>
123 </p>
124 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
125 <code>__format__</code>,
126 <code>__hash__</code>,
127 <code>__reduce_ex__</code>,
128 <code>__sizeof__</code>,
129 <code>__subclasshook__</code>
130 </p>
131 </td>
132 </tr>
133 </table>
134 <!-- ==================== PROPERTIES ==================== -->
135 <a name="section-Properties"></a>
136 <table class="summary" border="1" cellpadding="3"
137 cellspacing="0" width="100%" bgcolor="white">
138 <tr bgcolor="#70b0f0" class="table-header">
139 <td colspan="2" class="table-header">
140 <table border="0" cellpadding="0" cellspacing="0" width="100%">
141 <tr valign="top">
142 <td align="left"><span class="table-header">Properties</span></td>
143 <td align="right" valign="top"
144 ><span class="options">[<a href="#section-Properties"
145 class="privatelink" onclick="toggle_private();"
146 >hide private</a>]</span></td>
147 </tr>
148 </table>
149 </td>
150 </tr>
151 <tr>
152 <td colspan="2" class="summary">
153 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
154 <code>args</code>,
155 <code>message</code>
156 </p>
157 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
158 <code>__class__</code>
159 </p>
160 </td>
161 </tr>
162 </table>
163 <!-- ==================== NAVIGATION BAR ==================== -->
164 <table class="navbar" border="0" width="100%" cellpadding="0"
165 bgcolor="#a0c0ff" cellspacing="0">
166 <tr valign="middle">
167
168 <!-- Tree link -->
169 <th>&nbsp;&nbsp;&nbsp;<a
170 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
171
172 <!-- Index link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Help link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Project homepage -->
181 <th class="navbar" align="right" width="100%">
182 <table border="0" cellpadding="0" cellspacing="0">
183 <tr><th class="navbar" align="center"
184 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
185 </tr></table></th>
186 </tr>
187 </table>
188 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
189 <tr>
190 <td align="left" class="footer">
191 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
192 </td>
193 <td align="right" class="footer">
194 <a target="mainFrame" href="http://epydoc.sourceforge.net"
195 >http://epydoc.sourceforge.net</a>
196 </td>
197 </tr>
198 </table>
199
200 <script type="text/javascript">
201 <!--
202 // Private objects are initially displayed (because if
203 // javascript is turned off then we want them to be
204 // visible); but by default, we want to hide them. So hide
205 // them unless we have a cookie that says to show them.
206 checkCookie();
207 // -->
208 </script>
209 </body>
210 </html>
+0
-275
doc/epydoc/html/ClusterShell.NodeSet.RangeSetPaddingError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.RangeSetPaddingError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;RangeSetPaddingError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.RangeSetPaddingError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class RangeSetPaddingError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSetPaddingError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_26" name="uml_class_diagram_for_clusters_26">
63 <area shape="rect" id="node95" href="ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="24,521,168,540"/>
64 <area shape="rect" id="node1" href="ClusterShell.NodeSet.RangeSetPaddingError-class.html" title="Raised when a fatal padding incoherency occurs" alt="" coords="12,489,180,546"/>
65 <area shape="rect" id="node2" href="ClusterShell.NodeSet.RangeSetParseError-class.html" title="Raised when RangeSet parsing cannot be done properly." alt="" coords="23,425,169,469"/>
66 <area shape="rect" id="node98" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,316,159,335"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,341"/>
68 <area shape="rect" id="node4" href="ClusterShell.NodeSet.RangeSetException-class.html" title="Base RangeSet exception class." alt="" coords="24,361,165,405"/>
69 <area shape="rect" id="node99" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node99" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node99" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node99" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node99" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node99" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node99" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node99" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node99" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node99" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node99" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node99" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_26.png" alt='' usemap="#uml_class_diagram_for_clusters_26" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised when a fatal padding incoherency occurs</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <table width="100%" cellpadding="0" cellspacing="0" border="0">
111 <tr>
112 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
113 <span class="summary-sig-arg">part</span>,
114 <span class="summary-sig-arg">msg</span>)</span><br />
115 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
116 <td align="right" valign="top">
117 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSetPaddingError.__init__">source&nbsp;code</a></span>
118
119 </td>
120 </tr>
121 </table>
122
123 </td>
124 </tr>
125 <tr>
126 <td colspan="2" class="summary">
127 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
128 <code>__new__</code>
129 </p>
130 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
131 <code>__delattr__</code>,
132 <code>__getattribute__</code>,
133 <code>__getitem__</code>,
134 <code>__getslice__</code>,
135 <code>__reduce__</code>,
136 <code>__repr__</code>,
137 <code>__setattr__</code>,
138 <code>__setstate__</code>,
139 <code>__str__</code>,
140 <code>__unicode__</code>
141 </p>
142 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
143 <code>__format__</code>,
144 <code>__hash__</code>,
145 <code>__reduce_ex__</code>,
146 <code>__sizeof__</code>,
147 <code>__subclasshook__</code>
148 </p>
149 </td>
150 </tr>
151 </table>
152 <!-- ==================== PROPERTIES ==================== -->
153 <a name="section-Properties"></a>
154 <table class="summary" border="1" cellpadding="3"
155 cellspacing="0" width="100%" bgcolor="white">
156 <tr bgcolor="#70b0f0" class="table-header">
157 <td colspan="2" class="table-header">
158 <table border="0" cellpadding="0" cellspacing="0" width="100%">
159 <tr valign="top">
160 <td align="left"><span class="table-header">Properties</span></td>
161 <td align="right" valign="top"
162 ><span class="options">[<a href="#section-Properties"
163 class="privatelink" onclick="toggle_private();"
164 >hide private</a>]</span></td>
165 </tr>
166 </table>
167 </td>
168 </tr>
169 <tr>
170 <td colspan="2" class="summary">
171 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
172 <code>args</code>,
173 <code>message</code>
174 </p>
175 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
176 <code>__class__</code>
177 </p>
178 </td>
179 </tr>
180 </table>
181 <!-- ==================== METHOD DETAILS ==================== -->
182 <a name="section-MethodDetails"></a>
183 <table class="details" border="1" cellpadding="3"
184 cellspacing="0" width="100%" bgcolor="white">
185 <tr bgcolor="#70b0f0" class="table-header">
186 <td colspan="2" class="table-header">
187 <table border="0" cellpadding="0" cellspacing="0" width="100%">
188 <tr valign="top">
189 <td align="left"><span class="table-header">Method Details</span></td>
190 <td align="right" valign="top"
191 ><span class="options">[<a href="#section-MethodDetails"
192 class="privatelink" onclick="toggle_private();"
193 >hide private</a>]</span></td>
194 </tr>
195 </table>
196 </td>
197 </tr>
198 </table>
199 <a name="__init__"></a>
200 <div>
201 <table class="details" border="1" cellpadding="3"
202 cellspacing="0" width="100%" bgcolor="white">
203 <tr><td>
204 <table width="100%" cellpadding="0" cellspacing="0" border="0">
205 <tr valign="top"><td>
206 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
207 <span class="sig-arg">part</span>,
208 <span class="sig-arg">msg</span>)</span>
209 <br /><em class="fname">(Constructor)</em>
210 </h3>
211 </td><td align="right" valign="top"
212 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSetPaddingError.__init__">source&nbsp;code</a></span>&nbsp;
213 </td>
214 </tr></table>
215
216 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
217 signature</p>
218 <dl class="fields">
219 <dt>Overrides:
220 object.__init__
221 <dd><em class="note">(inherited documentation)</em></dd>
222 </dt>
223 </dl>
224 </td></tr></table>
225 </div>
226 <br />
227 <!-- ==================== NAVIGATION BAR ==================== -->
228 <table class="navbar" border="0" width="100%" cellpadding="0"
229 bgcolor="#a0c0ff" cellspacing="0">
230 <tr valign="middle">
231
232 <!-- Tree link -->
233 <th>&nbsp;&nbsp;&nbsp;<a
234 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
235
236 <!-- Index link -->
237 <th>&nbsp;&nbsp;&nbsp;<a
238 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
239
240 <!-- Help link -->
241 <th>&nbsp;&nbsp;&nbsp;<a
242 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
243
244 <!-- Project homepage -->
245 <th class="navbar" align="right" width="100%">
246 <table border="0" cellpadding="0" cellspacing="0">
247 <tr><th class="navbar" align="center"
248 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
249 </tr></table></th>
250 </tr>
251 </table>
252 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
253 <tr>
254 <td align="left" class="footer">
255 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
256 </td>
257 <td align="right" class="footer">
258 <a target="mainFrame" href="http://epydoc.sourceforge.net"
259 >http://epydoc.sourceforge.net</a>
260 </td>
261 </tr>
262 </table>
263
264 <script type="text/javascript">
265 <!--
266 // Private objects are initially displayed (because if
267 // javascript is turned off then we want them to be
268 // visible); but by default, we want to hide them. So hide
269 // them unless we have a cookie that says to show them.
270 checkCookie();
271 // -->
272 </script>
273 </body>
274 </html>
+0
-275
doc/epydoc/html/ClusterShell.NodeSet.RangeSetParseError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeSet.RangeSetParseError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeSet-module.html">Module&nbsp;NodeSet</a> ::
43 Class&nbsp;RangeSetParseError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeSet.RangeSetParseError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class RangeSetParseError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSetParseError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_27" name="uml_class_diagram_for_clusters_27">
63 <area shape="rect" id="node100" href="ClusterShell.NodeSet.RangeSetParseError-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="24,457,168,476"/>
64 <area shape="rect" id="node1" href="ClusterShell.NodeSet.RangeSetParseError-class.html" title="Raised when RangeSet parsing cannot be done properly." alt="" coords="12,425,180,482"/>
65 <area shape="rect" id="node4" href="ClusterShell.NodeSet.RangeSetPaddingError-class.html" title="Raised when a fatal padding incoherency occurs" alt="" coords="12,502,180,541"/>
66 <area shape="rect" id="node2" href="ClusterShell.NodeSet.RangeSetException-class.html" title="Base RangeSet exception class." alt="" coords="24,361,165,405"/>
67 <area shape="rect" id="node102" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,316,159,335"/>
68 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,341"/>
69 <area shape="rect" id="node103" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node103" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node103" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node103" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node103" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node103" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node103" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node103" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node103" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node103" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node103" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node103" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_27.png" alt='' usemap="#uml_class_diagram_for_clusters_27" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised when RangeSet parsing cannot be done properly.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <table width="100%" cellpadding="0" cellspacing="0" border="0">
111 <tr>
112 <td><span class="summary-sig"><a href="ClusterShell.NodeSet.RangeSetParseError-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
113 <span class="summary-sig-arg">part</span>,
114 <span class="summary-sig-arg">msg</span>)</span><br />
115 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
116 <td align="right" valign="top">
117 <span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSetParseError.__init__">source&nbsp;code</a></span>
118
119 </td>
120 </tr>
121 </table>
122
123 </td>
124 </tr>
125 <tr>
126 <td colspan="2" class="summary">
127 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
128 <code>__new__</code>
129 </p>
130 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
131 <code>__delattr__</code>,
132 <code>__getattribute__</code>,
133 <code>__getitem__</code>,
134 <code>__getslice__</code>,
135 <code>__reduce__</code>,
136 <code>__repr__</code>,
137 <code>__setattr__</code>,
138 <code>__setstate__</code>,
139 <code>__str__</code>,
140 <code>__unicode__</code>
141 </p>
142 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
143 <code>__format__</code>,
144 <code>__hash__</code>,
145 <code>__reduce_ex__</code>,
146 <code>__sizeof__</code>,
147 <code>__subclasshook__</code>
148 </p>
149 </td>
150 </tr>
151 </table>
152 <!-- ==================== PROPERTIES ==================== -->
153 <a name="section-Properties"></a>
154 <table class="summary" border="1" cellpadding="3"
155 cellspacing="0" width="100%" bgcolor="white">
156 <tr bgcolor="#70b0f0" class="table-header">
157 <td colspan="2" class="table-header">
158 <table border="0" cellpadding="0" cellspacing="0" width="100%">
159 <tr valign="top">
160 <td align="left"><span class="table-header">Properties</span></td>
161 <td align="right" valign="top"
162 ><span class="options">[<a href="#section-Properties"
163 class="privatelink" onclick="toggle_private();"
164 >hide private</a>]</span></td>
165 </tr>
166 </table>
167 </td>
168 </tr>
169 <tr>
170 <td colspan="2" class="summary">
171 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
172 <code>args</code>,
173 <code>message</code>
174 </p>
175 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
176 <code>__class__</code>
177 </p>
178 </td>
179 </tr>
180 </table>
181 <!-- ==================== METHOD DETAILS ==================== -->
182 <a name="section-MethodDetails"></a>
183 <table class="details" border="1" cellpadding="3"
184 cellspacing="0" width="100%" bgcolor="white">
185 <tr bgcolor="#70b0f0" class="table-header">
186 <td colspan="2" class="table-header">
187 <table border="0" cellpadding="0" cellspacing="0" width="100%">
188 <tr valign="top">
189 <td align="left"><span class="table-header">Method Details</span></td>
190 <td align="right" valign="top"
191 ><span class="options">[<a href="#section-MethodDetails"
192 class="privatelink" onclick="toggle_private();"
193 >hide private</a>]</span></td>
194 </tr>
195 </table>
196 </td>
197 </tr>
198 </table>
199 <a name="__init__"></a>
200 <div>
201 <table class="details" border="1" cellpadding="3"
202 cellspacing="0" width="100%" bgcolor="white">
203 <tr><td>
204 <table width="100%" cellpadding="0" cellspacing="0" border="0">
205 <tr valign="top"><td>
206 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
207 <span class="sig-arg">part</span>,
208 <span class="sig-arg">msg</span>)</span>
209 <br /><em class="fname">(Constructor)</em>
210 </h3>
211 </td><td align="right" valign="top"
212 ><span class="codelink"><a href="ClusterShell.NodeSet-pysrc.html#RangeSetParseError.__init__">source&nbsp;code</a></span>&nbsp;
213 </td>
214 </tr></table>
215
216 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
217 signature</p>
218 <dl class="fields">
219 <dt>Overrides:
220 object.__init__
221 <dd><em class="note">(inherited documentation)</em></dd>
222 </dt>
223 </dl>
224 </td></tr></table>
225 </div>
226 <br />
227 <!-- ==================== NAVIGATION BAR ==================== -->
228 <table class="navbar" border="0" width="100%" cellpadding="0"
229 bgcolor="#a0c0ff" cellspacing="0">
230 <tr valign="middle">
231
232 <!-- Tree link -->
233 <th>&nbsp;&nbsp;&nbsp;<a
234 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
235
236 <!-- Index link -->
237 <th>&nbsp;&nbsp;&nbsp;<a
238 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
239
240 <!-- Help link -->
241 <th>&nbsp;&nbsp;&nbsp;<a
242 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
243
244 <!-- Project homepage -->
245 <th class="navbar" align="right" width="100%">
246 <table border="0" cellpadding="0" cellspacing="0">
247 <tr><th class="navbar" align="center"
248 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
249 </tr></table></th>
250 </tr>
251 </table>
252 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
253 <tr>
254 <td align="left" class="footer">
255 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
256 </td>
257 <td align="right" class="footer">
258 <a target="mainFrame" href="http://epydoc.sourceforge.net"
259 >http://epydoc.sourceforge.net</a>
260 </td>
261 </tr>
262 </table>
263
264 <script type="text/javascript">
265 <!--
266 // Private objects are initially displayed (because if
267 // javascript is turned off then we want them to be
268 // visible); but by default, we want to hide them. So hide
269 // them unless we have a cookie that says to show them.
270 checkCookie();
271 // -->
272 </script>
273 </body>
274 </html>
+0
-232
doc/epydoc/html/ClusterShell.NodeUtils-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;NodeUtils
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils-module.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== MODULE DESCRIPTION ==================== -->
59 <h1 class="epydoc">Module NodeUtils</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html">source&nbsp;code</a></span></p>
60 <p>Cluster nodes utility module</p>
61 <p>The NodeUtils module is a ClusterShell helper module that provides
62 supplementary services to manage nodes in a cluster. It is primarily
63 designed to enhance the NodeSet module providing some binding support to
64 external node groups sources in separate namespaces (example of group
65 sources are: files, jobs scheduler, custom scripts, etc.).</p>
66
67 <!-- ==================== CLASSES ==================== -->
68 <a name="section-Classes"></a>
69 <table class="summary" border="1" cellpadding="3"
70 cellspacing="0" width="100%" bgcolor="white">
71 <tr bgcolor="#70b0f0" class="table-header">
72 <td colspan="2" class="table-header">
73 <table border="0" cellpadding="0" cellspacing="0" width="100%">
74 <tr valign="top">
75 <td align="left"><span class="table-header">Classes</span></td>
76 <td align="right" valign="top"
77 ><span class="options">[<a href="#section-Classes"
78 class="privatelink" onclick="toggle_private();"
79 >hide private</a>]</span></td>
80 </tr>
81 </table>
82 </td>
83 </tr>
84 <tr>
85 <td width="15%" align="right" valign="top" class="summary">
86 <span class="summary-type">&nbsp;</span>
87 </td><td class="summary">
88 <a href="ClusterShell.NodeUtils.GroupSourceException-class.html" class="summary-name">GroupSourceException</a><br />
89 Base GroupSource exception
90 </td>
91 </tr>
92 <tr>
93 <td width="15%" align="right" valign="top" class="summary">
94 <span class="summary-type">&nbsp;</span>
95 </td><td class="summary">
96 <a href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html" class="summary-name">GroupSourceNoUpcall</a><br />
97 Raised when upcall is not available
98 </td>
99 </tr>
100 <tr>
101 <td width="15%" align="right" valign="top" class="summary">
102 <span class="summary-type">&nbsp;</span>
103 </td><td class="summary">
104 <a href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html" class="summary-name">GroupSourceQueryFailed</a><br />
105 Raised when a query failed (eg.
106 </td>
107 </tr>
108 <tr>
109 <td width="15%" align="right" valign="top" class="summary">
110 <span class="summary-type">&nbsp;</span>
111 </td><td class="summary">
112 <a href="ClusterShell.NodeUtils.GroupResolverError-class.html" class="summary-name">GroupResolverError</a><br />
113 Base GroupResolver error
114 </td>
115 </tr>
116 <tr>
117 <td width="15%" align="right" valign="top" class="summary">
118 <span class="summary-type">&nbsp;</span>
119 </td><td class="summary">
120 <a href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html" class="summary-name">GroupResolverSourceError</a><br />
121 Raised when upcall is not available
122 </td>
123 </tr>
124 <tr>
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type">&nbsp;</span>
127 </td><td class="summary">
128 <a href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html" class="summary-name">GroupResolverConfigError</a><br />
129 Raised when a configuration error is encountered
130 </td>
131 </tr>
132 <tr>
133 <td width="15%" align="right" valign="top" class="summary">
134 <span class="summary-type">&nbsp;</span>
135 </td><td class="summary">
136 <a href="ClusterShell.NodeUtils.GroupSource-class.html" class="summary-name">GroupSource</a><br />
137 GroupSource class managing external calls for nodegroup support.
138 </td>
139 </tr>
140 <tr>
141 <td width="15%" align="right" valign="top" class="summary">
142 <span class="summary-type">&nbsp;</span>
143 </td><td class="summary">
144 <a href="ClusterShell.NodeUtils.GroupResolver-class.html" class="summary-name">GroupResolver</a><br />
145 Base class GroupResolver that aims to provide node/group resolution
146 from multiple GroupSource's.
147 </td>
148 </tr>
149 <tr>
150 <td width="15%" align="right" valign="top" class="summary">
151 <span class="summary-type">&nbsp;</span>
152 </td><td class="summary">
153 <a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html" class="summary-name">GroupResolverConfig</a><br />
154 GroupResolver class that is able to automatically setup its
155 GroupSource's from a configuration file.
156 </td>
157 </tr>
158 </table>
159 <!-- ==================== VARIABLES ==================== -->
160 <a name="section-Variables"></a>
161 <table class="summary" border="1" cellpadding="3"
162 cellspacing="0" width="100%" bgcolor="white">
163 <tr bgcolor="#70b0f0" class="table-header">
164 <td colspan="2" class="table-header">
165 <table border="0" cellpadding="0" cellspacing="0" width="100%">
166 <tr valign="top">
167 <td align="left"><span class="table-header">Variables</span></td>
168 <td align="right" valign="top"
169 ><span class="options">[<a href="#section-Variables"
170 class="privatelink" onclick="toggle_private();"
171 >hide private</a>]</span></td>
172 </tr>
173 </table>
174 </td>
175 </tr>
176 <tr>
177 <td width="15%" align="right" valign="top" class="summary">
178 <span class="summary-type">&nbsp;</span>
179 </td><td class="summary">
180 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell</code><code class="variable-quote">'</code></code>
181 </td>
182 </tr>
183 </table>
184 <!-- ==================== NAVIGATION BAR ==================== -->
185 <table class="navbar" border="0" width="100%" cellpadding="0"
186 bgcolor="#a0c0ff" cellspacing="0">
187 <tr valign="middle">
188
189 <!-- Tree link -->
190 <th>&nbsp;&nbsp;&nbsp;<a
191 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
192
193 <!-- Index link -->
194 <th>&nbsp;&nbsp;&nbsp;<a
195 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
196
197 <!-- Help link -->
198 <th>&nbsp;&nbsp;&nbsp;<a
199 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
200
201 <!-- Project homepage -->
202 <th class="navbar" align="right" width="100%">
203 <table border="0" cellpadding="0" cellspacing="0">
204 <tr><th class="navbar" align="center"
205 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
206 </tr></table></th>
207 </tr>
208 </table>
209 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
210 <tr>
211 <td align="left" class="footer">
212 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
213 </td>
214 <td align="right" class="footer">
215 <a target="mainFrame" href="http://epydoc.sourceforge.net"
216 >http://epydoc.sourceforge.net</a>
217 </td>
218 </tr>
219 </table>
220
221 <script type="text/javascript">
222 <!--
223 // Private objects are initially displayed (because if
224 // javascript is turned off then we want them to be
225 // visible); but by default, we want to hide them. So hide
226 // them unless we have a cookie that says to show them.
227 checkCookie();
228 // -->
229 </script>
230 </body>
231 </html>
+0
-552
doc/epydoc/html/ClusterShell.NodeUtils-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;NodeUtils
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils-pysrc.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <h1 class="epydoc">Source Code for <a href="ClusterShell.NodeUtils-module.html">Module ClusterShell.NodeUtils</a></h1>
59 <pre class="py-src">
60 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2010)</tt> </tt>
61 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Contributors:</tt> </tt>
62 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
63 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"># Aurelien DEGREMONT &lt;aurelien.degremont@cea.fr&gt;</tt> </tt>
64 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-comment"># $Id: NodeUtils.py 285 2010-06-28 22:27:41Z st-cea $</tt> </tt>
94 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> </tt>
95 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring">Cluster nodes utility module</tt> </tt>
97 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">The NodeUtils module is a ClusterShell helper module that provides</tt> </tt>
99 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">supplementary services to manage nodes in a cluster. It is primarily</tt> </tt>
100 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring">designed to enhance the NodeSet module providing some binding support</tt> </tt>
101 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring">to external node groups sources in separate namespaces (example of</tt> </tt>
102 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring">group sources are: files, jobs scheduler, custom scripts, etc.).</tt> </tt>
103 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
104 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> </tt>
105 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
106 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> </tt>
107 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">ConfigParser</tt> <tt class="py-keyword">import</tt> <tt class="py-name">ConfigParser</tt><tt class="py-op">,</tt> <tt class="py-name">NoOptionError</tt><tt class="py-op">,</tt> <tt class="py-name">NoSectionError</tt> </tt>
108 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">string</tt> <tt class="py-keyword">import</tt> <tt class="py-name">Template</tt> </tt>
109 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">subprocess</tt> <tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module ClusterShell.Worker.Popen=ClusterShell.Worker.Popen-module.html"><a title="ClusterShell.Worker.Popen" class="py-name" href="#" onclick="return doclink('link-0', 'Popen', 'link-0');">Popen</a></tt><tt class="py-op">,</tt> <tt class="py-name">PIPE</tt> </tt>
110 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
111 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> </tt>
112 <a name="GroupSourceException"></a><div id="GroupSourceException-def"><a name="L53"></a><tt class="py-lineno"> 53</tt> <a class="py-toggle" href="#" id="GroupSourceException-toggle" onclick="return toggle('GroupSourceException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSourceException-class.html">GroupSourceException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
113 </div><div id="GroupSourceException-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupSourceException-expanded"><a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-docstring">"""Base GroupSource exception"""</tt> </tt>
114 <a name="GroupSourceException.__init__"></a><div id="GroupSourceException.__init__-def"><a name="L55"></a><tt class="py-lineno"> 55</tt> <a class="py-toggle" href="#" id="GroupSourceException.__init__-toggle" onclick="return toggle('GroupSourceException.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSourceException-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">message</tt><tt class="py-op">,</tt> <tt class="py-param">group_source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
115 </div><div id="GroupSourceException.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupSourceException.__init__-expanded"><a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-name">Exception</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
116 ClusterShell.Engine.Engine.Engine.__init__
117 ClusterShell.Engine.Engine.EngineAbortException.__init__
118 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
119 ClusterShell.Engine.Engine.EngineTimer.__init__
120 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
121 ClusterShell.Engine.Engine._EngineTimerQ.__init__
122 ClusterShell.Engine.Poll.EnginePoll.__init__
123 ClusterShell.MsgTree.MsgTree.__init__
124 ClusterShell.MsgTree.MsgTreeElem.__init__
125 ClusterShell.NodeSet.NodeSet.__init__
126 ClusterShell.NodeSet.NodeSetBase.__init__
127 ClusterShell.NodeSet.NodeSetParseError.__init__
128 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
129 ClusterShell.NodeSet.ParsingEngine.__init__
130 ClusterShell.NodeSet.RangeSet.__init__
131 ClusterShell.NodeSet.RangeSetPaddingError.__init__
132 ClusterShell.NodeSet.RangeSetParseError.__init__
133 ClusterShell.NodeUtils.GroupResolver.__init__
134 ClusterShell.NodeUtils.GroupResolverConfig.__init__
135 ClusterShell.NodeUtils.GroupSource.__init__
136 ClusterShell.NodeUtils.GroupSourceException.__init__
137 ClusterShell.Task.Task._SuspendCondition.__init__
138 ClusterShell.Task.Task.__init__
139 ClusterShell.Task._TaskMsgTree.__init__
140 ClusterShell.Worker.EngineClient.EngineClient.__init__
141 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
142 ClusterShell.Worker.EngineClient.EnginePort.__init__
143 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
144 ClusterShell.Worker.Popen.WorkerPopen.__init__
145 ClusterShell.Worker.Ssh.Scp.__init__
146 ClusterShell.Worker.Ssh.Ssh.__init__
147 ClusterShell.Worker.Ssh.WorkerSsh.__init__
148 ClusterShell.Worker.Worker.DistantWorker.__init__
149 ClusterShell.Worker.Worker.Worker.__init__
150 ClusterShell.Worker.Worker.WorkerSimple.__init__
151 clubak.Display.__init__
152 clush.ClushConfig.__init__
153 clush.ClushConfigError.__init__
154 clush.DirectOutputHandler.__init__
155 clush.Display.__init__
156 clush.GatherOutputHandler.__init__
157 clush.RunTimer.__init__
158 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-1', '__init__', 'link-1');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.message()=ClusterShell.MsgTree.MsgTreeElem-class.html#message"><a title="ClusterShell.MsgTree.MsgTreeElem.message" class="py-name" href="#" onclick="return doclink('link-2', 'message', 'link-2');">message</a></tt><tt class="py-op">)</tt> </tt>
159 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">group_source</tt> <tt class="py-op">=</tt> <tt class="py-name">group_source</tt> </tt>
160 </div></div><a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> </tt>
161 <a name="GroupSourceNoUpcall"></a><div id="GroupSourceNoUpcall-def"><a name="L59"></a><tt class="py-lineno"> 59</tt> <a class="py-toggle" href="#" id="GroupSourceNoUpcall-toggle" onclick="return toggle('GroupSourceNoUpcall');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html">GroupSourceNoUpcall</a><tt class="py-op">(</tt><tt class="py-base-class">GroupSourceException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
162 </div><div id="GroupSourceNoUpcall-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupSourceNoUpcall-expanded"><a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when upcall is not available"""</tt> </tt>
163 </div><a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> </tt>
164 <a name="GroupSourceQueryFailed"></a><div id="GroupSourceQueryFailed-def"><a name="L62"></a><tt class="py-lineno"> 62</tt> <a class="py-toggle" href="#" id="GroupSourceQueryFailed-toggle" onclick="return toggle('GroupSourceQueryFailed');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html">GroupSourceQueryFailed</a><tt class="py-op">(</tt><tt class="py-base-class">GroupSourceException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
165 </div><div id="GroupSourceQueryFailed-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupSourceQueryFailed-expanded"><a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when a query failed (eg. no group found)"""</tt> </tt>
166 </div><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> </tt>
167 <a name="GroupResolverError"></a><div id="GroupResolverError-def"><a name="L65"></a><tt class="py-lineno"> 65</tt> <a class="py-toggle" href="#" id="GroupResolverError-toggle" onclick="return toggle('GroupResolverError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolverError-class.html">GroupResolverError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
168 </div><div id="GroupResolverError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupResolverError-expanded"><a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-docstring">"""Base GroupResolver error"""</tt> </tt>
169 </div><a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> </tt>
170 <a name="GroupResolverSourceError"></a><div id="GroupResolverSourceError-def"><a name="L68"></a><tt class="py-lineno"> 68</tt> <a class="py-toggle" href="#" id="GroupResolverSourceError-toggle" onclick="return toggle('GroupResolverSourceError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html">GroupResolverSourceError</a><tt class="py-op">(</tt><tt class="py-base-class">GroupResolverError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
171 </div><div id="GroupResolverSourceError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupResolverSourceError-expanded"><a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when upcall is not available"""</tt> </tt>
172 </div><a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
173 <a name="GroupResolverConfigError"></a><div id="GroupResolverConfigError-def"><a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="GroupResolverConfigError-toggle" onclick="return toggle('GroupResolverConfigError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html">GroupResolverConfigError</a><tt class="py-op">(</tt><tt class="py-base-class">GroupResolverError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
174 </div><div id="GroupResolverConfigError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupResolverConfigError-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when a configuration error is encountered"""</tt> </tt>
175 </div><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
176 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
177 <a name="GroupSource"></a><div id="GroupSource-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="GroupSource-toggle" onclick="return toggle('GroupSource');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
178 </div><div id="GroupSource-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupSource-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
179 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt class="py-docstring"> GroupSource class managing external calls for nodegroup support.</tt> </tt>
180 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
181 <a name="GroupSource.__init__"></a><div id="GroupSource.__init__-def"><a name="L79"></a><tt class="py-lineno"> 79</tt> <a class="py-toggle" href="#" id="GroupSource.__init__-toggle" onclick="return toggle('GroupSource.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSource-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">name</tt><tt class="py-op">,</tt> <tt class="py-param">map_upcall</tt><tt class="py-op">,</tt> <tt class="py-param">all_upcall</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
182 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-param">list_upcall</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">reverse_upcall</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
183 </div><div id="GroupSource.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupSource.__init__-expanded"><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt> </tt>
184 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">verbosity</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
185 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> </tt>
186 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-comment"># Cache upcall data</tt> </tt>
187 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache_map</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
188 <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">_cache_list</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
189 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache_all</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
190 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache_reverse</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
191 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
192 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-comment"># Supported external upcalls</tt> </tt>
193 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">map_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">map_upcall</tt> </tt>
194 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">all_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">all_upcall</tt> </tt>
195 <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">list_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">list_upcall</tt> </tt>
196 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reverse_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">reverse_upcall</tt> </tt>
197 </div><a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt>
198 <a name="GroupSource._verbose_print"></a><div id="GroupSource._verbose_print-def"><a name="L96"></a><tt class="py-lineno"> 96</tt> <a class="py-toggle" href="#" id="GroupSource._verbose_print-toggle" onclick="return toggle('GroupSource._verbose_print');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSource-class.html#_verbose_print">_verbose_print</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
199 </div><div id="GroupSource._verbose_print-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupSource._verbose_print-expanded"><a name="L97"></a><tt class="py-lineno"> 97</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">verbosity</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
200 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"%s&lt;%s&gt; %s"</tt> <tt class="py-op">%</tt> \ </tt>
201 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-3', 'msg', 'link-3');">msg</a></tt><tt class="py-op">)</tt> </tt>
202 </div><a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> </tt>
203 <a name="GroupSource._upcall_read"></a><div id="GroupSource._upcall_read-def"><a name="L101"></a><tt class="py-lineno">101</tt> <a class="py-toggle" href="#" id="GroupSource._upcall_read-toggle" onclick="return toggle('GroupSource._upcall_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSource-class.html#_upcall_read">_upcall_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cmdtpl</tt><tt class="py-op">,</tt> <tt class="py-param">vars</tt><tt class="py-op">=</tt><tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
204 </div><div id="GroupSource._upcall_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupSource._upcall_read-expanded"><a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
205 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"><tt class="py-docstring"> Invoke the specified upcall command, raise an Exception if</tt> </tt>
206 <a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"><tt class="py-docstring"> something goes wrong and return the command output otherwise.</tt> </tt>
207 <a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
208 <a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-name">cmdline</tt> <tt class="py-op">=</tt> <tt class="py-name">Template</tt><tt class="py-op">(</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-string">"%s_upcall"</tt> <tt class="py-op">%</tt> \ </tt>
209 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-name">cmdtpl</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">safe_substitute</tt><tt class="py-op">(</tt><tt class="py-name">vars</tt><tt class="py-op">)</tt> </tt>
210 <a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Method ClusterShell.NodeUtils.GroupSource._verbose_print()=ClusterShell.NodeUtils.GroupSource-class.html#_verbose_print"><a title="ClusterShell.NodeUtils.GroupSource._verbose_print" class="py-name" href="#" onclick="return doclink('link-4', '_verbose_print', 'link-4');">_verbose_print</a></tt><tt class="py-op">(</tt><tt class="py-string">"EXEC '%s'"</tt> <tt class="py-op">%</tt> <tt class="py-name">cmdline</tt><tt class="py-op">)</tt> </tt>
211 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">proc</tt> <tt class="py-op">=</tt> <tt id="link-5" class="py-name"><a title="ClusterShell.Worker.Popen" class="py-name" href="#" onclick="return doclink('link-5', 'Popen', 'link-0');">Popen</a></tt><tt class="py-op">(</tt><tt class="py-name">cmdline</tt><tt class="py-op">,</tt> <tt class="py-name">stdout</tt><tt class="py-op">=</tt><tt class="py-name">PIPE</tt><tt class="py-op">,</tt> <tt id="link-6" class="py-name" targets="Method ClusterShell.Task.Task.shell()=ClusterShell.Task.Task-class.html#shell"><a title="ClusterShell.Task.Task.shell" class="py-name" href="#" onclick="return doclink('link-6', 'shell', 'link-6');">shell</a></tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
212 <a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">output</tt> <tt class="py-op">=</tt> <tt class="py-name">proc</tt><tt class="py-op">.</tt><tt class="py-name">communicate</tt><tt class="py-op">(</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-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
213 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="ClusterShell.NodeUtils.GroupSource._verbose_print" class="py-name" href="#" onclick="return doclink('link-7', '_verbose_print', 'link-4');">_verbose_print</a></tt><tt class="py-op">(</tt><tt class="py-string">"READ '%s'"</tt> <tt class="py-op">%</tt> <tt class="py-name">output</tt><tt class="py-op">)</tt> </tt>
214 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">proc</tt><tt class="py-op">.</tt><tt class="py-name">returncode</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
215 <a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="ClusterShell.NodeUtils.GroupSource._verbose_print" class="py-name" href="#" onclick="return doclink('link-8', '_verbose_print', 'link-4');">_verbose_print</a></tt><tt class="py-op">(</tt><tt class="py-string">"ERROR '%s' returned %d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">cmdline</tt><tt class="py-op">,</tt> \ </tt>
216 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">proc</tt><tt class="py-op">.</tt><tt class="py-name">returncode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
217 <a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-9" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceQueryFailed=ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html"><a title="ClusterShell.NodeUtils.GroupSourceQueryFailed" class="py-name" href="#" onclick="return doclink('link-9', 'GroupSourceQueryFailed', 'link-9');">GroupSourceQueryFailed</a></tt><tt class="py-op">(</tt><tt class="py-name">cmdline</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
218 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">output</tt> </tt>
219 </div><a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> </tt>
220 <a name="GroupSource.resolv_map"></a><div id="GroupSource.resolv_map-def"><a name="L118"></a><tt class="py-lineno">118</tt> <a class="py-toggle" href="#" id="GroupSource.resolv_map-toggle" onclick="return toggle('GroupSource.resolv_map');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_map">resolv_map</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">group</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
221 </div><div id="GroupSource.resolv_map-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupSource.resolv_map-expanded"><a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
222 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> Get nodes from group 'group', using the cached value if</tt> </tt>
223 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"><tt class="py-docstring"> available.</tt> </tt>
224 <a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
225 <a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">group</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 class="py-name">_cache_map</tt><tt class="py-op">:</tt> </tt>
226 <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">_cache_map</tt><tt class="py-op">[</tt><tt class="py-name">group</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method ClusterShell.NodeUtils.GroupSource._upcall_read()=ClusterShell.NodeUtils.GroupSource-class.html#_upcall_read"><a title="ClusterShell.NodeUtils.GroupSource._upcall_read" class="py-name" href="#" onclick="return doclink('link-10', '_upcall_read', 'link-10');">_upcall_read</a></tt><tt class="py-op">(</tt><tt class="py-string">'map'</tt><tt class="py-op">,</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">GROUP</tt><tt class="py-op">=</tt><tt class="py-name">group</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
227 <a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> </tt>
228 <a name="L126"></a><tt class="py-lineno">126</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">_cache_map</tt><tt class="py-op">[</tt><tt class="py-name">group</tt><tt class="py-op">]</tt> </tt>
229 </div><a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> </tt>
230 <a name="GroupSource.resolv_list"></a><div id="GroupSource.resolv_list-def"><a name="L128"></a><tt class="py-lineno">128</tt> <a class="py-toggle" href="#" id="GroupSource.resolv_list-toggle" onclick="return toggle('GroupSource.resolv_list');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_list">resolv_list</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
231 </div><div id="GroupSource.resolv_list-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupSource.resolv_list-expanded"><a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
232 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> Return a list of all group names for this group source, using</tt> </tt>
233 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"><tt class="py-docstring"> the cached value if available.</tt> </tt>
234 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
235 <a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">list_upcall</tt><tt class="py-op">:</tt> </tt>
236 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceNoUpcall=ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-11', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt><tt class="py-op">(</tt><tt class="py-string">"list"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
237 <a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> </tt>
238 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache_list</tt><tt class="py-op">:</tt> </tt>
239 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache_list</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="ClusterShell.NodeUtils.GroupSource._upcall_read" class="py-name" href="#" onclick="return doclink('link-12', '_upcall_read', 'link-10');">_upcall_read</a></tt><tt class="py-op">(</tt><tt class="py-string">'list'</tt><tt class="py-op">)</tt> </tt>
240 <a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> </tt>
241 <a name="L139"></a><tt class="py-lineno">139</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">_cache_list</tt> </tt>
242 </div><a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> </tt>
243 <a name="GroupSource.resolv_all"></a><div id="GroupSource.resolv_all-def"><a name="L141"></a><tt class="py-lineno">141</tt> <a class="py-toggle" href="#" id="GroupSource.resolv_all-toggle" onclick="return toggle('GroupSource.resolv_all');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_all">resolv_all</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
244 </div><div id="GroupSource.resolv_all-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupSource.resolv_all-expanded"><a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
245 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"><tt class="py-docstring"> Return the content of special group ALL, using the cached value</tt> </tt>
246 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"><tt class="py-docstring"> if available.</tt> </tt>
247 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
248 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">all_upcall</tt><tt class="py-op">:</tt> </tt>
249 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-13" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-13', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt><tt class="py-op">(</tt><tt class="py-string">"all"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
250 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> </tt>
251 <a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache_all</tt><tt class="py-op">:</tt> </tt>
252 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache_all</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="ClusterShell.NodeUtils.GroupSource._upcall_read" class="py-name" href="#" onclick="return doclink('link-14', '_upcall_read', 'link-10');">_upcall_read</a></tt><tt class="py-op">(</tt><tt class="py-string">'all'</tt><tt class="py-op">)</tt> </tt>
253 <a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> </tt>
254 <a name="L152"></a><tt class="py-lineno">152</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">_cache_all</tt> </tt>
255 </div><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> </tt>
256 <a name="GroupSource.resolv_reverse"></a><div id="GroupSource.resolv_reverse-def"><a name="L154"></a><tt class="py-lineno">154</tt> <a class="py-toggle" href="#" id="GroupSource.resolv_reverse-toggle" onclick="return toggle('GroupSource.resolv_reverse');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_reverse">resolv_reverse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
257 </div><div id="GroupSource.resolv_reverse-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupSource.resolv_reverse-expanded"><a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
258 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"> Return the group name matching the provided node, using the</tt> </tt>
259 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-docstring"> cached value if available.</tt> </tt>
260 <a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
261 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reverse_upcall</tt><tt class="py-op">:</tt> </tt>
262 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-15" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-15', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt><tt class="py-op">(</tt><tt class="py-string">"reverse"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
263 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> </tt>
264 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</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 class="py-name">_cache_reverse</tt><tt class="py-op">:</tt> </tt>
265 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache_reverse</tt><tt class="py-op">[</tt><tt class="py-name">node</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="ClusterShell.NodeUtils.GroupSource._upcall_read" class="py-name" href="#" onclick="return doclink('link-16', '_upcall_read', 'link-10');">_upcall_read</a></tt><tt class="py-op">(</tt><tt class="py-string">'reverse'</tt><tt class="py-op">,</tt> \ </tt>
266 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">NODE</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
267 <a name="L165"></a><tt class="py-lineno">165</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">_cache_reverse</tt><tt class="py-op">[</tt><tt class="py-name">node</tt><tt class="py-op">]</tt> </tt>
268 </div></div><a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> </tt>
269 <a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> </tt>
270 <a name="GroupResolver"></a><div id="GroupResolver-def"><a name="L168"></a><tt class="py-lineno">168</tt> <a class="py-toggle" href="#" id="GroupResolver-toggle" onclick="return toggle('GroupResolver');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
271 </div><div id="GroupResolver-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupResolver-expanded"><a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
272 <a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"><tt class="py-docstring"> Base class GroupResolver that aims to provide node/group resolution</tt> </tt>
273 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"><tt class="py-docstring"> from multiple GroupSource's.</tt> </tt>
274 <a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
275 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> </tt>
276 <a name="GroupResolver.__init__"></a><div id="GroupResolver.__init__-def"><a name="L174"></a><tt class="py-lineno">174</tt> <a class="py-toggle" href="#" id="GroupResolver.__init__-toggle" onclick="return toggle('GroupResolver.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-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">default_source</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
277 </div><div id="GroupResolver.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.__init__-expanded"><a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
278 <a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"><tt class="py-docstring"> Initialize GroupResolver object.</tt> </tt>
279 <a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
280 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sources</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
281 <a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default_source</tt> <tt class="py-op">=</tt> <tt class="py-name">default_source</tt> </tt>
282 <a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">default_source</tt><tt class="py-op">:</tt> </tt>
283 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sources</tt><tt class="py-op">[</tt><tt class="py-name">default_source</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">default_source</tt> </tt>
284 </div><a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> </tt>
285 <a name="GroupResolver.set_verbosity"></a><div id="GroupResolver.set_verbosity-def"><a name="L183"></a><tt class="py-lineno">183</tt> <a class="py-toggle" href="#" id="GroupResolver.set_verbosity-toggle" onclick="return toggle('GroupResolver.set_verbosity');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity">set_verbosity</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
286 </div><div id="GroupResolver.set_verbosity-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.set_verbosity-expanded"><a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
287 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"><tt class="py-docstring"> Set debugging verbosity value.</tt> </tt>
288 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
289 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">source</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sources</tt><tt class="py-op">.</tt><tt class="py-name">itervalues</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
290 <a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">source</tt><tt class="py-op">.</tt><tt class="py-name">verbosity</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
291 </div><a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt>
292 <a name="GroupResolver.add_source"></a><div id="GroupResolver.add_source-def"><a name="L190"></a><tt class="py-lineno">190</tt> <a class="py-toggle" href="#" id="GroupResolver.add_source-toggle" onclick="return toggle('GroupResolver.add_source');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#add_source">add_source</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">group_source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
293 </div><div id="GroupResolver.add_source-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.add_source-expanded"><a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
294 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-docstring"> Add a GroupSource to this resolver.</tt> </tt>
295 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
296 <a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">group_source</tt><tt class="py-op">.</tt><tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sources</tt><tt class="py-op">:</tt> </tt>
297 <a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"GroupSource '%s': name collision"</tt> <tt class="py-op">%</tt> \ </tt>
298 <a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">group_source</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
299 <a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sources</tt><tt class="py-op">[</tt><tt class="py-name">group_source</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">group_source</tt> </tt>
300 </div><a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> </tt>
301 <a name="GroupResolver.sources"></a><div id="GroupResolver.sources-def"><a name="L199"></a><tt class="py-lineno">199</tt> <a class="py-toggle" href="#" id="GroupResolver.sources-toggle" onclick="return toggle('GroupResolver.sources');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#sources">sources</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
302 </div><div id="GroupResolver.sources-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.sources-expanded"><a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
303 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"><tt class="py-docstring"> Get the list of all resolver source names.</tt> </tt>
304 <a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
305 <a name="L203"></a><tt class="py-lineno">203</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">_sources</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.keys()=ClusterShell.MsgTree.MsgTree-class.html#keys"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-17', 'keys', 'link-17');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
306 </div><a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> </tt>
307 <a name="GroupResolver._list"></a><div id="GroupResolver._list-def"><a name="L205"></a><tt class="py-lineno">205</tt> <a class="py-toggle" href="#" id="GroupResolver._list-toggle" onclick="return toggle('GroupResolver._list');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#_list">_list</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">,</tt> <tt class="py-param">what</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>
308 </div><div id="GroupResolver._list-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver._list-expanded"><a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-docstring">"""Helper method that returns a list of result when the source</tt> </tt>
309 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"><tt class="py-docstring"> is defined."""</tt> </tt>
310 <a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
311 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">source</tt> </tt>
312 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">raw</tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-string">'resolv_%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">what</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
313 <a name="L211"></a><tt class="py-lineno">211</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">raw</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
314 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">map</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.append()=ClusterShell.MsgTree.MsgTreeElem-class.html#append"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-18', 'append', 'link-18');">append</a></tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.split()=ClusterShell.NodeSet.NodeSet-class.html#split,Method ClusterShell.NodeSet.RangeSet.split()=ClusterShell.NodeSet.RangeSet-class.html#split"><a title="ClusterShell.NodeSet.NodeSet.split
315 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-19', 'split', 'link-19');">split</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
316 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">result</tt> </tt>
317 </div><a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> </tt>
318 <a name="GroupResolver._source"></a><div id="GroupResolver._source-def"><a name="L215"></a><tt class="py-lineno">215</tt> <a class="py-toggle" href="#" id="GroupResolver._source-toggle" onclick="return toggle('GroupResolver._source');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#_source">_source</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
319 </div><div id="GroupResolver._source-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver._source-expanded"><a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-docstring">"""Helper method that returns the source by namespace name."""</tt> </tt>
320 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">namespace</tt><tt class="py-op">:</tt> </tt>
321 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default_source</tt> </tt>
322 <a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
323 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sources</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
324 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-20', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
325 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">source</tt><tt class="py-op">:</tt> </tt>
326 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-21" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverSourceError=ClusterShell.NodeUtils.GroupResolverSourceError-class.html"><a title="ClusterShell.NodeUtils.GroupResolverSourceError" class="py-name" href="#" onclick="return doclink('link-21', 'GroupResolverSourceError', 'link-21');">GroupResolverSourceError</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt> <tt class="py-keyword">or</tt> <tt class="py-string">"&lt;default&gt;"</tt><tt class="py-op">)</tt> </tt>
327 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">source</tt> </tt>
328 </div><a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> </tt>
329 <a name="GroupResolver.group_nodes"></a><div id="GroupResolver.group_nodes-def"><a name="L225"></a><tt class="py-lineno">225</tt> <a class="py-toggle" href="#" id="GroupResolver.group_nodes-toggle" onclick="return toggle('GroupResolver.group_nodes');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#group_nodes">group_nodes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">group</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
330 </div><div id="GroupResolver.group_nodes-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.group_nodes-expanded"><a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
331 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"><tt class="py-docstring"> Find nodes for specified group name and optional namespace.</tt> </tt>
332 <a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
333 <a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver._source()=ClusterShell.NodeUtils.GroupResolver-class.html#_source,Method ClusterShell.NodeUtils.GroupResolverConfig._source()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#_source"><a title="ClusterShell.NodeUtils.GroupResolver._source
334 ClusterShell.NodeUtils.GroupResolverConfig._source" class="py-name" href="#" onclick="return doclink('link-22', '_source', 'link-22');">_source</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
335 <a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver._list()=ClusterShell.NodeUtils.GroupResolver-class.html#_list"><a title="ClusterShell.NodeUtils.GroupResolver._list" class="py-name" href="#" onclick="return doclink('link-23', '_list', 'link-23');">_list</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-string">'map'</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">)</tt> </tt>
336 </div><a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> </tt>
337 <a name="GroupResolver.all_nodes"></a><div id="GroupResolver.all_nodes-def"><a name="L232"></a><tt class="py-lineno">232</tt> <a class="py-toggle" href="#" id="GroupResolver.all_nodes-toggle" onclick="return toggle('GroupResolver.all_nodes');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes">all_nodes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
338 </div><div id="GroupResolver.all_nodes-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.all_nodes-expanded"><a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
339 <a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"><tt class="py-docstring"> Find all nodes. You may specify an optional namespace.</tt> </tt>
340 <a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
341 <a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver._source
342 ClusterShell.NodeUtils.GroupResolverConfig._source" class="py-name" href="#" onclick="return doclink('link-24', '_source', 'link-22');">_source</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
343 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver._list" class="py-name" href="#" onclick="return doclink('link-25', '_list', 'link-23');">_list</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-string">'all'</tt><tt class="py-op">)</tt> </tt>
344 </div><a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> </tt>
345 <a name="GroupResolver.grouplist"></a><div id="GroupResolver.grouplist-def"><a name="L239"></a><tt class="py-lineno">239</tt> <a class="py-toggle" href="#" id="GroupResolver.grouplist-toggle" onclick="return toggle('GroupResolver.grouplist');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#grouplist">grouplist</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
346 </div><div id="GroupResolver.grouplist-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.grouplist-expanded"><a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
347 <a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"><tt class="py-docstring"> Get full group list. You may specify an optional</tt> </tt>
348 <a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"><tt class="py-docstring"> namespace.</tt> </tt>
349 <a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
350 <a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver._source
351 ClusterShell.NodeUtils.GroupResolverConfig._source" class="py-name" href="#" onclick="return doclink('link-26', '_source', 'link-22');">_source</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
352 <a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver._list" class="py-name" href="#" onclick="return doclink('link-27', '_list', 'link-23');">_list</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-string">'list'</tt><tt class="py-op">)</tt> </tt>
353 </div><a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> </tt>
354 <a name="GroupResolver.has_node_groups"></a><div id="GroupResolver.has_node_groups-def"><a name="L247"></a><tt class="py-lineno">247</tt> <a class="py-toggle" href="#" id="GroupResolver.has_node_groups-toggle" onclick="return toggle('GroupResolver.has_node_groups');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#has_node_groups">has_node_groups</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
355 </div><div id="GroupResolver.has_node_groups-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.has_node_groups-expanded"><a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
356 <a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"><tt class="py-docstring"> Return whether finding group list for a specified node is</tt> </tt>
357 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"><tt class="py-docstring"> supported by the resolver (in optional namespace).</tt> </tt>
358 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
359 <a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
360 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver._source
361 ClusterShell.NodeUtils.GroupResolverConfig._source" class="py-name" href="#" onclick="return doclink('link-28', '_source', 'link-22');">_source</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">reverse_upcall</tt><tt class="py-op">)</tt> </tt>
362 <a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-29" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolverSourceError" class="py-name" href="#" onclick="return doclink('link-29', 'GroupResolverSourceError', 'link-21');">GroupResolverSourceError</a></tt><tt class="py-op">:</tt> </tt>
363 <a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
364 </div><a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> </tt>
365 <a name="GroupResolver.node_groups"></a><div id="GroupResolver.node_groups-def"><a name="L257"></a><tt class="py-lineno">257</tt> <a class="py-toggle" href="#" id="GroupResolver.node_groups-toggle" onclick="return toggle('GroupResolver.node_groups');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolver-class.html#node_groups">node_groups</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
366 </div><div id="GroupResolver.node_groups-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolver.node_groups-expanded"><a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
367 <a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"><tt class="py-docstring"> Find group list for specified node and optional namespace.</tt> </tt>
368 <a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
369 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver._source
370 ClusterShell.NodeUtils.GroupResolverConfig._source" class="py-name" href="#" onclick="return doclink('link-30', '_source', 'link-22');">_source</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
371 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver._list" class="py-name" href="#" onclick="return doclink('link-31', '_list', 'link-23');">_list</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-string">'reverse'</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
372 </div></div><a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> </tt>
373 <a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> </tt>
374 <a name="GroupResolverConfig"></a><div id="GroupResolverConfig-def"><a name="L265"></a><tt class="py-lineno">265</tt> <a class="py-toggle" href="#" id="GroupResolverConfig-toggle" onclick="return toggle('GroupResolverConfig');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html">GroupResolverConfig</a><tt class="py-op">(</tt><tt class="py-base-class">GroupResolver</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
375 </div><div id="GroupResolverConfig-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GroupResolverConfig-expanded"><a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
376 <a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"><tt class="py-docstring"> GroupResolver class that is able to automatically setup its</tt> </tt>
377 <a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"><tt class="py-docstring"> GroupSource's from a configuration file. This is the default</tt> </tt>
378 <a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"><tt class="py-docstring"> resolver for NodeSet.</tt> </tt>
379 <a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
380 <a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> </tt>
381 <a name="GroupResolverConfig.__init__"></a><div id="GroupResolverConfig.__init__-def"><a name="L272"></a><tt class="py-lineno">272</tt> <a class="py-toggle" href="#" id="GroupResolverConfig.__init__-toggle" onclick="return toggle('GroupResolverConfig.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolverConfig-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">configfile</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
382 </div><div id="GroupResolverConfig.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolverConfig.__init__-expanded"><a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
383 <a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
384 <a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt id="link-32" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolver=ClusterShell.NodeUtils.GroupResolver-class.html"><a title="ClusterShell.NodeUtils.GroupResolver" class="py-name" href="#" onclick="return doclink('link-32', 'GroupResolver', 'link-32');">GroupResolver</a></tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
385 ClusterShell.Engine.Engine.Engine.__init__
386 ClusterShell.Engine.Engine.EngineAbortException.__init__
387 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
388 ClusterShell.Engine.Engine.EngineTimer.__init__
389 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
390 ClusterShell.Engine.Engine._EngineTimerQ.__init__
391 ClusterShell.Engine.Poll.EnginePoll.__init__
392 ClusterShell.MsgTree.MsgTree.__init__
393 ClusterShell.MsgTree.MsgTreeElem.__init__
394 ClusterShell.NodeSet.NodeSet.__init__
395 ClusterShell.NodeSet.NodeSetBase.__init__
396 ClusterShell.NodeSet.NodeSetParseError.__init__
397 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
398 ClusterShell.NodeSet.ParsingEngine.__init__
399 ClusterShell.NodeSet.RangeSet.__init__
400 ClusterShell.NodeSet.RangeSetPaddingError.__init__
401 ClusterShell.NodeSet.RangeSetParseError.__init__
402 ClusterShell.NodeUtils.GroupResolver.__init__
403 ClusterShell.NodeUtils.GroupResolverConfig.__init__
404 ClusterShell.NodeUtils.GroupSource.__init__
405 ClusterShell.NodeUtils.GroupSourceException.__init__
406 ClusterShell.Task.Task._SuspendCondition.__init__
407 ClusterShell.Task.Task.__init__
408 ClusterShell.Task._TaskMsgTree.__init__
409 ClusterShell.Worker.EngineClient.EngineClient.__init__
410 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
411 ClusterShell.Worker.EngineClient.EnginePort.__init__
412 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
413 ClusterShell.Worker.Popen.WorkerPopen.__init__
414 ClusterShell.Worker.Ssh.Scp.__init__
415 ClusterShell.Worker.Ssh.Ssh.__init__
416 ClusterShell.Worker.Ssh.WorkerSsh.__init__
417 ClusterShell.Worker.Worker.DistantWorker.__init__
418 ClusterShell.Worker.Worker.Worker.__init__
419 ClusterShell.Worker.Worker.WorkerSimple.__init__
420 clubak.Display.__init__
421 clush.ClushConfig.__init__
422 clush.ClushConfigError.__init__
423 clush.DirectOutputHandler.__init__
424 clush.Display.__init__
425 clush.GatherOutputHandler.__init__
426 clush.RunTimer.__init__
427 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-33', '__init__', 'link-1');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
428 <a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> </tt>
429 <a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
430 <a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> </tt>
431 <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">config</tt> <tt class="py-op">=</tt> <tt class="py-name">ConfigParser</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
432 <a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple.read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#read"><a title="ClusterShell.Worker.Worker.WorkerSimple.read" class="py-name" href="#" onclick="return doclink('link-34', 'read', 'link-34');">read</a></tt><tt class="py-op">(</tt><tt class="py-name">configfile</tt><tt class="py-op">)</tt> </tt>
433 <a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> </tt>
434 <a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-comment"># Get config file sections</tt> </tt>
435 <a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-name">group_sections</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">config</tt><tt class="py-op">.</tt><tt class="py-name">sections</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
436 <a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'Main'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">group_sections</tt><tt class="py-op">:</tt> </tt>
437 <a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-name">group_sections</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.remove()=ClusterShell.Engine.Engine.Engine-class.html#remove,Method ClusterShell.MsgTree.MsgTree.remove()=ClusterShell.MsgTree.MsgTree-class.html#remove,Method ClusterShell.NodeSet.NodeSetBase.remove()=ClusterShell.NodeSet.NodeSetBase-class.html#remove,Method ClusterShell.NodeSet.RangeSet.remove()=ClusterShell.NodeSet.RangeSet-class.html#remove"><a title="ClusterShell.Engine.Engine.Engine.remove
438 ClusterShell.MsgTree.MsgTree.remove
439 ClusterShell.NodeSet.NodeSetBase.remove
440 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-35', 'remove', 'link-35');">remove</a></tt><tt class="py-op">(</tt><tt class="py-string">'Main'</tt><tt class="py-op">)</tt> </tt>
441 <a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> </tt>
442 <a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">group_sections</tt><tt class="py-op">:</tt> </tt>
443 <a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
444 <a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> </tt>
445 <a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
446 <a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
447 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-36', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'Main'</tt><tt class="py-op">,</tt> <tt class="py-string">'default'</tt><tt class="py-op">)</tt> </tt>
448 <a name="L292"></a><tt class="py-lineno">292</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">default_sourcename</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt> \ </tt>
449 <a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">group_sections</tt><tt class="py-op">:</tt> </tt>
450 <a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-37" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverConfigError=ClusterShell.NodeUtils.GroupResolverConfigError-class.html"><a title="ClusterShell.NodeUtils.GroupResolverConfigError" class="py-name" href="#" onclick="return doclink('link-37', 'GroupResolverConfigError', 'link-37');">GroupResolverConfigError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Default group source not found: "</tt> </tt>
451 <a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-string">"\"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt><tt class="py-op">)</tt> </tt>
452 <a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">NoSectionError</tt><tt class="py-op">,</tt> <tt class="py-name">NoOptionError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
453 <a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
454 <a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> </tt>
455 <a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-comment"># When not specified, select a random section.</tt> </tt>
456 <a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt><tt class="py-op">:</tt> </tt>
457 <a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt> <tt class="py-op">=</tt> <tt class="py-name">group_sections</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
458 <a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> </tt>
459 <a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
460 <a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">section</tt> <tt class="py-keyword">in</tt> <tt class="py-name">group_sections</tt><tt class="py-op">:</tt> </tt>
461 <a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-name">map_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
462 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-38', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-string">'map'</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
463 <a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-name">all_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">list_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">reverse_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
464 <a name="L307"></a><tt class="py-lineno">307</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">config</tt><tt class="py-op">.</tt><tt class="py-name">has_option</tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-string">'all'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
465 <a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-name">all_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
466 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-39', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-string">'all'</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
467 <a name="L309"></a><tt class="py-lineno">309</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">config</tt><tt class="py-op">.</tt><tt class="py-name">has_option</tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-string">'list'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
468 <a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-name">list_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
469 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-40', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-string">'list'</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
470 <a name="L311"></a><tt class="py-lineno">311</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">config</tt><tt class="py-op">.</tt><tt class="py-name">has_option</tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-string">'reverse'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
471 <a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-name">reverse_upcall</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
472 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-41', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-string">'reverse'</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
473 <a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> </tt>
474 <a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.add_source()=ClusterShell.NodeUtils.GroupResolver-class.html#add_source"><a title="ClusterShell.NodeUtils.GroupResolver.add_source" class="py-name" href="#" onclick="return doclink('link-42', 'add_source', 'link-42');">add_source</a></tt><tt class="py-op">(</tt><tt id="link-43" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSource=ClusterShell.NodeUtils.GroupSource-class.html"><a title="ClusterShell.NodeUtils.GroupSource" class="py-name" href="#" onclick="return doclink('link-43', 'GroupSource', 'link-43');">GroupSource</a></tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-name">map_upcall</tt><tt class="py-op">,</tt> <tt class="py-name">all_upcall</tt><tt class="py-op">,</tt> </tt>
475 <a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-name">list_upcall</tt><tt class="py-op">,</tt> <tt class="py-name">reverse_upcall</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
476 <a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">NoSectionError</tt><tt class="py-op">,</tt> <tt class="py-name">NoOptionError</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
477 <a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-44" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolverConfigError" class="py-name" href="#" onclick="return doclink('link-44', 'GroupResolverConfigError', 'link-37');">GroupResolverConfigError</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
478 </div><a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> </tt>
479 <a name="GroupResolverConfig._source"></a><div id="GroupResolverConfig._source-def"><a name="L319"></a><tt class="py-lineno">319</tt> <a class="py-toggle" href="#" id="GroupResolverConfig._source-toggle" onclick="return toggle('GroupResolverConfig._source');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#_source">_source</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
480 </div><div id="GroupResolverConfig._source-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolverConfig._source-expanded"><a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-45" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver" class="py-name" href="#" onclick="return doclink('link-45', 'GroupResolver', 'link-32');">GroupResolver</a></tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver._source
481 ClusterShell.NodeUtils.GroupResolverConfig._source" class="py-name" href="#" onclick="return doclink('link-46', '_source', 'link-22');">_source</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt><tt class="py-op">)</tt> </tt>
482 </div><a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> </tt>
483 <a name="GroupResolverConfig.sources"></a><div id="GroupResolverConfig.sources-def"><a name="L322"></a><tt class="py-lineno">322</tt> <a class="py-toggle" href="#" id="GroupResolverConfig.sources-toggle" onclick="return toggle('GroupResolverConfig.sources');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#sources">sources</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
484 </div><div id="GroupResolverConfig.sources-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GroupResolverConfig.sources-expanded"><a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
485 <a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"><tt class="py-docstring"> Get the list of all resolver source names (default source is always</tt> </tt>
486 <a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"><tt class="py-docstring"> first).</tt> </tt>
487 <a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
488 <a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-name">srcs</tt> <tt class="py-op">=</tt> <tt id="link-47" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolver" class="py-name" href="#" onclick="return doclink('link-47', 'GroupResolver', 'link-32');">GroupResolver</a></tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.sources()=ClusterShell.NodeUtils.GroupResolver-class.html#sources,Method ClusterShell.NodeUtils.GroupResolverConfig.sources()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#sources"><a title="ClusterShell.NodeUtils.GroupResolver.sources
489 ClusterShell.NodeUtils.GroupResolverConfig.sources" class="py-name" href="#" onclick="return doclink('link-48', 'sources', 'link-48');">sources</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
490 <a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">srcs</tt><tt class="py-op">:</tt> </tt>
491 <a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-name">srcs</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.remove
492 ClusterShell.MsgTree.MsgTree.remove
493 ClusterShell.NodeSet.NodeSetBase.remove
494 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-49', 'remove', 'link-35');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt><tt class="py-op">)</tt> </tt>
495 <a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-name">srcs</tt><tt class="py-op">.</tt><tt class="py-name">insert</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt><tt class="py-op">)</tt> </tt>
496 <a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">srcs</tt> </tt>
497 </div></div><a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> </tt><script type="text/javascript">
498 <!--
499 expandto(location.href);
500 // -->
501 </script>
502 </pre>
503 <br />
504 <!-- ==================== NAVIGATION BAR ==================== -->
505 <table class="navbar" border="0" width="100%" cellpadding="0"
506 bgcolor="#a0c0ff" cellspacing="0">
507 <tr valign="middle">
508
509 <!-- Tree link -->
510 <th>&nbsp;&nbsp;&nbsp;<a
511 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
512
513 <!-- Index link -->
514 <th>&nbsp;&nbsp;&nbsp;<a
515 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
516
517 <!-- Help link -->
518 <th>&nbsp;&nbsp;&nbsp;<a
519 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
520
521 <!-- Project homepage -->
522 <th class="navbar" align="right" width="100%">
523 <table border="0" cellpadding="0" cellspacing="0">
524 <tr><th class="navbar" align="center"
525 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
526 </tr></table></th>
527 </tr>
528 </table>
529 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
530 <tr>
531 <td align="left" class="footer">
532 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
533 </td>
534 <td align="right" class="footer">
535 <a target="mainFrame" href="http://epydoc.sourceforge.net"
536 >http://epydoc.sourceforge.net</a>
537 </td>
538 </tr>
539 </table>
540
541 <script type="text/javascript">
542 <!--
543 // Private objects are initially displayed (because if
544 // javascript is turned off then we want them to be
545 // visible); but by default, we want to hide them. So hide
546 // them unless we have a cookie that says to show them.
547 checkCookie();
548 // -->
549 </script>
550 </body>
551 </html>
+0
-477
doc/epydoc/html/ClusterShell.NodeUtils.GroupResolver-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupResolver</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupResolver
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupResolver</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_28" name="uml_class_diagram_for_clusters_28">
63 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#__init__" title="Initialize GroupResolver object." alt="" coords="17,39,281,57"/>
64 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity" title="Set debugging verbosity value." alt="" coords="17,57,281,76"/>
65 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#add_source" title="Add a GroupSource to this resolver." alt="" coords="17,76,281,95"/>
66 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#sources" title="Get the list of all resolver source names." alt="" coords="17,95,281,113"/>
67 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#group_nodes" title="Find nodes for specified group name and optional namespace." alt="" coords="17,113,281,132"/>
68 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes" title="Find all nodes." alt="" coords="17,132,281,151"/>
69 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#grouplist" title="Get full group list." alt="" coords="17,151,281,169"/>
70 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#has_node_groups" title="Return whether finding group list for a specified node is supported by the &#160;resolver (in optional namespace)." alt="" coords="17,169,281,188"/>
71 <area shape="rect" id="node105" href="ClusterShell.NodeUtils.GroupResolver-class.html#node_groups" title="Find group list for specified node and optional namespace." alt="" coords="17,188,281,207"/>
72 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupResolver-class.html" title="Base class GroupResolver that aims to provide node/group resolution from multiple GroupSource&#39;s." alt="" coords="5,6,293,213"/>
73 <area shape="rect" id="node2" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html" title="GroupResolver class that is able to automatically setup its GroupSource&#39;s from a configuration file." alt="" coords="69,233,229,271"/>
74 </map>
75 <img src="uml_class_diagram_for_clusters_28.png" alt='' usemap="#uml_class_diagram_for_clusters_28" ismap="ismap" class="graph-without-title" />
76 </center>
77 </center>
78 <hr />
79 <p>Base class GroupResolver that aims to provide node/group resolution
80 from multiple GroupSource's.</p>
81
82 <!-- ==================== INSTANCE METHODS ==================== -->
83 <a name="section-InstanceMethods"></a>
84 <table class="summary" border="1" cellpadding="3"
85 cellspacing="0" width="100%" bgcolor="white">
86 <tr bgcolor="#70b0f0" class="table-header">
87 <td colspan="2" class="table-header">
88 <table border="0" cellpadding="0" cellspacing="0" width="100%">
89 <tr valign="top">
90 <td align="left"><span class="table-header">Instance Methods</span></td>
91 <td align="right" valign="top"
92 ><span class="options">[<a href="#section-InstanceMethods"
93 class="privatelink" onclick="toggle_private();"
94 >hide private</a>]</span></td>
95 </tr>
96 </table>
97 </td>
98 </tr>
99 <tr>
100 <td width="15%" align="right" valign="top" class="summary">
101 <span class="summary-type">&nbsp;</span>
102 </td><td class="summary">
103 <table width="100%" cellpadding="0" cellspacing="0" border="0">
104 <tr>
105 <td><span class="summary-sig"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
106 <span class="summary-sig-arg">default_source</span>=<span class="summary-sig-default">None</span>)</span><br />
107 Initialize GroupResolver object.</td>
108 <td align="right" valign="top">
109 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.__init__">source&nbsp;code</a></span>
110
111 </td>
112 </tr>
113 </table>
114
115 </td>
116 </tr>
117 <tr>
118 <td width="15%" align="right" valign="top" class="summary">
119 <span class="summary-type">&nbsp;</span>
120 </td><td class="summary">
121 <table width="100%" cellpadding="0" cellspacing="0" border="0">
122 <tr>
123 <td><span class="summary-sig"><a name="set_verbosity"></a><span class="summary-sig-name">set_verbosity</span>(<span class="summary-sig-arg">self</span>,
124 <span class="summary-sig-arg">value</span>)</span><br />
125 Set debugging verbosity value.</td>
126 <td align="right" valign="top">
127 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.set_verbosity">source&nbsp;code</a></span>
128
129 </td>
130 </tr>
131 </table>
132
133 </td>
134 </tr>
135 <tr>
136 <td width="15%" align="right" valign="top" class="summary">
137 <span class="summary-type">&nbsp;</span>
138 </td><td class="summary">
139 <table width="100%" cellpadding="0" cellspacing="0" border="0">
140 <tr>
141 <td><span class="summary-sig"><a name="add_source"></a><span class="summary-sig-name">add_source</span>(<span class="summary-sig-arg">self</span>,
142 <span class="summary-sig-arg">group_source</span>)</span><br />
143 Add a GroupSource to this resolver.</td>
144 <td align="right" valign="top">
145 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.add_source">source&nbsp;code</a></span>
146
147 </td>
148 </tr>
149 </table>
150
151 </td>
152 </tr>
153 <tr>
154 <td width="15%" align="right" valign="top" class="summary">
155 <span class="summary-type">&nbsp;</span>
156 </td><td class="summary">
157 <table width="100%" cellpadding="0" cellspacing="0" border="0">
158 <tr>
159 <td><span class="summary-sig"><a name="sources"></a><span class="summary-sig-name">sources</span>(<span class="summary-sig-arg">self</span>)</span><br />
160 Get the list of all resolver source names.</td>
161 <td align="right" valign="top">
162 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.sources">source&nbsp;code</a></span>
163
164 </td>
165 </tr>
166 </table>
167
168 </td>
169 </tr>
170 <tr class="private">
171 <td width="15%" align="right" valign="top" class="summary">
172 <span class="summary-type">&nbsp;</span>
173 </td><td class="summary">
174 <table width="100%" cellpadding="0" cellspacing="0" border="0">
175 <tr>
176 <td><span class="summary-sig"><a name="_list"></a><span class="summary-sig-name">_list</span>(<span class="summary-sig-arg">self</span>,
177 <span class="summary-sig-arg">source</span>,
178 <span class="summary-sig-arg">what</span>,
179 <span class="summary-sig-arg">*args</span>)</span><br />
180 Helper method that returns a list of result when the source is
181 defined.</td>
182 <td align="right" valign="top">
183 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver._list">source&nbsp;code</a></span>
184
185 </td>
186 </tr>
187 </table>
188
189 </td>
190 </tr>
191 <tr class="private">
192 <td width="15%" align="right" valign="top" class="summary">
193 <span class="summary-type">&nbsp;</span>
194 </td><td class="summary">
195 <table width="100%" cellpadding="0" cellspacing="0" border="0">
196 <tr>
197 <td><span class="summary-sig"><a name="_source"></a><span class="summary-sig-name">_source</span>(<span class="summary-sig-arg">self</span>,
198 <span class="summary-sig-arg">namespace</span>)</span><br />
199 Helper method that returns the source by namespace name.</td>
200 <td align="right" valign="top">
201 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver._source">source&nbsp;code</a></span>
202
203 </td>
204 </tr>
205 </table>
206
207 </td>
208 </tr>
209 <tr>
210 <td width="15%" align="right" valign="top" class="summary">
211 <span class="summary-type">&nbsp;</span>
212 </td><td class="summary">
213 <table width="100%" cellpadding="0" cellspacing="0" border="0">
214 <tr>
215 <td><span class="summary-sig"><a name="group_nodes"></a><span class="summary-sig-name">group_nodes</span>(<span class="summary-sig-arg">self</span>,
216 <span class="summary-sig-arg">group</span>,
217 <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
218 Find nodes for specified group name and optional namespace.</td>
219 <td align="right" valign="top">
220 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.group_nodes">source&nbsp;code</a></span>
221
222 </td>
223 </tr>
224 </table>
225
226 </td>
227 </tr>
228 <tr>
229 <td width="15%" align="right" valign="top" class="summary">
230 <span class="summary-type">&nbsp;</span>
231 </td><td class="summary">
232 <table width="100%" cellpadding="0" cellspacing="0" border="0">
233 <tr>
234 <td><span class="summary-sig"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes" class="summary-sig-name">all_nodes</a>(<span class="summary-sig-arg">self</span>,
235 <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
236 Find all nodes.</td>
237 <td align="right" valign="top">
238 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.all_nodes">source&nbsp;code</a></span>
239
240 </td>
241 </tr>
242 </table>
243
244 </td>
245 </tr>
246 <tr>
247 <td width="15%" align="right" valign="top" class="summary">
248 <span class="summary-type">&nbsp;</span>
249 </td><td class="summary">
250 <table width="100%" cellpadding="0" cellspacing="0" border="0">
251 <tr>
252 <td><span class="summary-sig"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#grouplist" class="summary-sig-name">grouplist</a>(<span class="summary-sig-arg">self</span>,
253 <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
254 Get full group list.</td>
255 <td align="right" valign="top">
256 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.grouplist">source&nbsp;code</a></span>
257
258 </td>
259 </tr>
260 </table>
261
262 </td>
263 </tr>
264 <tr>
265 <td width="15%" align="right" valign="top" class="summary">
266 <span class="summary-type">&nbsp;</span>
267 </td><td class="summary">
268 <table width="100%" cellpadding="0" cellspacing="0" border="0">
269 <tr>
270 <td><span class="summary-sig"><a name="has_node_groups"></a><span class="summary-sig-name">has_node_groups</span>(<span class="summary-sig-arg">self</span>,
271 <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
272 Return whether finding group list for a specified node is supported
273 by the resolver (in optional namespace).</td>
274 <td align="right" valign="top">
275 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.has_node_groups">source&nbsp;code</a></span>
276
277 </td>
278 </tr>
279 </table>
280
281 </td>
282 </tr>
283 <tr>
284 <td width="15%" align="right" valign="top" class="summary">
285 <span class="summary-type">&nbsp;</span>
286 </td><td class="summary">
287 <table width="100%" cellpadding="0" cellspacing="0" border="0">
288 <tr>
289 <td><span class="summary-sig"><a name="node_groups"></a><span class="summary-sig-name">node_groups</span>(<span class="summary-sig-arg">self</span>,
290 <span class="summary-sig-arg">node</span>,
291 <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
292 Find group list for specified node and optional namespace.</td>
293 <td align="right" valign="top">
294 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.node_groups">source&nbsp;code</a></span>
295
296 </td>
297 </tr>
298 </table>
299
300 </td>
301 </tr>
302 <tr>
303 <td colspan="2" class="summary">
304 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
305 <code>__delattr__</code>,
306 <code>__format__</code>,
307 <code>__getattribute__</code>,
308 <code>__hash__</code>,
309 <code>__new__</code>,
310 <code>__reduce__</code>,
311 <code>__reduce_ex__</code>,
312 <code>__repr__</code>,
313 <code>__setattr__</code>,
314 <code>__sizeof__</code>,
315 <code>__str__</code>,
316 <code>__subclasshook__</code>
317 </p>
318 </td>
319 </tr>
320 </table>
321 <!-- ==================== PROPERTIES ==================== -->
322 <a name="section-Properties"></a>
323 <table class="summary" border="1" cellpadding="3"
324 cellspacing="0" width="100%" bgcolor="white">
325 <tr bgcolor="#70b0f0" class="table-header">
326 <td colspan="2" class="table-header">
327 <table border="0" cellpadding="0" cellspacing="0" width="100%">
328 <tr valign="top">
329 <td align="left"><span class="table-header">Properties</span></td>
330 <td align="right" valign="top"
331 ><span class="options">[<a href="#section-Properties"
332 class="privatelink" onclick="toggle_private();"
333 >hide private</a>]</span></td>
334 </tr>
335 </table>
336 </td>
337 </tr>
338 <tr>
339 <td colspan="2" class="summary">
340 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
341 <code>__class__</code>
342 </p>
343 </td>
344 </tr>
345 </table>
346 <!-- ==================== METHOD DETAILS ==================== -->
347 <a name="section-MethodDetails"></a>
348 <table class="details" border="1" cellpadding="3"
349 cellspacing="0" width="100%" bgcolor="white">
350 <tr bgcolor="#70b0f0" class="table-header">
351 <td colspan="2" class="table-header">
352 <table border="0" cellpadding="0" cellspacing="0" width="100%">
353 <tr valign="top">
354 <td align="left"><span class="table-header">Method Details</span></td>
355 <td align="right" valign="top"
356 ><span class="options">[<a href="#section-MethodDetails"
357 class="privatelink" onclick="toggle_private();"
358 >hide private</a>]</span></td>
359 </tr>
360 </table>
361 </td>
362 </tr>
363 </table>
364 <a name="__init__"></a>
365 <div>
366 <table class="details" border="1" cellpadding="3"
367 cellspacing="0" width="100%" bgcolor="white">
368 <tr><td>
369 <table width="100%" cellpadding="0" cellspacing="0" border="0">
370 <tr valign="top"><td>
371 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
372 <span class="sig-arg">default_source</span>=<span class="sig-default">None</span>)</span>
373 <br /><em class="fname">(Constructor)</em>
374 </h3>
375 </td><td align="right" valign="top"
376 ><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.__init__">source&nbsp;code</a></span>&nbsp;
377 </td>
378 </tr></table>
379
380 <p>Initialize GroupResolver object.</p>
381 <dl class="fields">
382 <dt>Overrides:
383 object.__init__
384 </dt>
385 </dl>
386 </td></tr></table>
387 </div>
388 <a name="all_nodes"></a>
389 <div>
390 <table class="details" border="1" cellpadding="3"
391 cellspacing="0" width="100%" bgcolor="white">
392 <tr><td>
393 <table width="100%" cellpadding="0" cellspacing="0" border="0">
394 <tr valign="top"><td>
395 <h3 class="epydoc"><span class="sig"><span class="sig-name">all_nodes</span>(<span class="sig-arg">self</span>,
396 <span class="sig-arg">namespace</span>=<span class="sig-default">None</span>)</span>
397 </h3>
398 </td><td align="right" valign="top"
399 ><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.all_nodes">source&nbsp;code</a></span>&nbsp;
400 </td>
401 </tr></table>
402
403 <p>Find all nodes. You may specify an optional namespace.</p>
404 <dl class="fields">
405 </dl>
406 </td></tr></table>
407 </div>
408 <a name="grouplist"></a>
409 <div>
410 <table class="details" border="1" cellpadding="3"
411 cellspacing="0" width="100%" bgcolor="white">
412 <tr><td>
413 <table width="100%" cellpadding="0" cellspacing="0" border="0">
414 <tr valign="top"><td>
415 <h3 class="epydoc"><span class="sig"><span class="sig-name">grouplist</span>(<span class="sig-arg">self</span>,
416 <span class="sig-arg">namespace</span>=<span class="sig-default">None</span>)</span>
417 </h3>
418 </td><td align="right" valign="top"
419 ><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolver.grouplist">source&nbsp;code</a></span>&nbsp;
420 </td>
421 </tr></table>
422
423 <p>Get full group list. You may specify an optional namespace.</p>
424 <dl class="fields">
425 </dl>
426 </td></tr></table>
427 </div>
428 <br />
429 <!-- ==================== NAVIGATION BAR ==================== -->
430 <table class="navbar" border="0" width="100%" cellpadding="0"
431 bgcolor="#a0c0ff" cellspacing="0">
432 <tr valign="middle">
433
434 <!-- Tree link -->
435 <th>&nbsp;&nbsp;&nbsp;<a
436 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
437
438 <!-- Index link -->
439 <th>&nbsp;&nbsp;&nbsp;<a
440 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
441
442 <!-- Help link -->
443 <th>&nbsp;&nbsp;&nbsp;<a
444 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
445
446 <!-- Project homepage -->
447 <th class="navbar" align="right" width="100%">
448 <table border="0" cellpadding="0" cellspacing="0">
449 <tr><th class="navbar" align="center"
450 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
451 </tr></table></th>
452 </tr>
453 </table>
454 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
455 <tr>
456 <td align="left" class="footer">
457 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
458 </td>
459 <td align="right" class="footer">
460 <a target="mainFrame" href="http://epydoc.sourceforge.net"
461 >http://epydoc.sourceforge.net</a>
462 </td>
463 </tr>
464 </table>
465
466 <script type="text/javascript">
467 <!--
468 // Private objects are initially displayed (because if
469 // javascript is turned off then we want them to be
470 // visible); but by default, we want to hide them. So hide
471 // them unless we have a cookie that says to show them.
472 checkCookie();
473 // -->
474 </script>
475 </body>
476 </html>
+0
-348
doc/epydoc/html/ClusterShell.NodeUtils.GroupResolverConfig-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupResolverConfig</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupResolverConfig
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupResolverConfig</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverConfig">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_29" name="uml_class_diagram_for_clusters_29">
63 <area shape="rect" id="node107" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__" title="Initialize GroupResolver object." alt="" coords="79,228,220,247"/>
64 <area shape="rect" id="node107" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#sources" title="Get the list of all resolver source names (default source is always first)." alt="" coords="79,247,220,265"/>
65 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html" title="GroupResolver class that is able to automatically setup its GroupSource&#39;s from a configuration file." alt="" coords="67,195,232,271"/>
66 <area shape="rect" id="node108" href="ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity" title="Set debugging verbosity value." alt="" coords="17,39,281,57"/>
67 <area shape="rect" id="node108" href="ClusterShell.NodeUtils.GroupResolver-class.html#add_source" title="Add a GroupSource to this resolver." alt="" coords="17,57,281,76"/>
68 <area shape="rect" id="node108" href="ClusterShell.NodeUtils.GroupResolver-class.html#group_nodes" title="Find nodes for specified group name and optional namespace." alt="" coords="17,76,281,95"/>
69 <area shape="rect" id="node108" href="ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes" title="Find all nodes." alt="" coords="17,95,281,113"/>
70 <area shape="rect" id="node108" href="ClusterShell.NodeUtils.GroupResolver-class.html#grouplist" title="Get full group list." alt="" coords="17,113,281,132"/>
71 <area shape="rect" id="node108" href="ClusterShell.NodeUtils.GroupResolver-class.html#has_node_groups" title="Return whether finding group list for a specified node is supported by the &#160;resolver (in optional namespace)." alt="" coords="17,132,281,151"/>
72 <area shape="rect" id="node108" href="ClusterShell.NodeUtils.GroupResolver-class.html#node_groups" title="Find group list for specified node and optional namespace." alt="" coords="17,151,281,169"/>
73 <area shape="rect" id="node2" href="ClusterShell.NodeUtils.GroupResolver-class.html" title="Base class GroupResolver that aims to provide node/group resolution from multiple GroupSource&#39;s." alt="" coords="5,6,293,175"/>
74 </map>
75 <img src="uml_class_diagram_for_clusters_29.png" alt='' usemap="#uml_class_diagram_for_clusters_29" ismap="ismap" class="graph-without-title" />
76 </center>
77 </center>
78 <hr />
79 <p>GroupResolver class that is able to automatically setup its
80 GroupSource's from a configuration file. This is the default resolver for
81 NodeSet.</p>
82
83 <!-- ==================== INSTANCE METHODS ==================== -->
84 <a name="section-InstanceMethods"></a>
85 <table class="summary" border="1" cellpadding="3"
86 cellspacing="0" width="100%" bgcolor="white">
87 <tr bgcolor="#70b0f0" class="table-header">
88 <td colspan="2" class="table-header">
89 <table border="0" cellpadding="0" cellspacing="0" width="100%">
90 <tr valign="top">
91 <td align="left"><span class="table-header">Instance Methods</span></td>
92 <td align="right" valign="top"
93 ><span class="options">[<a href="#section-InstanceMethods"
94 class="privatelink" onclick="toggle_private();"
95 >hide private</a>]</span></td>
96 </tr>
97 </table>
98 </td>
99 </tr>
100 <tr>
101 <td width="15%" align="right" valign="top" class="summary">
102 <span class="summary-type">&nbsp;</span>
103 </td><td class="summary">
104 <table width="100%" cellpadding="0" cellspacing="0" border="0">
105 <tr>
106 <td><span class="summary-sig"><a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
107 <span class="summary-sig-arg">configfile</span>)</span><br />
108 Initialize GroupResolver object.</td>
109 <td align="right" valign="top">
110 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverConfig.__init__">source&nbsp;code</a></span>
111
112 </td>
113 </tr>
114 </table>
115
116 </td>
117 </tr>
118 <tr class="private">
119 <td width="15%" align="right" valign="top" class="summary">
120 <span class="summary-type">&nbsp;</span>
121 </td><td class="summary">
122 <table width="100%" cellpadding="0" cellspacing="0" border="0">
123 <tr>
124 <td><span class="summary-sig"><a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#_source" class="summary-sig-name" onclick="show_private();">_source</a>(<span class="summary-sig-arg">self</span>,
125 <span class="summary-sig-arg">namespace</span>)</span><br />
126 Helper method that returns the source by namespace name.</td>
127 <td align="right" valign="top">
128 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverConfig._source">source&nbsp;code</a></span>
129
130 </td>
131 </tr>
132 </table>
133
134 </td>
135 </tr>
136 <tr>
137 <td width="15%" align="right" valign="top" class="summary">
138 <span class="summary-type">&nbsp;</span>
139 </td><td class="summary">
140 <table width="100%" cellpadding="0" cellspacing="0" border="0">
141 <tr>
142 <td><span class="summary-sig"><a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#sources" class="summary-sig-name">sources</a>(<span class="summary-sig-arg">self</span>)</span><br />
143 Get the list of all resolver source names (default source is always
144 first).</td>
145 <td align="right" valign="top">
146 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverConfig.sources">source&nbsp;code</a></span>
147
148 </td>
149 </tr>
150 </table>
151
152 </td>
153 </tr>
154 <tr>
155 <td colspan="2" class="summary">
156 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a></code></b>:
157 <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html#add_source">add_source</a></code>,
158 <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes">all_nodes</a></code>,
159 <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html#group_nodes">group_nodes</a></code>,
160 <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html#grouplist">grouplist</a></code>,
161 <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html#has_node_groups">has_node_groups</a></code>,
162 <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html#node_groups">node_groups</a></code>,
163 <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity">set_verbosity</a></code>
164 </p>
165 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a></code></b> (private):
166 <code><a href="ClusterShell.NodeUtils.GroupResolver-class.html#_list" onclick="show_private();">_list</a></code>
167 </p></div>
168 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
169 <code>__delattr__</code>,
170 <code>__format__</code>,
171 <code>__getattribute__</code>,
172 <code>__hash__</code>,
173 <code>__new__</code>,
174 <code>__reduce__</code>,
175 <code>__reduce_ex__</code>,
176 <code>__repr__</code>,
177 <code>__setattr__</code>,
178 <code>__sizeof__</code>,
179 <code>__str__</code>,
180 <code>__subclasshook__</code>
181 </p>
182 </td>
183 </tr>
184 </table>
185 <!-- ==================== PROPERTIES ==================== -->
186 <a name="section-Properties"></a>
187 <table class="summary" border="1" cellpadding="3"
188 cellspacing="0" width="100%" bgcolor="white">
189 <tr bgcolor="#70b0f0" class="table-header">
190 <td colspan="2" class="table-header">
191 <table border="0" cellpadding="0" cellspacing="0" width="100%">
192 <tr valign="top">
193 <td align="left"><span class="table-header">Properties</span></td>
194 <td align="right" valign="top"
195 ><span class="options">[<a href="#section-Properties"
196 class="privatelink" onclick="toggle_private();"
197 >hide private</a>]</span></td>
198 </tr>
199 </table>
200 </td>
201 </tr>
202 <tr>
203 <td colspan="2" class="summary">
204 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
205 <code>__class__</code>
206 </p>
207 </td>
208 </tr>
209 </table>
210 <!-- ==================== METHOD DETAILS ==================== -->
211 <a name="section-MethodDetails"></a>
212 <table class="details" border="1" cellpadding="3"
213 cellspacing="0" width="100%" bgcolor="white">
214 <tr bgcolor="#70b0f0" class="table-header">
215 <td colspan="2" class="table-header">
216 <table border="0" cellpadding="0" cellspacing="0" width="100%">
217 <tr valign="top">
218 <td align="left"><span class="table-header">Method Details</span></td>
219 <td align="right" valign="top"
220 ><span class="options">[<a href="#section-MethodDetails"
221 class="privatelink" onclick="toggle_private();"
222 >hide private</a>]</span></td>
223 </tr>
224 </table>
225 </td>
226 </tr>
227 </table>
228 <a name="__init__"></a>
229 <div>
230 <table class="details" border="1" cellpadding="3"
231 cellspacing="0" width="100%" bgcolor="white">
232 <tr><td>
233 <table width="100%" cellpadding="0" cellspacing="0" border="0">
234 <tr valign="top"><td>
235 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
236 <span class="sig-arg">configfile</span>)</span>
237 <br /><em class="fname">(Constructor)</em>
238 </h3>
239 </td><td align="right" valign="top"
240 ><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverConfig.__init__">source&nbsp;code</a></span>&nbsp;
241 </td>
242 </tr></table>
243
244 <p>Initialize GroupResolver object.</p>
245 <dl class="fields">
246 <dt>Overrides:
247 object.__init__
248 </dt>
249 </dl>
250 </td></tr></table>
251 </div>
252 <a name="_source"></a>
253 <div class="private">
254 <table class="details" border="1" cellpadding="3"
255 cellspacing="0" width="100%" bgcolor="white">
256 <tr><td>
257 <table width="100%" cellpadding="0" cellspacing="0" border="0">
258 <tr valign="top"><td>
259 <h3 class="epydoc"><span class="sig"><span class="sig-name">_source</span>(<span class="sig-arg">self</span>,
260 <span class="sig-arg">namespace</span>)</span>
261 </h3>
262 </td><td align="right" valign="top"
263 ><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverConfig._source">source&nbsp;code</a></span>&nbsp;
264 </td>
265 </tr></table>
266
267 <p>Helper method that returns the source by namespace name.</p>
268 <dl class="fields">
269 <dt>Overrides:
270 <a href="ClusterShell.NodeUtils.GroupResolver-class.html#_source" onclick="show_private();">GroupResolver._source</a>
271 <dd><em class="note">(inherited documentation)</em></dd>
272 </dt>
273 </dl>
274 </td></tr></table>
275 </div>
276 <a name="sources"></a>
277 <div>
278 <table class="details" border="1" cellpadding="3"
279 cellspacing="0" width="100%" bgcolor="white">
280 <tr><td>
281 <table width="100%" cellpadding="0" cellspacing="0" border="0">
282 <tr valign="top"><td>
283 <h3 class="epydoc"><span class="sig"><span class="sig-name">sources</span>(<span class="sig-arg">self</span>)</span>
284 </h3>
285 </td><td align="right" valign="top"
286 ><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverConfig.sources">source&nbsp;code</a></span>&nbsp;
287 </td>
288 </tr></table>
289
290 <p>Get the list of all resolver source names (default source is always
291 first).</p>
292 <dl class="fields">
293 <dt>Overrides:
294 <a href="ClusterShell.NodeUtils.GroupResolver-class.html#sources">GroupResolver.sources</a>
295 </dt>
296 </dl>
297 </td></tr></table>
298 </div>
299 <br />
300 <!-- ==================== NAVIGATION BAR ==================== -->
301 <table class="navbar" border="0" width="100%" cellpadding="0"
302 bgcolor="#a0c0ff" cellspacing="0">
303 <tr valign="middle">
304
305 <!-- Tree link -->
306 <th>&nbsp;&nbsp;&nbsp;<a
307 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
308
309 <!-- Index link -->
310 <th>&nbsp;&nbsp;&nbsp;<a
311 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
312
313 <!-- Help link -->
314 <th>&nbsp;&nbsp;&nbsp;<a
315 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
316
317 <!-- Project homepage -->
318 <th class="navbar" align="right" width="100%">
319 <table border="0" cellpadding="0" cellspacing="0">
320 <tr><th class="navbar" align="center"
321 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
322 </tr></table></th>
323 </tr>
324 </table>
325 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
326 <tr>
327 <td align="left" class="footer">
328 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
329 </td>
330 <td align="right" class="footer">
331 <a target="mainFrame" href="http://epydoc.sourceforge.net"
332 >http://epydoc.sourceforge.net</a>
333 </td>
334 </tr>
335 </table>
336
337 <script type="text/javascript">
338 <!--
339 // Private objects are initially displayed (because if
340 // javascript is turned off then we want them to be
341 // visible); but by default, we want to hide them. So hide
342 // them unless we have a cookie that says to show them.
343 checkCookie();
344 // -->
345 </script>
346 </body>
347 </html>
+0
-210
doc/epydoc/html/ClusterShell.NodeUtils.GroupResolverConfigError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupResolverConfigError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupResolverConfigError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupResolverConfigError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverConfigError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_30" name="uml_class_diagram_for_clusters_30">
63 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html" title="Raised when a configuration error is encountered" alt="" coords="7,443,185,487"/>
64 <area shape="rect" id="node2" href="ClusterShell.NodeUtils.GroupResolverError-class.html" title="Base GroupResolver error" alt="" coords="25,379,167,423"/>
65 <area shape="rect" id="node111" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
66 <area shape="rect" id="node111" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
68 <area shape="rect" id="node112" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
69 <area shape="rect" id="node112" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
70 <area shape="rect" id="node112" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
71 <area shape="rect" id="node112" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
72 <area shape="rect" id="node112" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
73 <area shape="rect" id="node112" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
74 <area shape="rect" id="node112" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
75 <area shape="rect" id="node112" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
76 <area shape="rect" id="node112" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
77 <area shape="rect" id="node112" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
78 <area shape="rect" id="node112" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
79 <area shape="rect" id="node112" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
80 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
81 </map>
82 <img src="uml_class_diagram_for_clusters_30.png" alt='' usemap="#uml_class_diagram_for_clusters_30" ismap="ismap" class="graph-without-title" />
83 </center>
84 </center>
85 <hr />
86 <p>Raised when a configuration error is encountered</p>
87
88 <!-- ==================== INSTANCE METHODS ==================== -->
89 <a name="section-InstanceMethods"></a>
90 <table class="summary" border="1" cellpadding="3"
91 cellspacing="0" width="100%" bgcolor="white">
92 <tr bgcolor="#70b0f0" class="table-header">
93 <td colspan="2" class="table-header">
94 <table border="0" cellpadding="0" cellspacing="0" width="100%">
95 <tr valign="top">
96 <td align="left"><span class="table-header">Instance Methods</span></td>
97 <td align="right" valign="top"
98 ><span class="options">[<a href="#section-InstanceMethods"
99 class="privatelink" onclick="toggle_private();"
100 >hide private</a>]</span></td>
101 </tr>
102 </table>
103 </td>
104 </tr>
105 <tr>
106 <td colspan="2" class="summary">
107 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
108 <code>__init__</code>,
109 <code>__new__</code>
110 </p>
111 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
112 <code>__delattr__</code>,
113 <code>__getattribute__</code>,
114 <code>__getitem__</code>,
115 <code>__getslice__</code>,
116 <code>__reduce__</code>,
117 <code>__repr__</code>,
118 <code>__setattr__</code>,
119 <code>__setstate__</code>,
120 <code>__str__</code>,
121 <code>__unicode__</code>
122 </p>
123 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
124 <code>__format__</code>,
125 <code>__hash__</code>,
126 <code>__reduce_ex__</code>,
127 <code>__sizeof__</code>,
128 <code>__subclasshook__</code>
129 </p>
130 </td>
131 </tr>
132 </table>
133 <!-- ==================== PROPERTIES ==================== -->
134 <a name="section-Properties"></a>
135 <table class="summary" border="1" cellpadding="3"
136 cellspacing="0" width="100%" bgcolor="white">
137 <tr bgcolor="#70b0f0" class="table-header">
138 <td colspan="2" class="table-header">
139 <table border="0" cellpadding="0" cellspacing="0" width="100%">
140 <tr valign="top">
141 <td align="left"><span class="table-header">Properties</span></td>
142 <td align="right" valign="top"
143 ><span class="options">[<a href="#section-Properties"
144 class="privatelink" onclick="toggle_private();"
145 >hide private</a>]</span></td>
146 </tr>
147 </table>
148 </td>
149 </tr>
150 <tr>
151 <td colspan="2" class="summary">
152 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
153 <code>args</code>,
154 <code>message</code>
155 </p>
156 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
157 <code>__class__</code>
158 </p>
159 </td>
160 </tr>
161 </table>
162 <!-- ==================== NAVIGATION BAR ==================== -->
163 <table class="navbar" border="0" width="100%" cellpadding="0"
164 bgcolor="#a0c0ff" cellspacing="0">
165 <tr valign="middle">
166
167 <!-- Tree link -->
168 <th>&nbsp;&nbsp;&nbsp;<a
169 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
170
171 <!-- Index link -->
172 <th>&nbsp;&nbsp;&nbsp;<a
173 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
174
175 <!-- Help link -->
176 <th>&nbsp;&nbsp;&nbsp;<a
177 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
178
179 <!-- Project homepage -->
180 <th class="navbar" align="right" width="100%">
181 <table border="0" cellpadding="0" cellspacing="0">
182 <tr><th class="navbar" align="center"
183 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
184 </tr></table></th>
185 </tr>
186 </table>
187 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
188 <tr>
189 <td align="left" class="footer">
190 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
191 </td>
192 <td align="right" class="footer">
193 <a target="mainFrame" href="http://epydoc.sourceforge.net"
194 >http://epydoc.sourceforge.net</a>
195 </td>
196 </tr>
197 </table>
198
199 <script type="text/javascript">
200 <!--
201 // Private objects are initially displayed (because if
202 // javascript is turned off then we want them to be
203 // visible); but by default, we want to hide them. So hide
204 // them unless we have a cookie that says to show them.
205 checkCookie();
206 // -->
207 </script>
208 </body>
209 </html>
+0
-211
doc/epydoc/html/ClusterShell.NodeUtils.GroupResolverError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupResolverError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupResolverError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupResolverError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupResolverError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_31" name="uml_class_diagram_for_clusters_31">
63 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupResolverError-class.html" title="Base GroupResolver error" alt="" coords="140,379,281,423"/>
64 <area shape="rect" id="node3" href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html" title="Raised when upcall is not available" alt="" coords="5,443,197,482"/>
65 <area shape="rect" id="node5" href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html" title="Raised when a configuration error is encountered" alt="" coords="227,443,416,482"/>
66 <area shape="rect" id="node114" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="147,316,273,335"/>
67 <area shape="rect" id="node114" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="147,335,273,353"/>
68 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="135,283,284,359"/>
69 <area shape="rect" id="node115" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="132,31,289,49"/>
70 <area shape="rect" id="node115" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="132,49,289,68"/>
71 <area shape="rect" id="node115" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="132,71,289,89"/>
72 <area shape="rect" id="node115" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="132,89,289,108"/>
73 <area shape="rect" id="node115" href="javascript:void(0);" title="x[y]" alt="" coords="132,108,289,127"/>
74 <area shape="rect" id="node115" href="javascript:void(0);" title="x[i:j]" alt="" coords="132,127,289,145"/>
75 <area shape="rect" id="node115" href="javascript:void(0);" title="helper for pickle" alt="" coords="132,145,289,164"/>
76 <area shape="rect" id="node115" href="javascript:void(0);" title="repr(x)" alt="" coords="132,164,289,183"/>
77 <area shape="rect" id="node115" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="132,183,289,201"/>
78 <area shape="rect" id="node115" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="132,201,289,220"/>
79 <area shape="rect" id="node115" href="javascript:void(0);" title="str(x)" alt="" coords="132,220,289,239"/>
80 <area shape="rect" id="node115" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="132,239,289,257"/>
81 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="120,6,301,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_31.png" alt='' usemap="#uml_class_diagram_for_clusters_31" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Base GroupResolver error</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td colspan="2" class="summary">
108 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
109 <code>__init__</code>,
110 <code>__new__</code>
111 </p>
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
113 <code>__delattr__</code>,
114 <code>__getattribute__</code>,
115 <code>__getitem__</code>,
116 <code>__getslice__</code>,
117 <code>__reduce__</code>,
118 <code>__repr__</code>,
119 <code>__setattr__</code>,
120 <code>__setstate__</code>,
121 <code>__str__</code>,
122 <code>__unicode__</code>
123 </p>
124 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
125 <code>__format__</code>,
126 <code>__hash__</code>,
127 <code>__reduce_ex__</code>,
128 <code>__sizeof__</code>,
129 <code>__subclasshook__</code>
130 </p>
131 </td>
132 </tr>
133 </table>
134 <!-- ==================== PROPERTIES ==================== -->
135 <a name="section-Properties"></a>
136 <table class="summary" border="1" cellpadding="3"
137 cellspacing="0" width="100%" bgcolor="white">
138 <tr bgcolor="#70b0f0" class="table-header">
139 <td colspan="2" class="table-header">
140 <table border="0" cellpadding="0" cellspacing="0" width="100%">
141 <tr valign="top">
142 <td align="left"><span class="table-header">Properties</span></td>
143 <td align="right" valign="top"
144 ><span class="options">[<a href="#section-Properties"
145 class="privatelink" onclick="toggle_private();"
146 >hide private</a>]</span></td>
147 </tr>
148 </table>
149 </td>
150 </tr>
151 <tr>
152 <td colspan="2" class="summary">
153 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
154 <code>args</code>,
155 <code>message</code>
156 </p>
157 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
158 <code>__class__</code>
159 </p>
160 </td>
161 </tr>
162 </table>
163 <!-- ==================== NAVIGATION BAR ==================== -->
164 <table class="navbar" border="0" width="100%" cellpadding="0"
165 bgcolor="#a0c0ff" cellspacing="0">
166 <tr valign="middle">
167
168 <!-- Tree link -->
169 <th>&nbsp;&nbsp;&nbsp;<a
170 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
171
172 <!-- Index link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Help link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Project homepage -->
181 <th class="navbar" align="right" width="100%">
182 <table border="0" cellpadding="0" cellspacing="0">
183 <tr><th class="navbar" align="center"
184 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
185 </tr></table></th>
186 </tr>
187 </table>
188 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
189 <tr>
190 <td align="left" class="footer">
191 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
192 </td>
193 <td align="right" class="footer">
194 <a target="mainFrame" href="http://epydoc.sourceforge.net"
195 >http://epydoc.sourceforge.net</a>
196 </td>
197 </tr>
198 </table>
199
200 <script type="text/javascript">
201 <!--
202 // Private objects are initially displayed (because if
203 // javascript is turned off then we want them to be
204 // visible); but by default, we want to hide them. So hide
205 // them unless we have a cookie that says to show them.
206 checkCookie();
207 // -->
208 </script>
209 </body>
210 </html>
+0
-210
doc/epydoc/html/ClusterShell.NodeUtils.GroupResolverSourceError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupResolverSourceError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupResolverSourceError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupResolverSourceError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupResolverSourceError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_32" name="uml_class_diagram_for_clusters_32">
63 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html" title="Raised when upcall is not available" alt="" coords="5,443,187,487"/>
64 <area shape="rect" id="node2" href="ClusterShell.NodeUtils.GroupResolverError-class.html" title="Base GroupResolver error" alt="" coords="27,379,168,423"/>
65 <area shape="rect" id="node120" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="33,316,160,335"/>
66 <area shape="rect" id="node120" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,160,353"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,171,359"/>
68 <area shape="rect" id="node121" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="19,31,176,49"/>
69 <area shape="rect" id="node121" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="19,49,176,68"/>
70 <area shape="rect" id="node121" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="19,71,176,89"/>
71 <area shape="rect" id="node121" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="19,89,176,108"/>
72 <area shape="rect" id="node121" href="javascript:void(0);" title="x[y]" alt="" coords="19,108,176,127"/>
73 <area shape="rect" id="node121" href="javascript:void(0);" title="x[i:j]" alt="" coords="19,127,176,145"/>
74 <area shape="rect" id="node121" href="javascript:void(0);" title="helper for pickle" alt="" coords="19,145,176,164"/>
75 <area shape="rect" id="node121" href="javascript:void(0);" title="repr(x)" alt="" coords="19,164,176,183"/>
76 <area shape="rect" id="node121" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="19,183,176,201"/>
77 <area shape="rect" id="node121" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="19,201,176,220"/>
78 <area shape="rect" id="node121" href="javascript:void(0);" title="str(x)" alt="" coords="19,220,176,239"/>
79 <area shape="rect" id="node121" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="19,239,176,257"/>
80 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="7,6,188,263"/>
81 </map>
82 <img src="uml_class_diagram_for_clusters_32.png" alt='' usemap="#uml_class_diagram_for_clusters_32" ismap="ismap" class="graph-without-title" />
83 </center>
84 </center>
85 <hr />
86 <p>Raised when upcall is not available</p>
87
88 <!-- ==================== INSTANCE METHODS ==================== -->
89 <a name="section-InstanceMethods"></a>
90 <table class="summary" border="1" cellpadding="3"
91 cellspacing="0" width="100%" bgcolor="white">
92 <tr bgcolor="#70b0f0" class="table-header">
93 <td colspan="2" class="table-header">
94 <table border="0" cellpadding="0" cellspacing="0" width="100%">
95 <tr valign="top">
96 <td align="left"><span class="table-header">Instance Methods</span></td>
97 <td align="right" valign="top"
98 ><span class="options">[<a href="#section-InstanceMethods"
99 class="privatelink" onclick="toggle_private();"
100 >hide private</a>]</span></td>
101 </tr>
102 </table>
103 </td>
104 </tr>
105 <tr>
106 <td colspan="2" class="summary">
107 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
108 <code>__init__</code>,
109 <code>__new__</code>
110 </p>
111 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
112 <code>__delattr__</code>,
113 <code>__getattribute__</code>,
114 <code>__getitem__</code>,
115 <code>__getslice__</code>,
116 <code>__reduce__</code>,
117 <code>__repr__</code>,
118 <code>__setattr__</code>,
119 <code>__setstate__</code>,
120 <code>__str__</code>,
121 <code>__unicode__</code>
122 </p>
123 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
124 <code>__format__</code>,
125 <code>__hash__</code>,
126 <code>__reduce_ex__</code>,
127 <code>__sizeof__</code>,
128 <code>__subclasshook__</code>
129 </p>
130 </td>
131 </tr>
132 </table>
133 <!-- ==================== PROPERTIES ==================== -->
134 <a name="section-Properties"></a>
135 <table class="summary" border="1" cellpadding="3"
136 cellspacing="0" width="100%" bgcolor="white">
137 <tr bgcolor="#70b0f0" class="table-header">
138 <td colspan="2" class="table-header">
139 <table border="0" cellpadding="0" cellspacing="0" width="100%">
140 <tr valign="top">
141 <td align="left"><span class="table-header">Properties</span></td>
142 <td align="right" valign="top"
143 ><span class="options">[<a href="#section-Properties"
144 class="privatelink" onclick="toggle_private();"
145 >hide private</a>]</span></td>
146 </tr>
147 </table>
148 </td>
149 </tr>
150 <tr>
151 <td colspan="2" class="summary">
152 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
153 <code>args</code>,
154 <code>message</code>
155 </p>
156 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
157 <code>__class__</code>
158 </p>
159 </td>
160 </tr>
161 </table>
162 <!-- ==================== NAVIGATION BAR ==================== -->
163 <table class="navbar" border="0" width="100%" cellpadding="0"
164 bgcolor="#a0c0ff" cellspacing="0">
165 <tr valign="middle">
166
167 <!-- Tree link -->
168 <th>&nbsp;&nbsp;&nbsp;<a
169 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
170
171 <!-- Index link -->
172 <th>&nbsp;&nbsp;&nbsp;<a
173 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
174
175 <!-- Help link -->
176 <th>&nbsp;&nbsp;&nbsp;<a
177 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
178
179 <!-- Project homepage -->
180 <th class="navbar" align="right" width="100%">
181 <table border="0" cellpadding="0" cellspacing="0">
182 <tr><th class="navbar" align="center"
183 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
184 </tr></table></th>
185 </tr>
186 </table>
187 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
188 <tr>
189 <td align="left" class="footer">
190 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
191 </td>
192 <td align="right" class="footer">
193 <a target="mainFrame" href="http://epydoc.sourceforge.net"
194 >http://epydoc.sourceforge.net</a>
195 </td>
196 </tr>
197 </table>
198
199 <script type="text/javascript">
200 <!--
201 // Private objects are initially displayed (because if
202 // javascript is turned off then we want them to be
203 // visible); but by default, we want to hide them. So hide
204 // them unless we have a cookie that says to show them.
205 checkCookie();
206 // -->
207 </script>
208 </body>
209 </html>
+0
-366
doc/epydoc/html/ClusterShell.NodeUtils.GroupSource-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupSource</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupSource
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupSource-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupSource</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_33" name="uml_class_diagram_for_clusters_33">
63 <area shape="rect" id="node122" href="ClusterShell.NodeUtils.GroupSource-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,39,549,57"/>
64 <area shape="rect" id="node122" href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_map" title="Get nodes from group &#39;group&#39;, using the cached value if available." alt="" coords="17,57,549,76"/>
65 <area shape="rect" id="node122" href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_list" title="Return a list of all group names for this group source, using the cached &#160;value if available." alt="" coords="17,76,549,95"/>
66 <area shape="rect" id="node122" href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_all" title="Return the content of special group ALL, using the cached value if &#160;available." alt="" coords="17,95,549,113"/>
67 <area shape="rect" id="node122" href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_reverse" title="Return the group name matching the provided node, using the cached value if available." alt="" coords="17,113,549,132"/>
68 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupSource-class.html" title="GroupSource class managing external calls for nodegroup support." alt="" coords="5,6,560,138"/>
69 </map>
70 <img src="uml_class_diagram_for_clusters_33.png" alt='' usemap="#uml_class_diagram_for_clusters_33" ismap="ismap" class="graph-without-title" />
71 </center>
72 </center>
73 <hr />
74 <p>GroupSource class managing external calls for nodegroup support.</p>
75
76 <!-- ==================== INSTANCE METHODS ==================== -->
77 <a name="section-InstanceMethods"></a>
78 <table class="summary" border="1" cellpadding="3"
79 cellspacing="0" width="100%" bgcolor="white">
80 <tr bgcolor="#70b0f0" class="table-header">
81 <td colspan="2" class="table-header">
82 <table border="0" cellpadding="0" cellspacing="0" width="100%">
83 <tr valign="top">
84 <td align="left"><span class="table-header">Instance Methods</span></td>
85 <td align="right" valign="top"
86 ><span class="options">[<a href="#section-InstanceMethods"
87 class="privatelink" onclick="toggle_private();"
88 >hide private</a>]</span></td>
89 </tr>
90 </table>
91 </td>
92 </tr>
93 <tr>
94 <td width="15%" align="right" valign="top" class="summary">
95 <span class="summary-type">&nbsp;</span>
96 </td><td class="summary">
97 <table width="100%" cellpadding="0" cellspacing="0" border="0">
98 <tr>
99 <td><span class="summary-sig"><a href="ClusterShell.NodeUtils.GroupSource-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
100 <span class="summary-sig-arg">name</span>,
101 <span class="summary-sig-arg">map_upcall</span>,
102 <span class="summary-sig-arg">all_upcall</span>=<span class="summary-sig-default">None</span>,
103 <span class="summary-sig-arg">list_upcall</span>=<span class="summary-sig-default">None</span>,
104 <span class="summary-sig-arg">reverse_upcall</span>=<span class="summary-sig-default">None</span>)</span><br />
105 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
106 <td align="right" valign="top">
107 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource.__init__">source&nbsp;code</a></span>
108
109 </td>
110 </tr>
111 </table>
112
113 </td>
114 </tr>
115 <tr class="private">
116 <td width="15%" align="right" valign="top" class="summary">
117 <span class="summary-type">&nbsp;</span>
118 </td><td class="summary">
119 <table width="100%" cellpadding="0" cellspacing="0" border="0">
120 <tr>
121 <td><span class="summary-sig"><a name="_verbose_print"></a><span class="summary-sig-name">_verbose_print</span>(<span class="summary-sig-arg">self</span>,
122 <span class="summary-sig-arg">msg</span>)</span></td>
123 <td align="right" valign="top">
124 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource._verbose_print">source&nbsp;code</a></span>
125
126 </td>
127 </tr>
128 </table>
129
130 </td>
131 </tr>
132 <tr class="private">
133 <td width="15%" align="right" valign="top" class="summary">
134 <span class="summary-type">&nbsp;</span>
135 </td><td class="summary">
136 <table width="100%" cellpadding="0" cellspacing="0" border="0">
137 <tr>
138 <td><span class="summary-sig"><a name="_upcall_read"></a><span class="summary-sig-name">_upcall_read</span>(<span class="summary-sig-arg">self</span>,
139 <span class="summary-sig-arg">cmdtpl</span>,
140 <span class="summary-sig-arg">vars</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>)</span><br />
141 Invoke the specified upcall command, raise an Exception if something
142 goes wrong and return the command output otherwise.</td>
143 <td align="right" valign="top">
144 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource._upcall_read">source&nbsp;code</a></span>
145
146 </td>
147 </tr>
148 </table>
149
150 </td>
151 </tr>
152 <tr>
153 <td width="15%" align="right" valign="top" class="summary">
154 <span class="summary-type">&nbsp;</span>
155 </td><td class="summary">
156 <table width="100%" cellpadding="0" cellspacing="0" border="0">
157 <tr>
158 <td><span class="summary-sig"><a name="resolv_map"></a><span class="summary-sig-name">resolv_map</span>(<span class="summary-sig-arg">self</span>,
159 <span class="summary-sig-arg">group</span>)</span><br />
160 Get nodes from group 'group', using the cached value if available.</td>
161 <td align="right" valign="top">
162 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource.resolv_map">source&nbsp;code</a></span>
163
164 </td>
165 </tr>
166 </table>
167
168 </td>
169 </tr>
170 <tr>
171 <td width="15%" align="right" valign="top" class="summary">
172 <span class="summary-type">&nbsp;</span>
173 </td><td class="summary">
174 <table width="100%" cellpadding="0" cellspacing="0" border="0">
175 <tr>
176 <td><span class="summary-sig"><a name="resolv_list"></a><span class="summary-sig-name">resolv_list</span>(<span class="summary-sig-arg">self</span>)</span><br />
177 Return a list of all group names for this group source, using the
178 cached value if available.</td>
179 <td align="right" valign="top">
180 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource.resolv_list">source&nbsp;code</a></span>
181
182 </td>
183 </tr>
184 </table>
185
186 </td>
187 </tr>
188 <tr>
189 <td width="15%" align="right" valign="top" class="summary">
190 <span class="summary-type">&nbsp;</span>
191 </td><td class="summary">
192 <table width="100%" cellpadding="0" cellspacing="0" border="0">
193 <tr>
194 <td><span class="summary-sig"><a name="resolv_all"></a><span class="summary-sig-name">resolv_all</span>(<span class="summary-sig-arg">self</span>)</span><br />
195 Return the content of special group ALL, using the cached value if
196 available.</td>
197 <td align="right" valign="top">
198 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource.resolv_all">source&nbsp;code</a></span>
199
200 </td>
201 </tr>
202 </table>
203
204 </td>
205 </tr>
206 <tr>
207 <td width="15%" align="right" valign="top" class="summary">
208 <span class="summary-type">&nbsp;</span>
209 </td><td class="summary">
210 <table width="100%" cellpadding="0" cellspacing="0" border="0">
211 <tr>
212 <td><span class="summary-sig"><a name="resolv_reverse"></a><span class="summary-sig-name">resolv_reverse</span>(<span class="summary-sig-arg">self</span>,
213 <span class="summary-sig-arg">node</span>)</span><br />
214 Return the group name matching the provided node, using the cached
215 value if available.</td>
216 <td align="right" valign="top">
217 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource.resolv_reverse">source&nbsp;code</a></span>
218
219 </td>
220 </tr>
221 </table>
222
223 </td>
224 </tr>
225 <tr>
226 <td colspan="2" class="summary">
227 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
228 <code>__delattr__</code>,
229 <code>__format__</code>,
230 <code>__getattribute__</code>,
231 <code>__hash__</code>,
232 <code>__new__</code>,
233 <code>__reduce__</code>,
234 <code>__reduce_ex__</code>,
235 <code>__repr__</code>,
236 <code>__setattr__</code>,
237 <code>__sizeof__</code>,
238 <code>__str__</code>,
239 <code>__subclasshook__</code>
240 </p>
241 </td>
242 </tr>
243 </table>
244 <!-- ==================== PROPERTIES ==================== -->
245 <a name="section-Properties"></a>
246 <table class="summary" border="1" cellpadding="3"
247 cellspacing="0" width="100%" bgcolor="white">
248 <tr bgcolor="#70b0f0" class="table-header">
249 <td colspan="2" class="table-header">
250 <table border="0" cellpadding="0" cellspacing="0" width="100%">
251 <tr valign="top">
252 <td align="left"><span class="table-header">Properties</span></td>
253 <td align="right" valign="top"
254 ><span class="options">[<a href="#section-Properties"
255 class="privatelink" onclick="toggle_private();"
256 >hide private</a>]</span></td>
257 </tr>
258 </table>
259 </td>
260 </tr>
261 <tr>
262 <td colspan="2" class="summary">
263 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
264 <code>__class__</code>
265 </p>
266 </td>
267 </tr>
268 </table>
269 <!-- ==================== METHOD DETAILS ==================== -->
270 <a name="section-MethodDetails"></a>
271 <table class="details" border="1" cellpadding="3"
272 cellspacing="0" width="100%" bgcolor="white">
273 <tr bgcolor="#70b0f0" class="table-header">
274 <td colspan="2" class="table-header">
275 <table border="0" cellpadding="0" cellspacing="0" width="100%">
276 <tr valign="top">
277 <td align="left"><span class="table-header">Method Details</span></td>
278 <td align="right" valign="top"
279 ><span class="options">[<a href="#section-MethodDetails"
280 class="privatelink" onclick="toggle_private();"
281 >hide private</a>]</span></td>
282 </tr>
283 </table>
284 </td>
285 </tr>
286 </table>
287 <a name="__init__"></a>
288 <div>
289 <table class="details" border="1" cellpadding="3"
290 cellspacing="0" width="100%" bgcolor="white">
291 <tr><td>
292 <table width="100%" cellpadding="0" cellspacing="0" border="0">
293 <tr valign="top"><td>
294 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
295 <span class="sig-arg">name</span>,
296 <span class="sig-arg">map_upcall</span>,
297 <span class="sig-arg">all_upcall</span>=<span class="sig-default">None</span>,
298 <span class="sig-arg">list_upcall</span>=<span class="sig-default">None</span>,
299 <span class="sig-arg">reverse_upcall</span>=<span class="sig-default">None</span>)</span>
300 <br /><em class="fname">(Constructor)</em>
301 </h3>
302 </td><td align="right" valign="top"
303 ><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSource.__init__">source&nbsp;code</a></span>&nbsp;
304 </td>
305 </tr></table>
306
307 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
308 signature</p>
309 <dl class="fields">
310 <dt>Overrides:
311 object.__init__
312 <dd><em class="note">(inherited documentation)</em></dd>
313 </dt>
314 </dl>
315 </td></tr></table>
316 </div>
317 <br />
318 <!-- ==================== NAVIGATION BAR ==================== -->
319 <table class="navbar" border="0" width="100%" cellpadding="0"
320 bgcolor="#a0c0ff" cellspacing="0">
321 <tr valign="middle">
322
323 <!-- Tree link -->
324 <th>&nbsp;&nbsp;&nbsp;<a
325 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
326
327 <!-- Index link -->
328 <th>&nbsp;&nbsp;&nbsp;<a
329 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
330
331 <!-- Help link -->
332 <th>&nbsp;&nbsp;&nbsp;<a
333 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
334
335 <!-- Project homepage -->
336 <th class="navbar" align="right" width="100%">
337 <table border="0" cellpadding="0" cellspacing="0">
338 <tr><th class="navbar" align="center"
339 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
340 </tr></table></th>
341 </tr>
342 </table>
343 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
344 <tr>
345 <td align="left" class="footer">
346 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
347 </td>
348 <td align="right" class="footer">
349 <a target="mainFrame" href="http://epydoc.sourceforge.net"
350 >http://epydoc.sourceforge.net</a>
351 </td>
352 </tr>
353 </table>
354
355 <script type="text/javascript">
356 <!--
357 // Private objects are initially displayed (because if
358 // javascript is turned off then we want them to be
359 // visible); but by default, we want to hide them. So hide
360 // them unless we have a cookie that says to show them.
361 checkCookie();
362 // -->
363 </script>
364 </body>
365 </html>
+0
-275
doc/epydoc/html/ClusterShell.NodeUtils.GroupSourceException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupSourceException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupSourceException
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupSourceException-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupSourceException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSourceException">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_34" name="uml_class_diagram_for_clusters_34">
63 <area shape="rect" id="node123" href="ClusterShell.NodeUtils.GroupSourceException-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="75,393,303,412"/>
64 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupSourceException-class.html" title="Base GroupSource exception" alt="" coords="63,361,313,418"/>
65 <area shape="rect" id="node3" href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html" title="Raised when upcall is not available" alt="" coords="5,438,171,477"/>
66 <area shape="rect" id="node4" href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html" title="Raised when a query failed (eg." alt="" coords="200,438,381,477"/>
67 <area shape="rect" id="node124" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="125,316,252,335"/>
68 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="113,283,263,341"/>
69 <area shape="rect" id="node125" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="111,31,268,49"/>
70 <area shape="rect" id="node125" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="111,49,268,68"/>
71 <area shape="rect" id="node125" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="111,71,268,89"/>
72 <area shape="rect" id="node125" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="111,89,268,108"/>
73 <area shape="rect" id="node125" href="javascript:void(0);" title="x[y]" alt="" coords="111,108,268,127"/>
74 <area shape="rect" id="node125" href="javascript:void(0);" title="x[i:j]" alt="" coords="111,127,268,145"/>
75 <area shape="rect" id="node125" href="javascript:void(0);" title="helper for pickle" alt="" coords="111,145,268,164"/>
76 <area shape="rect" id="node125" href="javascript:void(0);" title="repr(x)" alt="" coords="111,164,268,183"/>
77 <area shape="rect" id="node125" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="111,183,268,201"/>
78 <area shape="rect" id="node125" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="111,201,268,220"/>
79 <area shape="rect" id="node125" href="javascript:void(0);" title="str(x)" alt="" coords="111,220,268,239"/>
80 <area shape="rect" id="node125" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="111,239,268,257"/>
81 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="99,6,280,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_34.png" alt='' usemap="#uml_class_diagram_for_clusters_34" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Base GroupSource exception</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <table width="100%" cellpadding="0" cellspacing="0" border="0">
111 <tr>
112 <td><span class="summary-sig"><a href="ClusterShell.NodeUtils.GroupSourceException-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
113 <span class="summary-sig-arg">message</span>,
114 <span class="summary-sig-arg">group_source</span>)</span><br />
115 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
116 <td align="right" valign="top">
117 <span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSourceException.__init__">source&nbsp;code</a></span>
118
119 </td>
120 </tr>
121 </table>
122
123 </td>
124 </tr>
125 <tr>
126 <td colspan="2" class="summary">
127 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
128 <code>__new__</code>
129 </p>
130 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
131 <code>__delattr__</code>,
132 <code>__getattribute__</code>,
133 <code>__getitem__</code>,
134 <code>__getslice__</code>,
135 <code>__reduce__</code>,
136 <code>__repr__</code>,
137 <code>__setattr__</code>,
138 <code>__setstate__</code>,
139 <code>__str__</code>,
140 <code>__unicode__</code>
141 </p>
142 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
143 <code>__format__</code>,
144 <code>__hash__</code>,
145 <code>__reduce_ex__</code>,
146 <code>__sizeof__</code>,
147 <code>__subclasshook__</code>
148 </p>
149 </td>
150 </tr>
151 </table>
152 <!-- ==================== PROPERTIES ==================== -->
153 <a name="section-Properties"></a>
154 <table class="summary" border="1" cellpadding="3"
155 cellspacing="0" width="100%" bgcolor="white">
156 <tr bgcolor="#70b0f0" class="table-header">
157 <td colspan="2" class="table-header">
158 <table border="0" cellpadding="0" cellspacing="0" width="100%">
159 <tr valign="top">
160 <td align="left"><span class="table-header">Properties</span></td>
161 <td align="right" valign="top"
162 ><span class="options">[<a href="#section-Properties"
163 class="privatelink" onclick="toggle_private();"
164 >hide private</a>]</span></td>
165 </tr>
166 </table>
167 </td>
168 </tr>
169 <tr>
170 <td colspan="2" class="summary">
171 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
172 <code>args</code>,
173 <code>message</code>
174 </p>
175 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
176 <code>__class__</code>
177 </p>
178 </td>
179 </tr>
180 </table>
181 <!-- ==================== METHOD DETAILS ==================== -->
182 <a name="section-MethodDetails"></a>
183 <table class="details" border="1" cellpadding="3"
184 cellspacing="0" width="100%" bgcolor="white">
185 <tr bgcolor="#70b0f0" class="table-header">
186 <td colspan="2" class="table-header">
187 <table border="0" cellpadding="0" cellspacing="0" width="100%">
188 <tr valign="top">
189 <td align="left"><span class="table-header">Method Details</span></td>
190 <td align="right" valign="top"
191 ><span class="options">[<a href="#section-MethodDetails"
192 class="privatelink" onclick="toggle_private();"
193 >hide private</a>]</span></td>
194 </tr>
195 </table>
196 </td>
197 </tr>
198 </table>
199 <a name="__init__"></a>
200 <div>
201 <table class="details" border="1" cellpadding="3"
202 cellspacing="0" width="100%" bgcolor="white">
203 <tr><td>
204 <table width="100%" cellpadding="0" cellspacing="0" border="0">
205 <tr valign="top"><td>
206 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
207 <span class="sig-arg">message</span>,
208 <span class="sig-arg">group_source</span>)</span>
209 <br /><em class="fname">(Constructor)</em>
210 </h3>
211 </td><td align="right" valign="top"
212 ><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSourceException.__init__">source&nbsp;code</a></span>&nbsp;
213 </td>
214 </tr></table>
215
216 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
217 signature</p>
218 <dl class="fields">
219 <dt>Overrides:
220 object.__init__
221 <dd><em class="note">(inherited documentation)</em></dd>
222 </dt>
223 </dl>
224 </td></tr></table>
225 </div>
226 <br />
227 <!-- ==================== NAVIGATION BAR ==================== -->
228 <table class="navbar" border="0" width="100%" cellpadding="0"
229 bgcolor="#a0c0ff" cellspacing="0">
230 <tr valign="middle">
231
232 <!-- Tree link -->
233 <th>&nbsp;&nbsp;&nbsp;<a
234 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
235
236 <!-- Index link -->
237 <th>&nbsp;&nbsp;&nbsp;<a
238 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
239
240 <!-- Help link -->
241 <th>&nbsp;&nbsp;&nbsp;<a
242 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
243
244 <!-- Project homepage -->
245 <th class="navbar" align="right" width="100%">
246 <table border="0" cellpadding="0" cellspacing="0">
247 <tr><th class="navbar" align="center"
248 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
249 </tr></table></th>
250 </tr>
251 </table>
252 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
253 <tr>
254 <td align="left" class="footer">
255 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:19 2010
256 </td>
257 <td align="right" class="footer">
258 <a target="mainFrame" href="http://epydoc.sourceforge.net"
259 >http://epydoc.sourceforge.net</a>
260 </td>
261 </tr>
262 </table>
263
264 <script type="text/javascript">
265 <!--
266 // Private objects are initially displayed (because if
267 // javascript is turned off then we want them to be
268 // visible); but by default, we want to hide them. So hide
269 // them unless we have a cookie that says to show them.
270 checkCookie();
271 // -->
272 </script>
273 </body>
274 </html>
+0
-212
doc/epydoc/html/ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupSourceNoUpcall</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupSourceNoUpcall
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupSourceNoUpcall</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSourceNoUpcall">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_35" name="uml_class_diagram_for_clusters_35">
63 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html" title="Raised when upcall is not available" alt="" coords="53,438,208,482"/>
64 <area shape="rect" id="node129" href="ClusterShell.NodeUtils.GroupSourceException-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,393,245,412"/>
65 <area shape="rect" id="node2" href="ClusterShell.NodeUtils.GroupSourceException-class.html" title="Base GroupSource exception" alt="" coords="5,361,256,418"/>
66 <area shape="rect" id="node130" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="68,316,195,335"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="56,283,205,341"/>
68 <area shape="rect" id="node131" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="53,31,211,49"/>
69 <area shape="rect" id="node131" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="53,49,211,68"/>
70 <area shape="rect" id="node131" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="53,71,211,89"/>
71 <area shape="rect" id="node131" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="53,89,211,108"/>
72 <area shape="rect" id="node131" href="javascript:void(0);" title="x[y]" alt="" coords="53,108,211,127"/>
73 <area shape="rect" id="node131" href="javascript:void(0);" title="x[i:j]" alt="" coords="53,127,211,145"/>
74 <area shape="rect" id="node131" href="javascript:void(0);" title="helper for pickle" alt="" coords="53,145,211,164"/>
75 <area shape="rect" id="node131" href="javascript:void(0);" title="repr(x)" alt="" coords="53,164,211,183"/>
76 <area shape="rect" id="node131" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="53,183,211,201"/>
77 <area shape="rect" id="node131" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="53,201,211,220"/>
78 <area shape="rect" id="node131" href="javascript:void(0);" title="str(x)" alt="" coords="53,220,211,239"/>
79 <area shape="rect" id="node131" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="53,239,211,257"/>
80 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="41,6,223,263"/>
81 </map>
82 <img src="uml_class_diagram_for_clusters_35.png" alt='' usemap="#uml_class_diagram_for_clusters_35" ismap="ismap" class="graph-without-title" />
83 </center>
84 </center>
85 <hr />
86 <p>Raised when upcall is not available</p>
87
88 <!-- ==================== INSTANCE METHODS ==================== -->
89 <a name="section-InstanceMethods"></a>
90 <table class="summary" border="1" cellpadding="3"
91 cellspacing="0" width="100%" bgcolor="white">
92 <tr bgcolor="#70b0f0" class="table-header">
93 <td colspan="2" class="table-header">
94 <table border="0" cellpadding="0" cellspacing="0" width="100%">
95 <tr valign="top">
96 <td align="left"><span class="table-header">Instance Methods</span></td>
97 <td align="right" valign="top"
98 ><span class="options">[<a href="#section-InstanceMethods"
99 class="privatelink" onclick="toggle_private();"
100 >hide private</a>]</span></td>
101 </tr>
102 </table>
103 </td>
104 </tr>
105 <tr>
106 <td colspan="2" class="summary">
107 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.NodeUtils.GroupSourceException-class.html">GroupSourceException</a></code></b>:
108 <code><a href="ClusterShell.NodeUtils.GroupSourceException-class.html#__init__">__init__</a></code>
109 </p>
110 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-212
doc/epydoc/html/ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.NodeUtils.GroupSourceQueryFailed</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.NodeUtils-module.html">Module&nbsp;NodeUtils</a> ::
43 Class&nbsp;GroupSourceQueryFailed
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class GroupSourceQueryFailed</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.NodeUtils-pysrc.html#GroupSourceQueryFailed">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_36" name="uml_class_diagram_for_clusters_36">
63 <area shape="rect" id="node1" href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html" title="Raised when a query failed (eg." alt="" coords="45,438,216,482"/>
64 <area shape="rect" id="node133" href="ClusterShell.NodeUtils.GroupSourceException-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,393,245,412"/>
65 <area shape="rect" id="node2" href="ClusterShell.NodeUtils.GroupSourceException-class.html" title="Base GroupSource exception" alt="" coords="5,361,256,418"/>
66 <area shape="rect" id="node134" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="68,316,195,335"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="56,283,205,341"/>
68 <area shape="rect" id="node135" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="53,31,211,49"/>
69 <area shape="rect" id="node135" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="53,49,211,68"/>
70 <area shape="rect" id="node135" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="53,71,211,89"/>
71 <area shape="rect" id="node135" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="53,89,211,108"/>
72 <area shape="rect" id="node135" href="javascript:void(0);" title="x[y]" alt="" coords="53,108,211,127"/>
73 <area shape="rect" id="node135" href="javascript:void(0);" title="x[i:j]" alt="" coords="53,127,211,145"/>
74 <area shape="rect" id="node135" href="javascript:void(0);" title="helper for pickle" alt="" coords="53,145,211,164"/>
75 <area shape="rect" id="node135" href="javascript:void(0);" title="repr(x)" alt="" coords="53,164,211,183"/>
76 <area shape="rect" id="node135" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="53,183,211,201"/>
77 <area shape="rect" id="node135" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="53,201,211,220"/>
78 <area shape="rect" id="node135" href="javascript:void(0);" title="str(x)" alt="" coords="53,220,211,239"/>
79 <area shape="rect" id="node135" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="53,239,211,257"/>
80 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="41,6,223,263"/>
81 </map>
82 <img src="uml_class_diagram_for_clusters_36.png" alt='' usemap="#uml_class_diagram_for_clusters_36" ismap="ismap" class="graph-without-title" />
83 </center>
84 </center>
85 <hr />
86 <p>Raised when a query failed (eg. no group found)</p>
87
88 <!-- ==================== INSTANCE METHODS ==================== -->
89 <a name="section-InstanceMethods"></a>
90 <table class="summary" border="1" cellpadding="3"
91 cellspacing="0" width="100%" bgcolor="white">
92 <tr bgcolor="#70b0f0" class="table-header">
93 <td colspan="2" class="table-header">
94 <table border="0" cellpadding="0" cellspacing="0" width="100%">
95 <tr valign="top">
96 <td align="left"><span class="table-header">Instance Methods</span></td>
97 <td align="right" valign="top"
98 ><span class="options">[<a href="#section-InstanceMethods"
99 class="privatelink" onclick="toggle_private();"
100 >hide private</a>]</span></td>
101 </tr>
102 </table>
103 </td>
104 </tr>
105 <tr>
106 <td colspan="2" class="summary">
107 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.NodeUtils.GroupSourceException-class.html">GroupSourceException</a></code></b>:
108 <code><a href="ClusterShell.NodeUtils.GroupSourceException-class.html#__init__">__init__</a></code>
109 </p>
110 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-460
doc/epydoc/html/ClusterShell.Task-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;Task
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.Task-module.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== MODULE DESCRIPTION ==================== -->
59 <h1 class="epydoc">Module Task</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html">source&nbsp;code</a></span></p>
60 <p>ClusterShell Task module.</p>
61 <p>Simple example of use:</p>
62 <pre class="py-doctest">
63 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-keyword">from</span> ClusterShell.Task <span class="py-keyword">import</span> *
64 <span class="py-prompt">&gt;&gt;&gt; </span>
65 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># get task associated with calling thread</span>
66 <span class="py-more">... </span>task = task_self()
67 <span class="py-prompt">&gt;&gt;&gt; </span>
68 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># add a command to execute on distant nodes</span>
69 <span class="py-more">... </span>task.shell(<span class="py-string">&quot;/bin/uname -r&quot;</span>, nodes=<span class="py-string">&quot;tiger[1-30,35]&quot;</span>)
70 <span class="py-output">&lt;ClusterShell.Worker.Ssh.WorkerSsh object at 0x7f41da71b890&gt;</span>
71 <span class="py-output"></span><span class="py-prompt">&gt;&gt;&gt; </span>
72 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># run task in calling thread</span>
73 <span class="py-more">... </span>task.resume()
74 <span class="py-prompt">&gt;&gt;&gt; </span>
75 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-comment"># get results</span>
76 <span class="py-more">... </span><span class="py-keyword">for</span> buf, nodelist <span class="py-keyword">in</span> task.iter_buffers():
77 <span class="py-more">... </span> <span class="py-keyword">print</span> NodeSet.fromlist(nodelist), buf
78 <span class="py-more">...</span></pre>
79
80 <!-- ==================== CLASSES ==================== -->
81 <a name="section-Classes"></a>
82 <table class="summary" border="1" cellpadding="3"
83 cellspacing="0" width="100%" bgcolor="white">
84 <tr bgcolor="#70b0f0" class="table-header">
85 <td colspan="2" class="table-header">
86 <table border="0" cellpadding="0" cellspacing="0" width="100%">
87 <tr valign="top">
88 <td align="left"><span class="table-header">Classes</span></td>
89 <td align="right" valign="top"
90 ><span class="options">[<a href="#section-Classes"
91 class="privatelink" onclick="toggle_private();"
92 >hide private</a>]</span></td>
93 </tr>
94 </table>
95 </td>
96 </tr>
97 <tr>
98 <td width="15%" align="right" valign="top" class="summary">
99 <span class="summary-type">&nbsp;</span>
100 </td><td class="summary">
101 <a href="ClusterShell.Task.TaskException-class.html" class="summary-name">TaskException</a><br />
102 Base task exception.
103 </td>
104 </tr>
105 <tr>
106 <td width="15%" align="right" valign="top" class="summary">
107 <span class="summary-type">&nbsp;</span>
108 </td><td class="summary">
109 <a href="ClusterShell.Task.TaskError-class.html" class="summary-name">TaskError</a><br />
110 Base task error exception.
111 </td>
112 </tr>
113 <tr>
114 <td width="15%" align="right" valign="top" class="summary">
115 <span class="summary-type">&nbsp;</span>
116 </td><td class="summary">
117 <a href="ClusterShell.Task.TimeoutError-class.html" class="summary-name">TimeoutError</a><br />
118 Raised when the task timed out.
119 </td>
120 </tr>
121 <tr>
122 <td width="15%" align="right" valign="top" class="summary">
123 <span class="summary-type">&nbsp;</span>
124 </td><td class="summary">
125 <a href="ClusterShell.Task.AlreadyRunningError-class.html" class="summary-name">AlreadyRunningError</a><br />
126 Raised when trying to resume an already running task.
127 </td>
128 </tr>
129 <tr>
130 <td width="15%" align="right" valign="top" class="summary">
131 <span class="summary-type">&nbsp;</span>
132 </td><td class="summary">
133 <a href="ClusterShell.Task.TaskMsgTreeError-class.html" class="summary-name">TaskMsgTreeError</a><br />
134 Raised when trying to access disabled MsgTree.
135 </td>
136 </tr>
137 <tr class="private">
138 <td width="15%" align="right" valign="top" class="summary">
139 <span class="summary-type">&nbsp;</span>
140 </td><td class="summary">
141 <a href="ClusterShell.Task._TaskMsgTree-class.html" class="summary-name" onclick="show_private();">_TaskMsgTree</a><br />
142 Task special MsgTree wrapper class, for easy disabling of MsgTree
143 buffering.
144 </td>
145 </tr>
146 <tr>
147 <td width="15%" align="right" valign="top" class="summary">
148 <span class="summary-type">&nbsp;</span>
149 </td><td class="summary">
150 <a href="ClusterShell.Task.Task-class.html" class="summary-name">Task</a><br />
151 Always bound to a thread, the Task class allows you to execute
152 commands in parallel and get their results.
153 </td>
154 </tr>
155 </table>
156 <!-- ==================== FUNCTIONS ==================== -->
157 <a name="section-Functions"></a>
158 <table class="summary" border="1" cellpadding="3"
159 cellspacing="0" width="100%" bgcolor="white">
160 <tr bgcolor="#70b0f0" class="table-header">
161 <td colspan="2" class="table-header">
162 <table border="0" cellpadding="0" cellspacing="0" width="100%">
163 <tr valign="top">
164 <td align="left"><span class="table-header">Functions</span></td>
165 <td align="right" valign="top"
166 ><span class="options">[<a href="#section-Functions"
167 class="privatelink" onclick="toggle_private();"
168 >hide private</a>]</span></td>
169 </tr>
170 </table>
171 </td>
172 </tr>
173 <tr class="private">
174 <td width="15%" align="right" valign="top" class="summary">
175 <span class="summary-type">&nbsp;</span>
176 </td><td class="summary">
177 <table width="100%" cellpadding="0" cellspacing="0" border="0">
178 <tr>
179 <td><span class="summary-sig"><a href="ClusterShell.Task-module.html#_task_print_debug" class="summary-sig-name" onclick="show_private();">_task_print_debug</a>(<span class="summary-sig-arg">task</span>,
180 <span class="summary-sig-arg">s</span>)</span><br />
181 Default task debug printing function.</td>
182 <td align="right" valign="top">
183 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#_task_print_debug">source&nbsp;code</a></span>
184
185 </td>
186 </tr>
187 </table>
188
189 </td>
190 </tr>
191 <tr>
192 <td width="15%" align="right" valign="top" class="summary">
193 <span class="summary-type">&nbsp;</span>
194 </td><td class="summary">
195 <table width="100%" cellpadding="0" cellspacing="0" border="0">
196 <tr>
197 <td><span class="summary-sig"><a href="ClusterShell.Task-module.html#task_self" class="summary-sig-name">task_self</a>()</span><br />
198 Get the Task instance bound to the current thread.</td>
199 <td align="right" valign="top">
200 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#task_self">source&nbsp;code</a></span>
201
202 </td>
203 </tr>
204 </table>
205
206 </td>
207 </tr>
208 <tr>
209 <td width="15%" align="right" valign="top" class="summary">
210 <span class="summary-type">&nbsp;</span>
211 </td><td class="summary">
212 <table width="100%" cellpadding="0" cellspacing="0" border="0">
213 <tr>
214 <td><span class="summary-sig"><a href="ClusterShell.Task-module.html#task_wait" class="summary-sig-name">task_wait</a>()</span><br />
215 Suspend execution of the calling thread until all tasks terminate,
216 unless all tasks have already terminated.</td>
217 <td align="right" valign="top">
218 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#task_wait">source&nbsp;code</a></span>
219
220 </td>
221 </tr>
222 </table>
223
224 </td>
225 </tr>
226 <tr>
227 <td width="15%" align="right" valign="top" class="summary">
228 <span class="summary-type">&nbsp;</span>
229 </td><td class="summary">
230 <table width="100%" cellpadding="0" cellspacing="0" border="0">
231 <tr>
232 <td><span class="summary-sig"><a href="ClusterShell.Task-module.html#task_terminate" class="summary-sig-name">task_terminate</a>()</span><br />
233 Destroy the Task instance bound to the current thread.</td>
234 <td align="right" valign="top">
235 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#task_terminate">source&nbsp;code</a></span>
236
237 </td>
238 </tr>
239 </table>
240
241 </td>
242 </tr>
243 <tr>
244 <td width="15%" align="right" valign="top" class="summary">
245 <span class="summary-type">&nbsp;</span>
246 </td><td class="summary">
247 <table width="100%" cellpadding="0" cellspacing="0" border="0">
248 <tr>
249 <td><span class="summary-sig"><a href="ClusterShell.Task-module.html#task_cleanup" class="summary-sig-name">task_cleanup</a>()</span><br />
250 Cleanup routine to destroy all created tasks.</td>
251 <td align="right" valign="top">
252 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#task_cleanup">source&nbsp;code</a></span>
253
254 </td>
255 </tr>
256 </table>
257
258 </td>
259 </tr>
260 </table>
261 <!-- ==================== VARIABLES ==================== -->
262 <a name="section-Variables"></a>
263 <table class="summary" border="1" cellpadding="3"
264 cellspacing="0" width="100%" bgcolor="white">
265 <tr bgcolor="#70b0f0" class="table-header">
266 <td colspan="2" class="table-header">
267 <table border="0" cellpadding="0" cellspacing="0" width="100%">
268 <tr valign="top">
269 <td align="left"><span class="table-header">Variables</span></td>
270 <td align="right" valign="top"
271 ><span class="options">[<a href="#section-Variables"
272 class="privatelink" onclick="toggle_private();"
273 >hide private</a>]</span></td>
274 </tr>
275 </table>
276 </td>
277 </tr>
278 <tr>
279 <td width="15%" align="right" valign="top" class="summary">
280 <span class="summary-type">&nbsp;</span>
281 </td><td class="summary">
282 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell</code><code class="variable-quote">'</code></code>
283 </td>
284 </tr>
285 </table>
286 <!-- ==================== FUNCTION DETAILS ==================== -->
287 <a name="section-FunctionDetails"></a>
288 <table class="details" border="1" cellpadding="3"
289 cellspacing="0" width="100%" bgcolor="white">
290 <tr bgcolor="#70b0f0" class="table-header">
291 <td colspan="2" class="table-header">
292 <table border="0" cellpadding="0" cellspacing="0" width="100%">
293 <tr valign="top">
294 <td align="left"><span class="table-header">Function Details</span></td>
295 <td align="right" valign="top"
296 ><span class="options">[<a href="#section-FunctionDetails"
297 class="privatelink" onclick="toggle_private();"
298 >hide private</a>]</span></td>
299 </tr>
300 </table>
301 </td>
302 </tr>
303 </table>
304 <a name="_task_print_debug"></a>
305 <div class="private">
306 <table class="details" border="1" cellpadding="3"
307 cellspacing="0" width="100%" bgcolor="white">
308 <tr><td>
309 <table width="100%" cellpadding="0" cellspacing="0" border="0">
310 <tr valign="top"><td>
311 <h3 class="epydoc"><span class="sig"><span class="sig-name">_task_print_debug</span>(<span class="sig-arg">task</span>,
312 <span class="sig-arg">s</span>)</span>
313 </h3>
314 </td><td align="right" valign="top"
315 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#_task_print_debug">source&nbsp;code</a></span>&nbsp;
316 </td>
317 </tr></table>
318
319 <p>Default task debug printing function. Cannot provide 'print' directly
320 as it is not a function (will be in Py3k!).</p>
321 <dl class="fields">
322 </dl>
323 </td></tr></table>
324 </div>
325 <a name="task_self"></a>
326 <div>
327 <table class="details" border="1" cellpadding="3"
328 cellspacing="0" width="100%" bgcolor="white">
329 <tr><td>
330 <table width="100%" cellpadding="0" cellspacing="0" border="0">
331 <tr valign="top"><td>
332 <h3 class="epydoc"><span class="sig"><span class="sig-name">task_self</span>()</span>
333 </h3>
334 </td><td align="right" valign="top"
335 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#task_self">source&nbsp;code</a></span>&nbsp;
336 </td>
337 </tr></table>
338
339 <p>Get the Task instance bound to the current thread. This function
340 provided as a convenience is available in the top-level ClusterShell.Task
341 package namespace.</p>
342 <dl class="fields">
343 </dl>
344 </td></tr></table>
345 </div>
346 <a name="task_wait"></a>
347 <div>
348 <table class="details" border="1" cellpadding="3"
349 cellspacing="0" width="100%" bgcolor="white">
350 <tr><td>
351 <table width="100%" cellpadding="0" cellspacing="0" border="0">
352 <tr valign="top"><td>
353 <h3 class="epydoc"><span class="sig"><span class="sig-name">task_wait</span>()</span>
354 </h3>
355 </td><td align="right" valign="top"
356 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#task_wait">source&nbsp;code</a></span>&nbsp;
357 </td>
358 </tr></table>
359
360 <p>Suspend execution of the calling thread until all tasks terminate,
361 unless all tasks have already terminated. This function is provided as a
362 convenience and is available in the top-level ClusterShell.Task package
363 namespace.</p>
364 <dl class="fields">
365 </dl>
366 </td></tr></table>
367 </div>
368 <a name="task_terminate"></a>
369 <div>
370 <table class="details" border="1" cellpadding="3"
371 cellspacing="0" width="100%" bgcolor="white">
372 <tr><td>
373 <table width="100%" cellpadding="0" cellspacing="0" border="0">
374 <tr valign="top"><td>
375 <h3 class="epydoc"><span class="sig"><span class="sig-name">task_terminate</span>()</span>
376 </h3>
377 </td><td align="right" valign="top"
378 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#task_terminate">source&nbsp;code</a></span>&nbsp;
379 </td>
380 </tr></table>
381
382 <p>Destroy the Task instance bound to the current thread. A next call to
383 task_self() will create a new Task object. This function provided as a
384 convenience is available in the top-level ClusterShell.Task package
385 namespace.</p>
386 <dl class="fields">
387 </dl>
388 </td></tr></table>
389 </div>
390 <a name="task_cleanup"></a>
391 <div>
392 <table class="details" border="1" cellpadding="3"
393 cellspacing="0" width="100%" bgcolor="white">
394 <tr><td>
395 <table width="100%" cellpadding="0" cellspacing="0" border="0">
396 <tr valign="top"><td>
397 <h3 class="epydoc"><span class="sig"><span class="sig-name">task_cleanup</span>()</span>
398 </h3>
399 </td><td align="right" valign="top"
400 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#task_cleanup">source&nbsp;code</a></span>&nbsp;
401 </td>
402 </tr></table>
403
404 <p>Cleanup routine to destroy all created tasks. This function provided
405 as a convenience is available in the top-level ClusterShell.Task package
406 namespace.</p>
407 <dl class="fields">
408 </dl>
409 </td></tr></table>
410 </div>
411 <br />
412 <!-- ==================== NAVIGATION BAR ==================== -->
413 <table class="navbar" border="0" width="100%" cellpadding="0"
414 bgcolor="#a0c0ff" cellspacing="0">
415 <tr valign="middle">
416
417 <!-- Tree link -->
418 <th>&nbsp;&nbsp;&nbsp;<a
419 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
420
421 <!-- Index link -->
422 <th>&nbsp;&nbsp;&nbsp;<a
423 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
424
425 <!-- Help link -->
426 <th>&nbsp;&nbsp;&nbsp;<a
427 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
428
429 <!-- Project homepage -->
430 <th class="navbar" align="right" width="100%">
431 <table border="0" cellpadding="0" cellspacing="0">
432 <tr><th class="navbar" align="center"
433 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
434 </tr></table></th>
435 </tr>
436 </table>
437 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
438 <tr>
439 <td align="left" class="footer">
440 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
441 </td>
442 <td align="right" class="footer">
443 <a target="mainFrame" href="http://epydoc.sourceforge.net"
444 >http://epydoc.sourceforge.net</a>
445 </td>
446 </tr>
447 </table>
448
449 <script type="text/javascript">
450 <!--
451 // Private objects are initially displayed (because if
452 // javascript is turned off then we want them to be
453 // visible); but by default, we want to hide them. So hide
454 // them unless we have a cookie that says to show them.
455 checkCookie();
456 // -->
457 </script>
458 </body>
459 </html>
+0
-1308
doc/epydoc/html/ClusterShell.Task-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Module&nbsp;Task
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.Task-pysrc.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <h1 class="epydoc">Source Code for <a href="ClusterShell.Task-module.html">Module ClusterShell.Task</a></h1>
59 <pre class="py-src">
60 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
61 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009, 2010)</tt> </tt>
62 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
63 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
64 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
65 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
66 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
67 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
68 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
69 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
70 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
71 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
72 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
73 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
74 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
75 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
76 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
77 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
78 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
79 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
80 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
81 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
82 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
83 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
84 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
85 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
86 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
87 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
88 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
89 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
90 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
91 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
92 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Task.py 295 2010-07-21 19:55:15Z st-cea $</tt> </tt>
93 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
94 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
95 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">ClusterShell Task module.</tt> </tt>
96 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
97 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">Simple example of use:</tt> </tt>
98 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
99 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; from ClusterShell.Task import *</tt> </tt>
100 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; </tt> </tt>
101 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; # get task associated with calling thread</tt> </tt>
102 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring">... task = task_self()</tt> </tt>
103 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; </tt> </tt>
104 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; # add a command to execute on distant nodes</tt> </tt>
105 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring">... task.shell("/bin/uname -r", nodes="tiger[1-30,35]")</tt> </tt>
106 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring">&lt;ClusterShell.Worker.Ssh.WorkerSsh object at 0x7f41da71b890&gt;</tt> </tt>
107 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; </tt> </tt>
108 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; # run task in calling thread</tt> </tt>
109 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-docstring">... task.resume()</tt> </tt>
110 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; </tt> </tt>
111 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-docstring">&gt;&gt;&gt; # get results</tt> </tt>
112 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt class="py-docstring">... for buf, nodelist in task.iter_buffers():</tt> </tt>
113 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-docstring">... print NodeSet.fromlist(nodelist), buf</tt> </tt>
114 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring">... </tt> </tt>
115 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
116 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
117 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> </tt>
118 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">itertools</tt> <tt class="py-keyword">import</tt> <tt class="py-name">imap</tt> </tt>
119 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">operator</tt> <tt class="py-keyword">import</tt> <tt class="py-name">itemgetter</tt> </tt>
120 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
121 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">threading</tt> </tt>
122 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">traceback</tt> </tt>
123 <a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> </tt>
124 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package ClusterShell.Engine=ClusterShell.Engine-module.html,Module ClusterShell.Engine.Engine=ClusterShell.Engine.Engine-module.html,Class ClusterShell.Engine.Engine.Engine=ClusterShell.Engine.Engine.Engine-class.html"><a title="ClusterShell.Engine
125 ClusterShell.Engine.Engine
126 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-1', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name"><a title="ClusterShell.Engine
127 ClusterShell.Engine.Engine
128 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-2', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineAbortException=ClusterShell.Engine.Engine.EngineAbortException-class.html"><a title="ClusterShell.Engine.Engine.EngineAbortException" class="py-name" href="#" onclick="return doclink('link-3', 'EngineAbortException', 'link-3');">EngineAbortException</a></tt> </tt>
129 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-4', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="ClusterShell.Engine
130 ClusterShell.Engine.Engine
131 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-5', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name"><a title="ClusterShell.Engine
132 ClusterShell.Engine.Engine
133 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-6', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineTimeoutException=ClusterShell.Engine.Engine.EngineTimeoutException-class.html"><a title="ClusterShell.Engine.Engine.EngineTimeoutException" class="py-name" href="#" onclick="return doclink('link-7', 'EngineTimeoutException', 'link-7');">EngineTimeoutException</a></tt> </tt>
134 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-8', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="ClusterShell.Engine
135 ClusterShell.Engine.Engine
136 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-9', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.Engine
137 ClusterShell.Engine.Engine
138 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-10', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineAlreadyRunningError=ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html"><a title="ClusterShell.Engine.Engine.EngineAlreadyRunningError" class="py-name" href="#" onclick="return doclink('link-11', 'EngineAlreadyRunningError', 'link-11');">EngineAlreadyRunningError</a></tt> </tt>
139 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-12" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-12', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="ClusterShell.Engine
140 ClusterShell.Engine.Engine
141 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-13', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="ClusterShell.Engine
142 ClusterShell.Engine.Engine
143 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-14', 'Engine', 'link-1');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-15" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineTimer=ClusterShell.Engine.Engine.EngineTimer-class.html"><a title="ClusterShell.Engine.Engine.EngineTimer" class="py-name" href="#" onclick="return doclink('link-15', 'EngineTimer', 'link-15');">EngineTimer</a></tt> </tt>
144 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-16" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-16', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="ClusterShell.Engine
145 ClusterShell.Engine.Engine
146 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-17', 'Engine', 'link-1');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Module ClusterShell.Engine.Factory=ClusterShell.Engine.Factory-module.html"><a title="ClusterShell.Engine.Factory" class="py-name" href="#" onclick="return doclink('link-18', 'Factory', 'link-18');">Factory</a></tt> <tt class="py-keyword">import</tt> <tt id="link-19" class="py-name" targets="Class ClusterShell.Engine.Factory.PreferredEngine=ClusterShell.Engine.Factory.PreferredEngine-class.html"><a title="ClusterShell.Engine.Factory.PreferredEngine" class="py-name" href="#" onclick="return doclink('link-19', 'PreferredEngine', 'link-19');">PreferredEngine</a></tt> </tt>
147 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-20" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-20', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-21" class="py-name" targets="Package ClusterShell.Worker=ClusterShell.Worker-module.html,Module ClusterShell.Worker.Worker=ClusterShell.Worker.Worker-module.html,Class ClusterShell.Worker.Worker.Worker=ClusterShell.Worker.Worker.Worker-class.html"><a title="ClusterShell.Worker
148 ClusterShell.Worker.Worker
149 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-21', 'Worker', 'link-21');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Module ClusterShell.Worker.EngineClient=ClusterShell.Worker.EngineClient-module.html,Class ClusterShell.Worker.EngineClient.EngineClient=ClusterShell.Worker.EngineClient.EngineClient-class.html"><a title="ClusterShell.Worker.EngineClient
150 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-22', 'EngineClient', 'link-22');">EngineClient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-23" class="py-name" targets="Class ClusterShell.Worker.EngineClient.EnginePort=ClusterShell.Worker.EngineClient.EnginePort-class.html"><a title="ClusterShell.Worker.EngineClient.EnginePort" class="py-name" href="#" onclick="return doclink('link-23', 'EnginePort', 'link-23');">EnginePort</a></tt> </tt>
151 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-24" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-24', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="ClusterShell.Worker
152 ClusterShell.Worker.Worker
153 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-25', 'Worker', 'link-21');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Module ClusterShell.Worker.Ssh=ClusterShell.Worker.Ssh-module.html,Class ClusterShell.Worker.Ssh.Ssh=ClusterShell.Worker.Ssh.Ssh-class.html"><a title="ClusterShell.Worker.Ssh
154 ClusterShell.Worker.Ssh.Ssh" class="py-name" href="#" onclick="return doclink('link-26', 'Ssh', 'link-26');">Ssh</a></tt> <tt class="py-keyword">import</tt> <tt id="link-27" class="py-name" targets="Class ClusterShell.Worker.Ssh.WorkerSsh=ClusterShell.Worker.Ssh.WorkerSsh-class.html"><a title="ClusterShell.Worker.Ssh.WorkerSsh" class="py-name" href="#" onclick="return doclink('link-27', 'WorkerSsh', 'link-27');">WorkerSsh</a></tt> </tt>
155 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-28" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-28', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-29" class="py-name"><a title="ClusterShell.Worker
156 ClusterShell.Worker.Worker
157 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-29', 'Worker', 'link-21');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Module ClusterShell.Worker.Popen=ClusterShell.Worker.Popen-module.html"><a title="ClusterShell.Worker.Popen" class="py-name" href="#" onclick="return doclink('link-30', 'Popen', 'link-30');">Popen</a></tt> <tt class="py-keyword">import</tt> <tt id="link-31" class="py-name" targets="Class ClusterShell.Worker.Popen.WorkerPopen=ClusterShell.Worker.Popen.WorkerPopen-class.html"><a title="ClusterShell.Worker.Popen.WorkerPopen" class="py-name" href="#" onclick="return doclink('link-31', 'WorkerPopen', 'link-31');">WorkerPopen</a></tt> </tt>
158 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
159 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-32" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-32', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Module ClusterShell.Event=ClusterShell.Event-module.html"><a title="ClusterShell.Event" class="py-name" href="#" onclick="return doclink('link-33', 'Event', 'link-33');">Event</a></tt> <tt class="py-keyword">import</tt> <tt id="link-34" class="py-name" targets="Class ClusterShell.Event.EventHandler=ClusterShell.Event.EventHandler-class.html"><a title="ClusterShell.Event.EventHandler" class="py-name" href="#" onclick="return doclink('link-34', 'EventHandler', 'link-34');">EventHandler</a></tt> </tt>
160 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-35" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-35', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Module ClusterShell.MsgTree=ClusterShell.MsgTree-module.html,Class ClusterShell.MsgTree.MsgTree=ClusterShell.MsgTree.MsgTree-class.html"><a title="ClusterShell.MsgTree
161 ClusterShell.MsgTree.MsgTree" class="py-name" href="#" onclick="return doclink('link-36', 'MsgTree', 'link-36');">MsgTree</a></tt> <tt class="py-keyword">import</tt> <tt id="link-37" class="py-name"><a title="ClusterShell.MsgTree
162 ClusterShell.MsgTree.MsgTree" class="py-name" href="#" onclick="return doclink('link-37', 'MsgTree', 'link-36');">MsgTree</a></tt> </tt>
163 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-38" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-38', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Module ClusterShell.NodeSet=ClusterShell.NodeSet-module.html,Class ClusterShell.NodeSet.NodeSet=ClusterShell.NodeSet.NodeSet-class.html"><a title="ClusterShell.NodeSet
164 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-39', 'NodeSet', 'link-39');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-40" class="py-name"><a title="ClusterShell.NodeSet
165 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-40', 'NodeSet', 'link-39');">NodeSet</a></tt> </tt>
166 <a name="TaskException"></a><div id="TaskException-def"><a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> </tt>
167 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> </tt>
168 <a name="L79"></a><tt class="py-lineno"> 79</tt> <a class="py-toggle" href="#" id="TaskException-toggle" onclick="return toggle('TaskException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.TaskException-class.html">TaskException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
169 </div><div id="TaskException-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="TaskException-expanded"><a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-docstring">"""Base task exception."""</tt> </tt>
170 </div><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> </tt>
171 <a name="TaskError"></a><div id="TaskError-def"><a name="L82"></a><tt class="py-lineno"> 82</tt> <a class="py-toggle" href="#" id="TaskError-toggle" onclick="return toggle('TaskError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.TaskError-class.html">TaskError</a><tt class="py-op">(</tt><tt class="py-base-class">TaskException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
172 </div><div id="TaskError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="TaskError-expanded"><a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-docstring">"""Base task error exception."""</tt> </tt>
173 </div><a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
174 <a name="TimeoutError"></a><div id="TimeoutError-def"><a name="L85"></a><tt class="py-lineno"> 85</tt> <a class="py-toggle" href="#" id="TimeoutError-toggle" onclick="return toggle('TimeoutError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.TimeoutError-class.html">TimeoutError</a><tt class="py-op">(</tt><tt class="py-base-class">TaskError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
175 </div><div id="TimeoutError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="TimeoutError-expanded"><a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when the task timed out."""</tt> </tt>
176 </div><a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> </tt>
177 <a name="AlreadyRunningError"></a><div id="AlreadyRunningError-def"><a name="L88"></a><tt class="py-lineno"> 88</tt> <a class="py-toggle" href="#" id="AlreadyRunningError-toggle" onclick="return toggle('AlreadyRunningError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.AlreadyRunningError-class.html">AlreadyRunningError</a><tt class="py-op">(</tt><tt class="py-base-class">TaskError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
178 </div><div id="AlreadyRunningError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AlreadyRunningError-expanded"><a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when trying to resume an already running task."""</tt> </tt>
179 </div><a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> </tt>
180 <a name="TaskMsgTreeError"></a><div id="TaskMsgTreeError-def"><a name="L91"></a><tt class="py-lineno"> 91</tt> <a class="py-toggle" href="#" id="TaskMsgTreeError-toggle" onclick="return toggle('TaskMsgTreeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.TaskMsgTreeError-class.html">TaskMsgTreeError</a><tt class="py-op">(</tt><tt class="py-base-class">TaskError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
181 </div><div id="TaskMsgTreeError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="TaskMsgTreeError-expanded"><a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-docstring">"""Raised when trying to access disabled MsgTree."""</tt> </tt>
182 </div><a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> </tt>
183 <a name="_TaskMsgTree"></a><div id="_TaskMsgTree-def"><a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> </tt>
184 <a name="L95"></a><tt class="py-lineno"> 95</tt> <a class="py-toggle" href="#" id="_TaskMsgTree-toggle" onclick="return toggle('_TaskMsgTree');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task._TaskMsgTree-class.html">_TaskMsgTree</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
185 </div><div id="_TaskMsgTree-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_TaskMsgTree-expanded"><a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
186 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"><tt class="py-docstring"> Task special MsgTree wrapper class, for easy disabling of MsgTree</tt> </tt>
187 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"><tt class="py-docstring"> buffering. This class checks if task.default(keyword) is set before</tt> </tt>
188 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"><tt class="py-docstring"> effective MsgTree attribute lookup, according to following rules:</tt> </tt>
189 <a name="L100"></a><tt class="py-lineno"> 100</tt> <tt class="py-line"><tt class="py-docstring"> - If set, allow all MsgTree methods, else:</tt> </tt>
190 <a name="L101"></a><tt class="py-lineno"> 101</tt> <tt class="py-line"><tt class="py-docstring"> - ignore add() calls</tt> </tt>
191 <a name="L102"></a><tt class="py-lineno"> 102</tt> <tt class="py-line"><tt class="py-docstring"> - disallow MsgTree methods except clear()</tt> </tt>
192 <a name="L103"></a><tt class="py-lineno"> 103</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
193 <a name="_TaskMsgTree.__init__"></a><div id="_TaskMsgTree.__init__-def"><a name="L104"></a><tt class="py-lineno"> 104</tt> <a class="py-toggle" href="#" id="_TaskMsgTree.__init__-toggle" onclick="return toggle('_TaskMsgTree.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task._TaskMsgTree-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">task</tt><tt class="py-op">,</tt> <tt class="py-param">keyword</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
194 </div><div id="_TaskMsgTree.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="_TaskMsgTree.__init__-expanded"><a name="L105"></a><tt class="py-lineno"> 105</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_task</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt> </tt>
195 <a name="L106"></a><tt class="py-lineno"> 106</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keyword</tt> <tt class="py-op">=</tt> <tt class="py-name">keyword</tt> </tt>
196 <a name="L107"></a><tt class="py-lineno"> 107</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_tree</tt> <tt class="py-op">=</tt> <tt id="link-41" class="py-name"><a title="ClusterShell.MsgTree
197 ClusterShell.MsgTree.MsgTree" class="py-name" href="#" onclick="return doclink('link-41', 'MsgTree', 'link-36');">MsgTree</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
198 </div><a name="L108"></a><tt class="py-lineno"> 108</tt> <tt class="py-line"> </tt>
199 <a name="_TaskMsgTree.__getattr__"></a><div id="_TaskMsgTree.__getattr__-def"><a name="L109"></a><tt class="py-lineno"> 109</tt> <a class="py-toggle" href="#" id="_TaskMsgTree.__getattr__-toggle" onclick="return toggle('_TaskMsgTree.__getattr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task._TaskMsgTree-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>
200 </div><div id="_TaskMsgTree.__getattr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="_TaskMsgTree.__getattr__-expanded"><a name="L110"></a><tt class="py-lineno"> 110</tt> <tt class="py-line"> <tt class="py-comment"># check if msgtree is enabled, but always allow MsgTree.clear()</tt> </tt>
201 <a name="L111"></a><tt class="py-lineno"> 111</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">!=</tt> <tt class="py-string">'clear'</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_task</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method ClusterShell.Task.Task.default()=ClusterShell.Task.Task-class.html#default"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-42', 'default', 'link-42');">default</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keyword</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
202 <a name="L112"></a><tt class="py-lineno"> 112</tt> <tt class="py-line"> <tt class="py-comment"># disable MsgTree.add method</tt> </tt>
203 <a name="L113"></a><tt class="py-lineno"> 113</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'add'</tt><tt class="py-op">:</tt> </tt>
204 <a name="L114"></a><tt class="py-lineno"> 114</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-keyword">lambda</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt> </tt>
205 <a name="L115"></a><tt class="py-lineno"> 115</tt> <tt class="py-line"> <tt class="py-comment"># all other MsgTree methods are not allowed</tt> </tt>
206 <a name="L116"></a><tt class="py-lineno"> 116</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-43" class="py-name" targets="Class ClusterShell.Task.TaskMsgTreeError=ClusterShell.Task.TaskMsgTreeError-class.html"><a title="ClusterShell.Task.TaskMsgTreeError" class="py-name" href="#" onclick="return doclink('link-43', 'TaskMsgTreeError', 'link-43');">TaskMsgTreeError</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s not set"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_keyword</tt><tt class="py-op">)</tt> </tt>
207 <a name="L117"></a><tt class="py-lineno"> 117</tt> <tt class="py-line"> <tt class="py-comment"># msgtree enabled: lookup tree attribute name</tt> </tt>
208 <a name="L118"></a><tt class="py-lineno"> 118</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">_tree</tt><tt class="py-op">,</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
209 </div></div><a name="L119"></a><tt class="py-lineno"> 119</tt> <tt class="py-line"> </tt>
210 <a name="_task_print_debug"></a><div id="_task_print_debug-def"><a name="L120"></a><tt class="py-lineno"> 120</tt> <tt class="py-line"> </tt>
211 <a name="L121"></a><tt class="py-lineno"> 121</tt> <a class="py-toggle" href="#" id="_task_print_debug-toggle" onclick="return toggle('_task_print_debug');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task-module.html#_task_print_debug">_task_print_debug</a><tt class="py-op">(</tt><tt class="py-param">task</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
212 </div><div id="_task_print_debug-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_task_print_debug-expanded"><a name="L122"></a><tt class="py-lineno"> 122</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
213 <a name="L123"></a><tt class="py-lineno"> 123</tt> <tt class="py-line"><tt class="py-docstring"> Default task debug printing function. Cannot provide 'print'</tt> </tt>
214 <a name="L124"></a><tt class="py-lineno"> 124</tt> <tt class="py-line"><tt class="py-docstring"> directly as it is not a function (will be in Py3k!).</tt> </tt>
215 <a name="L125"></a><tt class="py-lineno"> 125</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
216 <a name="L126"></a><tt class="py-lineno"> 126</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-name">s</tt> </tt>
217 </div><a name="L127"></a><tt class="py-lineno"> 127</tt> <tt class="py-line"> </tt>
218 <a name="Task"></a><div id="Task-def"><a name="L128"></a><tt class="py-lineno"> 128</tt> <tt class="py-line"> </tt>
219 <a name="L129"></a><tt class="py-lineno"> 129</tt> <a class="py-toggle" href="#" id="Task-toggle" onclick="return toggle('Task');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html">Task</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
220 </div><div id="Task-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Task-expanded"><a name="L130"></a><tt class="py-lineno"> 130</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
221 <a name="L131"></a><tt class="py-lineno"> 131</tt> <tt class="py-line"><tt class="py-docstring"> Always bound to a thread, the Task class allows you to execute</tt> </tt>
222 <a name="L132"></a><tt class="py-lineno"> 132</tt> <tt class="py-line"><tt class="py-docstring"> commands in parallel and get their results.</tt> </tt>
223 <a name="L133"></a><tt class="py-lineno"> 133</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
224 <a name="L134"></a><tt class="py-lineno"> 134</tt> <tt class="py-line"><tt class="py-docstring"> To create a task in a new thread:</tt> </tt>
225 <a name="L135"></a><tt class="py-lineno"> 135</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task = Task()</tt> </tt>
226 <a name="L136"></a><tt class="py-lineno"> 136</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
227 <a name="L137"></a><tt class="py-lineno"> 137</tt> <tt class="py-line"><tt class="py-docstring"> To create or get the instance of the task associated with the</tt> </tt>
228 <a name="L138"></a><tt class="py-lineno"> 138</tt> <tt class="py-line"><tt class="py-docstring"> thread object thr (threading.Thread):</tt> </tt>
229 <a name="L139"></a><tt class="py-lineno"> 139</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task = Task(thread=thr)</tt> </tt>
230 <a name="L140"></a><tt class="py-lineno"> 140</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
231 <a name="L141"></a><tt class="py-lineno"> 141</tt> <tt class="py-line"><tt class="py-docstring"> Add a command to execute locally within task with:</tt> </tt>
232 <a name="L142"></a><tt class="py-lineno"> 142</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.shell("/bin/hostname")</tt> </tt>
233 <a name="L143"></a><tt class="py-lineno"> 143</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
234 <a name="L144"></a><tt class="py-lineno"> 144</tt> <tt class="py-line"><tt class="py-docstring"> Add a command to execute to a distant node within task with:</tt> </tt>
235 <a name="L145"></a><tt class="py-lineno"> 145</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.shell("/bin/hostname", nodes="tiger[1-20]")</tt> </tt>
236 <a name="L146"></a><tt class="py-lineno"> 146</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
237 <a name="L147"></a><tt class="py-lineno"> 147</tt> <tt class="py-line"><tt class="py-docstring"> Run task in its associated thread (will block only if the calling</tt> </tt>
238 <a name="L148"></a><tt class="py-lineno"> 148</tt> <tt class="py-line"><tt class="py-docstring"> thread is the task associated thread):</tt> </tt>
239 <a name="L149"></a><tt class="py-lineno"> 149</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.resume()</tt> </tt>
240 <a name="L150"></a><tt class="py-lineno"> 150</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
241 <a name="L151"></a><tt class="py-lineno"> 151</tt> <tt class="py-line"> <tt id="link-44" class="py-name" targets="Variable ClusterShell.Task.Task._std_default=ClusterShell.Task.Task-class.html#_std_default"><a title="ClusterShell.Task.Task._std_default" class="py-name" href="#" onclick="return doclink('link-44', '_std_default', 'link-44');">_std_default</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <tt class="py-string">"stderr"</tt> <tt class="py-op">:</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> </tt>
242 <a name="L152"></a><tt class="py-lineno"> 152</tt> <tt class="py-line"> <tt class="py-string">"stdout_msgtree"</tt> <tt class="py-op">:</tt> <tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
243 <a name="L153"></a><tt class="py-lineno"> 153</tt> <tt class="py-line"> <tt class="py-string">"stderr_msgtree"</tt> <tt class="py-op">:</tt> <tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
244 <a name="L154"></a><tt class="py-lineno"> 154</tt> <tt class="py-line"> <tt class="py-string">"engine"</tt> <tt class="py-op">:</tt> <tt class="py-string">'auto'</tt><tt class="py-op">,</tt> </tt>
245 <a name="L155"></a><tt class="py-lineno"> 155</tt> <tt class="py-line"> <tt class="py-string">"port_qlimit"</tt> <tt class="py-op">:</tt> <tt class="py-number">32</tt> <tt class="py-op">}</tt> </tt>
246 <a name="L156"></a><tt class="py-lineno"> 156</tt> <tt class="py-line"> </tt>
247 <a name="L157"></a><tt class="py-lineno"> 157</tt> <tt class="py-line"> <tt id="link-45" class="py-name" targets="Variable ClusterShell.Task.Task._std_info=ClusterShell.Task.Task-class.html#_std_info"><a title="ClusterShell.Task.Task._std_info" class="py-name" href="#" onclick="return doclink('link-45', '_std_info', 'link-45');">_std_info</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <tt class="py-string">"debug"</tt> <tt class="py-op">:</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> </tt>
248 <a name="L158"></a><tt class="py-lineno"> 158</tt> <tt class="py-line"> <tt class="py-string">"print_debug"</tt> <tt class="py-op">:</tt> <tt id="link-46" class="py-name" targets="Function ClusterShell.Task._task_print_debug()=ClusterShell.Task-module.html#_task_print_debug"><a title="ClusterShell.Task._task_print_debug" class="py-name" href="#" onclick="return doclink('link-46', '_task_print_debug', 'link-46');">_task_print_debug</a></tt><tt class="py-op">,</tt> </tt>
249 <a name="L159"></a><tt class="py-lineno"> 159</tt> <tt class="py-line"> <tt class="py-string">"fanout"</tt> <tt class="py-op">:</tt> <tt class="py-number">64</tt><tt class="py-op">,</tt> </tt>
250 <a name="L160"></a><tt class="py-lineno"> 160</tt> <tt class="py-line"> <tt class="py-string">"connect_timeout"</tt> <tt class="py-op">:</tt> <tt class="py-number">10</tt><tt class="py-op">,</tt> </tt>
251 <a name="L161"></a><tt class="py-lineno"> 161</tt> <tt class="py-line"> <tt class="py-string">"command_timeout"</tt> <tt class="py-op">:</tt> <tt class="py-number">0</tt> <tt class="py-op">}</tt> </tt>
252 <a name="L162"></a><tt class="py-lineno"> 162</tt> <tt class="py-line"> <tt id="link-47" class="py-name" targets="Variable ClusterShell.Task.Task._tasks=ClusterShell.Task.Task-class.html#_tasks"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-47', '_tasks', 'link-47');">_tasks</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
253 <a name="L163"></a><tt class="py-lineno"> 163</tt> <tt class="py-line"> <tt id="link-48" class="py-name" targets="Variable ClusterShell.Task.Task._taskid_max=ClusterShell.Task.Task-class.html#_taskid_max"><a title="ClusterShell.Task.Task._taskid_max" class="py-name" href="#" onclick="return doclink('link-48', '_taskid_max', 'link-48');">_taskid_max</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
254 <a name="L164"></a><tt class="py-lineno"> 164</tt> <tt class="py-line"> <tt id="link-49" class="py-name" targets="Variable ClusterShell.Task.Task._task_lock=ClusterShell.Task.Task-class.html#_task_lock"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-49', '_task_lock', 'link-49');">_task_lock</a></tt> <tt class="py-op">=</tt> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
255 <a name="L165"></a><tt class="py-lineno"> 165</tt> <tt class="py-line"> </tt>
256 <a name="Task._SyncMsgHandler"></a><div id="Task._SyncMsgHandler-def"><a name="L166"></a><tt class="py-lineno"> 166</tt> <a class="py-toggle" href="#" id="Task._SyncMsgHandler-toggle" onclick="return toggle('Task._SyncMsgHandler');">-</a><tt class="py-line"> <tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.Task._SyncMsgHandler-class.html">_SyncMsgHandler</a><tt class="py-op">(</tt><tt class="py-base-class">EventHandler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
257 </div><div id="Task._SyncMsgHandler-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._SyncMsgHandler-expanded"><a name="L167"></a><tt class="py-lineno"> 167</tt> <tt class="py-line"> <tt class="py-docstring">"""Special task control port event handler.</tt> </tt>
258 <a name="L168"></a><tt class="py-lineno"> 168</tt> <tt class="py-line"><tt class="py-docstring"> When a message is received on the port, call appropriate</tt> </tt>
259 <a name="L169"></a><tt class="py-lineno"> 169</tt> <tt class="py-line"><tt class="py-docstring"> task method."""</tt> </tt>
260 <a name="Task._SyncMsgHandler.ev_msg"></a><div id="Task._SyncMsgHandler.ev_msg-def"><a name="L170"></a><tt class="py-lineno"> 170</tt> <a class="py-toggle" href="#" id="Task._SyncMsgHandler.ev_msg-toggle" onclick="return toggle('Task._SyncMsgHandler.ev_msg');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task._SyncMsgHandler-class.html#ev_msg">ev_msg</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
261 </div><div id="Task._SyncMsgHandler.ev_msg-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Task._SyncMsgHandler.ev_msg-expanded"><a name="L171"></a><tt class="py-lineno"> 171</tt> <tt class="py-line"> <tt class="py-docstring">"""Message received: call appropriate task method."""</tt> </tt>
262 <a name="L172"></a><tt class="py-lineno"> 172</tt> <tt class="py-line"> <tt class="py-comment"># pull out function and its arguments from message</tt> </tt>
263 <a name="L173"></a><tt class="py-lineno"> 173</tt> <tt class="py-line"> <tt class="py-name">func</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-name">kwargs</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt id="link-50" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-50', 'msg', 'link-50');">msg</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-51" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-51', 'msg', 'link-50');">msg</a></tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
264 <a name="L174"></a><tt class="py-lineno"> 174</tt> <tt class="py-line"> <tt class="py-comment"># call task method</tt> </tt>
265 <a name="L175"></a><tt class="py-lineno"> 175</tt> <tt class="py-line"> <tt class="py-name">func</tt><tt class="py-op">(</tt><tt id="link-52" class="py-name" targets="Method ClusterShell.Task.Task.port()=ClusterShell.Task.Task-class.html#port"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-52', 'port', 'link-52');">port</a></tt><tt class="py-op">.</tt><tt class="py-name">task</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>
266 </div></div><a name="L176"></a><tt class="py-lineno"> 176</tt> <tt class="py-line"> </tt>
267 <a name="Task.tasksyncmethod"></a><div id="Task.tasksyncmethod-def"><a name="L177"></a><tt class="py-lineno"> 177</tt> <a class="py-toggle" href="#" id="Task.tasksyncmethod-toggle" onclick="return toggle('Task.tasksyncmethod');">-</a><tt class="py-line"> <tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.Task.tasksyncmethod-class.html">tasksyncmethod</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
268 </div><div id="Task.tasksyncmethod-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.tasksyncmethod-expanded"><a name="L178"></a><tt class="py-lineno"> 178</tt> <tt class="py-line"> <tt class="py-docstring">"""Class encapsulating a function that checks if the calling</tt> </tt>
269 <a name="L179"></a><tt class="py-lineno"> 179</tt> <tt class="py-line"><tt class="py-docstring"> task is running or is the current task, and allowing it to be</tt> </tt>
270 <a name="L180"></a><tt class="py-lineno"> 180</tt> <tt class="py-line"><tt class="py-docstring"> used as a decorator making the wrapped task method thread-safe."""</tt> </tt>
271 <a name="L181"></a><tt class="py-lineno"> 181</tt> <tt class="py-line"> </tt>
272 <a name="Task.tasksyncmethod.__call__"></a><div id="Task.tasksyncmethod.__call__-def"><a name="L182"></a><tt class="py-lineno"> 182</tt> <a class="py-toggle" href="#" id="Task.tasksyncmethod.__call__-toggle" onclick="return toggle('Task.tasksyncmethod.__call__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task.tasksyncmethod-class.html#__call__">__call__</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>
273 </div><div id="Task.tasksyncmethod.__call__-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Task.tasksyncmethod.__call__-expanded"><a name="L183"></a><tt class="py-lineno"> 183</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">taskfunc</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>
274 <a name="L184"></a><tt class="py-lineno"> 184</tt> <tt class="py-line"> <tt class="py-comment"># pull out the class instance</tt> </tt>
275 <a name="L185"></a><tt class="py-lineno"> 185</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-name">fargs</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">args</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
276 <a name="L186"></a><tt class="py-lineno"> 186</tt> <tt class="py-line"> <tt class="py-comment"># check if the calling task is the current thread task</tt> </tt>
277 <a name="L187"></a><tt class="py-lineno"> 187</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name" targets="Method ClusterShell.Task.Task._is_task_self()=ClusterShell.Task.Task-class.html#_is_task_self"><a title="ClusterShell.Task.Task._is_task_self" class="py-name" href="#" onclick="return doclink('link-53', '_is_task_self', 'link-53');">_is_task_self</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
278 <a name="L188"></a><tt class="py-lineno"> 188</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">f</tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">fargs</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
279 <a name="L189"></a><tt class="py-lineno"> 189</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_port</tt><tt class="py-op">:</tt> </tt>
280 <a name="L190"></a><tt class="py-lineno"> 190</tt> <tt class="py-line"> <tt class="py-comment"># no, safely call the task method by message </tt> </tt>
281 <a name="L191"></a><tt class="py-lineno"> 191</tt> <tt class="py-line"> <tt class="py-comment"># through the task special dispatch port</tt> </tt>
282 <a name="L192"></a><tt class="py-lineno"> 192</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_port</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg_send()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg_send"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg_send" class="py-name" href="#" onclick="return doclink('link-54', 'msg_send', 'link-54');">msg_send</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">,</tt> <tt class="py-name">fargs</tt><tt class="py-op">,</tt> <tt class="py-name">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
283 <a name="L193"></a><tt class="py-lineno"> 193</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
284 <a name="L194"></a><tt class="py-lineno"> 194</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-55', 'info', 'link-55');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"%s: dropped call: %s"</tt> <tt class="py-op">%</tt> \ </tt>
285 <a name="L195"></a><tt class="py-lineno"> 195</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-name">fargs</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
286 </div><a name="L196"></a><tt class="py-lineno"> 196</tt> <tt class="py-line"> <tt class="py-comment"># modify the decorator meta-data for pydoc</tt> </tt>
287 <a name="L197"></a><tt class="py-lineno"> 197</tt> <tt class="py-line"> <tt class="py-comment"># Note: should be later replaced by @wraps (functools)</tt> </tt>
288 <a name="L198"></a><tt class="py-lineno"> 198</tt> <tt class="py-line"> <tt class="py-comment"># as of Python 2.5</tt> </tt>
289 <a name="L199"></a><tt class="py-lineno"> 199</tt> <tt class="py-line"> <tt class="py-name">taskfunc</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> </tt>
290 <a name="L200"></a><tt class="py-lineno"> 200</tt> <tt class="py-line"> <tt class="py-name">taskfunc</tt><tt class="py-op">.</tt><tt class="py-name">__doc__</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">__doc__</tt> </tt>
291 <a name="L201"></a><tt class="py-lineno"> 201</tt> <tt class="py-line"> <tt class="py-name">taskfunc</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt> </tt>
292 <a name="L202"></a><tt class="py-lineno"> 202</tt> <tt class="py-line"> <tt class="py-name">taskfunc</tt><tt class="py-op">.</tt><tt class="py-name">__module__</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">__module__</tt> </tt>
293 <a name="L203"></a><tt class="py-lineno"> 203</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">taskfunc</tt> </tt>
294 </div></div><a name="L204"></a><tt class="py-lineno"> 204</tt> <tt class="py-line"> </tt>
295 <a name="Task._SuspendCondition"></a><div id="Task._SuspendCondition-def"><a name="L205"></a><tt class="py-lineno"> 205</tt> <a class="py-toggle" href="#" id="Task._SuspendCondition-toggle" onclick="return toggle('Task._SuspendCondition');">-</a><tt class="py-line"> <tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Task.Task._SuspendCondition-class.html">_SuspendCondition</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
296 </div><div id="Task._SuspendCondition-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._SuspendCondition-expanded"><a name="L206"></a><tt class="py-lineno"> 206</tt> <tt class="py-line"> <tt class="py-docstring">"""Special class to manage task suspend condition."""</tt> </tt>
297 <a name="Task._SuspendCondition.__init__"></a><div id="Task._SuspendCondition.__init__-def"><a name="L207"></a><tt class="py-lineno"> 207</tt> <a class="py-toggle" href="#" id="Task._SuspendCondition.__init__-toggle" onclick="return toggle('Task._SuspendCondition.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task._SuspendCondition-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">lock</tt><tt class="py-op">=</tt><tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">RLock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-param">initial</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
298 </div><div id="Task._SuspendCondition.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Task._SuspendCondition.__init__-expanded"><a name="L208"></a><tt class="py-lineno"> 208</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt> <tt class="py-op">=</tt> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Condition</tt><tt class="py-op">(</tt><tt class="py-name">lock</tt><tt class="py-op">)</tt> </tt>
299 <a name="L209"></a><tt class="py-lineno"> 209</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">suspend_count</tt> <tt class="py-op">=</tt> <tt class="py-name">initial</tt> </tt>
300 </div><a name="L210"></a><tt class="py-lineno"> 210</tt> <tt class="py-line"> </tt>
301 <a name="Task._SuspendCondition.atomic_inc"></a><div id="Task._SuspendCondition.atomic_inc-def"><a name="L211"></a><tt class="py-lineno"> 211</tt> <a class="py-toggle" href="#" id="Task._SuspendCondition.atomic_inc-toggle" onclick="return toggle('Task._SuspendCondition.atomic_inc');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task._SuspendCondition-class.html#atomic_inc">atomic_inc</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
302 </div><div id="Task._SuspendCondition.atomic_inc-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Task._SuspendCondition.atomic_inc-expanded"><a name="L212"></a><tt class="py-lineno"> 212</tt> <tt class="py-line"> <tt class="py-docstring">"""Increase suspend count."""</tt> </tt>
303 <a name="L213"></a><tt class="py-lineno"> 213</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
304 <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 class="py-name">suspend_count</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
305 <a name="L215"></a><tt class="py-lineno"> 215</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
306 </div><a name="L216"></a><tt class="py-lineno"> 216</tt> <tt class="py-line"> </tt>
307 <a name="Task._SuspendCondition.atomic_dec"></a><div id="Task._SuspendCondition.atomic_dec-def"><a name="L217"></a><tt class="py-lineno"> 217</tt> <a class="py-toggle" href="#" id="Task._SuspendCondition.atomic_dec-toggle" onclick="return toggle('Task._SuspendCondition.atomic_dec');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task._SuspendCondition-class.html#atomic_dec">atomic_dec</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
308 </div><div id="Task._SuspendCondition.atomic_dec-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Task._SuspendCondition.atomic_dec-expanded"><a name="L218"></a><tt class="py-lineno"> 218</tt> <tt class="py-line"> <tt class="py-docstring">"""Decrease suspend count."""</tt> </tt>
309 <a name="L219"></a><tt class="py-lineno"> 219</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
310 <a name="L220"></a><tt class="py-lineno"> 220</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">suspend_count</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
311 <a name="L221"></a><tt class="py-lineno"> 221</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
312 </div><a name="L222"></a><tt class="py-lineno"> 222</tt> <tt class="py-line"> </tt>
313 <a name="Task._SuspendCondition.wait_check"></a><div id="Task._SuspendCondition.wait_check-def"><a name="L223"></a><tt class="py-lineno"> 223</tt> <a class="py-toggle" href="#" id="Task._SuspendCondition.wait_check-toggle" onclick="return toggle('Task._SuspendCondition.wait_check');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task._SuspendCondition-class.html#wait_check">wait_check</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">release_lock</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
314 </div><div id="Task._SuspendCondition.wait_check-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Task._SuspendCondition.wait_check-expanded"><a name="L224"></a><tt class="py-lineno"> 224</tt> <tt class="py-line"> <tt class="py-docstring">"""Wait for condition if needed."""</tt> </tt>
315 <a name="L225"></a><tt class="py-lineno"> 225</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
316 <a name="L226"></a><tt class="py-lineno"> 226</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
317 <a name="L227"></a><tt class="py-lineno"> 227</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">suspend_count</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
318 <a name="L228"></a><tt class="py-lineno"> 228</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">release_lock</tt><tt class="py-op">:</tt> </tt>
319 <a name="L229"></a><tt class="py-lineno"> 229</tt> <tt class="py-line"> <tt class="py-name">release_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
320 <a name="L230"></a><tt class="py-lineno"> 230</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name" targets="Class Method ClusterShell.Task.Task.wait()=ClusterShell.Task.Task-class.html#wait"><a title="ClusterShell.Task.Task.wait" class="py-name" href="#" onclick="return doclink('link-56', 'wait', 'link-56');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
321 <a name="L231"></a><tt class="py-lineno"> 231</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
322 <a name="L232"></a><tt class="py-lineno"> 232</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
323 </div><a name="L233"></a><tt class="py-lineno"> 233</tt> <tt class="py-line"> </tt>
324 <a name="Task._SuspendCondition.notify_all"></a><div id="Task._SuspendCondition.notify_all-def"><a name="L234"></a><tt class="py-lineno"> 234</tt> <a class="py-toggle" href="#" id="Task._SuspendCondition.notify_all-toggle" onclick="return toggle('Task._SuspendCondition.notify_all');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task._SuspendCondition-class.html#notify_all">notify_all</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
325 </div><div id="Task._SuspendCondition.notify_all-collapsed" style="display:none;" pad="++++" indent="++++++++++++++++"></div><div id="Task._SuspendCondition.notify_all-expanded"><a name="L235"></a><tt class="py-lineno"> 235</tt> <tt class="py-line"> <tt class="py-docstring">"""Signal all threads waiting for condition."""</tt> </tt>
326 <a name="L236"></a><tt class="py-lineno"> 236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
327 <a name="L237"></a><tt class="py-lineno"> 237</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
328 <a name="L238"></a><tt class="py-lineno"> 238</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">suspend_count</tt> <tt class="py-op">=</tt> <tt class="py-name">min</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">suspend_count</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
329 <a name="L239"></a><tt class="py-lineno"> 239</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">notifyAll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
330 <a name="L240"></a><tt class="py-lineno"> 240</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
331 <a name="L241"></a><tt class="py-lineno"> 241</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cond</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
332 </div></div><a name="L242"></a><tt class="py-lineno"> 242</tt> <tt class="py-line"> </tt>
333 <a name="L243"></a><tt class="py-lineno"> 243</tt> <tt class="py-line"> </tt>
334 <a name="Task.__new__"></a><div id="Task.__new__-def"><a name="L244"></a><tt class="py-lineno"> 244</tt> <a class="py-toggle" href="#" id="Task.__new__-toggle" onclick="return toggle('Task.__new__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#__new__">__new__</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">thread</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
335 </div><div id="Task.__new__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.__new__-expanded"><a name="L245"></a><tt class="py-lineno"> 245</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
336 <a name="L246"></a><tt class="py-lineno"> 246</tt> <tt class="py-line"><tt class="py-docstring"> For task bound to a specific thread, this class acts like a</tt> </tt>
337 <a name="L247"></a><tt class="py-lineno"> 247</tt> <tt class="py-line"><tt class="py-docstring"> "thread singleton", so new style class is used and new object</tt> </tt>
338 <a name="L248"></a><tt class="py-lineno"> 248</tt> <tt class="py-line"><tt class="py-docstring"> are only instantiated if needed.</tt> </tt>
339 <a name="L249"></a><tt class="py-lineno"> 249</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
340 <a name="L250"></a><tt class="py-lineno"> 250</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">thread</tt><tt class="py-op">:</tt> </tt>
341 <a name="L251"></a><tt class="py-lineno"> 251</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">thread</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">cls</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-57', '_tasks', 'link-47');">_tasks</a></tt><tt class="py-op">:</tt> </tt>
342 <a name="L252"></a><tt class="py-lineno"> 252</tt> <tt class="py-line"> <tt class="py-name">cls</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-58', '_tasks', 'link-47');">_tasks</a></tt><tt class="py-op">[</tt><tt class="py-name">thread</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">object</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Static Method ClusterShell.Engine.Factory.PreferredEngine.__new__()=ClusterShell.Engine.Factory.PreferredEngine-class.html#__new__,Static Method ClusterShell.Task.Task.__new__()=ClusterShell.Task.Task-class.html#__new__"><a title="ClusterShell.Engine.Factory.PreferredEngine.__new__
343 ClusterShell.Task.Task.__new__" class="py-name" href="#" onclick="return doclink('link-59', '__new__', 'link-59');">__new__</a></tt><tt class="py-op">(</tt><tt class="py-name">cls</tt><tt class="py-op">)</tt> </tt>
344 <a name="L253"></a><tt class="py-lineno"> 253</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cls</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-60', '_tasks', 'link-47');">_tasks</a></tt><tt class="py-op">[</tt><tt class="py-name">thread</tt><tt class="py-op">]</tt> </tt>
345 <a name="L254"></a><tt class="py-lineno"> 254</tt> <tt class="py-line"> </tt>
346 <a name="L255"></a><tt class="py-lineno"> 255</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">object</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="ClusterShell.Engine.Factory.PreferredEngine.__new__
347 ClusterShell.Task.Task.__new__" class="py-name" href="#" onclick="return doclink('link-61', '__new__', 'link-59');">__new__</a></tt><tt class="py-op">(</tt><tt class="py-name">cls</tt><tt class="py-op">)</tt> </tt>
348 </div><a name="L256"></a><tt class="py-lineno"> 256</tt> <tt class="py-line"> </tt>
349 <a name="Task.__init__"></a><div id="Task.__init__-def"><a name="L257"></a><tt class="py-lineno"> 257</tt> <a class="py-toggle" href="#" id="Task.__init__-toggle" onclick="return toggle('Task.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-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">thread</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
350 </div><div id="Task.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.__init__-expanded"><a name="L258"></a><tt class="py-lineno"> 258</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
351 <a name="L259"></a><tt class="py-lineno"> 259</tt> <tt class="py-line"><tt class="py-docstring"> Initialize a Task, creating a new thread if needed.</tt> </tt>
352 <a name="L260"></a><tt class="py-lineno"> 260</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
353 <a name="L261"></a><tt class="py-lineno"> 261</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</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-string">"_engine"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
354 <a name="L262"></a><tt class="py-lineno"> 262</tt> <tt class="py-line"> <tt class="py-comment"># first time called</tt> </tt>
355 <a name="L263"></a><tt class="py-lineno"> 263</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default_lock</tt> <tt class="py-op">=</tt> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
356 <a name="L264"></a><tt class="py-lineno"> 264</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="ClusterShell.Task.Task._std_default" class="py-name" href="#" onclick="return doclink('link-62', '_std_default', 'link-44');">_std_default</a></tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method ClusterShell.Task.Task.copy()=ClusterShell.Task.Task-class.html#copy"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-63', 'copy', 'link-63');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
357 <a name="L265"></a><tt class="py-lineno"> 265</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_info</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="ClusterShell.Task.Task._std_info" class="py-name" href="#" onclick="return doclink('link-64', '_std_info', 'link-45');">_std_info</a></tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-65', 'copy', 'link-63');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
358 <a name="L266"></a><tt class="py-lineno"> 266</tt> <tt class="py-line"> </tt>
359 <a name="L267"></a><tt class="py-lineno"> 267</tt> <tt class="py-line"> <tt class="py-comment"># use factory class PreferredEngine that gives the proper</tt> </tt>
360 <a name="L268"></a><tt class="py-lineno"> 268</tt> <tt class="py-line"> <tt class="py-comment"># engine instance</tt> </tt>
361 <a name="L269"></a><tt class="py-lineno"> 269</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt> <tt class="py-op">=</tt> <tt id="link-66" class="py-name"><a title="ClusterShell.Engine.Factory.PreferredEngine" class="py-name" href="#" onclick="return doclink('link-66', 'PreferredEngine', 'link-19');">PreferredEngine</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-67', 'default', 'link-42');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"engine"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_info</tt><tt class="py-op">)</tt> </tt>
362 <a name="L270"></a><tt class="py-lineno"> 270</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timeout</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
363 <a name="L271"></a><tt class="py-lineno"> 271</tt> <tt class="py-line"> </tt>
364 <a name="L272"></a><tt class="py-lineno"> 272</tt> <tt class="py-line"> <tt class="py-comment"># task synchronization objects</tt> </tt>
365 <a name="L273"></a><tt class="py-lineno"> 273</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_run_lock</tt> <tt class="py-op">=</tt> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-comment"># primitive lock</tt> </tt>
366 <a name="L274"></a><tt class="py-lineno"> 274</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt> <tt class="py-op">=</tt> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">RLock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-comment"># reentrant lock</tt> </tt>
367 <a name="L275"></a><tt class="py-lineno"> 275</tt> <tt class="py-line"> <tt class="py-comment"># both join and suspend conditions share the same underlying lock</tt> </tt>
368 <a name="L276"></a><tt class="py-lineno"> 276</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_cond</tt> <tt class="py-op">=</tt> <tt id="link-68" class="py-name" targets="Module ClusterShell.Task=ClusterShell.Task-module.html,Class ClusterShell.Task.Task=ClusterShell.Task.Task-class.html"><a title="ClusterShell.Task
369 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-68', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-69" class="py-name" targets="Class ClusterShell.Task.Task._SuspendCondition=ClusterShell.Task.Task._SuspendCondition-class.html"><a title="ClusterShell.Task.Task._SuspendCondition" class="py-name" href="#" onclick="return doclink('link-69', '_SuspendCondition', 'link-69');">_SuspendCondition</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
370 <a name="L277"></a><tt class="py-lineno"> 277</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_join_cond</tt> <tt class="py-op">=</tt> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">Condition</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt><tt class="py-op">)</tt> </tt>
371 <a name="L278"></a><tt class="py-lineno"> 278</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspended</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
372 <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">_quit</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
373 <a name="L280"></a><tt class="py-lineno"> 280</tt> <tt class="py-line"> </tt>
374 <a name="L281"></a><tt class="py-lineno"> 281</tt> <tt class="py-line"> <tt class="py-comment"># STDIN tree</tt> </tt>
375 <a name="L282"></a><tt class="py-lineno"> 282</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt> <tt class="py-op">=</tt> <tt id="link-70" class="py-name" targets="Class ClusterShell.Task._TaskMsgTree=ClusterShell.Task._TaskMsgTree-class.html"><a title="ClusterShell.Task._TaskMsgTree" class="py-name" href="#" onclick="return doclink('link-70', '_TaskMsgTree', 'link-70');">_TaskMsgTree</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">"stdout_msgtree"</tt><tt class="py-op">)</tt> </tt>
376 <a name="L283"></a><tt class="py-lineno"> 283</tt> <tt class="py-line"> </tt>
377 <a name="L284"></a><tt class="py-lineno"> 284</tt> <tt class="py-line"> <tt class="py-comment"># STDERR tree</tt> </tt>
378 <a name="L285"></a><tt class="py-lineno"> 285</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt> <tt class="py-op">=</tt> <tt id="link-71" class="py-name"><a title="ClusterShell.Task._TaskMsgTree" class="py-name" href="#" onclick="return doclink('link-71', '_TaskMsgTree', 'link-70');">_TaskMsgTree</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">"stderr_msgtree"</tt><tt class="py-op">)</tt> </tt>
379 <a name="L286"></a><tt class="py-lineno"> 286</tt> <tt class="py-line"> </tt>
380 <a name="L287"></a><tt class="py-lineno"> 287</tt> <tt class="py-line"> <tt class="py-comment"># dict of sources to return codes</tt> </tt>
381 <a name="L288"></a><tt class="py-lineno"> 288</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_source_rc</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
382 <a name="L289"></a><tt class="py-lineno"> 289</tt> <tt class="py-line"> <tt class="py-comment"># dict of return codes to sources</tt> </tt>
383 <a name="L290"></a><tt class="py-lineno"> 290</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
384 <a name="L291"></a><tt class="py-lineno"> 291</tt> <tt class="py-line"> <tt class="py-comment"># keep max rc</tt> </tt>
385 <a name="L292"></a><tt class="py-lineno"> 292</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_rc</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
386 <a name="L293"></a><tt class="py-lineno"> 293</tt> <tt class="py-line"> <tt class="py-comment"># keep timeout'd sources</tt> </tt>
387 <a name="L294"></a><tt class="py-lineno"> 294</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_timeout_sources</tt> <tt class="py-op">=</tt> <tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
388 <a name="L295"></a><tt class="py-lineno"> 295</tt> <tt class="py-line"> </tt>
389 <a name="L296"></a><tt class="py-lineno"> 296</tt> <tt class="py-line"> <tt class="py-comment"># special engine port for task method dispatching</tt> </tt>
390 <a name="L297"></a><tt class="py-lineno"> 297</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_port</tt> <tt class="py-op">=</tt> <tt id="link-72" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort" class="py-name" href="#" onclick="return doclink('link-72', 'EnginePort', 'link-23');">EnginePort</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> </tt>
391 <a name="L298"></a><tt class="py-lineno"> 298</tt> <tt class="py-line"> <tt class="py-name">handler</tt><tt class="py-op">=</tt><tt id="link-73" class="py-name"><a title="ClusterShell.Task
392 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-73', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-74" class="py-name" targets="Class ClusterShell.Task.Task._SyncMsgHandler=ClusterShell.Task.Task._SyncMsgHandler-class.html"><a title="ClusterShell.Task.Task._SyncMsgHandler" class="py-name" href="#" onclick="return doclink('link-74', '_SyncMsgHandler', 'link-74');">_SyncMsgHandler</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
393 <a name="L299"></a><tt class="py-lineno"> 299</tt> <tt class="py-line"> <tt class="py-name">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
394 <a name="L300"></a><tt class="py-lineno"> 300</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.add()=ClusterShell.Engine.Engine.Engine-class.html#add,Method ClusterShell.MsgTree.MsgTree.add()=ClusterShell.MsgTree.MsgTree-class.html#add,Method ClusterShell.NodeSet.NodeSetBase.add()=ClusterShell.NodeSet.NodeSetBase-class.html#add,Method ClusterShell.NodeSet.RangeSet.add()=ClusterShell.NodeSet.RangeSet-class.html#add"><a title="ClusterShell.Engine.Engine.Engine.add
395 ClusterShell.MsgTree.MsgTree.add
396 ClusterShell.NodeSet.NodeSetBase.add
397 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-75', 'add', 'link-75');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_port</tt><tt class="py-op">)</tt> </tt>
398 <a name="L301"></a><tt class="py-lineno"> 301</tt> <tt class="py-line"> </tt>
399 <a name="L302"></a><tt class="py-lineno"> 302</tt> <tt class="py-line"> <tt class="py-comment"># set taskid used as Thread name</tt> </tt>
400 <a name="L303"></a><tt class="py-lineno"> 303</tt> <tt class="py-line"> <tt id="link-76" class="py-name"><a title="ClusterShell.Task
401 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-76', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-77', '_task_lock', 'link-49');">_task_lock</a></tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
402 <a name="L304"></a><tt class="py-lineno"> 304</tt> <tt class="py-line"> <tt id="link-78" class="py-name"><a title="ClusterShell.Task
403 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-78', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="ClusterShell.Task.Task._taskid_max" class="py-name" href="#" onclick="return doclink('link-79', '_taskid_max', 'link-48');">_taskid_max</a></tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
404 <a name="L305"></a><tt class="py-lineno"> 305</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_taskid</tt> <tt class="py-op">=</tt> <tt id="link-80" class="py-name"><a title="ClusterShell.Task
405 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-80', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="ClusterShell.Task.Task._taskid_max" class="py-name" href="#" onclick="return doclink('link-81', '_taskid_max', 'link-48');">_taskid_max</a></tt> </tt>
406 <a name="L306"></a><tt class="py-lineno"> 306</tt> <tt class="py-line"> <tt id="link-82" class="py-name"><a title="ClusterShell.Task
407 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-82', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-83', '_task_lock', 'link-49');">_task_lock</a></tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
408 <a name="L307"></a><tt class="py-lineno"> 307</tt> <tt class="py-line"> </tt>
409 <a name="L308"></a><tt class="py-lineno"> 308</tt> <tt class="py-line"> <tt class="py-comment"># create new thread if needed</tt> </tt>
410 <a name="L309"></a><tt class="py-lineno"> 309</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_thread_foreign</tt> <tt class="py-op">=</tt> <tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">thread</tt><tt class="py-op">)</tt> </tt>
411 <a name="L310"></a><tt class="py-lineno"> 310</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">_thread_foreign</tt><tt class="py-op">:</tt> </tt>
412 <a name="L311"></a><tt class="py-lineno"> 311</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">thread</tt> <tt class="py-op">=</tt> <tt class="py-name">thread</tt> </tt>
413 <a name="L312"></a><tt class="py-lineno"> 312</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
414 <a name="L313"></a><tt class="py-lineno"> 313</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">thread</tt> <tt class="py-op">=</tt> <tt class="py-name">thread</tt> <tt class="py-op">=</tt> \ </tt>
415 <a name="L314"></a><tt class="py-lineno"> 314</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 class="py-name">None</tt><tt class="py-op">,</tt> </tt>
416 <a name="L315"></a><tt class="py-lineno"> 315</tt> <tt class="py-line"> <tt id="link-84" class="py-name"><a title="ClusterShell.Task
417 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-84', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-85" class="py-name" targets="Method ClusterShell.Task.Task._thread_start()=ClusterShell.Task.Task-class.html#_thread_start"><a title="ClusterShell.Task.Task._thread_start" class="py-name" href="#" onclick="return doclink('link-85', '_thread_start', 'link-85');">_thread_start</a></tt><tt class="py-op">,</tt> </tt>
418 <a name="L316"></a><tt class="py-lineno"> 316</tt> <tt class="py-line"> <tt class="py-string">"Task-%d"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_taskid</tt><tt class="py-op">,</tt> </tt>
419 <a name="L317"></a><tt class="py-lineno"> 317</tt> <tt class="py-line"> <tt class="py-name">args</tt><tt class="py-op">=</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-op">)</tt> </tt>
420 <a name="L318"></a><tt class="py-lineno"> 318</tt> <tt class="py-line"> <tt id="link-86" class="py-name"><a title="ClusterShell.Task
421 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-86', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-87', '_tasks', 'link-47');">_tasks</a></tt><tt class="py-op">[</tt><tt class="py-name">thread</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
422 <a name="L319"></a><tt class="py-lineno"> 319</tt> <tt class="py-line"> <tt class="py-name">thread</tt><tt class="py-op">.</tt><tt class="py-name">start</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
423 </div><a name="L320"></a><tt class="py-lineno"> 320</tt> <tt class="py-line"> </tt>
424 <a name="Task._is_task_self"></a><div id="Task._is_task_self-def"><a name="L321"></a><tt class="py-lineno"> 321</tt> <a class="py-toggle" href="#" id="Task._is_task_self-toggle" onclick="return toggle('Task._is_task_self');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_is_task_self">_is_task_self</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
425 </div><div id="Task._is_task_self-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._is_task_self-expanded"><a name="L322"></a><tt class="py-lineno"> 322</tt> <tt class="py-line"> <tt class="py-docstring">"""Private method used by the library to check if the task is</tt> </tt>
426 <a name="L323"></a><tt class="py-lineno"> 323</tt> <tt class="py-line"><tt class="py-docstring"> task_self(), but do not create any task_self() instance."""</tt> </tt>
427 <a name="L324"></a><tt class="py-lineno"> 324</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">thread</tt> <tt class="py-op">==</tt> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">currentThread</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
428 </div><a name="L325"></a><tt class="py-lineno"> 325</tt> <tt class="py-line"> </tt>
429 <a name="Task.default_excepthook"></a><div id="Task.default_excepthook-def"><a name="L326"></a><tt class="py-lineno"> 326</tt> <a class="py-toggle" href="#" id="Task.default_excepthook-toggle" onclick="return toggle('Task.default_excepthook');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#default_excepthook">default_excepthook</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">type</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">,</tt> <tt class="py-param">tb</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
430 </div><div id="Task.default_excepthook-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.default_excepthook-expanded"><a name="L327"></a><tt class="py-lineno"> 327</tt> <tt class="py-line"> <tt class="py-docstring">"""Default excepthook for a newly Task. When an exception is</tt> </tt>
431 <a name="L328"></a><tt class="py-lineno"> 328</tt> <tt class="py-line"><tt class="py-docstring"> raised and uncaught on Task thread, excepthook is called, which</tt> </tt>
432 <a name="L329"></a><tt class="py-lineno"> 329</tt> <tt class="py-line"><tt class="py-docstring"> is default_excepthook by default. Once excepthook overriden,</tt> </tt>
433 <a name="L330"></a><tt class="py-lineno"> 330</tt> <tt class="py-line"><tt class="py-docstring"> you can still call default_excepthook if needed."""</tt> </tt>
434 <a name="L331"></a><tt class="py-lineno"> 331</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">'Exception in thread %s:'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">thread</tt> </tt>
435 <a name="L332"></a><tt class="py-lineno"> 332</tt> <tt class="py-line"> <tt class="py-name">traceback</tt><tt class="py-op">.</tt><tt class="py-name">print_exception</tt><tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">tb</tt><tt class="py-op">,</tt> <tt class="py-name">file</tt><tt class="py-op">=</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt> </tt>
436 </div><a name="L333"></a><tt class="py-lineno"> 333</tt> <tt class="py-line"> </tt>
437 <a name="L334"></a><tt class="py-lineno"> 334</tt> <tt class="py-line"> <tt class="py-name">_excepthook</tt> <tt class="py-op">=</tt> <tt id="link-88" class="py-name" targets="Method ClusterShell.Task.Task.default_excepthook()=ClusterShell.Task.Task-class.html#default_excepthook"><a title="ClusterShell.Task.Task.default_excepthook" class="py-name" href="#" onclick="return doclink('link-88', 'default_excepthook', 'link-88');">default_excepthook</a></tt> </tt>
438 <a name="L335"></a><tt class="py-lineno"> 335</tt> <tt class="py-line"> </tt>
439 <a name="Task._getexcepthook"></a><div id="Task._getexcepthook-def"><a name="L336"></a><tt class="py-lineno"> 336</tt> <a class="py-toggle" href="#" id="Task._getexcepthook-toggle" onclick="return toggle('Task._getexcepthook');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_getexcepthook">_getexcepthook</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
440 </div><div id="Task._getexcepthook-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._getexcepthook-expanded"><a name="L337"></a><tt class="py-lineno"> 337</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">_excepthook</tt> </tt>
441 </div><a name="L338"></a><tt class="py-lineno"> 338</tt> <tt class="py-line"> </tt>
442 <a name="Task._setexcepthook"></a><div id="Task._setexcepthook-def"><a name="L339"></a><tt class="py-lineno"> 339</tt> <a class="py-toggle" href="#" id="Task._setexcepthook-toggle" onclick="return toggle('Task._setexcepthook');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_setexcepthook">_setexcepthook</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">hook</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
443 </div><div id="Task._setexcepthook-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._setexcepthook-expanded"><a name="L340"></a><tt class="py-lineno"> 340</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_excepthook</tt> <tt class="py-op">=</tt> <tt class="py-name">hook</tt> </tt>
444 <a name="L341"></a><tt class="py-lineno"> 341</tt> <tt class="py-line"> <tt class="py-comment"># If thread has not been created by us, install sys.excepthook which</tt> </tt>
445 <a name="L342"></a><tt class="py-lineno"> 342</tt> <tt class="py-line"> <tt class="py-comment"># might handle uncaught exception.</tt> </tt>
446 <a name="L343"></a><tt class="py-lineno"> 343</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">_thread_foreign</tt><tt class="py-op">:</tt> </tt>
447 <a name="L344"></a><tt class="py-lineno"> 344</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name" targets="Variable ClusterShell.Task.Task.excepthook=ClusterShell.Task.Task-class.html#excepthook"><a title="ClusterShell.Task.Task.excepthook" class="py-name" href="#" onclick="return doclink('link-89', 'excepthook', 'link-89');">excepthook</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_excepthook</tt> </tt>
448 </div><a name="L345"></a><tt class="py-lineno"> 345</tt> <tt class="py-line"> </tt>
449 <a name="L346"></a><tt class="py-lineno"> 346</tt> <tt class="py-line"> <tt class="py-comment"># When an exception is raised and uncaught on Task's thread,</tt> </tt>
450 <a name="L347"></a><tt class="py-lineno"> 347</tt> <tt class="py-line"> <tt class="py-comment"># excepthook is called. You may want to override this three</tt> </tt>
451 <a name="L348"></a><tt class="py-lineno"> 348</tt> <tt class="py-line"> <tt class="py-comment"># arguments method (very similar of what you can do with</tt> </tt>
452 <a name="L349"></a><tt class="py-lineno"> 349</tt> <tt class="py-line"> <tt class="py-comment"># sys.excepthook)."""</tt> </tt>
453 <a name="L350"></a><tt class="py-lineno"> 350</tt> <tt class="py-line"> <tt id="link-90" class="py-name"><a title="ClusterShell.Task.Task.excepthook" class="py-name" href="#" onclick="return doclink('link-90', 'excepthook', 'link-89');">excepthook</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-91" class="py-name" targets="Method ClusterShell.Task.Task._getexcepthook()=ClusterShell.Task.Task-class.html#_getexcepthook"><a title="ClusterShell.Task.Task._getexcepthook" class="py-name" href="#" onclick="return doclink('link-91', '_getexcepthook', 'link-91');">_getexcepthook</a></tt><tt class="py-op">,</tt> <tt id="link-92" class="py-name" targets="Method ClusterShell.Task.Task._setexcepthook()=ClusterShell.Task.Task-class.html#_setexcepthook"><a title="ClusterShell.Task.Task._setexcepthook" class="py-name" href="#" onclick="return doclink('link-92', '_setexcepthook', 'link-92');">_setexcepthook</a></tt><tt class="py-op">)</tt> </tt>
454 <a name="L351"></a><tt class="py-lineno"> 351</tt> <tt class="py-line"> </tt>
455 <a name="Task._thread_start"></a><div id="Task._thread_start-def"><a name="L352"></a><tt class="py-lineno"> 352</tt> <a class="py-toggle" href="#" id="Task._thread_start-toggle" onclick="return toggle('Task._thread_start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_thread_start">_thread_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
456 </div><div id="Task._thread_start-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._thread_start-expanded"><a name="L353"></a><tt class="py-lineno"> 353</tt> <tt class="py-line"> <tt class="py-docstring">"""Task-managed thread entry point"""</tt> </tt>
457 <a name="L354"></a><tt class="py-lineno"> 354</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_quit</tt><tt class="py-op">:</tt> </tt>
458 <a name="L355"></a><tt class="py-lineno"> 355</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_cond</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name" targets="Method ClusterShell.Task.Task._SuspendCondition.wait_check()=ClusterShell.Task.Task._SuspendCondition-class.html#wait_check"><a title="ClusterShell.Task.Task._SuspendCondition.wait_check" class="py-name" href="#" onclick="return doclink('link-93', 'wait_check', 'link-93');">wait_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
459 <a name="L356"></a><tt class="py-lineno"> 356</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">_quit</tt><tt class="py-op">:</tt> </tt>
460 <a name="L357"></a><tt class="py-lineno"> 357</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
461 <a name="L358"></a><tt class="py-lineno"> 358</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
462 <a name="L359"></a><tt class="py-lineno"> 359</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name" targets="Method ClusterShell.Task.Task._resume()=ClusterShell.Task.Task-class.html#_resume"><a title="ClusterShell.Task.Task._resume" class="py-name" href="#" onclick="return doclink('link-94', '_resume', 'link-94');">_resume</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
463 <a name="L360"></a><tt class="py-lineno"> 360</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
464 <a name="L361"></a><tt class="py-lineno"> 361</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="ClusterShell.Task.Task.excepthook" class="py-name" href="#" onclick="return doclink('link-95', 'excepthook', 'link-89');">excepthook</a></tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exc_info</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
465 <a name="L362"></a><tt class="py-lineno"> 362</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_quit</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
466 <a name="L363"></a><tt class="py-lineno"> 363</tt> <tt class="py-line"> </tt>
467 <a name="L364"></a><tt class="py-lineno"> 364</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name" targets="Method ClusterShell.Task.Task._terminate()=ClusterShell.Task.Task-class.html#_terminate"><a title="ClusterShell.Task.Task._terminate" class="py-name" href="#" onclick="return doclink('link-96', '_terminate', 'link-96');">_terminate</a></tt><tt class="py-op">(</tt><tt class="py-name">kill</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
468 </div><a name="L365"></a><tt class="py-lineno"> 365</tt> <tt class="py-line"> </tt>
469 <a name="Task._run"></a><div id="Task._run-def"><a name="L366"></a><tt class="py-lineno"> 366</tt> <a class="py-toggle" href="#" id="Task._run-toggle" onclick="return toggle('Task._run');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_run">_run</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
470 </div><div id="Task._run-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._run-expanded"><a name="L367"></a><tt class="py-lineno"> 367</tt> <tt class="py-line"> <tt class="py-docstring">"""Run task (always called from its self thread)."""</tt> </tt>
471 <a name="L368"></a><tt class="py-lineno"> 368</tt> <tt class="py-line"> <tt class="py-comment"># check if task is already running</tt> </tt>
472 <a name="L369"></a><tt class="py-lineno"> 369</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">_run_lock</tt><tt class="py-op">.</tt><tt class="py-name">locked</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
473 <a name="L370"></a><tt class="py-lineno"> 370</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-97" class="py-name" targets="Class ClusterShell.Task.AlreadyRunningError=ClusterShell.Task.AlreadyRunningError-class.html"><a title="ClusterShell.Task.AlreadyRunningError" class="py-name" href="#" onclick="return doclink('link-97', 'AlreadyRunningError', 'link-97');">AlreadyRunningError</a></tt><tt class="py-op">(</tt><tt class="py-string">"task is already running"</tt><tt class="py-op">)</tt> </tt>
474 <a name="L371"></a><tt class="py-lineno"> 371</tt> <tt class="py-line"> <tt class="py-comment"># use with statement later</tt> </tt>
475 <a name="L372"></a><tt class="py-lineno"> 372</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
476 <a name="L373"></a><tt class="py-lineno"> 373</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_run_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
477 <a name="L374"></a><tt class="py-lineno"> 374</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.run()=ClusterShell.Engine.Engine.Engine-class.html#run"><a title="ClusterShell.Engine.Engine.Engine.run" class="py-name" href="#" onclick="return doclink('link-98', 'run', 'link-98');">run</a></tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
478 <a name="L375"></a><tt class="py-lineno"> 375</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
479 <a name="L376"></a><tt class="py-lineno"> 376</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_run_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
480 </div><a name="L377"></a><tt class="py-lineno"> 377</tt> <tt class="py-line"> </tt>
481 <a name="Task.default"></a><div id="Task.default-def"><a name="L378"></a><tt class="py-lineno"> 378</tt> <a class="py-toggle" href="#" id="Task.default-toggle" onclick="return toggle('Task.default');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#default">default</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">default_key</tt><tt class="py-op">,</tt> <tt class="py-param">def_val</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
482 </div><div id="Task.default-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.default-expanded"><a name="L379"></a><tt class="py-lineno"> 379</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
483 <a name="L380"></a><tt class="py-lineno"> 380</tt> <tt class="py-line"><tt class="py-docstring"> Return per-task value for key from the "default" dictionary.</tt> </tt>
484 <a name="L381"></a><tt class="py-lineno"> 381</tt> <tt class="py-line"><tt class="py-docstring"> See set_default() for a list of reserved task default_keys.</tt> </tt>
485 <a name="L382"></a><tt class="py-lineno"> 382</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
486 <a name="L383"></a><tt class="py-lineno"> 383</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
487 <a name="L384"></a><tt class="py-lineno"> 384</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
488 <a name="L385"></a><tt class="py-lineno"> 385</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">_default</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
489 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-99', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">default_key</tt><tt class="py-op">,</tt> <tt class="py-name">def_val</tt><tt class="py-op">)</tt> </tt>
490 <a name="L386"></a><tt class="py-lineno"> 386</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
491 <a name="L387"></a><tt class="py-lineno"> 387</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
492 </div><a name="L388"></a><tt class="py-lineno"> 388</tt> <tt class="py-line"> </tt>
493 <a name="Task.set_default"></a><div id="Task.set_default-def"><a name="L389"></a><tt class="py-lineno"> 389</tt> <a class="py-toggle" href="#" id="Task.set_default-toggle" onclick="return toggle('Task.set_default');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#set_default">set_default</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">default_key</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
494 </div><div id="Task.set_default-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.set_default-expanded"><a name="L390"></a><tt class="py-lineno"> 390</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
495 <a name="L391"></a><tt class="py-lineno"> 391</tt> <tt class="py-line"><tt class="py-docstring"> Set task value for specified key in the dictionary "default".</tt> </tt>
496 <a name="L392"></a><tt class="py-lineno"> 392</tt> <tt class="py-line"><tt class="py-docstring"> Users may store their own task-specific key, value pairs</tt> </tt>
497 <a name="L393"></a><tt class="py-lineno"> 393</tt> <tt class="py-line"><tt class="py-docstring"> using this method and retrieve them with default().</tt> </tt>
498 <a name="L394"></a><tt class="py-lineno"> 394</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
499 <a name="L395"></a><tt class="py-lineno"> 395</tt> <tt class="py-line"><tt class="py-docstring"> Task default_keys are:</tt> </tt>
500 <a name="L396"></a><tt class="py-lineno"> 396</tt> <tt class="py-line"><tt class="py-docstring"> - "stderr": Boolean value indicating whether to enable</tt> </tt>
501 <a name="L397"></a><tt class="py-lineno"> 397</tt> <tt class="py-line"><tt class="py-docstring"> stdout/stderr separation when using task.shell(), if not</tt> </tt>
502 <a name="L398"></a><tt class="py-lineno"> 398</tt> <tt class="py-line"><tt class="py-docstring"> specified explicitly (default: False).</tt> </tt>
503 <a name="L399"></a><tt class="py-lineno"> 399</tt> <tt class="py-line"><tt class="py-docstring"> - "stdout_msgtree": Whether to enable standard output MsgTree</tt> </tt>
504 <a name="L400"></a><tt class="py-lineno"> 400</tt> <tt class="py-line"><tt class="py-docstring"> for automatic internal gathering of result messages</tt> </tt>
505 <a name="L401"></a><tt class="py-lineno"> 401</tt> <tt class="py-line"><tt class="py-docstring"> (default: True).</tt> </tt>
506 <a name="L402"></a><tt class="py-lineno"> 402</tt> <tt class="py-line"><tt class="py-docstring"> - "stderr_msgtree": Same for stderr (default: True).</tt> </tt>
507 <a name="L403"></a><tt class="py-lineno"> 403</tt> <tt class="py-line"><tt class="py-docstring"> - "engine": Used to specify an underlying Engine explicitly</tt> </tt>
508 <a name="L404"></a><tt class="py-lineno"> 404</tt> <tt class="py-line"><tt class="py-docstring"> (default: "auto").</tt> </tt>
509 <a name="L405"></a><tt class="py-lineno"> 405</tt> <tt class="py-line"><tt class="py-docstring"> - "port_qlimit": Size of port messages queue (default: 32).</tt> </tt>
510 <a name="L406"></a><tt class="py-lineno"> 406</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
511 <a name="L407"></a><tt class="py-lineno"> 407</tt> <tt class="py-line"><tt class="py-docstring"> Threading considerations</tt> </tt>
512 <a name="L408"></a><tt class="py-lineno"> 408</tt> <tt class="py-line"><tt class="py-docstring"> ========================</tt> </tt>
513 <a name="L409"></a><tt class="py-lineno"> 409</tt> <tt class="py-line"><tt class="py-docstring"> Unlike set_info(), when called from the task's thread or</tt> </tt>
514 <a name="L410"></a><tt class="py-lineno"> 410</tt> <tt class="py-line"><tt class="py-docstring"> not, set_default() immediately updates the underlying</tt> </tt>
515 <a name="L411"></a><tt class="py-lineno"> 411</tt> <tt class="py-line"><tt class="py-docstring"> dictionary in a thread-safe manner. This method doesn't</tt> </tt>
516 <a name="L412"></a><tt class="py-lineno"> 412</tt> <tt class="py-line"><tt class="py-docstring"> wake up the engine when called.</tt> </tt>
517 <a name="L413"></a><tt class="py-lineno"> 413</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
518 <a name="L414"></a><tt class="py-lineno"> 414</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
519 <a name="L415"></a><tt class="py-lineno"> 415</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
520 <a name="L416"></a><tt class="py-lineno"> 416</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default</tt><tt class="py-op">[</tt><tt class="py-name">default_key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
521 <a name="L417"></a><tt class="py-lineno"> 417</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
522 <a name="L418"></a><tt class="py-lineno"> 418</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_default_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
523 </div><a name="L419"></a><tt class="py-lineno"> 419</tt> <tt class="py-line"> </tt>
524 <a name="Task.info"></a><div id="Task.info-def"><a name="L420"></a><tt class="py-lineno"> 420</tt> <a class="py-toggle" href="#" id="Task.info-toggle" onclick="return toggle('Task.info');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#info">info</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">info_key</tt><tt class="py-op">,</tt> <tt class="py-param">def_val</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
525 </div><div id="Task.info-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.info-expanded"><a name="L421"></a><tt class="py-lineno"> 421</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
526 <a name="L422"></a><tt class="py-lineno"> 422</tt> <tt class="py-line"><tt class="py-docstring"> Return per-task information. See set_info() for a list of</tt> </tt>
527 <a name="L423"></a><tt class="py-lineno"> 423</tt> <tt class="py-line"><tt class="py-docstring"> reserved task info_keys.</tt> </tt>
528 <a name="L424"></a><tt class="py-lineno"> 424</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
529 <a name="L425"></a><tt class="py-lineno"> 425</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">_info</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
530 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-100', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">info_key</tt><tt class="py-op">,</tt> <tt class="py-name">def_val</tt><tt class="py-op">)</tt> </tt>
531 </div><a name="L426"></a><tt class="py-lineno"> 426</tt> <tt class="py-line"> </tt>
532 <a name="L427"></a><tt class="py-lineno"> 427</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">tasksyncmethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
533 <a name="Task.set_info"></a><div id="Task.set_info-def"><a name="L428"></a><tt class="py-lineno"> 428</tt> <a class="py-toggle" href="#" id="Task.set_info-toggle" onclick="return toggle('Task.set_info');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#set_info">set_info</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">info_key</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
534 </div><div id="Task.set_info-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.set_info-expanded"><a name="L429"></a><tt class="py-lineno"> 429</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
535 <a name="L430"></a><tt class="py-lineno"> 430</tt> <tt class="py-line"><tt class="py-docstring"> Set task value for a specific key information. Key, value</tt> </tt>
536 <a name="L431"></a><tt class="py-lineno"> 431</tt> <tt class="py-line"><tt class="py-docstring"> pairs can be passed to the engine and/or workers.</tt> </tt>
537 <a name="L432"></a><tt class="py-lineno"> 432</tt> <tt class="py-line"><tt class="py-docstring"> Users may store their own task-specific info key, value pairs</tt> </tt>
538 <a name="L433"></a><tt class="py-lineno"> 433</tt> <tt class="py-line"><tt class="py-docstring"> using this method and retrieve them with info().</tt> </tt>
539 <a name="L434"></a><tt class="py-lineno"> 434</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
540 <a name="L435"></a><tt class="py-lineno"> 435</tt> <tt class="py-line"><tt class="py-docstring"> Task info_keys are:</tt> </tt>
541 <a name="L436"></a><tt class="py-lineno"> 436</tt> <tt class="py-line"><tt class="py-docstring"> - "debug": Boolean value indicating whether to enable library</tt> </tt>
542 <a name="L437"></a><tt class="py-lineno"> 437</tt> <tt class="py-line"><tt class="py-docstring"> debugging messages (default: False).</tt> </tt>
543 <a name="L438"></a><tt class="py-lineno"> 438</tt> <tt class="py-line"><tt class="py-docstring"> - "print_debug": Debug messages processing function. This</tt> </tt>
544 <a name="L439"></a><tt class="py-lineno"> 439</tt> <tt class="py-line"><tt class="py-docstring"> function takes 2 arguments: the task instance and the</tt> </tt>
545 <a name="L440"></a><tt class="py-lineno"> 440</tt> <tt class="py-line"><tt class="py-docstring"> message string (default: an internal function doing standard</tt> </tt>
546 <a name="L441"></a><tt class="py-lineno"> 441</tt> <tt class="py-line"><tt class="py-docstring"> print).</tt> </tt>
547 <a name="L442"></a><tt class="py-lineno"> 442</tt> <tt class="py-line"><tt class="py-docstring"> - "fanout": Max number of registered clients in Engine at a</tt> </tt>
548 <a name="L443"></a><tt class="py-lineno"> 443</tt> <tt class="py-line"><tt class="py-docstring"> time (default: 64).</tt> </tt>
549 <a name="L444"></a><tt class="py-lineno"> 444</tt> <tt class="py-line"><tt class="py-docstring"> - "connect_timeout": Time in seconds to wait for connecting to</tt> </tt>
550 <a name="L445"></a><tt class="py-lineno"> 445</tt> <tt class="py-line"><tt class="py-docstring"> remote host before aborting (default: 10).</tt> </tt>
551 <a name="L446"></a><tt class="py-lineno"> 446</tt> <tt class="py-line"><tt class="py-docstring"> - "command_timeout": Time in seconds to wait for a command to</tt> </tt>
552 <a name="L447"></a><tt class="py-lineno"> 447</tt> <tt class="py-line"><tt class="py-docstring"> complete before aborting (default: 0, which means</tt> </tt>
553 <a name="L448"></a><tt class="py-lineno"> 448</tt> <tt class="py-line"><tt class="py-docstring"> unlimited).</tt> </tt>
554 <a name="L449"></a><tt class="py-lineno"> 449</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
555 <a name="L450"></a><tt class="py-lineno"> 450</tt> <tt class="py-line"><tt class="py-docstring"> Threading considerations</tt> </tt>
556 <a name="L451"></a><tt class="py-lineno"> 451</tt> <tt class="py-line"><tt class="py-docstring"> ========================</tt> </tt>
557 <a name="L452"></a><tt class="py-lineno"> 452</tt> <tt class="py-line"><tt class="py-docstring"> Unlike set_default(), the underlying info dictionary is only</tt> </tt>
558 <a name="L453"></a><tt class="py-lineno"> 453</tt> <tt class="py-line"><tt class="py-docstring"> modified from the task's thread. So calling set_info() from</tt> </tt>
559 <a name="L454"></a><tt class="py-lineno"> 454</tt> <tt class="py-line"><tt class="py-docstring"> another thread leads to queueing the request for late apply</tt> </tt>
560 <a name="L455"></a><tt class="py-lineno"> 455</tt> <tt class="py-line"><tt class="py-docstring"> (at run time) using the task dispatch port. When received,</tt> </tt>
561 <a name="L456"></a><tt class="py-lineno"> 456</tt> <tt class="py-line"><tt class="py-docstring"> the request wakes up the engine when the task is running and</tt> </tt>
562 <a name="L457"></a><tt class="py-lineno"> 457</tt> <tt class="py-line"><tt class="py-docstring"> the info dictionary is then updated.</tt> </tt>
563 <a name="L458"></a><tt class="py-lineno"> 458</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
564 <a name="L459"></a><tt class="py-lineno"> 459</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_info</tt><tt class="py-op">[</tt><tt class="py-name">info_key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
565 </div><a name="L460"></a><tt class="py-lineno"> 460</tt> <tt class="py-line"> </tt>
566 <a name="Task.shell"></a><div id="Task.shell-def"><a name="L461"></a><tt class="py-lineno"> 461</tt> <a class="py-toggle" href="#" id="Task.shell-toggle" onclick="return toggle('Task.shell');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#shell">shell</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">command</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>
567 </div><div id="Task.shell-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.shell-expanded"><a name="L462"></a><tt class="py-lineno"> 462</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
568 <a name="L463"></a><tt class="py-lineno"> 463</tt> <tt class="py-line"><tt class="py-docstring"> Schedule a shell command for local or distant execution.</tt> </tt>
569 <a name="L464"></a><tt class="py-lineno"> 464</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
570 <a name="L465"></a><tt class="py-lineno"> 465</tt> <tt class="py-line"><tt class="py-docstring"> Local usage::</tt> </tt>
571 <a name="L466"></a><tt class="py-lineno"> 466</tt> <tt class="py-line"><tt class="py-docstring"> task.shell(command [, key=key] [, handler=handler]</tt> </tt>
572 <a name="L467"></a><tt class="py-lineno"> 467</tt> <tt class="py-line"><tt class="py-docstring"> [, timeout=secs] [, autoclose=enable_autoclose]</tt> </tt>
573 <a name="L468"></a><tt class="py-lineno"> 468</tt> <tt class="py-line"><tt class="py-docstring"> [, stderr=enable_stderr])</tt> </tt>
574 <a name="L469"></a><tt class="py-lineno"> 469</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
575 <a name="L470"></a><tt class="py-lineno"> 470</tt> <tt class="py-line"><tt class="py-docstring"> Distant usage::</tt> </tt>
576 <a name="L471"></a><tt class="py-lineno"> 471</tt> <tt class="py-line"><tt class="py-docstring"> task.shell(command, nodes=nodeset [, handler=handler]</tt> </tt>
577 <a name="L472"></a><tt class="py-lineno"> 472</tt> <tt class="py-line"><tt class="py-docstring"> [, timeout=secs], [, autoclose=enable_autoclose]</tt> </tt>
578 <a name="L473"></a><tt class="py-lineno"> 473</tt> <tt class="py-line"><tt class="py-docstring"> [, strderr=enable_stderr])</tt> </tt>
579 <a name="L474"></a><tt class="py-lineno"> 474</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
580 <a name="L475"></a><tt class="py-lineno"> 475</tt> <tt class="py-line"> </tt>
581 <a name="L476"></a><tt class="py-lineno"> 476</tt> <tt class="py-line"> <tt class="py-name">handler</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
582 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-101', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"handler"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
583 <a name="L477"></a><tt class="py-lineno"> 477</tt> <tt class="py-line"> <tt class="py-name">timeo</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
584 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-102', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
585 <a name="L478"></a><tt class="py-lineno"> 478</tt> <tt class="py-line"> <tt class="py-name">ac</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
586 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-103', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"autoclose"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
587 <a name="L479"></a><tt class="py-lineno"> 479</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
588 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-104', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"stderr"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-105', 'default', 'link-42');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"stderr"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
589 <a name="L480"></a><tt class="py-lineno"> 480</tt> <tt class="py-line"> </tt>
590 <a name="L481"></a><tt class="py-lineno"> 481</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
591 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-106', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"nodes"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
592 <a name="L482"></a><tt class="py-lineno"> 482</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
593 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-107', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"key"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> \ </tt>
594 <a name="L483"></a><tt class="py-lineno"> 483</tt> <tt class="py-line"> <tt class="py-string">"'key' argument not supported for distant command"</tt> </tt>
595 <a name="L484"></a><tt class="py-lineno"> 484</tt> <tt class="py-line"> </tt>
596 <a name="L485"></a><tt class="py-lineno"> 485</tt> <tt class="py-line"> <tt class="py-comment"># create ssh-based worker</tt> </tt>
597 <a name="L486"></a><tt class="py-lineno"> 486</tt> <tt class="py-line"> <tt class="py-name">worker</tt> <tt class="py-op">=</tt> <tt id="link-108" class="py-name"><a title="ClusterShell.Worker.Ssh.WorkerSsh" class="py-name" href="#" onclick="return doclink('link-108', 'WorkerSsh', 'link-27');">WorkerSsh</a></tt><tt class="py-op">(</tt><tt id="link-109" class="py-name"><a title="ClusterShell.NodeSet
598 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-109', 'NodeSet', 'link-39');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">"nodes"</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">command</tt><tt class="py-op">=</tt><tt class="py-name">command</tt><tt class="py-op">,</tt> </tt>
599 <a name="L487"></a><tt class="py-lineno"> 487</tt> <tt class="py-line"> <tt class="py-name">handler</tt><tt class="py-op">=</tt><tt class="py-name">handler</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">=</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt class="py-name">timeo</tt><tt class="py-op">,</tt> </tt>
600 <a name="L488"></a><tt class="py-lineno"> 488</tt> <tt class="py-line"> <tt class="py-name">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">ac</tt><tt class="py-op">)</tt> </tt>
601 <a name="L489"></a><tt class="py-lineno"> 489</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
602 <a name="L490"></a><tt class="py-lineno"> 490</tt> <tt class="py-line"> <tt class="py-comment"># create (local) worker</tt> </tt>
603 <a name="L491"></a><tt class="py-lineno"> 491</tt> <tt class="py-line"> <tt class="py-name">worker</tt> <tt class="py-op">=</tt> <tt id="link-110" class="py-name"><a title="ClusterShell.Worker.Popen.WorkerPopen" class="py-name" href="#" onclick="return doclink('link-110', 'WorkerPopen', 'link-31');">WorkerPopen</a></tt><tt class="py-op">(</tt><tt class="py-name">command</tt><tt class="py-op">,</tt> <tt class="py-name">key</tt><tt class="py-op">=</tt><tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
604 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-111', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"key"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
605 <a name="L492"></a><tt class="py-lineno"> 492</tt> <tt class="py-line"> <tt class="py-name">handler</tt><tt class="py-op">=</tt><tt class="py-name">handler</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">=</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> </tt>
606 <a name="L493"></a><tt class="py-lineno"> 493</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt class="py-name">timeo</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">ac</tt><tt class="py-op">)</tt> </tt>
607 <a name="L494"></a><tt class="py-lineno"> 494</tt> <tt class="py-line"> </tt>
608 <a name="L495"></a><tt class="py-lineno"> 495</tt> <tt class="py-line"> <tt class="py-comment"># schedule worker for execution in this task</tt> </tt>
609 <a name="L496"></a><tt class="py-lineno"> 496</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.schedule()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#schedule,Method ClusterShell.Task.Task.schedule()=ClusterShell.Task.Task-class.html#schedule"><a title="ClusterShell.Engine.Engine._EngineTimerQ.schedule
610 ClusterShell.Task.Task.schedule" class="py-name" href="#" onclick="return doclink('link-112', 'schedule', 'link-112');">schedule</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">)</tt> </tt>
611 <a name="L497"></a><tt class="py-lineno"> 497</tt> <tt class="py-line"> </tt>
612 <a name="L498"></a><tt class="py-lineno"> 498</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">worker</tt> </tt>
613 </div><a name="L499"></a><tt class="py-lineno"> 499</tt> <tt class="py-line"> </tt>
614 <a name="Task.copy"></a><div id="Task.copy-def"><a name="L500"></a><tt class="py-lineno"> 500</tt> <a class="py-toggle" href="#" id="Task.copy-toggle" onclick="return toggle('Task.copy');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#copy">copy</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">,</tt> <tt class="py-param">dest</tt><tt class="py-op">,</tt> <tt class="py-param">nodes</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>
615 </div><div id="Task.copy-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.copy-expanded"><a name="L501"></a><tt class="py-lineno"> 501</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
616 <a name="L502"></a><tt class="py-lineno"> 502</tt> <tt class="py-line"><tt class="py-docstring"> Copy local file to distant nodes.</tt> </tt>
617 <a name="L503"></a><tt class="py-lineno"> 503</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
618 <a name="L504"></a><tt class="py-lineno"> 504</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">nodes</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-string">"local copy not supported"</tt> </tt>
619 <a name="L505"></a><tt class="py-lineno"> 505</tt> <tt class="py-line"> </tt>
620 <a name="L506"></a><tt class="py-lineno"> 506</tt> <tt class="py-line"> <tt class="py-name">handler</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
621 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-113', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"handler"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
622 <a name="L507"></a><tt class="py-lineno"> 507</tt> <tt class="py-line"> <tt class="py-name">timeo</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
623 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-114', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
624 <a name="L508"></a><tt class="py-lineno"> 508</tt> <tt class="py-line"> <tt class="py-name">preserve</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
625 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-115', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"preserve"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
626 <a name="L509"></a><tt class="py-lineno"> 509</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
627 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-116', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">"stderr"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-117', 'default', 'link-42');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"stderr"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
628 <a name="L510"></a><tt class="py-lineno"> 510</tt> <tt class="py-line"> </tt>
629 <a name="L511"></a><tt class="py-lineno"> 511</tt> <tt class="py-line"> <tt class="py-comment"># create a new copy worker</tt> </tt>
630 <a name="L512"></a><tt class="py-lineno"> 512</tt> <tt class="py-line"> <tt class="py-name">worker</tt> <tt class="py-op">=</tt> <tt id="link-118" class="py-name"><a title="ClusterShell.Worker.Ssh.WorkerSsh" class="py-name" href="#" onclick="return doclink('link-118', 'WorkerSsh', 'link-27');">WorkerSsh</a></tt><tt class="py-op">(</tt><tt class="py-name">nodes</tt><tt class="py-op">,</tt> <tt class="py-name">source</tt><tt class="py-op">=</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-name">dest</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">=</tt><tt class="py-name">handler</tt><tt class="py-op">,</tt> </tt>
631 <a name="L513"></a><tt class="py-lineno"> 513</tt> <tt class="py-line"> <tt class="py-name">stderr</tt><tt class="py-op">=</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt class="py-name">timeo</tt><tt class="py-op">,</tt> <tt class="py-name">preserve</tt><tt class="py-op">=</tt><tt class="py-name">preserve</tt><tt class="py-op">)</tt> </tt>
632 <a name="L514"></a><tt class="py-lineno"> 514</tt> <tt class="py-line"> </tt>
633 <a name="L515"></a><tt class="py-lineno"> 515</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ.schedule
634 ClusterShell.Task.Task.schedule" class="py-name" href="#" onclick="return doclink('link-119', 'schedule', 'link-112');">schedule</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">)</tt> </tt>
635 <a name="L516"></a><tt class="py-lineno"> 516</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">worker</tt> </tt>
636 </div><a name="L517"></a><tt class="py-lineno"> 517</tt> <tt class="py-line"> </tt>
637 <a name="L518"></a><tt class="py-lineno"> 518</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">tasksyncmethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
638 <a name="Task._add_port"></a><div id="Task._add_port-def"><a name="L519"></a><tt class="py-lineno"> 519</tt> <a class="py-toggle" href="#" id="Task._add_port-toggle" onclick="return toggle('Task._add_port');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_add_port">_add_port</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
639 </div><div id="Task._add_port-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._add_port-expanded"><a name="L520"></a><tt class="py-lineno"> 520</tt> <tt class="py-line"> <tt class="py-docstring">"""Add an EnginePort instance to Engine (private method)."""</tt> </tt>
640 <a name="L521"></a><tt class="py-lineno"> 521</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
641 ClusterShell.MsgTree.MsgTree.add
642 ClusterShell.NodeSet.NodeSetBase.add
643 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-120', 'add', 'link-75');">add</a></tt><tt class="py-op">(</tt><tt id="link-121" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-121', 'port', 'link-52');">port</a></tt><tt class="py-op">)</tt> </tt>
644 </div><a name="L522"></a><tt class="py-lineno"> 522</tt> <tt class="py-line"> </tt>
645 <a name="L523"></a><tt class="py-lineno"> 523</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">tasksyncmethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
646 <a name="Task._remove_port"></a><div id="Task._remove_port-def"><a name="L524"></a><tt class="py-lineno"> 524</tt> <a class="py-toggle" href="#" id="Task._remove_port-toggle" onclick="return toggle('Task._remove_port');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_remove_port">_remove_port</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
647 </div><div id="Task._remove_port-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._remove_port-expanded"><a name="L525"></a><tt class="py-lineno"> 525</tt> <tt class="py-line"> <tt class="py-docstring">"""Remove a port from Engine (private method)."""</tt> </tt>
648 <a name="L526"></a><tt class="py-lineno"> 526</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.remove()=ClusterShell.Engine.Engine.Engine-class.html#remove,Method ClusterShell.MsgTree.MsgTree.remove()=ClusterShell.MsgTree.MsgTree-class.html#remove,Method ClusterShell.NodeSet.NodeSetBase.remove()=ClusterShell.NodeSet.NodeSetBase-class.html#remove,Method ClusterShell.NodeSet.RangeSet.remove()=ClusterShell.NodeSet.RangeSet-class.html#remove"><a title="ClusterShell.Engine.Engine.Engine.remove
649 ClusterShell.MsgTree.MsgTree.remove
650 ClusterShell.NodeSet.NodeSetBase.remove
651 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-122', 'remove', 'link-122');">remove</a></tt><tt class="py-op">(</tt><tt id="link-123" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-123', 'port', 'link-52');">port</a></tt><tt class="py-op">)</tt> </tt>
652 </div><a name="L527"></a><tt class="py-lineno"> 527</tt> <tt class="py-line"> </tt>
653 <a name="Task.port"></a><div id="Task.port-def"><a name="L528"></a><tt class="py-lineno"> 528</tt> <a class="py-toggle" href="#" id="Task.port-toggle" onclick="return toggle('Task.port');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#port">port</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
654 </div><div id="Task.port-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.port-expanded"><a name="L529"></a><tt class="py-lineno"> 529</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
655 <a name="L530"></a><tt class="py-lineno"> 530</tt> <tt class="py-line"><tt class="py-docstring"> Create a new task port. A task port is an abstraction object to</tt> </tt>
656 <a name="L531"></a><tt class="py-lineno"> 531</tt> <tt class="py-line"><tt class="py-docstring"> deliver messages reliably between tasks.</tt> </tt>
657 <a name="L532"></a><tt class="py-lineno"> 532</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
658 <a name="L533"></a><tt class="py-lineno"> 533</tt> <tt class="py-line"><tt class="py-docstring"> Basic rules:</tt> </tt>
659 <a name="L534"></a><tt class="py-lineno"> 534</tt> <tt class="py-line"><tt class="py-docstring"> - A task can send messages to another task port (thread safe).</tt> </tt>
660 <a name="L535"></a><tt class="py-lineno"> 535</tt> <tt class="py-line"><tt class="py-docstring"> - A task can receive messages from an acquired port either by</tt> </tt>
661 <a name="L536"></a><tt class="py-lineno"> 536</tt> <tt class="py-line"><tt class="py-docstring"> setting up a notification mechanism or using a polling</tt> </tt>
662 <a name="L537"></a><tt class="py-lineno"> 537</tt> <tt class="py-line"><tt class="py-docstring"> mechanism that may block the task waiting for a message</tt> </tt>
663 <a name="L538"></a><tt class="py-lineno"> 538</tt> <tt class="py-line"><tt class="py-docstring"> sent on the port.</tt> </tt>
664 <a name="L539"></a><tt class="py-lineno"> 539</tt> <tt class="py-line"><tt class="py-docstring"> - A port can be acquired by one task only.</tt> </tt>
665 <a name="L540"></a><tt class="py-lineno"> 540</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
666 <a name="L541"></a><tt class="py-lineno"> 541</tt> <tt class="py-line"><tt class="py-docstring"> If handler is set to a valid EventHandler object, the port is</tt> </tt>
667 <a name="L542"></a><tt class="py-lineno"> 542</tt> <tt class="py-line"><tt class="py-docstring"> a send-once port, ie. a message sent to this port generates an</tt> </tt>
668 <a name="L543"></a><tt class="py-lineno"> 543</tt> <tt class="py-line"><tt class="py-docstring"> ev_msg event notification issued the port's task. If handler</tt> </tt>
669 <a name="L544"></a><tt class="py-lineno"> 544</tt> <tt class="py-line"><tt class="py-docstring"> is not set, the task can only receive messages on the port by</tt> </tt>
670 <a name="L545"></a><tt class="py-lineno"> 545</tt> <tt class="py-line"><tt class="py-docstring"> calling port.msg_recv().</tt> </tt>
671 <a name="L546"></a><tt class="py-lineno"> 546</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
672 <a name="L547"></a><tt class="py-lineno"> 547</tt> <tt class="py-line"> <tt id="link-124" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-124', 'port', 'link-52');">port</a></tt> <tt class="py-op">=</tt> <tt id="link-125" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort" class="py-name" href="#" onclick="return doclink('link-125', 'EnginePort', 'link-23');">EnginePort</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt> </tt>
673 <a name="L548"></a><tt class="py-lineno"> 548</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name" targets="Method ClusterShell.Task.Task._add_port()=ClusterShell.Task.Task-class.html#_add_port"><a title="ClusterShell.Task.Task._add_port" class="py-name" href="#" onclick="return doclink('link-126', '_add_port', 'link-126');">_add_port</a></tt><tt class="py-op">(</tt><tt id="link-127" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-127', 'port', 'link-52');">port</a></tt><tt class="py-op">)</tt> </tt>
674 <a name="L549"></a><tt class="py-lineno"> 549</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-128" class="py-name"><a title="ClusterShell.Task.Task.port" class="py-name" href="#" onclick="return doclink('link-128', 'port', 'link-52');">port</a></tt> </tt>
675 </div><a name="L550"></a><tt class="py-lineno"> 550</tt> <tt class="py-line"> </tt>
676 <a name="L551"></a><tt class="py-lineno"> 551</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">tasksyncmethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
677 <a name="Task.timer"></a><div id="Task.timer-def"><a name="L552"></a><tt class="py-lineno"> 552</tt> <a class="py-toggle" href="#" id="Task.timer-toggle" onclick="return toggle('Task.timer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#timer">timer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fire</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">,</tt> <tt class="py-param">interval</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1.0</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
678 </div><div id="Task.timer-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.timer-expanded"><a name="L553"></a><tt class="py-lineno"> 553</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
679 <a name="L554"></a><tt class="py-lineno"> 554</tt> <tt class="py-line"><tt class="py-docstring"> Create task's timer.</tt> </tt>
680 <a name="L555"></a><tt class="py-lineno"> 555</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
681 <a name="L556"></a><tt class="py-lineno"> 556</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt id="link-129" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.fire()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#fire"><a title="ClusterShell.Engine.Engine._EngineTimerQ.fire" class="py-name" href="#" onclick="return doclink('link-129', 'fire', 'link-129');">fire</a></tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0.0</tt><tt class="py-op">,</tt> \ </tt>
682 <a name="L557"></a><tt class="py-lineno"> 557</tt> <tt class="py-line"> <tt class="py-string">"timer's relative fire time must be a positive floating number"</tt> </tt>
683 <a name="L558"></a><tt class="py-lineno"> 558</tt> <tt class="py-line"> </tt>
684 <a name="L559"></a><tt class="py-lineno"> 559</tt> <tt class="py-line"> <tt id="link-130" class="py-name" targets="Method ClusterShell.Task.Task.timer()=ClusterShell.Task.Task-class.html#timer"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-130', 'timer', 'link-130');">timer</a></tt> <tt class="py-op">=</tt> <tt id="link-131" class="py-name"><a title="ClusterShell.Engine.Engine.EngineTimer" class="py-name" href="#" onclick="return doclink('link-131', 'EngineTimer', 'link-15');">EngineTimer</a></tt><tt class="py-op">(</tt><tt id="link-132" class="py-name"><a title="ClusterShell.Engine.Engine._EngineTimerQ.fire" class="py-name" href="#" onclick="return doclink('link-132', 'fire', 'link-129');">fire</a></tt><tt class="py-op">,</tt> <tt class="py-name">interval</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
685 <a name="L560"></a><tt class="py-lineno"> 560</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.add_timer()=ClusterShell.Engine.Engine.Engine-class.html#add_timer"><a title="ClusterShell.Engine.Engine.Engine.add_timer" class="py-name" href="#" onclick="return doclink('link-133', 'add_timer', 'link-133');">add_timer</a></tt><tt class="py-op">(</tt><tt id="link-134" class="py-name"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-134', 'timer', 'link-130');">timer</a></tt><tt class="py-op">)</tt> </tt>
686 <a name="L561"></a><tt class="py-lineno"> 561</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-135" class="py-name"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-135', 'timer', 'link-130');">timer</a></tt> </tt>
687 </div><a name="L562"></a><tt class="py-lineno"> 562</tt> <tt class="py-line"> </tt>
688 <a name="L563"></a><tt class="py-lineno"> 563</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">tasksyncmethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
689 <a name="Task.schedule"></a><div id="Task.schedule-def"><a name="L564"></a><tt class="py-lineno"> 564</tt> <a class="py-toggle" href="#" id="Task.schedule-toggle" onclick="return toggle('Task.schedule');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#schedule">schedule</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
690 </div><div id="Task.schedule-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.schedule-expanded"><a name="L565"></a><tt class="py-lineno"> 565</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
691 <a name="L566"></a><tt class="py-lineno"> 566</tt> <tt class="py-line"><tt class="py-docstring"> Schedule a worker for execution. Only useful for manually</tt> </tt>
692 <a name="L567"></a><tt class="py-lineno"> 567</tt> <tt class="py-line"><tt class="py-docstring"> instantiated workers.</tt> </tt>
693 <a name="L568"></a><tt class="py-lineno"> 568</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
694 <a name="L569"></a><tt class="py-lineno"> 569</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-136" class="py-name"><a title="ClusterShell.Task
695 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-136', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-137" class="py-name"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-137', '_tasks', 'link-47');">_tasks</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 class="py-string">"deleted task"</tt> </tt>
696 <a name="L570"></a><tt class="py-lineno"> 570</tt> <tt class="py-line"> </tt>
697 <a name="L571"></a><tt class="py-lineno"> 571</tt> <tt class="py-line"> <tt class="py-comment"># bind worker to task self</tt> </tt>
698 <a name="L572"></a><tt class="py-lineno"> 572</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name" targets="Method ClusterShell.Worker.Worker.Worker._set_task()=ClusterShell.Worker.Worker.Worker-class.html#_set_task"><a title="ClusterShell.Worker.Worker.Worker._set_task" class="py-name" href="#" onclick="return doclink('link-138', '_set_task', 'link-138');">_set_task</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
699 <a name="L573"></a><tt class="py-lineno"> 573</tt> <tt class="py-line"> </tt>
700 <a name="L574"></a><tt class="py-lineno"> 574</tt> <tt class="py-line"> <tt class="py-comment"># add worker clients to engine</tt> </tt>
701 <a name="L575"></a><tt class="py-lineno"> 575</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">client</tt> <tt class="py-keyword">in</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name" targets="Method ClusterShell.Worker.Pdsh.WorkerPdsh._engine_clients()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_engine_clients,Method ClusterShell.Worker.Ssh.WorkerSsh._engine_clients()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#_engine_clients,Method ClusterShell.Worker.Worker.Worker._engine_clients()=ClusterShell.Worker.Worker.Worker-class.html#_engine_clients,Method ClusterShell.Worker.Worker.WorkerSimple._engine_clients()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_engine_clients"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh._engine_clients
702 ClusterShell.Worker.Ssh.WorkerSsh._engine_clients
703 ClusterShell.Worker.Worker.Worker._engine_clients
704 ClusterShell.Worker.Worker.WorkerSimple._engine_clients" class="py-name" href="#" onclick="return doclink('link-139', '_engine_clients', 'link-139');">_engine_clients</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
705 <a name="L576"></a><tt class="py-lineno"> 576</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-140" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
706 ClusterShell.MsgTree.MsgTree.add
707 ClusterShell.NodeSet.NodeSetBase.add
708 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-140', 'add', 'link-75');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">client</tt><tt class="py-op">)</tt> </tt>
709 </div><a name="L577"></a><tt class="py-lineno"> 577</tt> <tt class="py-line"> </tt>
710 <a name="Task._resume_thread"></a><div id="Task._resume_thread-def"><a name="L578"></a><tt class="py-lineno"> 578</tt> <a class="py-toggle" href="#" id="Task._resume_thread-toggle" onclick="return toggle('Task._resume_thread');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_resume_thread">_resume_thread</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
711 </div><div id="Task._resume_thread-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._resume_thread-expanded"><a name="L579"></a><tt class="py-lineno"> 579</tt> <tt class="py-line"> <tt class="py-docstring">"""Resume called from another thread."""</tt> </tt>
712 <a name="L580"></a><tt class="py-lineno"> 580</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_cond</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name" targets="Method ClusterShell.Task.Task._SuspendCondition.notify_all()=ClusterShell.Task.Task._SuspendCondition-class.html#notify_all"><a title="ClusterShell.Task.Task._SuspendCondition.notify_all" class="py-name" href="#" onclick="return doclink('link-141', 'notify_all', 'link-141');">notify_all</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
713 </div><a name="L581"></a><tt class="py-lineno"> 581</tt> <tt class="py-line"> </tt>
714 <a name="Task._resume"></a><div id="Task._resume-def"><a name="L582"></a><tt class="py-lineno"> 582</tt> <a class="py-toggle" href="#" id="Task._resume-toggle" onclick="return toggle('Task._resume');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-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>
715 </div><div id="Task._resume-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._resume-expanded"><a name="L583"></a><tt class="py-lineno"> 583</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">thread</tt> <tt class="py-op">==</tt> <tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">currentThread</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
716 <a name="L584"></a><tt class="py-lineno"> 584</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
717 <a name="L585"></a><tt class="py-lineno"> 585</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
718 <a name="L586"></a><tt class="py-lineno"> 586</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name" targets="Method ClusterShell.Task.Task._reset()=ClusterShell.Task.Task-class.html#_reset"><a title="ClusterShell.Task.Task._reset" class="py-name" href="#" onclick="return doclink('link-142', '_reset', 'link-142');">_reset</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
719 <a name="L587"></a><tt class="py-lineno"> 587</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name" targets="Method ClusterShell.Task.Task._run()=ClusterShell.Task.Task-class.html#_run"><a title="ClusterShell.Task.Task._run" class="py-name" href="#" onclick="return doclink('link-143', '_run', 'link-143');">_run</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
720 <a name="L588"></a><tt class="py-lineno"> 588</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-144" class="py-name"><a title="ClusterShell.Engine.Engine.EngineTimeoutException" class="py-name" href="#" onclick="return doclink('link-144', 'EngineTimeoutException', 'link-7');">EngineTimeoutException</a></tt><tt class="py-op">:</tt> </tt>
721 <a name="L589"></a><tt class="py-lineno"> 589</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-145" class="py-name" targets="Class ClusterShell.Task.TimeoutError=ClusterShell.Task.TimeoutError-class.html"><a title="ClusterShell.Task.TimeoutError" class="py-name" href="#" onclick="return doclink('link-145', 'TimeoutError', 'link-145');">TimeoutError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
722 <a name="L590"></a><tt class="py-lineno"> 590</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-146" class="py-name"><a title="ClusterShell.Engine.Engine.EngineAbortException" class="py-name" href="#" onclick="return doclink('link-146', 'EngineAbortException', 'link-3');">EngineAbortException</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
723 <a name="L591"></a><tt class="py-lineno"> 591</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="ClusterShell.Task.Task._terminate" class="py-name" href="#" onclick="return doclink('link-147', '_terminate', 'link-96');">_terminate</a></tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">kill</tt><tt class="py-op">)</tt> </tt>
724 <a name="L592"></a><tt class="py-lineno"> 592</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-148" class="py-name"><a title="ClusterShell.Engine.Engine.EngineAlreadyRunningError" class="py-name" href="#" onclick="return doclink('link-148', 'EngineAlreadyRunningError', 'link-11');">EngineAlreadyRunningError</a></tt><tt class="py-op">:</tt> </tt>
725 <a name="L593"></a><tt class="py-lineno"> 593</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-149" class="py-name"><a title="ClusterShell.Task.AlreadyRunningError" class="py-name" href="#" onclick="return doclink('link-149', 'AlreadyRunningError', 'link-97');">AlreadyRunningError</a></tt><tt class="py-op">(</tt><tt class="py-string">"task engine is already running"</tt><tt class="py-op">)</tt> </tt>
726 <a name="L594"></a><tt class="py-lineno"> 594</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
727 <a name="L595"></a><tt class="py-lineno"> 595</tt> <tt class="py-line"> <tt class="py-comment"># task becomes joinable</tt> </tt>
728 <a name="L596"></a><tt class="py-lineno"> 596</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_join_cond</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
729 <a name="L597"></a><tt class="py-lineno"> 597</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_cond</tt><tt class="py-op">.</tt><tt class="py-name">suspend_count</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
730 <a name="L598"></a><tt class="py-lineno"> 598</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_join_cond</tt><tt class="py-op">.</tt><tt class="py-name">notifyAll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
731 <a name="L599"></a><tt class="py-lineno"> 599</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_join_cond</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
732 </div><a name="L600"></a><tt class="py-lineno"> 600</tt> <tt class="py-line"> </tt>
733 <a name="Task.resume"></a><div id="Task.resume-def"><a name="L601"></a><tt class="py-lineno"> 601</tt> <a class="py-toggle" href="#" id="Task.resume-toggle" onclick="return toggle('Task.resume');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#resume">resume</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
734 </div><div id="Task.resume-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.resume-expanded"><a name="L602"></a><tt class="py-lineno"> 602</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
735 <a name="L603"></a><tt class="py-lineno"> 603</tt> <tt class="py-line"><tt class="py-docstring"> Resume task. If task is task_self(), workers are executed in</tt> </tt>
736 <a name="L604"></a><tt class="py-lineno"> 604</tt> <tt class="py-line"><tt class="py-docstring"> the calling thread so this method will block until workers have</tt> </tt>
737 <a name="L605"></a><tt class="py-lineno"> 605</tt> <tt class="py-line"><tt class="py-docstring"> finished. This is always the case for a single-threaded</tt> </tt>
738 <a name="L606"></a><tt class="py-lineno"> 606</tt> <tt class="py-line"><tt class="py-docstring"> application (eg. which doesn't create other Task() instance</tt> </tt>
739 <a name="L607"></a><tt class="py-lineno"> 607</tt> <tt class="py-line"><tt class="py-docstring"> than task_self()). Otherwise, the current thread doesn't block.</tt> </tt>
740 <a name="L608"></a><tt class="py-lineno"> 608</tt> <tt class="py-line"><tt class="py-docstring"> In that case, you may then want to call task_wait() to wait for</tt> </tt>
741 <a name="L609"></a><tt class="py-lineno"> 609</tt> <tt class="py-line"><tt class="py-docstring"> completion.</tt> </tt>
742 <a name="L610"></a><tt class="py-lineno"> 610</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
743 <a name="L611"></a><tt class="py-lineno"> 611</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">timeout</tt> </tt>
744 <a name="L612"></a><tt class="py-lineno"> 612</tt> <tt class="py-line"> </tt>
745 <a name="L613"></a><tt class="py-lineno"> 613</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_cond</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name" targets="Method ClusterShell.Task.Task._SuspendCondition.atomic_dec()=ClusterShell.Task.Task._SuspendCondition-class.html#atomic_dec"><a title="ClusterShell.Task.Task._SuspendCondition.atomic_dec" class="py-name" href="#" onclick="return doclink('link-150', 'atomic_dec', 'link-150');">atomic_dec</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
746 <a name="L614"></a><tt class="py-lineno"> 614</tt> <tt class="py-line"> </tt>
747 <a name="L615"></a><tt class="py-lineno"> 615</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="ClusterShell.Task.Task._is_task_self" class="py-name" href="#" onclick="return doclink('link-151', '_is_task_self', 'link-53');">_is_task_self</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
748 <a name="L616"></a><tt class="py-lineno"> 616</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="ClusterShell.Task.Task._resume" class="py-name" href="#" onclick="return doclink('link-152', '_resume', 'link-94');">_resume</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
749 <a name="L617"></a><tt class="py-lineno"> 617</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
750 <a name="L618"></a><tt class="py-lineno"> 618</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name" targets="Method ClusterShell.Task.Task._resume_thread()=ClusterShell.Task.Task-class.html#_resume_thread"><a title="ClusterShell.Task.Task._resume_thread" class="py-name" href="#" onclick="return doclink('link-153', '_resume_thread', 'link-153');">_resume_thread</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
751 </div><a name="L619"></a><tt class="py-lineno"> 619</tt> <tt class="py-line"> </tt>
752 <a name="L620"></a><tt class="py-lineno"> 620</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">tasksyncmethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
753 <a name="Task._suspend_wait"></a><div id="Task._suspend_wait-def"><a name="L621"></a><tt class="py-lineno"> 621</tt> <a class="py-toggle" href="#" id="Task._suspend_wait-toggle" onclick="return toggle('Task._suspend_wait');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_suspend_wait">_suspend_wait</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
754 </div><div id="Task._suspend_wait-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._suspend_wait-expanded"><a name="L622"></a><tt class="py-lineno"> 622</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt id="link-154" class="py-name" targets="Function ClusterShell.Task.task_self()=ClusterShell.Task-module.html#task_self"><a title="ClusterShell.Task.task_self" class="py-name" href="#" onclick="return doclink('link-154', 'task_self', 'link-154');">task_self</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt> </tt>
755 <a name="L623"></a><tt class="py-lineno"> 623</tt> <tt class="py-line"> <tt class="py-comment"># atomically set suspend state</tt> </tt>
756 <a name="L624"></a><tt class="py-lineno"> 624</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
757 <a name="L625"></a><tt class="py-lineno"> 625</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspended</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
758 <a name="L626"></a><tt class="py-lineno"> 626</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
759 <a name="L627"></a><tt class="py-lineno"> 627</tt> <tt class="py-line"> </tt>
760 <a name="L628"></a><tt class="py-lineno"> 628</tt> <tt class="py-line"> <tt class="py-comment"># wait for special suspend condition, while releasing l_run</tt> </tt>
761 <a name="L629"></a><tt class="py-lineno"> 629</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_cond</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="ClusterShell.Task.Task._SuspendCondition.wait_check" class="py-name" href="#" onclick="return doclink('link-155', 'wait_check', 'link-93');">wait_check</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_run_lock</tt><tt class="py-op">)</tt> </tt>
762 <a name="L630"></a><tt class="py-lineno"> 630</tt> <tt class="py-line"> </tt>
763 <a name="L631"></a><tt class="py-lineno"> 631</tt> <tt class="py-line"> <tt class="py-comment"># waking up, atomically unset suspend state</tt> </tt>
764 <a name="L632"></a><tt class="py-lineno"> 632</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
765 <a name="L633"></a><tt class="py-lineno"> 633</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspended</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
766 <a name="L634"></a><tt class="py-lineno"> 634</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
767 </div><a name="L635"></a><tt class="py-lineno"> 635</tt> <tt class="py-line"> </tt>
768 <a name="Task.suspend"></a><div id="Task.suspend-def"><a name="L636"></a><tt class="py-lineno"> 636</tt> <a class="py-toggle" href="#" id="Task.suspend-toggle" onclick="return toggle('Task.suspend');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#suspend">suspend</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
769 </div><div id="Task.suspend-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.suspend-expanded"><a name="L637"></a><tt class="py-lineno"> 637</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
770 <a name="L638"></a><tt class="py-lineno"> 638</tt> <tt class="py-line"><tt class="py-docstring"> Suspend task execution. This method may be called from another</tt> </tt>
771 <a name="L639"></a><tt class="py-lineno"> 639</tt> <tt class="py-line"><tt class="py-docstring"> task (thread-safe). The function returns False if the task</tt> </tt>
772 <a name="L640"></a><tt class="py-lineno"> 640</tt> <tt class="py-line"><tt class="py-docstring"> cannot be suspended (eg. it's not running), or returns True if</tt> </tt>
773 <a name="L641"></a><tt class="py-lineno"> 641</tt> <tt class="py-line"><tt class="py-docstring"> the task has been successfully suspended.</tt> </tt>
774 <a name="L642"></a><tt class="py-lineno"> 642</tt> <tt class="py-line"><tt class="py-docstring"> To resume a suspended task, use task.resume().</tt> </tt>
775 <a name="L643"></a><tt class="py-lineno"> 643</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
776 <a name="L644"></a><tt class="py-lineno"> 644</tt> <tt class="py-line"> <tt class="py-comment"># first of all, increase suspend count</tt> </tt>
777 <a name="L645"></a><tt class="py-lineno"> 645</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_cond</tt><tt class="py-op">.</tt><tt id="link-156" class="py-name" targets="Method ClusterShell.Task.Task._SuspendCondition.atomic_inc()=ClusterShell.Task.Task._SuspendCondition-class.html#atomic_inc"><a title="ClusterShell.Task.Task._SuspendCondition.atomic_inc" class="py-name" href="#" onclick="return doclink('link-156', 'atomic_inc', 'link-156');">atomic_inc</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
778 <a name="L646"></a><tt class="py-lineno"> 646</tt> <tt class="py-line"> </tt>
779 <a name="L647"></a><tt class="py-lineno"> 647</tt> <tt class="py-line"> <tt class="py-comment"># call synchronized suspend method</tt> </tt>
780 <a name="L648"></a><tt class="py-lineno"> 648</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name" targets="Method ClusterShell.Task.Task._suspend_wait()=ClusterShell.Task.Task-class.html#_suspend_wait"><a title="ClusterShell.Task.Task._suspend_wait" class="py-name" href="#" onclick="return doclink('link-157', '_suspend_wait', 'link-157');">_suspend_wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
781 <a name="L649"></a><tt class="py-lineno"> 649</tt> <tt class="py-line"> </tt>
782 <a name="L650"></a><tt class="py-lineno"> 650</tt> <tt class="py-line"> <tt class="py-comment"># wait for stopped task</tt> </tt>
783 <a name="L651"></a><tt class="py-lineno"> 651</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_run_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-comment"># run_lock ownership transfer</tt> </tt>
784 <a name="L652"></a><tt class="py-lineno"> 652</tt> <tt class="py-line"> </tt>
785 <a name="L653"></a><tt class="py-lineno"> 653</tt> <tt class="py-line"> <tt class="py-comment"># get result: are we really suspended or just stopped?</tt> </tt>
786 <a name="L654"></a><tt class="py-lineno"> 654</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
787 <a name="L655"></a><tt class="py-lineno"> 655</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
788 <a name="L656"></a><tt class="py-lineno"> 656</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspended</tt><tt class="py-op">:</tt> </tt>
789 <a name="L657"></a><tt class="py-lineno"> 657</tt> <tt class="py-line"> <tt class="py-comment"># not acknowledging suspend state, task is stopped</tt> </tt>
790 <a name="L658"></a><tt class="py-lineno"> 658</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
791 <a name="L659"></a><tt class="py-lineno"> 659</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_run_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
792 <a name="L660"></a><tt class="py-lineno"> 660</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspend_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
793 <a name="L661"></a><tt class="py-lineno"> 661</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">result</tt> </tt>
794 </div><a name="L662"></a><tt class="py-lineno"> 662</tt> <tt class="py-line"> </tt>
795 <a name="L663"></a><tt class="py-lineno"> 663</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">tasksyncmethod</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
796 <a name="Task._abort"></a><div id="Task._abort-def"><a name="L664"></a><tt class="py-lineno"> 664</tt> <a class="py-toggle" href="#" id="Task._abort-toggle" onclick="return toggle('Task._abort');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_abort">_abort</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">kill</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
797 </div><div id="Task._abort-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._abort-expanded"><a name="L665"></a><tt class="py-lineno"> 665</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt id="link-158" class="py-name"><a title="ClusterShell.Task.task_self" class="py-name" href="#" onclick="return doclink('link-158', 'task_self', 'link-154');">task_self</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt> </tt>
798 <a name="L666"></a><tt class="py-lineno"> 666</tt> <tt class="py-line"> <tt class="py-comment"># raise an EngineAbortException when task is running</tt> </tt>
799 <a name="L667"></a><tt class="py-lineno"> 667</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.abort()=ClusterShell.Engine.Engine.Engine-class.html#abort,Method ClusterShell.Task.Task.abort()=ClusterShell.Task.Task-class.html#abort"><a title="ClusterShell.Engine.Engine.Engine.abort
800 ClusterShell.Task.Task.abort" class="py-name" href="#" onclick="return doclink('link-159', 'abort', 'link-159');">abort</a></tt><tt class="py-op">(</tt><tt class="py-name">kill</tt><tt class="py-op">)</tt> </tt>
801 </div><a name="L668"></a><tt class="py-lineno"> 668</tt> <tt class="py-line"> </tt>
802 <a name="Task.abort"></a><div id="Task.abort-def"><a name="L669"></a><tt class="py-lineno"> 669</tt> <a class="py-toggle" href="#" id="Task.abort-toggle" onclick="return toggle('Task.abort');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#abort">abort</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">kill</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
803 </div><div id="Task.abort-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.abort-expanded"><a name="L670"></a><tt class="py-lineno"> 670</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
804 <a name="L671"></a><tt class="py-lineno"> 671</tt> <tt class="py-line"><tt class="py-docstring"> Abort a task. Aborting a task removes (and stops when needed)</tt> </tt>
805 <a name="L672"></a><tt class="py-lineno"> 672</tt> <tt class="py-line"><tt class="py-docstring"> all workers. If optional parameter kill is True, the task</tt> </tt>
806 <a name="L673"></a><tt class="py-lineno"> 673</tt> <tt class="py-line"><tt class="py-docstring"> object is unbound from the current thread, so calling</tt> </tt>
807 <a name="L674"></a><tt class="py-lineno"> 674</tt> <tt class="py-line"><tt class="py-docstring"> task_self() creates a new Task object.</tt> </tt>
808 <a name="L675"></a><tt class="py-lineno"> 675</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
809 <a name="L676"></a><tt class="py-lineno"> 676</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">_run_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
810 <a name="L677"></a><tt class="py-lineno"> 677</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_quit</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
811 <a name="L678"></a><tt class="py-lineno"> 678</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_run_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
812 <a name="L679"></a><tt class="py-lineno"> 679</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="ClusterShell.Task.Task._is_task_self" class="py-name" href="#" onclick="return doclink('link-160', '_is_task_self', 'link-53');">_is_task_self</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
813 <a name="L680"></a><tt class="py-lineno"> 680</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="ClusterShell.Task.Task._terminate" class="py-name" href="#" onclick="return doclink('link-161', '_terminate', 'link-96');">_terminate</a></tt><tt class="py-op">(</tt><tt class="py-name">kill</tt><tt class="py-op">)</tt> </tt>
814 <a name="L681"></a><tt class="py-lineno"> 681</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
815 <a name="L682"></a><tt class="py-lineno"> 682</tt> <tt class="py-line"> <tt class="py-comment"># abort on stopped/suspended task</tt> </tt>
816 <a name="L683"></a><tt class="py-lineno"> 683</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name" targets="Method ClusterShell.Task.Task.resume()=ClusterShell.Task.Task-class.html#resume"><a title="ClusterShell.Task.Task.resume" class="py-name" href="#" onclick="return doclink('link-162', 'resume', 'link-162');">resume</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
817 <a name="L684"></a><tt class="py-lineno"> 684</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
818 <a name="L685"></a><tt class="py-lineno"> 685</tt> <tt class="py-line"> <tt class="py-comment"># self._run_lock is locked, call synchronized method</tt> </tt>
819 <a name="L686"></a><tt class="py-lineno"> 686</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name" targets="Method ClusterShell.Task.Task._abort()=ClusterShell.Task.Task-class.html#_abort"><a title="ClusterShell.Task.Task._abort" class="py-name" href="#" onclick="return doclink('link-163', '_abort', 'link-163');">_abort</a></tt><tt class="py-op">(</tt><tt class="py-name">kill</tt><tt class="py-op">)</tt> </tt>
820 </div><a name="L687"></a><tt class="py-lineno"> 687</tt> <tt class="py-line"> </tt>
821 <a name="Task._terminate"></a><div id="Task._terminate-def"><a name="L688"></a><tt class="py-lineno"> 688</tt> <a class="py-toggle" href="#" id="Task._terminate-toggle" onclick="return toggle('Task._terminate');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_terminate">_terminate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">kill</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
822 </div><div id="Task._terminate-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._terminate-expanded"><a name="L689"></a><tt class="py-lineno"> 689</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
823 <a name="L690"></a><tt class="py-lineno"> 690</tt> <tt class="py-line"><tt class="py-docstring"> Abort completion subroutine.</tt> </tt>
824 <a name="L691"></a><tt class="py-lineno"> 691</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
825 <a name="L692"></a><tt class="py-lineno"> 692</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">kill</tt><tt class="py-op">:</tt> </tt>
826 <a name="L693"></a><tt class="py-lineno"> 693</tt> <tt class="py-line"> <tt class="py-comment"># invalidate dispatch port</tt> </tt>
827 <a name="L694"></a><tt class="py-lineno"> 694</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_port</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
828 <a name="L695"></a><tt class="py-lineno"> 695</tt> <tt class="py-line"> <tt class="py-comment"># clear engine</tt> </tt>
829 <a name="L696"></a><tt class="py-lineno"> 696</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-164" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clear()=ClusterShell.Engine.Engine.Engine-class.html#clear,Method ClusterShell.Engine.Engine._EngineTimerQ.clear()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear,Method ClusterShell.MsgTree.MsgTree.clear()=ClusterShell.MsgTree.MsgTree-class.html#clear,Method ClusterShell.NodeSet.NodeSetBase.clear()=ClusterShell.NodeSet.NodeSetBase-class.html#clear,Method ClusterShell.NodeSet.RangeSet.clear()=ClusterShell.NodeSet.RangeSet-class.html#clear"><a title="ClusterShell.Engine.Engine.Engine.clear
830 ClusterShell.Engine.Engine._EngineTimerQ.clear
831 ClusterShell.MsgTree.MsgTree.clear
832 ClusterShell.NodeSet.NodeSetBase.clear
833 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-164', 'clear', 'link-164');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
834 <a name="L697"></a><tt class="py-lineno"> 697</tt> <tt class="py-line"> </tt>
835 <a name="L698"></a><tt class="py-lineno"> 698</tt> <tt class="py-line"> <tt class="py-comment"># clear result objects</tt> </tt>
836 <a name="L699"></a><tt class="py-lineno"> 699</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="ClusterShell.Task.Task._reset" class="py-name" href="#" onclick="return doclink('link-165', '_reset', 'link-142');">_reset</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
837 <a name="L700"></a><tt class="py-lineno"> 700</tt> <tt class="py-line"> </tt>
838 <a name="L701"></a><tt class="py-lineno"> 701</tt> <tt class="py-line"> <tt class="py-comment"># destroy task if needed</tt> </tt>
839 <a name="L702"></a><tt class="py-lineno"> 702</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">kill</tt><tt class="py-op">:</tt> </tt>
840 <a name="L703"></a><tt class="py-lineno"> 703</tt> <tt class="py-line"> <tt id="link-166" class="py-name"><a title="ClusterShell.Task
841 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-166', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-167" class="py-name"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-167', '_task_lock', 'link-49');">_task_lock</a></tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
842 <a name="L704"></a><tt class="py-lineno"> 704</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
843 <a name="L705"></a><tt class="py-lineno"> 705</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt id="link-168" class="py-name"><a title="ClusterShell.Task
844 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-168', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-169" class="py-name"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-169', '_tasks', 'link-47');">_tasks</a></tt><tt class="py-op">[</tt><tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">currentThread</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
845 <a name="L706"></a><tt class="py-lineno"> 706</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
846 <a name="L707"></a><tt class="py-lineno"> 707</tt> <tt class="py-line"> <tt id="link-170" class="py-name"><a title="ClusterShell.Task
847 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-170', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-171', '_task_lock', 'link-49');">_task_lock</a></tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
848 </div><a name="L708"></a><tt class="py-lineno"> 708</tt> <tt class="py-line"> </tt>
849 <a name="Task.join"></a><div id="Task.join-def"><a name="L709"></a><tt class="py-lineno"> 709</tt> <a class="py-toggle" href="#" id="Task.join-toggle" onclick="return toggle('Task.join');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#join">join</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
850 </div><div id="Task.join-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.join-expanded"><a name="L710"></a><tt class="py-lineno"> 710</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
851 <a name="L711"></a><tt class="py-lineno"> 711</tt> <tt class="py-line"><tt class="py-docstring"> Suspend execution of the calling thread until the target task</tt> </tt>
852 <a name="L712"></a><tt class="py-lineno"> 712</tt> <tt class="py-line"><tt class="py-docstring"> terminates, unless the target task has already terminated.</tt> </tt>
853 <a name="L713"></a><tt class="py-lineno"> 713</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
854 <a name="L714"></a><tt class="py-lineno"> 714</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_join_cond</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
855 <a name="L715"></a><tt class="py-lineno"> 715</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
856 <a name="L716"></a><tt class="py-lineno"> 716</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">_suspend_cond</tt><tt class="py-op">.</tt><tt class="py-name">suspend_count</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
857 <a name="L717"></a><tt class="py-lineno"> 717</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_suspended</tt><tt class="py-op">:</tt> </tt>
858 <a name="L718"></a><tt class="py-lineno"> 718</tt> <tt class="py-line"> <tt class="py-comment"># ignore stopped task</tt> </tt>
859 <a name="L719"></a><tt class="py-lineno"> 719</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
860 <a name="L720"></a><tt class="py-lineno"> 720</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_join_cond</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="ClusterShell.Task.Task.wait" class="py-name" href="#" onclick="return doclink('link-172', 'wait', 'link-56');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
861 <a name="L721"></a><tt class="py-lineno"> 721</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
862 <a name="L722"></a><tt class="py-lineno"> 722</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_join_cond</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
863 </div><a name="L723"></a><tt class="py-lineno"> 723</tt> <tt class="py-line"> </tt>
864 <a name="Task.running"></a><div id="Task.running-def"><a name="L724"></a><tt class="py-lineno"> 724</tt> <a class="py-toggle" href="#" id="Task.running-toggle" onclick="return toggle('Task.running');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#running">running</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
865 </div><div id="Task.running-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.running-expanded"><a name="L725"></a><tt class="py-lineno"> 725</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
866 <a name="L726"></a><tt class="py-lineno"> 726</tt> <tt class="py-line"><tt class="py-docstring"> Return True if the task is running.</tt> </tt>
867 <a name="L727"></a><tt class="py-lineno"> 727</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
868 <a name="L728"></a><tt class="py-lineno"> 728</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">_engine</tt><tt class="py-op">.</tt><tt id="link-173" class="py-name" targets="Method ClusterShell.Task.Task.running()=ClusterShell.Task.Task-class.html#running"><a title="ClusterShell.Task.Task.running" class="py-name" href="#" onclick="return doclink('link-173', 'running', 'link-173');">running</a></tt> </tt>
869 </div><a name="L729"></a><tt class="py-lineno"> 729</tt> <tt class="py-line"> </tt>
870 <a name="Task._reset"></a><div id="Task._reset-def"><a name="L730"></a><tt class="py-lineno"> 730</tt> <a class="py-toggle" href="#" id="Task._reset-toggle" onclick="return toggle('Task._reset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_reset">_reset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
871 </div><div id="Task._reset-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._reset-expanded"><a name="L731"></a><tt class="py-lineno"> 731</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
872 <a name="L732"></a><tt class="py-lineno"> 732</tt> <tt class="py-line"><tt class="py-docstring"> Reset buffers and retcodes management variables.</tt> </tt>
873 <a name="L733"></a><tt class="py-lineno"> 733</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
874 <a name="L734"></a><tt class="py-lineno"> 734</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clear
875 ClusterShell.Engine.Engine._EngineTimerQ.clear
876 ClusterShell.MsgTree.MsgTree.clear
877 ClusterShell.NodeSet.NodeSetBase.clear
878 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-174', 'clear', 'link-164');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
879 <a name="L735"></a><tt class="py-lineno"> 735</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-175" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clear
880 ClusterShell.Engine.Engine._EngineTimerQ.clear
881 ClusterShell.MsgTree.MsgTree.clear
882 ClusterShell.NodeSet.NodeSetBase.clear
883 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-175', 'clear', 'link-164');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
884 <a name="L736"></a><tt class="py-lineno"> 736</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_source_rc</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
885 <a name="L737"></a><tt class="py-lineno"> 737</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
886 <a name="L738"></a><tt class="py-lineno"> 738</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_rc</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
887 <a name="L739"></a><tt class="py-lineno"> 739</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_timeout_sources</tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clear
888 ClusterShell.Engine.Engine._EngineTimerQ.clear
889 ClusterShell.MsgTree.MsgTree.clear
890 ClusterShell.NodeSet.NodeSetBase.clear
891 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-176', 'clear', 'link-164');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
892 </div><a name="L740"></a><tt class="py-lineno"> 740</tt> <tt class="py-line"> </tt>
893 <a name="Task._msg_add"></a><div id="Task._msg_add-def"><a name="L741"></a><tt class="py-lineno"> 741</tt> <a class="py-toggle" href="#" id="Task._msg_add-toggle" onclick="return toggle('Task._msg_add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_msg_add">_msg_add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
894 </div><div id="Task._msg_add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._msg_add-expanded"><a name="L742"></a><tt class="py-lineno"> 742</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
895 <a name="L743"></a><tt class="py-lineno"> 743</tt> <tt class="py-line"><tt class="py-docstring"> Add a worker message associated with a source.</tt> </tt>
896 <a name="L744"></a><tt class="py-lineno"> 744</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
897 <a name="L745"></a><tt class="py-lineno"> 745</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-177" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
898 ClusterShell.MsgTree.MsgTree.add
899 ClusterShell.NodeSet.NodeSetBase.add
900 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-177', 'add', 'link-75');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt id="link-178" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-178', 'msg', 'link-50');">msg</a></tt><tt class="py-op">)</tt> </tt>
901 </div><a name="L746"></a><tt class="py-lineno"> 746</tt> <tt class="py-line"> </tt>
902 <a name="Task._errmsg_add"></a><div id="Task._errmsg_add-def"><a name="L747"></a><tt class="py-lineno"> 747</tt> <a class="py-toggle" href="#" id="Task._errmsg_add-toggle" onclick="return toggle('Task._errmsg_add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_errmsg_add">_errmsg_add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
903 </div><div id="Task._errmsg_add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._errmsg_add-expanded"><a name="L748"></a><tt class="py-lineno"> 748</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
904 <a name="L749"></a><tt class="py-lineno"> 749</tt> <tt class="py-line"><tt class="py-docstring"> Add a worker error message associated with a source.</tt> </tt>
905 <a name="L750"></a><tt class="py-lineno"> 750</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
906 <a name="L751"></a><tt class="py-lineno"> 751</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
907 ClusterShell.MsgTree.MsgTree.add
908 ClusterShell.NodeSet.NodeSetBase.add
909 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-179', 'add', 'link-75');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt id="link-180" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-180', 'msg', 'link-50');">msg</a></tt><tt class="py-op">)</tt> </tt>
910 </div><a name="L752"></a><tt class="py-lineno"> 752</tt> <tt class="py-line"> </tt>
911 <a name="Task._rc_set"></a><div id="Task._rc_set-def"><a name="L753"></a><tt class="py-lineno"> 753</tt> <a class="py-toggle" href="#" id="Task._rc_set-toggle" onclick="return toggle('Task._rc_set');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_rc_set">_rc_set</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">,</tt> <tt class="py-param">rc</tt><tt class="py-op">,</tt> <tt class="py-param">override</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
912 </div><div id="Task._rc_set-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._rc_set-expanded"><a name="L754"></a><tt class="py-lineno"> 754</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
913 <a name="L755"></a><tt class="py-lineno"> 755</tt> <tt class="py-line"><tt class="py-docstring"> Add a worker return code associated with a source.</tt> </tt>
914 <a name="L756"></a><tt class="py-lineno"> 756</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
915 <a name="L757"></a><tt class="py-lineno"> 757</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">override</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_source_rc</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
916 <a name="L758"></a><tt class="py-lineno"> 758</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
917 <a name="L759"></a><tt class="py-lineno"> 759</tt> <tt class="py-line"> </tt>
918 <a name="L760"></a><tt class="py-lineno"> 760</tt> <tt class="py-line"> <tt class="py-comment"># store rc by source</tt> </tt>
919 <a name="L761"></a><tt class="py-lineno"> 761</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_source_rc</tt><tt class="py-op">[</tt><tt class="py-name">source</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">rc</tt> </tt>
920 <a name="L762"></a><tt class="py-lineno"> 762</tt> <tt class="py-line"> </tt>
921 <a name="L763"></a><tt class="py-lineno"> 763</tt> <tt class="py-line"> <tt class="py-comment"># store source by rc</tt> </tt>
922 <a name="L764"></a><tt class="py-lineno"> 764</tt> <tt class="py-line"> <tt class="py-name">e</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt><tt class="py-op">.</tt><tt id="link-181" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
923 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-181', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
924 <a name="L765"></a><tt class="py-lineno"> 765</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
925 <a name="L766"></a><tt class="py-lineno"> 766</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt><tt class="py-op">[</tt><tt class="py-name">rc</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">source</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
926 <a name="L767"></a><tt class="py-lineno"> 767</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
927 <a name="L768"></a><tt class="py-lineno"> 768</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt><tt class="py-op">[</tt><tt class="py-name">rc</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
928 ClusterShell.MsgTree.MsgTree.add
929 ClusterShell.NodeSet.NodeSetBase.add
930 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-182', 'add', 'link-75');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">)</tt> </tt>
931 <a name="L769"></a><tt class="py-lineno"> 769</tt> <tt class="py-line"> </tt>
932 <a name="L770"></a><tt class="py-lineno"> 770</tt> <tt class="py-line"> <tt class="py-comment"># update max rc</tt> </tt>
933 <a name="L771"></a><tt class="py-lineno"> 771</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rc</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_rc</tt><tt class="py-op">:</tt> </tt>
934 <a name="L772"></a><tt class="py-lineno"> 772</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_rc</tt> <tt class="py-op">=</tt> <tt class="py-name">rc</tt> </tt>
935 </div><a name="L773"></a><tt class="py-lineno"> 773</tt> <tt class="py-line"> </tt>
936 <a name="Task._timeout_add"></a><div id="Task._timeout_add-def"><a name="L774"></a><tt class="py-lineno"> 774</tt> <a class="py-toggle" href="#" id="Task._timeout_add-toggle" onclick="return toggle('Task._timeout_add');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_timeout_add">_timeout_add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
937 </div><div id="Task._timeout_add-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._timeout_add-expanded"><a name="L775"></a><tt class="py-lineno"> 775</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
938 <a name="L776"></a><tt class="py-lineno"> 776</tt> <tt class="py-line"><tt class="py-docstring"> Add a worker timeout associated with a source.</tt> </tt>
939 <a name="L777"></a><tt class="py-lineno"> 777</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
940 <a name="L778"></a><tt class="py-lineno"> 778</tt> <tt class="py-line"> <tt class="py-comment"># store source in timeout set</tt> </tt>
941 <a name="L779"></a><tt class="py-lineno"> 779</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_timeout_sources</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
942 ClusterShell.MsgTree.MsgTree.add
943 ClusterShell.NodeSet.NodeSetBase.add
944 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-183', 'add', 'link-75');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">)</tt> </tt>
945 </div><a name="L780"></a><tt class="py-lineno"> 780</tt> <tt class="py-line"> </tt>
946 <a name="Task._msg_by_source"></a><div id="Task._msg_by_source-def"><a name="L781"></a><tt class="py-lineno"> 781</tt> <a class="py-toggle" href="#" id="Task._msg_by_source-toggle" onclick="return toggle('Task._msg_by_source');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_msg_by_source">_msg_by_source</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
947 </div><div id="Task._msg_by_source-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._msg_by_source-expanded"><a name="L782"></a><tt class="py-lineno"> 782</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
948 <a name="L783"></a><tt class="py-lineno"> 783</tt> <tt class="py-line"><tt class="py-docstring"> Get a message by its source (worker, key).</tt> </tt>
949 <a name="L784"></a><tt class="py-lineno"> 784</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
950 <a name="L785"></a><tt class="py-lineno"> 785</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-184" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
951 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-184', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">)</tt> </tt>
952 <a name="L786"></a><tt class="py-lineno"> 786</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">s</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
953 <a name="L787"></a><tt class="py-lineno"> 787</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
954 <a name="L788"></a><tt class="py-lineno"> 788</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
955 </div><a name="L789"></a><tt class="py-lineno"> 789</tt> <tt class="py-line"> </tt>
956 <a name="Task._errmsg_by_source"></a><div id="Task._errmsg_by_source-def"><a name="L790"></a><tt class="py-lineno"> 790</tt> <a class="py-toggle" href="#" id="Task._errmsg_by_source-toggle" onclick="return toggle('Task._errmsg_by_source');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_errmsg_by_source">_errmsg_by_source</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
957 </div><div id="Task._errmsg_by_source-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._errmsg_by_source-expanded"><a name="L791"></a><tt class="py-lineno"> 791</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
958 <a name="L792"></a><tt class="py-lineno"> 792</tt> <tt class="py-line"><tt class="py-docstring"> Get an error message by its source (worker, key).</tt> </tt>
959 <a name="L793"></a><tt class="py-lineno"> 793</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
960 <a name="L794"></a><tt class="py-lineno"> 794</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-185" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
961 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-185', 'get', 'link-99');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">)</tt> </tt>
962 <a name="L795"></a><tt class="py-lineno"> 795</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">s</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
963 <a name="L796"></a><tt class="py-lineno"> 796</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
964 <a name="L797"></a><tt class="py-lineno"> 797</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
965 </div><a name="L798"></a><tt class="py-lineno"> 798</tt> <tt class="py-line"> </tt>
966 <a name="Task._call_tree_matcher"></a><div id="Task._call_tree_matcher-def"><a name="L799"></a><tt class="py-lineno"> 799</tt> <a class="py-toggle" href="#" id="Task._call_tree_matcher-toggle" onclick="return toggle('Task._call_tree_matcher');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_call_tree_matcher">_call_tree_matcher</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tree_match_func</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
967 </div><div id="Task._call_tree_matcher-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._call_tree_matcher-expanded"><a name="L800"></a><tt class="py-lineno"> 800</tt> <tt class="py-line"> <tt class="py-docstring">"""Call identified tree matcher (items, walk) method with options."""</tt> </tt>
968 <a name="L801"></a><tt class="py-lineno"> 801</tt> <tt class="py-line"> <tt class="py-comment"># filter by worker and optionally by matching keys</tt> </tt>
969 <a name="L802"></a><tt class="py-lineno"> 802</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">worker</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">match_keys</tt><tt class="py-op">:</tt> </tt>
970 <a name="L803"></a><tt class="py-lineno"> 803</tt> <tt class="py-line"> <tt class="py-name">match</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> <tt class="py-name">k</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">worker</tt> </tt>
971 <a name="L804"></a><tt class="py-lineno"> 804</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">worker</tt> <tt class="py-keyword">and</tt> <tt class="py-name">match_keys</tt><tt class="py-op">:</tt> </tt>
972 <a name="L805"></a><tt class="py-lineno"> 805</tt> <tt class="py-line"> <tt class="py-name">match</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> <tt class="py-name">k</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">worker</tt> <tt class="py-keyword">and</tt> <tt class="py-name">k</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">in</tt> <tt class="py-name">match_keys</tt> </tt>
973 <a name="L806"></a><tt class="py-lineno"> 806</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">match_keys</tt><tt class="py-op">:</tt> </tt>
974 <a name="L807"></a><tt class="py-lineno"> 807</tt> <tt class="py-line"> <tt class="py-name">match</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> <tt class="py-name">k</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">in</tt> <tt class="py-name">match_keys</tt> </tt>
975 <a name="L808"></a><tt class="py-lineno"> 808</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
976 <a name="L809"></a><tt class="py-lineno"> 809</tt> <tt class="py-line"> <tt class="py-name">match</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
977 <a name="L810"></a><tt class="py-lineno"> 810</tt> <tt class="py-line"> <tt class="py-comment"># Call tree matcher function (items or walk)</tt> </tt>
978 <a name="L811"></a><tt class="py-lineno"> 811</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tree_match_func</tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">,</tt> <tt class="py-name">itemgetter</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
979 </div><a name="L812"></a><tt class="py-lineno"> 812</tt> <tt class="py-line"> </tt>
980 <a name="Task._rc_by_source"></a><div id="Task._rc_by_source-def"><a name="L813"></a><tt class="py-lineno"> 813</tt> <a class="py-toggle" href="#" id="Task._rc_by_source-toggle" onclick="return toggle('Task._rc_by_source');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_rc_by_source">_rc_by_source</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
981 </div><div id="Task._rc_by_source-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._rc_by_source-expanded"><a name="L814"></a><tt class="py-lineno"> 814</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
982 <a name="L815"></a><tt class="py-lineno"> 815</tt> <tt class="py-line"><tt class="py-docstring"> Get a return code by its source (worker, key).</tt> </tt>
983 <a name="L816"></a><tt class="py-lineno"> 816</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
984 <a name="L817"></a><tt class="py-lineno"> 817</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">_d_source_rc</tt><tt class="py-op">[</tt><tt class="py-name">source</tt><tt class="py-op">]</tt> </tt>
985 </div><a name="L818"></a><tt class="py-lineno"> 818</tt> <tt class="py-line"> </tt>
986 <a name="Task._rc_iter_by_key"></a><div id="Task._rc_iter_by_key-def"><a name="L819"></a><tt class="py-lineno"> 819</tt> <a class="py-toggle" href="#" id="Task._rc_iter_by_key-toggle" onclick="return toggle('Task._rc_iter_by_key');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_rc_iter_by_key">_rc_iter_by_key</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
987 </div><div id="Task._rc_iter_by_key-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._rc_iter_by_key-expanded"><a name="L820"></a><tt class="py-lineno"> 820</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
988 <a name="L821"></a><tt class="py-lineno"> 821</tt> <tt class="py-line"><tt class="py-docstring"> Return an iterator over return codes for the given key.</tt> </tt>
989 <a name="L822"></a><tt class="py-lineno"> 822</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
990 <a name="L823"></a><tt class="py-lineno"> 823</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_source_rc</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
991 <a name="L824"></a><tt class="py-lineno"> 824</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">k</tt> <tt class="py-op">==</tt> <tt class="py-name">key</tt><tt class="py-op">:</tt> </tt>
992 <a name="L825"></a><tt class="py-lineno"> 825</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">rc</tt> </tt>
993 </div><a name="L826"></a><tt class="py-lineno"> 826</tt> <tt class="py-line"> </tt>
994 <a name="Task._rc_iter_by_worker"></a><div id="Task._rc_iter_by_worker-def"><a name="L827"></a><tt class="py-lineno"> 827</tt> <a class="py-toggle" href="#" id="Task._rc_iter_by_worker-toggle" onclick="return toggle('Task._rc_iter_by_worker');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_rc_iter_by_worker">_rc_iter_by_worker</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
995 </div><div id="Task._rc_iter_by_worker-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._rc_iter_by_worker-expanded"><a name="L828"></a><tt class="py-lineno"> 828</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
996 <a name="L829"></a><tt class="py-lineno"> 829</tt> <tt class="py-line"><tt class="py-docstring"> Return an iterator over return codes and keys list for a</tt> </tt>
997 <a name="L830"></a><tt class="py-lineno"> 830</tt> <tt class="py-line"><tt class="py-docstring"> specific worker and optional matching keys.</tt> </tt>
998 <a name="L831"></a><tt class="py-lineno"> 831</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
999 <a name="L832"></a><tt class="py-lineno"> 832</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">match_keys</tt><tt class="py-op">:</tt> </tt>
1000 <a name="L833"></a><tt class="py-lineno"> 833</tt> <tt class="py-line"> <tt class="py-comment"># Use the items iterator for the underlying dict.</tt> </tt>
1001 <a name="L834"></a><tt class="py-lineno"> 834</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-name">src</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1002 <a name="L835"></a><tt class="py-lineno"> 835</tt> <tt class="py-line"> <tt id="link-186" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.keys()=ClusterShell.MsgTree.MsgTree-class.html#keys"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-186', 'keys', 'link-186');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">for</tt> <tt class="py-name">t</tt> <tt class="py-keyword">in</tt> <tt class="py-name">src</tt> <tt class="py-keyword">if</tt> <tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">worker</tt> <tt class="py-keyword">and</tt> \ </tt>
1003 <a name="L836"></a><tt class="py-lineno"> 836</tt> <tt class="py-line"> <tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">in</tt> <tt class="py-name">match_keys</tt><tt class="py-op">]</tt> </tt>
1004 <a name="L837"></a><tt class="py-lineno"> 837</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-187" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-187', 'keys', 'link-186');">keys</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1005 <a name="L838"></a><tt class="py-lineno"> 838</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt id="link-188" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-188', 'keys', 'link-186');">keys</a></tt> </tt>
1006 <a name="L839"></a><tt class="py-lineno"> 839</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1007 <a name="L840"></a><tt class="py-lineno"> 840</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-name">src</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1008 <a name="L841"></a><tt class="py-lineno"> 841</tt> <tt class="py-line"> <tt id="link-189" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-189', 'keys', 'link-186');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">for</tt> <tt class="py-name">t</tt> <tt class="py-keyword">in</tt> <tt class="py-name">src</tt> <tt class="py-keyword">if</tt> <tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">worker</tt><tt class="py-op">]</tt> </tt>
1009 <a name="L842"></a><tt class="py-lineno"> 842</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-190" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-190', 'keys', 'link-186');">keys</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1010 <a name="L843"></a><tt class="py-lineno"> 843</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt id="link-191" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-191', 'keys', 'link-186');">keys</a></tt> </tt>
1011 </div><a name="L844"></a><tt class="py-lineno"> 844</tt> <tt class="py-line"> </tt>
1012 <a name="Task._krc_iter_by_worker"></a><div id="Task._krc_iter_by_worker-def"><a name="L845"></a><tt class="py-lineno"> 845</tt> <a class="py-toggle" href="#" id="Task._krc_iter_by_worker-toggle" onclick="return toggle('Task._krc_iter_by_worker');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_krc_iter_by_worker">_krc_iter_by_worker</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1013 </div><div id="Task._krc_iter_by_worker-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._krc_iter_by_worker-expanded"><a name="L846"></a><tt class="py-lineno"> 846</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1014 <a name="L847"></a><tt class="py-lineno"> 847</tt> <tt class="py-line"><tt class="py-docstring"> Return an iterator over key, rc for a specific worker.</tt> </tt>
1015 <a name="L848"></a><tt class="py-lineno"> 848</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1016 <a name="L849"></a><tt class="py-lineno"> 849</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-name">src</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1017 <a name="L850"></a><tt class="py-lineno"> 850</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-name">src</tt><tt class="py-op">:</tt> </tt>
1018 <a name="L851"></a><tt class="py-lineno"> 851</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">w</tt> <tt class="py-keyword">is</tt> <tt class="py-name">worker</tt><tt class="py-op">:</tt> </tt>
1019 <a name="L852"></a><tt class="py-lineno"> 852</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt> </tt>
1020 </div><a name="L853"></a><tt class="py-lineno"> 853</tt> <tt class="py-line"> </tt>
1021 <a name="Task._num_timeout_by_worker"></a><div id="Task._num_timeout_by_worker-def"><a name="L854"></a><tt class="py-lineno"> 854</tt> <a class="py-toggle" href="#" id="Task._num_timeout_by_worker-toggle" onclick="return toggle('Task._num_timeout_by_worker');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_num_timeout_by_worker">_num_timeout_by_worker</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1022 </div><div id="Task._num_timeout_by_worker-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._num_timeout_by_worker-expanded"><a name="L855"></a><tt class="py-lineno"> 855</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1023 <a name="L856"></a><tt class="py-lineno"> 856</tt> <tt class="py-line"><tt class="py-docstring"> Return the number of timed out "keys" for a specific worker.</tt> </tt>
1024 <a name="L857"></a><tt class="py-lineno"> 857</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1025 <a name="L858"></a><tt class="py-lineno"> 858</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
1026 <a name="L859"></a><tt class="py-lineno"> 859</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_timeout_sources</tt><tt class="py-op">:</tt> </tt>
1027 <a name="L860"></a><tt class="py-lineno"> 860</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">w</tt> <tt class="py-keyword">is</tt> <tt class="py-name">worker</tt><tt class="py-op">:</tt> </tt>
1028 <a name="L861"></a><tt class="py-lineno"> 861</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
1029 <a name="L862"></a><tt class="py-lineno"> 862</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cnt</tt> </tt>
1030 </div><a name="L863"></a><tt class="py-lineno"> 863</tt> <tt class="py-line"> </tt>
1031 <a name="Task._iter_keys_timeout_by_worker"></a><div id="Task._iter_keys_timeout_by_worker-def"><a name="L864"></a><tt class="py-lineno"> 864</tt> <a class="py-toggle" href="#" id="Task._iter_keys_timeout_by_worker-toggle" onclick="return toggle('Task._iter_keys_timeout_by_worker');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_iter_keys_timeout_by_worker">_iter_keys_timeout_by_worker</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1032 </div><div id="Task._iter_keys_timeout_by_worker-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._iter_keys_timeout_by_worker-expanded"><a name="L865"></a><tt class="py-lineno"> 865</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1033 <a name="L866"></a><tt class="py-lineno"> 866</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over timed out keys (ie. nodes) for a specific worker.</tt> </tt>
1034 <a name="L867"></a><tt class="py-lineno"> 867</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1035 <a name="L868"></a><tt class="py-lineno"> 868</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_timeout_sources</tt><tt class="py-op">:</tt> </tt>
1036 <a name="L869"></a><tt class="py-lineno"> 869</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">w</tt> <tt class="py-keyword">is</tt> <tt class="py-name">worker</tt><tt class="py-op">:</tt> </tt>
1037 <a name="L870"></a><tt class="py-lineno"> 870</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">k</tt> </tt>
1038 </div><a name="L871"></a><tt class="py-lineno"> 871</tt> <tt class="py-line"> </tt>
1039 <a name="Task._flush_buffers_by_worker"></a><div id="Task._flush_buffers_by_worker-def"><a name="L872"></a><tt class="py-lineno"> 872</tt> <a class="py-toggle" href="#" id="Task._flush_buffers_by_worker-toggle" onclick="return toggle('Task._flush_buffers_by_worker');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_flush_buffers_by_worker">_flush_buffers_by_worker</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1040 </div><div id="Task._flush_buffers_by_worker-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._flush_buffers_by_worker-expanded"><a name="L873"></a><tt class="py-lineno"> 873</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1041 <a name="L874"></a><tt class="py-lineno"> 874</tt> <tt class="py-line"><tt class="py-docstring"> Remove any messages from specified worker.</tt> </tt>
1042 <a name="L875"></a><tt class="py-lineno"> 875</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1043 <a name="L876"></a><tt class="py-lineno"> 876</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-192" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.remove
1044 ClusterShell.MsgTree.MsgTree.remove
1045 ClusterShell.NodeSet.NodeSetBase.remove
1046 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-192', 'remove', 'link-122');">remove</a></tt><tt class="py-op">(</tt><tt class="py-keyword">lambda</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> <tt class="py-name">k</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">worker</tt><tt class="py-op">)</tt> </tt>
1047 </div><a name="L877"></a><tt class="py-lineno"> 877</tt> <tt class="py-line"> </tt>
1048 <a name="Task._flush_errors_by_worker"></a><div id="Task._flush_errors_by_worker-def"><a name="L878"></a><tt class="py-lineno"> 878</tt> <a class="py-toggle" href="#" id="Task._flush_errors_by_worker-toggle" onclick="return toggle('Task._flush_errors_by_worker');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#_flush_errors_by_worker">_flush_errors_by_worker</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1049 </div><div id="Task._flush_errors_by_worker-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task._flush_errors_by_worker-expanded"><a name="L879"></a><tt class="py-lineno"> 879</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1050 <a name="L880"></a><tt class="py-lineno"> 880</tt> <tt class="py-line"><tt class="py-docstring"> Remove any error messages from specified worker.</tt> </tt>
1051 <a name="L881"></a><tt class="py-lineno"> 881</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1052 <a name="L882"></a><tt class="py-lineno"> 882</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.remove
1053 ClusterShell.MsgTree.MsgTree.remove
1054 ClusterShell.NodeSet.NodeSetBase.remove
1055 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-193', 'remove', 'link-122');">remove</a></tt><tt class="py-op">(</tt><tt class="py-keyword">lambda</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> <tt class="py-name">k</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">worker</tt><tt class="py-op">)</tt> </tt>
1056 </div><a name="L883"></a><tt class="py-lineno"> 883</tt> <tt class="py-line"> </tt>
1057 <a name="Task.key_buffer"></a><div id="Task.key_buffer-def"><a name="L884"></a><tt class="py-lineno"> 884</tt> <a class="py-toggle" href="#" id="Task.key_buffer-toggle" onclick="return toggle('Task.key_buffer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#key_buffer">key_buffer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1058 </div><div id="Task.key_buffer-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.key_buffer-expanded"><a name="L885"></a><tt class="py-lineno"> 885</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1059 <a name="L886"></a><tt class="py-lineno"> 886</tt> <tt class="py-line"><tt class="py-docstring"> Get buffer for a specific key. When the key is associated</tt> </tt>
1060 <a name="L887"></a><tt class="py-lineno"> 887</tt> <tt class="py-line"><tt class="py-docstring"> to multiple workers, the resulting buffer will contain</tt> </tt>
1061 <a name="L888"></a><tt class="py-lineno"> 888</tt> <tt class="py-line"><tt class="py-docstring"> all workers content that may overlap. This method returns an</tt> </tt>
1062 <a name="L889"></a><tt class="py-lineno"> 889</tt> <tt class="py-line"><tt class="py-docstring"> empty buffer if key is not found in any workers.</tt> </tt>
1063 <a name="L890"></a><tt class="py-lineno"> 890</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1064 <a name="L891"></a><tt class="py-lineno"> 891</tt> <tt class="py-line"> <tt class="py-name">select_key</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> <tt class="py-name">k</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">key</tt> </tt>
1065 <a name="L892"></a><tt class="py-lineno"> 892</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">""</tt><tt class="py-op">.</tt><tt id="link-194" class="py-name" targets="Method ClusterShell.Task.Task.join()=ClusterShell.Task.Task-class.html#join"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-194', 'join', 'link-194');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">imap</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-195" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.messages()=ClusterShell.MsgTree.MsgTree-class.html#messages"><a title="ClusterShell.MsgTree.MsgTree.messages" class="py-name" href="#" onclick="return doclink('link-195', 'messages', 'link-195');">messages</a></tt><tt class="py-op">(</tt><tt class="py-name">select_key</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1066 </div><a name="L893"></a><tt class="py-lineno"> 893</tt> <tt class="py-line"> </tt>
1067 <a name="L894"></a><tt class="py-lineno"> 894</tt> <tt class="py-line"> <tt id="link-196" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.node_buffer()=ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer"><a title="ClusterShell.Worker.Worker.DistantWorker.node_buffer" class="py-name" href="#" onclick="return doclink('link-196', 'node_buffer', 'link-196');">node_buffer</a></tt> <tt class="py-op">=</tt> <tt id="link-197" class="py-name" targets="Method ClusterShell.Task.Task.key_buffer()=ClusterShell.Task.Task-class.html#key_buffer"><a title="ClusterShell.Task.Task.key_buffer" class="py-name" href="#" onclick="return doclink('link-197', 'key_buffer', 'link-197');">key_buffer</a></tt> </tt>
1068 <a name="L895"></a><tt class="py-lineno"> 895</tt> <tt class="py-line"> </tt>
1069 <a name="Task.key_error"></a><div id="Task.key_error-def"><a name="L896"></a><tt class="py-lineno"> 896</tt> <a class="py-toggle" href="#" id="Task.key_error-toggle" onclick="return toggle('Task.key_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#key_error">key_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1070 </div><div id="Task.key_error-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.key_error-expanded"><a name="L897"></a><tt class="py-lineno"> 897</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1071 <a name="L898"></a><tt class="py-lineno"> 898</tt> <tt class="py-line"><tt class="py-docstring"> Get error buffer for a specific key. When the key is associated</tt> </tt>
1072 <a name="L899"></a><tt class="py-lineno"> 899</tt> <tt class="py-line"><tt class="py-docstring"> to multiple workers, the resulting buffer will contain all</tt> </tt>
1073 <a name="L900"></a><tt class="py-lineno"> 900</tt> <tt class="py-line"><tt class="py-docstring"> workers content that may overlap. This method returns an empty</tt> </tt>
1074 <a name="L901"></a><tt class="py-lineno"> 901</tt> <tt class="py-line"><tt class="py-docstring"> error buffer if key is not found in any workers.</tt> </tt>
1075 <a name="L902"></a><tt class="py-lineno"> 902</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1076 <a name="L903"></a><tt class="py-lineno"> 903</tt> <tt class="py-line"> <tt class="py-name">select_key</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">k</tt><tt class="py-op">:</tt> <tt class="py-name">k</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">key</tt> </tt>
1077 <a name="L904"></a><tt class="py-lineno"> 904</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">""</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-198', 'join', 'link-194');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">imap</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.messages" class="py-name" href="#" onclick="return doclink('link-199', 'messages', 'link-195');">messages</a></tt><tt class="py-op">(</tt><tt class="py-name">select_key</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1078 </div><a name="L905"></a><tt class="py-lineno"> 905</tt> <tt class="py-line"> </tt>
1079 <a name="L906"></a><tt class="py-lineno"> 906</tt> <tt class="py-line"> <tt id="link-200" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.node_error()=ClusterShell.Worker.Worker.DistantWorker-class.html#node_error"><a title="ClusterShell.Worker.Worker.DistantWorker.node_error" class="py-name" href="#" onclick="return doclink('link-200', 'node_error', 'link-200');">node_error</a></tt> <tt class="py-op">=</tt> <tt id="link-201" class="py-name" targets="Method ClusterShell.Task.Task.key_error()=ClusterShell.Task.Task-class.html#key_error"><a title="ClusterShell.Task.Task.key_error" class="py-name" href="#" onclick="return doclink('link-201', 'key_error', 'link-201');">key_error</a></tt> </tt>
1080 <a name="L907"></a><tt class="py-lineno"> 907</tt> <tt class="py-line"> </tt>
1081 <a name="Task.key_retcode"></a><div id="Task.key_retcode-def"><a name="L908"></a><tt class="py-lineno"> 908</tt> <a class="py-toggle" href="#" id="Task.key_retcode-toggle" onclick="return toggle('Task.key_retcode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#key_retcode">key_retcode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1082 </div><div id="Task.key_retcode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.key_retcode-expanded"><a name="L909"></a><tt class="py-lineno"> 909</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1083 <a name="L910"></a><tt class="py-lineno"> 910</tt> <tt class="py-line"><tt class="py-docstring"> Return return code for a specific key. When the key is</tt> </tt>
1084 <a name="L911"></a><tt class="py-lineno"> 911</tt> <tt class="py-line"><tt class="py-docstring"> associated to multiple workers, return the max return</tt> </tt>
1085 <a name="L912"></a><tt class="py-lineno"> 912</tt> <tt class="py-line"><tt class="py-docstring"> code from these workers. Raises a KeyError if key is not found</tt> </tt>
1086 <a name="L913"></a><tt class="py-lineno"> 913</tt> <tt class="py-line"><tt class="py-docstring"> in any finished workers.</tt> </tt>
1087 <a name="L914"></a><tt class="py-lineno"> 914</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1088 <a name="L915"></a><tt class="py-lineno"> 915</tt> <tt class="py-line"> <tt class="py-name">codes</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-202" class="py-name" targets="Method ClusterShell.Task.Task._rc_iter_by_key()=ClusterShell.Task.Task-class.html#_rc_iter_by_key"><a title="ClusterShell.Task.Task._rc_iter_by_key" class="py-name" href="#" onclick="return doclink('link-202', '_rc_iter_by_key', 'link-202');">_rc_iter_by_key</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1089 <a name="L916"></a><tt class="py-lineno"> 916</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">codes</tt><tt class="py-op">:</tt> </tt>
1090 <a name="L917"></a><tt class="py-lineno"> 917</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">KeyError</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
1091 <a name="L918"></a><tt class="py-lineno"> 918</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">max</tt><tt class="py-op">(</tt><tt class="py-name">codes</tt><tt class="py-op">)</tt> </tt>
1092 </div><a name="L919"></a><tt class="py-lineno"> 919</tt> <tt class="py-line"> </tt>
1093 <a name="L920"></a><tt class="py-lineno"> 920</tt> <tt class="py-line"> <tt id="link-203" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.node_retcode()=ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode"><a title="ClusterShell.Worker.Worker.DistantWorker.node_retcode" class="py-name" href="#" onclick="return doclink('link-203', 'node_retcode', 'link-203');">node_retcode</a></tt> <tt class="py-op">=</tt> <tt id="link-204" class="py-name" targets="Method ClusterShell.Task.Task.key_retcode()=ClusterShell.Task.Task-class.html#key_retcode"><a title="ClusterShell.Task.Task.key_retcode" class="py-name" href="#" onclick="return doclink('link-204', 'key_retcode', 'link-204');">key_retcode</a></tt> </tt>
1094 <a name="L921"></a><tt class="py-lineno"> 921</tt> <tt class="py-line"> </tt>
1095 <a name="Task.max_retcode"></a><div id="Task.max_retcode-def"><a name="L922"></a><tt class="py-lineno"> 922</tt> <a class="py-toggle" href="#" id="Task.max_retcode-toggle" onclick="return toggle('Task.max_retcode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#max_retcode">max_retcode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1096 </div><div id="Task.max_retcode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.max_retcode-expanded"><a name="L923"></a><tt class="py-lineno"> 923</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1097 <a name="L924"></a><tt class="py-lineno"> 924</tt> <tt class="py-line"><tt class="py-docstring"> Get max return code encountered during last run.</tt> </tt>
1098 <a name="L925"></a><tt class="py-lineno"> 925</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1099 <a name="L926"></a><tt class="py-lineno"> 926</tt> <tt class="py-line"><tt class="py-docstring"> How retcodes work</tt> </tt>
1100 <a name="L927"></a><tt class="py-lineno"> 927</tt> <tt class="py-line"><tt class="py-docstring"> =================</tt> </tt>
1101 <a name="L928"></a><tt class="py-lineno"> 928</tt> <tt class="py-line"><tt class="py-docstring"> If the process exits normally, the return code is its exit</tt> </tt>
1102 <a name="L929"></a><tt class="py-lineno"> 929</tt> <tt class="py-line"><tt class="py-docstring"> status. If the process is terminated by a signal, the return</tt> </tt>
1103 <a name="L930"></a><tt class="py-lineno"> 930</tt> <tt class="py-line"><tt class="py-docstring"> code is 128 + signal number.</tt> </tt>
1104 <a name="L931"></a><tt class="py-lineno"> 931</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1105 <a name="L932"></a><tt class="py-lineno"> 932</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">_max_rc</tt> </tt>
1106 </div><a name="L933"></a><tt class="py-lineno"> 933</tt> <tt class="py-line"> </tt>
1107 <a name="Task.iter_buffers"></a><div id="Task.iter_buffers-def"><a name="L934"></a><tt class="py-lineno"> 934</tt> <a class="py-toggle" href="#" id="Task.iter_buffers-toggle" onclick="return toggle('Task.iter_buffers');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#iter_buffers">iter_buffers</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1108 </div><div id="Task.iter_buffers-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.iter_buffers-expanded"><a name="L935"></a><tt class="py-lineno"> 935</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1109 <a name="L936"></a><tt class="py-lineno"> 936</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over buffers, returns a tuple (buffer, keys). For remote</tt> </tt>
1110 <a name="L937"></a><tt class="py-lineno"> 937</tt> <tt class="py-line"><tt class="py-docstring"> workers (Ssh), keys are list of nodes. In that case, you should use</tt> </tt>
1111 <a name="L938"></a><tt class="py-lineno"> 938</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet.fromlist(keys) to get a NodeSet instance (which is more</tt> </tt>
1112 <a name="L939"></a><tt class="py-lineno"> 939</tt> <tt class="py-line"><tt class="py-docstring"> convenient and efficient):</tt> </tt>
1113 <a name="L940"></a><tt class="py-lineno"> 940</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1114 <a name="L941"></a><tt class="py-lineno"> 941</tt> <tt class="py-line"><tt class="py-docstring"> Optional parameter match_keys add filtering on these keys.</tt> </tt>
1115 <a name="L942"></a><tt class="py-lineno"> 942</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1116 <a name="L943"></a><tt class="py-lineno"> 943</tt> <tt class="py-line"><tt class="py-docstring"> Usage example:</tt> </tt>
1117 <a name="L944"></a><tt class="py-lineno"> 944</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1118 <a name="L945"></a><tt class="py-lineno"> 945</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; for buffer, nodelist in task.iter_buffers():</tt> </tt>
1119 <a name="L946"></a><tt class="py-lineno"> 946</tt> <tt class="py-line"><tt class="py-docstring"> ... print NodeSet.fromlist(nodelist)</tt> </tt>
1120 <a name="L947"></a><tt class="py-lineno"> 947</tt> <tt class="py-line"><tt class="py-docstring"> ... print buffer</tt> </tt>
1121 <a name="L948"></a><tt class="py-lineno"> 948</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1122 <a name="L949"></a><tt class="py-lineno"> 949</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-205" class="py-name" targets="Method ClusterShell.Task.Task._call_tree_matcher()=ClusterShell.Task.Task-class.html#_call_tree_matcher"><a title="ClusterShell.Task.Task._call_tree_matcher" class="py-name" href="#" onclick="return doclink('link-205', '_call_tree_matcher', 'link-205');">_call_tree_matcher</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-206" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.walk()=ClusterShell.MsgTree.MsgTree-class.html#walk"><a title="ClusterShell.MsgTree.MsgTree.walk" class="py-name" href="#" onclick="return doclink('link-206', 'walk', 'link-206');">walk</a></tt><tt class="py-op">,</tt> <tt class="py-name">match_keys</tt><tt class="py-op">)</tt> </tt>
1123 </div><a name="L950"></a><tt class="py-lineno"> 950</tt> <tt class="py-line"> </tt>
1124 <a name="Task.iter_errors"></a><div id="Task.iter_errors-def"><a name="L951"></a><tt class="py-lineno"> 951</tt> <a class="py-toggle" href="#" id="Task.iter_errors-toggle" onclick="return toggle('Task.iter_errors');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#iter_errors">iter_errors</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1125 </div><div id="Task.iter_errors-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.iter_errors-expanded"><a name="L952"></a><tt class="py-lineno"> 952</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1126 <a name="L953"></a><tt class="py-lineno"> 953</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over error buffers, returns a tuple (buffer, keys).</tt> </tt>
1127 <a name="L954"></a><tt class="py-lineno"> 954</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1128 <a name="L955"></a><tt class="py-lineno"> 955</tt> <tt class="py-line"><tt class="py-docstring"> See iter_buffers().</tt> </tt>
1129 <a name="L956"></a><tt class="py-lineno"> 956</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1130 <a name="L957"></a><tt class="py-lineno"> 957</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-207" class="py-name"><a title="ClusterShell.Task.Task._call_tree_matcher" class="py-name" href="#" onclick="return doclink('link-207', '_call_tree_matcher', 'link-205');">_call_tree_matcher</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-208" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.walk" class="py-name" href="#" onclick="return doclink('link-208', 'walk', 'link-206');">walk</a></tt><tt class="py-op">,</tt> <tt class="py-name">match_keys</tt><tt class="py-op">)</tt> </tt>
1131 </div><a name="L958"></a><tt class="py-lineno"> 958</tt> <tt class="py-line"> </tt>
1132 <a name="Task.iter_retcodes"></a><div id="Task.iter_retcodes-def"><a name="L959"></a><tt class="py-lineno"> 959</tt> <a class="py-toggle" href="#" id="Task.iter_retcodes-toggle" onclick="return toggle('Task.iter_retcodes');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#iter_retcodes">iter_retcodes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1133 </div><div id="Task.iter_retcodes-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.iter_retcodes-expanded"><a name="L960"></a><tt class="py-lineno"> 960</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1134 <a name="L961"></a><tt class="py-lineno"> 961</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over return codes, returns a tuple (rc, keys).</tt> </tt>
1135 <a name="L962"></a><tt class="py-lineno"> 962</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1136 <a name="L963"></a><tt class="py-lineno"> 963</tt> <tt class="py-line"><tt class="py-docstring"> Optional parameter match_keys add filtering on these keys.</tt> </tt>
1137 <a name="L964"></a><tt class="py-lineno"> 964</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1138 <a name="L965"></a><tt class="py-lineno"> 965</tt> <tt class="py-line"><tt class="py-docstring"> How retcodes work</tt> </tt>
1139 <a name="L966"></a><tt class="py-lineno"> 966</tt> <tt class="py-line"><tt class="py-docstring"> =================</tt> </tt>
1140 <a name="L967"></a><tt class="py-lineno"> 967</tt> <tt class="py-line"><tt class="py-docstring"> If the process exits normally, the return code is its exit</tt> </tt>
1141 <a name="L968"></a><tt class="py-lineno"> 968</tt> <tt class="py-line"><tt class="py-docstring"> status. If the process is terminated by a signal, the return</tt> </tt>
1142 <a name="L969"></a><tt class="py-lineno"> 969</tt> <tt class="py-line"><tt class="py-docstring"> code is 128 + signal number.</tt> </tt>
1143 <a name="L970"></a><tt class="py-lineno"> 970</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1144 <a name="L971"></a><tt class="py-lineno"> 971</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">match_keys</tt><tt class="py-op">:</tt> </tt>
1145 <a name="L972"></a><tt class="py-lineno"> 972</tt> <tt class="py-line"> <tt class="py-comment"># Use the items iterator for the underlying dict.</tt> </tt>
1146 <a name="L973"></a><tt class="py-lineno"> 973</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-name">src</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1147 <a name="L974"></a><tt class="py-lineno"> 974</tt> <tt class="py-line"> <tt id="link-209" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-209', 'keys', 'link-186');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">for</tt> <tt class="py-name">t</tt> <tt class="py-keyword">in</tt> <tt class="py-name">src</tt> <tt class="py-keyword">if</tt> <tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">in</tt> <tt class="py-name">match_keys</tt><tt class="py-op">]</tt> </tt>
1148 <a name="L975"></a><tt class="py-lineno"> 975</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt id="link-210" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-210', 'keys', 'link-186');">keys</a></tt> </tt>
1149 <a name="L976"></a><tt class="py-lineno"> 976</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1150 <a name="L977"></a><tt class="py-lineno"> 977</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-name">src</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_d_rc_sources</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1151 <a name="L978"></a><tt class="py-lineno"> 978</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-name">t</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">for</tt> <tt class="py-name">t</tt> <tt class="py-keyword">in</tt> <tt class="py-name">src</tt><tt class="py-op">]</tt> </tt>
1152 </div><a name="L979"></a><tt class="py-lineno"> 979</tt> <tt class="py-line"> </tt>
1153 <a name="Task.num_timeout"></a><div id="Task.num_timeout-def"><a name="L980"></a><tt class="py-lineno"> 980</tt> <a class="py-toggle" href="#" id="Task.num_timeout-toggle" onclick="return toggle('Task.num_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#num_timeout">num_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1154 </div><div id="Task.num_timeout-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.num_timeout-expanded"><a name="L981"></a><tt class="py-lineno"> 981</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1155 <a name="L982"></a><tt class="py-lineno"> 982</tt> <tt class="py-line"><tt class="py-docstring"> Return the number of timed out "keys" (ie. nodes).</tt> </tt>
1156 <a name="L983"></a><tt class="py-lineno"> 983</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1157 <a name="L984"></a><tt class="py-lineno"> 984</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_timeout_sources</tt><tt class="py-op">)</tt> </tt>
1158 </div><a name="L985"></a><tt class="py-lineno"> 985</tt> <tt class="py-line"> </tt>
1159 <a name="Task.iter_keys_timeout"></a><div id="Task.iter_keys_timeout-def"><a name="L986"></a><tt class="py-lineno"> 986</tt> <a class="py-toggle" href="#" id="Task.iter_keys_timeout-toggle" onclick="return toggle('Task.iter_keys_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#iter_keys_timeout">iter_keys_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1160 </div><div id="Task.iter_keys_timeout-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.iter_keys_timeout-expanded"><a name="L987"></a><tt class="py-lineno"> 987</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1161 <a name="L988"></a><tt class="py-lineno"> 988</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over timed out keys (ie. nodes).</tt> </tt>
1162 <a name="L989"></a><tt class="py-lineno"> 989</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1163 <a name="L990"></a><tt class="py-lineno"> 990</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-name">k</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_timeout_sources</tt><tt class="py-op">:</tt> </tt>
1164 <a name="L991"></a><tt class="py-lineno"> 991</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">k</tt> </tt>
1165 </div><a name="L992"></a><tt class="py-lineno"> 992</tt> <tt class="py-line"> </tt>
1166 <a name="Task.flush_buffers"></a><div id="Task.flush_buffers-def"><a name="L993"></a><tt class="py-lineno"> 993</tt> <a class="py-toggle" href="#" id="Task.flush_buffers-toggle" onclick="return toggle('Task.flush_buffers');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#flush_buffers">flush_buffers</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1167 </div><div id="Task.flush_buffers-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.flush_buffers-expanded"><a name="L994"></a><tt class="py-lineno"> 994</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1168 <a name="L995"></a><tt class="py-lineno"> 995</tt> <tt class="py-line"><tt class="py-docstring"> Flush all task messages (from all task workers).</tt> </tt>
1169 <a name="L996"></a><tt class="py-lineno"> 996</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1170 <a name="L997"></a><tt class="py-lineno"> 997</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-211" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clear
1171 ClusterShell.Engine.Engine._EngineTimerQ.clear
1172 ClusterShell.MsgTree.MsgTree.clear
1173 ClusterShell.NodeSet.NodeSetBase.clear
1174 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-211', 'clear', 'link-164');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1175 </div><a name="L998"></a><tt class="py-lineno"> 998</tt> <tt class="py-line"> </tt>
1176 <a name="Task.flush_errors"></a><div id="Task.flush_errors-def"><a name="L999"></a><tt class="py-lineno"> 999</tt> <a class="py-toggle" href="#" id="Task.flush_errors-toggle" onclick="return toggle('Task.flush_errors');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#flush_errors">flush_errors</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1177 </div><div id="Task.flush_errors-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.flush_errors-expanded"><a name="L1000"></a><tt class="py-lineno">1000</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1178 <a name="L1001"></a><tt class="py-lineno">1001</tt> <tt class="py-line"><tt class="py-docstring"> Flush all task error messages (from all task workers).</tt> </tt>
1179 <a name="L1002"></a><tt class="py-lineno">1002</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1180 <a name="L1003"></a><tt class="py-lineno">1003</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clear
1181 ClusterShell.Engine.Engine._EngineTimerQ.clear
1182 ClusterShell.MsgTree.MsgTree.clear
1183 ClusterShell.NodeSet.NodeSetBase.clear
1184 ClusterShell.NodeSet.RangeSet.clear" class="py-name" href="#" onclick="return doclink('link-212', 'clear', 'link-164');">clear</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1185 </div><a name="L1004"></a><tt class="py-lineno">1004</tt> <tt class="py-line"> </tt>
1186 <a name="L1005"></a><tt class="py-lineno">1005</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
1187 <a name="Task.wait"></a><div id="Task.wait-def"><a name="L1006"></a><tt class="py-lineno">1006</tt> <a class="py-toggle" href="#" id="Task.wait-toggle" onclick="return toggle('Task.wait');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task.Task-class.html#wait">wait</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">from_thread</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1188 </div><div id="Task.wait-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Task.wait-expanded"><a name="L1007"></a><tt class="py-lineno">1007</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1189 <a name="L1008"></a><tt class="py-lineno">1008</tt> <tt class="py-line"><tt class="py-docstring"> Class method that blocks calling thread until all tasks have</tt> </tt>
1190 <a name="L1009"></a><tt class="py-lineno">1009</tt> <tt class="py-line"><tt class="py-docstring"> finished (from a ClusterShell point of view, for instance,</tt> </tt>
1191 <a name="L1010"></a><tt class="py-lineno">1010</tt> <tt class="py-line"><tt class="py-docstring"> their task.resume() return). It doesn't necessarly mean that</tt> </tt>
1192 <a name="L1011"></a><tt class="py-lineno">1011</tt> <tt class="py-line"><tt class="py-docstring"> associated threads have finished.</tt> </tt>
1193 <a name="L1012"></a><tt class="py-lineno">1012</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1194 <a name="L1013"></a><tt class="py-lineno">1013</tt> <tt class="py-line"> <tt id="link-213" class="py-name"><a title="ClusterShell.Task
1195 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-213', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-214" class="py-name"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-214', '_task_lock', 'link-49');">_task_lock</a></tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1196 <a name="L1014"></a><tt class="py-lineno">1014</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1197 <a name="L1015"></a><tt class="py-lineno">1015</tt> <tt class="py-line"> <tt class="py-name">tasks</tt> <tt class="py-op">=</tt> <tt id="link-215" class="py-name"><a title="ClusterShell.Task
1198 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-215', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-216" class="py-name"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-216', '_tasks', 'link-47');">_tasks</a></tt><tt class="py-op">.</tt><tt id="link-217" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-217', 'copy', 'link-63');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1199 <a name="L1016"></a><tt class="py-lineno">1016</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
1200 <a name="L1017"></a><tt class="py-lineno">1017</tt> <tt class="py-line"> <tt id="link-218" class="py-name"><a title="ClusterShell.Task
1201 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-218', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-219" class="py-name"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-219', '_task_lock', 'link-49');">_task_lock</a></tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1202 <a name="L1018"></a><tt class="py-lineno">1018</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">thread</tt><tt class="py-op">,</tt> <tt class="py-name">task</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tasks</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1203 <a name="L1019"></a><tt class="py-lineno">1019</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">thread</tt> <tt class="py-op">!=</tt> <tt class="py-name">from_thread</tt><tt class="py-op">:</tt> </tt>
1204 <a name="L1020"></a><tt class="py-lineno">1020</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-220" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-220', 'join', 'link-194');">join</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1205 </div></div><a name="L1021"></a><tt class="py-lineno">1021</tt> <tt class="py-line"> </tt>
1206 <a name="task_self"></a><div id="task_self-def"><a name="L1022"></a><tt class="py-lineno">1022</tt> <tt class="py-line"> </tt>
1207 <a name="L1023"></a><tt class="py-lineno">1023</tt> <a class="py-toggle" href="#" id="task_self-toggle" onclick="return toggle('task_self');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task-module.html#task_self">task_self</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1208 </div><div id="task_self-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="task_self-expanded"><a name="L1024"></a><tt class="py-lineno">1024</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1209 <a name="L1025"></a><tt class="py-lineno">1025</tt> <tt class="py-line"><tt class="py-docstring"> Get the Task instance bound to the current thread. This function</tt> </tt>
1210 <a name="L1026"></a><tt class="py-lineno">1026</tt> <tt class="py-line"><tt class="py-docstring"> provided as a convenience is available in the top-level</tt> </tt>
1211 <a name="L1027"></a><tt class="py-lineno">1027</tt> <tt class="py-line"><tt class="py-docstring"> ClusterShell.Task package namespace.</tt> </tt>
1212 <a name="L1028"></a><tt class="py-lineno">1028</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1213 <a name="L1029"></a><tt class="py-lineno">1029</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-221" class="py-name"><a title="ClusterShell.Task
1214 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-221', 'Task', 'link-68');">Task</a></tt><tt class="py-op">(</tt><tt class="py-name">thread</tt><tt class="py-op">=</tt><tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">currentThread</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1215 </div><a name="L1030"></a><tt class="py-lineno">1030</tt> <tt class="py-line"> </tt>
1216 <a name="task_wait"></a><div id="task_wait-def"><a name="L1031"></a><tt class="py-lineno">1031</tt> <a class="py-toggle" href="#" id="task_wait-toggle" onclick="return toggle('task_wait');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task-module.html#task_wait">task_wait</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1217 </div><div id="task_wait-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="task_wait-expanded"><a name="L1032"></a><tt class="py-lineno">1032</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1218 <a name="L1033"></a><tt class="py-lineno">1033</tt> <tt class="py-line"><tt class="py-docstring"> Suspend execution of the calling thread until all tasks terminate,</tt> </tt>
1219 <a name="L1034"></a><tt class="py-lineno">1034</tt> <tt class="py-line"><tt class="py-docstring"> unless all tasks have already terminated. This function is provided</tt> </tt>
1220 <a name="L1035"></a><tt class="py-lineno">1035</tt> <tt class="py-line"><tt class="py-docstring"> as a convenience and is available in the top-level</tt> </tt>
1221 <a name="L1036"></a><tt class="py-lineno">1036</tt> <tt class="py-line"><tt class="py-docstring"> ClusterShell.Task package namespace.</tt> </tt>
1222 <a name="L1037"></a><tt class="py-lineno">1037</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1223 <a name="L1038"></a><tt class="py-lineno">1038</tt> <tt class="py-line"> <tt id="link-222" class="py-name"><a title="ClusterShell.Task
1224 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-222', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-223" class="py-name"><a title="ClusterShell.Task.Task.wait" class="py-name" href="#" onclick="return doclink('link-223', 'wait', 'link-56');">wait</a></tt><tt class="py-op">(</tt><tt class="py-name">threading</tt><tt class="py-op">.</tt><tt class="py-name">currentThread</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1225 </div><a name="L1039"></a><tt class="py-lineno">1039</tt> <tt class="py-line"> </tt>
1226 <a name="task_terminate"></a><div id="task_terminate-def"><a name="L1040"></a><tt class="py-lineno">1040</tt> <a class="py-toggle" href="#" id="task_terminate-toggle" onclick="return toggle('task_terminate');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task-module.html#task_terminate">task_terminate</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1227 </div><div id="task_terminate-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="task_terminate-expanded"><a name="L1041"></a><tt class="py-lineno">1041</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1228 <a name="L1042"></a><tt class="py-lineno">1042</tt> <tt class="py-line"><tt class="py-docstring"> Destroy the Task instance bound to the current thread. A next call</tt> </tt>
1229 <a name="L1043"></a><tt class="py-lineno">1043</tt> <tt class="py-line"><tt class="py-docstring"> to task_self() will create a new Task object. This function provided</tt> </tt>
1230 <a name="L1044"></a><tt class="py-lineno">1044</tt> <tt class="py-line"><tt class="py-docstring"> as a convenience is available in the top-level ClusterShell.Task</tt> </tt>
1231 <a name="L1045"></a><tt class="py-lineno">1045</tt> <tt class="py-line"><tt class="py-docstring"> package namespace.</tt> </tt>
1232 <a name="L1046"></a><tt class="py-lineno">1046</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1233 <a name="L1047"></a><tt class="py-lineno">1047</tt> <tt class="py-line"> <tt id="link-224" class="py-name"><a title="ClusterShell.Task.task_self" class="py-name" href="#" onclick="return doclink('link-224', 'task_self', 'link-154');">task_self</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-225" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.abort
1234 ClusterShell.Task.Task.abort" class="py-name" href="#" onclick="return doclink('link-225', 'abort', 'link-159');">abort</a></tt><tt class="py-op">(</tt><tt class="py-name">kill</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
1235 </div><a name="L1048"></a><tt class="py-lineno">1048</tt> <tt class="py-line"> </tt>
1236 <a name="task_cleanup"></a><div id="task_cleanup-def"><a name="L1049"></a><tt class="py-lineno">1049</tt> <a class="py-toggle" href="#" id="task_cleanup-toggle" onclick="return toggle('task_cleanup');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Task-module.html#task_cleanup">task_cleanup</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1237 </div><div id="task_cleanup-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="task_cleanup-expanded"><a name="L1050"></a><tt class="py-lineno">1050</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
1238 <a name="L1051"></a><tt class="py-lineno">1051</tt> <tt class="py-line"><tt class="py-docstring"> Cleanup routine to destroy all created tasks. This function</tt> </tt>
1239 <a name="L1052"></a><tt class="py-lineno">1052</tt> <tt class="py-line"><tt class="py-docstring"> provided as a convenience is available in the top-level</tt> </tt>
1240 <a name="L1053"></a><tt class="py-lineno">1053</tt> <tt class="py-line"><tt class="py-docstring"> ClusterShell.Task package namespace.</tt> </tt>
1241 <a name="L1054"></a><tt class="py-lineno">1054</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
1242 <a name="L1055"></a><tt class="py-lineno">1055</tt> <tt class="py-line"> <tt id="link-226" class="py-name"><a title="ClusterShell.Task
1243 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-226', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-227" class="py-name"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-227', '_task_lock', 'link-49');">_task_lock</a></tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1244 <a name="L1056"></a><tt class="py-lineno">1056</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1245 <a name="L1057"></a><tt class="py-lineno">1057</tt> <tt class="py-line"> <tt class="py-name">tasks</tt> <tt class="py-op">=</tt> <tt id="link-228" class="py-name"><a title="ClusterShell.Task
1246 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-228', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-229" class="py-name"><a title="ClusterShell.Task.Task._tasks" class="py-name" href="#" onclick="return doclink('link-229', '_tasks', 'link-47');">_tasks</a></tt><tt class="py-op">.</tt><tt id="link-230" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-230', 'copy', 'link-63');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1247 <a name="L1058"></a><tt class="py-lineno">1058</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
1248 <a name="L1059"></a><tt class="py-lineno">1059</tt> <tt class="py-line"> <tt id="link-231" class="py-name"><a title="ClusterShell.Task
1249 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-231', 'Task', 'link-68');">Task</a></tt><tt class="py-op">.</tt><tt id="link-232" class="py-name"><a title="ClusterShell.Task.Task._task_lock" class="py-name" href="#" onclick="return doclink('link-232', '_task_lock', 'link-49');">_task_lock</a></tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1250 <a name="L1060"></a><tt class="py-lineno">1060</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">task</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tasks</tt><tt class="py-op">.</tt><tt class="py-name">itervalues</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1251 <a name="L1061"></a><tt class="py-lineno">1061</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-233" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.abort
1252 ClusterShell.Task.Task.abort" class="py-name" href="#" onclick="return doclink('link-233', 'abort', 'link-159');">abort</a></tt><tt class="py-op">(</tt><tt class="py-name">kill</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
1253 </div><a name="L1062"></a><tt class="py-lineno">1062</tt> <tt class="py-line"> </tt><script type="text/javascript">
1254 <!--
1255 expandto(location.href);
1256 // -->
1257 </script>
1258 </pre>
1259 <br />
1260 <!-- ==================== NAVIGATION BAR ==================== -->
1261 <table class="navbar" border="0" width="100%" cellpadding="0"
1262 bgcolor="#a0c0ff" cellspacing="0">
1263 <tr valign="middle">
1264
1265 <!-- Tree link -->
1266 <th>&nbsp;&nbsp;&nbsp;<a
1267 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
1268
1269 <!-- Index link -->
1270 <th>&nbsp;&nbsp;&nbsp;<a
1271 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
1272
1273 <!-- Help link -->
1274 <th>&nbsp;&nbsp;&nbsp;<a
1275 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
1276
1277 <!-- Project homepage -->
1278 <th class="navbar" align="right" width="100%">
1279 <table border="0" cellpadding="0" cellspacing="0">
1280 <tr><th class="navbar" align="center"
1281 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
1282 </tr></table></th>
1283 </tr>
1284 </table>
1285 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
1286 <tr>
1287 <td align="left" class="footer">
1288 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
1289 </td>
1290 <td align="right" class="footer">
1291 <a target="mainFrame" href="http://epydoc.sourceforge.net"
1292 >http://epydoc.sourceforge.net</a>
1293 </td>
1294 </tr>
1295 </table>
1296
1297 <script type="text/javascript">
1298 <!--
1299 // Private objects are initially displayed (because if
1300 // javascript is turned off then we want them to be
1301 // visible); but by default, we want to hide them. So hide
1302 // them unless we have a cookie that says to show them.
1303 checkCookie();
1304 // -->
1305 </script>
1306 </body>
1307 </html>
+0
-211
doc/epydoc/html/ClusterShell.Task.AlreadyRunningError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.AlreadyRunningError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 Class&nbsp;AlreadyRunningError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.AlreadyRunningError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class AlreadyRunningError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#AlreadyRunningError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_37" name="uml_class_diagram_for_clusters_37">
63 <area shape="rect" id="node1" href="ClusterShell.Task.AlreadyRunningError-class.html" title="Raised when trying to resume an already running task." alt="" coords="23,507,169,551"/>
64 <area shape="rect" id="node2" href="ClusterShell.Task.TaskError-class.html" title="Base task error exception." alt="" coords="55,443,137,487"/>
65 <area shape="rect" id="node139" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
66 <area shape="rect" id="node139" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
68 <area shape="rect" id="node4" href="ClusterShell.Task.TaskException-class.html" title="Base task exception." alt="" coords="39,379,151,423"/>
69 <area shape="rect" id="node140" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node140" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node140" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node140" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node140" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node140" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node140" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node140" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node140" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node140" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node140" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node140" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_37.png" alt='' usemap="#uml_class_diagram_for_clusters_37" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised when trying to resume an already running task.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td colspan="2" class="summary">
108 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
109 <code>__init__</code>,
110 <code>__new__</code>
111 </p>
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
113 <code>__delattr__</code>,
114 <code>__getattribute__</code>,
115 <code>__getitem__</code>,
116 <code>__getslice__</code>,
117 <code>__reduce__</code>,
118 <code>__repr__</code>,
119 <code>__setattr__</code>,
120 <code>__setstate__</code>,
121 <code>__str__</code>,
122 <code>__unicode__</code>
123 </p>
124 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
125 <code>__format__</code>,
126 <code>__hash__</code>,
127 <code>__reduce_ex__</code>,
128 <code>__sizeof__</code>,
129 <code>__subclasshook__</code>
130 </p>
131 </td>
132 </tr>
133 </table>
134 <!-- ==================== PROPERTIES ==================== -->
135 <a name="section-Properties"></a>
136 <table class="summary" border="1" cellpadding="3"
137 cellspacing="0" width="100%" bgcolor="white">
138 <tr bgcolor="#70b0f0" class="table-header">
139 <td colspan="2" class="table-header">
140 <table border="0" cellpadding="0" cellspacing="0" width="100%">
141 <tr valign="top">
142 <td align="left"><span class="table-header">Properties</span></td>
143 <td align="right" valign="top"
144 ><span class="options">[<a href="#section-Properties"
145 class="privatelink" onclick="toggle_private();"
146 >hide private</a>]</span></td>
147 </tr>
148 </table>
149 </td>
150 </tr>
151 <tr>
152 <td colspan="2" class="summary">
153 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
154 <code>args</code>,
155 <code>message</code>
156 </p>
157 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
158 <code>__class__</code>
159 </p>
160 </td>
161 </tr>
162 </table>
163 <!-- ==================== NAVIGATION BAR ==================== -->
164 <table class="navbar" border="0" width="100%" cellpadding="0"
165 bgcolor="#a0c0ff" cellspacing="0">
166 <tr valign="middle">
167
168 <!-- Tree link -->
169 <th>&nbsp;&nbsp;&nbsp;<a
170 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
171
172 <!-- Index link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Help link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Project homepage -->
181 <th class="navbar" align="right" width="100%">
182 <table border="0" cellpadding="0" cellspacing="0">
183 <tr><th class="navbar" align="center"
184 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
185 </tr></table></th>
186 </tr>
187 </table>
188 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
189 <tr>
190 <td align="left" class="footer">
191 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
192 </td>
193 <td align="right" class="footer">
194 <a target="mainFrame" href="http://epydoc.sourceforge.net"
195 >http://epydoc.sourceforge.net</a>
196 </td>
197 </tr>
198 </table>
199
200 <script type="text/javascript">
201 <!--
202 // Private objects are initially displayed (because if
203 // javascript is turned off then we want them to be
204 // visible); but by default, we want to hide them. So hide
205 // them unless we have a cookie that says to show them.
206 checkCookie();
207 // -->
208 </script>
209 </body>
210 </html>
+0
-2444
doc/epydoc/html/ClusterShell.Task.Task-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.Task</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 Class&nbsp;Task
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.Task-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class Task</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_38" name="uml_class_diagram_for_clusters_38">
63 <area shape="rect" id="node141" href="ClusterShell.Task.Task.tasksyncmethod-class.html" title="Class encapsulating a function that checks if the calling task is running &#160;or is the current task, and allowing it to be used as a decorator making &#160;the wrapped task method thread&#45;safe." alt="" coords="17,31,269,49"/>
64 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#excepthook" title="ClusterShell.Task.Task.excepthook" alt="" coords="17,49,269,68"/>
65 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#__new__" title="For task bound to a specific thread, this class acts like a &quot;thread &#160;singleton&quot;, so new style class is used and new object are only instantiated if needed." alt="" coords="17,71,269,89"/>
66 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#__init__" title="Initialize a Task, creating a new thread if needed." alt="" coords="17,89,269,108"/>
67 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#default_excepthook" title="Default excepthook for a newly Task." alt="" coords="17,108,269,127"/>
68 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#default" title="Return per&#45;task value for key from the &quot;default&quot; dictionary." alt="" coords="17,127,269,145"/>
69 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#set_default" title="Set task value for specified key in the dictionary &quot;default&quot;." alt="" coords="17,145,269,164"/>
70 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#info" title="Return per&#45;task information." alt="" coords="17,164,269,183"/>
71 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#set_info" title="Set task value for a specific key information." alt="" coords="17,183,269,201"/>
72 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#shell" title="Schedule a shell command for local or distant execution." alt="" coords="17,201,269,220"/>
73 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#copy" title="Copy local file to distant nodes." alt="" coords="17,220,269,239"/>
74 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#port" title="Create a new task port." alt="" coords="17,239,269,257"/>
75 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#timer" title="Create task&#39;s timer." alt="" coords="17,257,269,276"/>
76 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#schedule" title="Schedule a worker for execution." alt="" coords="17,276,269,295"/>
77 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#resume" title="Resume task." alt="" coords="17,295,269,313"/>
78 <area shape="rect" id="node141" href="ClusterShell.Task.Task-class.html#wait" title="Class method that blocks calling thread until all tasks have finished (from a ClusterShell point of view, for instance, their task.resume() return)." alt="" coords="17,332,269,351"/>
79 <area shape="rect" id="node1" href="ClusterShell.Task.Task-class.html" title="Always bound to a thread, the Task class allows you to execute commands in parallel and get their results." alt="" coords="5,6,280,357"/>
80 </map>
81 <img src="uml_class_diagram_for_clusters_38.png" alt='' usemap="#uml_class_diagram_for_clusters_38" ismap="ismap" class="graph-without-title" />
82 </center>
83 </center>
84 <hr />
85 <p>Always bound to a thread, the Task class allows you to execute
86 commands in parallel and get their results.</p>
87 <p>To create a task in a new thread:</p>
88 <pre class="py-doctest">
89 <span class="py-prompt">&gt;&gt;&gt; </span>task = Task()</pre>
90 <p>To create or get the instance of the task associated with the thread
91 object thr (threading.Thread):</p>
92 <pre class="py-doctest">
93 <span class="py-prompt">&gt;&gt;&gt; </span>task = Task(thread=thr)</pre>
94 <p>Add a command to execute locally within task with:</p>
95 <pre class="py-doctest">
96 <span class="py-prompt">&gt;&gt;&gt; </span>task.shell(<span class="py-string">&quot;/bin/hostname&quot;</span>)</pre>
97 <p>Add a command to execute to a distant node within task with:</p>
98 <pre class="py-doctest">
99 <span class="py-prompt">&gt;&gt;&gt; </span>task.shell(<span class="py-string">&quot;/bin/hostname&quot;</span>, nodes=<span class="py-string">&quot;tiger[1-20]&quot;</span>)</pre>
100 <p>Run task in its associated thread (will block only if the calling
101 thread is the task associated thread):</p>
102 <pre class="py-doctest">
103 <span class="py-prompt">&gt;&gt;&gt; </span>task.resume()</pre>
104
105 <!-- ==================== NESTED CLASSES ==================== -->
106 <a name="section-NestedClasses"></a>
107 <table class="summary" border="1" cellpadding="3"
108 cellspacing="0" width="100%" bgcolor="white">
109 <tr bgcolor="#70b0f0" class="table-header">
110 <td colspan="2" class="table-header">
111 <table border="0" cellpadding="0" cellspacing="0" width="100%">
112 <tr valign="top">
113 <td align="left"><span class="table-header">Nested Classes</span></td>
114 <td align="right" valign="top"
115 ><span class="options">[<a href="#section-NestedClasses"
116 class="privatelink" onclick="toggle_private();"
117 >hide private</a>]</span></td>
118 </tr>
119 </table>
120 </td>
121 </tr>
122 <tr class="private">
123 <td width="15%" align="right" valign="top" class="summary">
124 <span class="summary-type">&nbsp;</span>
125 </td><td class="summary">
126 <a href="ClusterShell.Task.Task._SyncMsgHandler-class.html" class="summary-name" onclick="show_private();">_SyncMsgHandler</a><br />
127 Special task control port event handler.
128 </td>
129 </tr>
130 <tr>
131 <td width="15%" align="right" valign="top" class="summary">
132 <span class="summary-type">&nbsp;</span>
133 </td><td class="summary">
134 <a href="ClusterShell.Task.Task.tasksyncmethod-class.html" class="summary-name">tasksyncmethod</a><br />
135 Class encapsulating a function that checks if the calling task is
136 running or is the current task, and allowing it to be used as a
137 decorator making the wrapped task method thread-safe.
138 </td>
139 </tr>
140 <tr class="private">
141 <td width="15%" align="right" valign="top" class="summary">
142 <span class="summary-type">&nbsp;</span>
143 </td><td class="summary">
144 <a href="ClusterShell.Task.Task._SuspendCondition-class.html" class="summary-name" onclick="show_private();">_SuspendCondition</a><br />
145 Special class to manage task suspend condition.
146 </td>
147 </tr>
148 </table>
149 <!-- ==================== INSTANCE METHODS ==================== -->
150 <a name="section-InstanceMethods"></a>
151 <table class="summary" border="1" cellpadding="3"
152 cellspacing="0" width="100%" bgcolor="white">
153 <tr bgcolor="#70b0f0" class="table-header">
154 <td colspan="2" class="table-header">
155 <table border="0" cellpadding="0" cellspacing="0" width="100%">
156 <tr valign="top">
157 <td align="left"><span class="table-header">Instance Methods</span></td>
158 <td align="right" valign="top"
159 ><span class="options">[<a href="#section-InstanceMethods"
160 class="privatelink" onclick="toggle_private();"
161 >hide private</a>]</span></td>
162 </tr>
163 </table>
164 </td>
165 </tr>
166 <tr>
167 <td width="15%" align="right" valign="top" class="summary">
168 <span class="summary-type">&nbsp;</span>
169 </td><td class="summary">
170 <table width="100%" cellpadding="0" cellspacing="0" border="0">
171 <tr>
172 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
173 <span class="summary-sig-arg">thread</span>=<span class="summary-sig-default">None</span>)</span><br />
174 Initialize a Task, creating a new thread if needed.</td>
175 <td align="right" valign="top">
176 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.__init__">source&nbsp;code</a></span>
177
178 </td>
179 </tr>
180 </table>
181
182 </td>
183 </tr>
184 <tr class="private">
185 <td width="15%" align="right" valign="top" class="summary">
186 <span class="summary-type">&nbsp;</span>
187 </td><td class="summary">
188 <table width="100%" cellpadding="0" cellspacing="0" border="0">
189 <tr>
190 <td><span class="summary-sig"><a name="_is_task_self"></a><span class="summary-sig-name">_is_task_self</span>(<span class="summary-sig-arg">self</span>)</span><br />
191 Private method used by the library to check if the task is
192 task_self(), but do not create any task_self() instance.</td>
193 <td align="right" valign="top">
194 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._is_task_self">source&nbsp;code</a></span>
195
196 </td>
197 </tr>
198 </table>
199
200 </td>
201 </tr>
202 <tr>
203 <td width="15%" align="right" valign="top" class="summary">
204 <span class="summary-type">&nbsp;</span>
205 </td><td class="summary">
206 <table width="100%" cellpadding="0" cellspacing="0" border="0">
207 <tr>
208 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#default_excepthook" class="summary-sig-name">default_excepthook</a>(<span class="summary-sig-arg">self</span>,
209 <span class="summary-sig-arg">type</span>,
210 <span class="summary-sig-arg">value</span>,
211 <span class="summary-sig-arg">tb</span>)</span><br />
212 Default excepthook for a newly Task.</td>
213 <td align="right" valign="top">
214 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.default_excepthook">source&nbsp;code</a></span>
215
216 </td>
217 </tr>
218 </table>
219
220 </td>
221 </tr>
222 <tr class="private">
223 <td width="15%" align="right" valign="top" class="summary">
224 <span class="summary-type">&nbsp;</span>
225 </td><td class="summary">
226 <table width="100%" cellpadding="0" cellspacing="0" border="0">
227 <tr>
228 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#_excepthook" class="summary-sig-name" onclick="show_private();">_excepthook</a>(<span class="summary-sig-arg">self</span>,
229 <span class="summary-sig-arg">type</span>,
230 <span class="summary-sig-arg">value</span>,
231 <span class="summary-sig-arg">tb</span>)</span><br />
232 Default excepthook for a newly Task.</td>
233 <td align="right" valign="top">
234 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.default_excepthook">source&nbsp;code</a></span>
235
236 </td>
237 </tr>
238 </table>
239
240 </td>
241 </tr>
242 <tr class="private">
243 <td width="15%" align="right" valign="top" class="summary">
244 <span class="summary-type">&nbsp;</span>
245 </td><td class="summary">
246 <table width="100%" cellpadding="0" cellspacing="0" border="0">
247 <tr>
248 <td><span class="summary-sig"><a name="_getexcepthook"></a><span class="summary-sig-name">_getexcepthook</span>(<span class="summary-sig-arg">self</span>)</span></td>
249 <td align="right" valign="top">
250 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._getexcepthook">source&nbsp;code</a></span>
251
252 </td>
253 </tr>
254 </table>
255
256 </td>
257 </tr>
258 <tr class="private">
259 <td width="15%" align="right" valign="top" class="summary">
260 <span class="summary-type">&nbsp;</span>
261 </td><td class="summary">
262 <table width="100%" cellpadding="0" cellspacing="0" border="0">
263 <tr>
264 <td><span class="summary-sig"><a name="_setexcepthook"></a><span class="summary-sig-name">_setexcepthook</span>(<span class="summary-sig-arg">self</span>,
265 <span class="summary-sig-arg">hook</span>)</span></td>
266 <td align="right" valign="top">
267 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._setexcepthook">source&nbsp;code</a></span>
268
269 </td>
270 </tr>
271 </table>
272
273 </td>
274 </tr>
275 <tr class="private">
276 <td width="15%" align="right" valign="top" class="summary">
277 <span class="summary-type">&nbsp;</span>
278 </td><td class="summary">
279 <table width="100%" cellpadding="0" cellspacing="0" border="0">
280 <tr>
281 <td><span class="summary-sig"><a name="_thread_start"></a><span class="summary-sig-name">_thread_start</span>(<span class="summary-sig-arg">self</span>)</span><br />
282 Task-managed thread entry point</td>
283 <td align="right" valign="top">
284 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._thread_start">source&nbsp;code</a></span>
285
286 </td>
287 </tr>
288 </table>
289
290 </td>
291 </tr>
292 <tr class="private">
293 <td width="15%" align="right" valign="top" class="summary">
294 <span class="summary-type">&nbsp;</span>
295 </td><td class="summary">
296 <table width="100%" cellpadding="0" cellspacing="0" border="0">
297 <tr>
298 <td><span class="summary-sig"><a name="_run"></a><span class="summary-sig-name">_run</span>(<span class="summary-sig-arg">self</span>,
299 <span class="summary-sig-arg">timeout</span>)</span><br />
300 Run task (always called from its self thread).</td>
301 <td align="right" valign="top">
302 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._run">source&nbsp;code</a></span>
303
304 </td>
305 </tr>
306 </table>
307
308 </td>
309 </tr>
310 <tr>
311 <td width="15%" align="right" valign="top" class="summary">
312 <span class="summary-type">&nbsp;</span>
313 </td><td class="summary">
314 <table width="100%" cellpadding="0" cellspacing="0" border="0">
315 <tr>
316 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#default" class="summary-sig-name">default</a>(<span class="summary-sig-arg">self</span>,
317 <span class="summary-sig-arg">default_key</span>,
318 <span class="summary-sig-arg">def_val</span>=<span class="summary-sig-default">None</span>)</span><br />
319 Return per-task value for key from the &quot;default&quot;
320 dictionary.</td>
321 <td align="right" valign="top">
322 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.default">source&nbsp;code</a></span>
323
324 </td>
325 </tr>
326 </table>
327
328 </td>
329 </tr>
330 <tr>
331 <td width="15%" align="right" valign="top" class="summary">
332 <span class="summary-type">&nbsp;</span>
333 </td><td class="summary">
334 <table width="100%" cellpadding="0" cellspacing="0" border="0">
335 <tr>
336 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#set_default" class="summary-sig-name">set_default</a>(<span class="summary-sig-arg">self</span>,
337 <span class="summary-sig-arg">default_key</span>,
338 <span class="summary-sig-arg">value</span>)</span><br />
339 Set task value for specified key in the dictionary
340 &quot;default&quot;.</td>
341 <td align="right" valign="top">
342 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.set_default">source&nbsp;code</a></span>
343
344 </td>
345 </tr>
346 </table>
347
348 </td>
349 </tr>
350 <tr>
351 <td width="15%" align="right" valign="top" class="summary">
352 <span class="summary-type">&nbsp;</span>
353 </td><td class="summary">
354 <table width="100%" cellpadding="0" cellspacing="0" border="0">
355 <tr>
356 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#info" class="summary-sig-name">info</a>(<span class="summary-sig-arg">self</span>,
357 <span class="summary-sig-arg">info_key</span>,
358 <span class="summary-sig-arg">def_val</span>=<span class="summary-sig-default">None</span>)</span><br />
359 Return per-task information.</td>
360 <td align="right" valign="top">
361 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.info">source&nbsp;code</a></span>
362
363 </td>
364 </tr>
365 </table>
366
367 </td>
368 </tr>
369 <tr>
370 <td width="15%" align="right" valign="top" class="summary">
371 <span class="summary-type">&nbsp;</span>
372 </td><td class="summary">
373 <table width="100%" cellpadding="0" cellspacing="0" border="0">
374 <tr>
375 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#set_info" class="summary-sig-name">set_info</a>(<span class="summary-sig-arg">*args</span>,
376 <span class="summary-sig-arg">**kwargs</span>)</span><br />
377 Set task value for a specific key information.</td>
378 <td align="right" valign="top">
379 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.set_info">source&nbsp;code</a></span>
380
381 </td>
382 </tr>
383 </table>
384
385 </td>
386 </tr>
387 <tr>
388 <td width="15%" align="right" valign="top" class="summary">
389 <span class="summary-type">&nbsp;</span>
390 </td><td class="summary">
391 <table width="100%" cellpadding="0" cellspacing="0" border="0">
392 <tr>
393 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#shell" class="summary-sig-name">shell</a>(<span class="summary-sig-arg">self</span>,
394 <span class="summary-sig-arg">command</span>,
395 <span class="summary-sig-arg">**kwargs</span>)</span><br />
396 Schedule a shell command for local or distant execution.</td>
397 <td align="right" valign="top">
398 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.shell">source&nbsp;code</a></span>
399
400 </td>
401 </tr>
402 </table>
403
404 </td>
405 </tr>
406 <tr>
407 <td width="15%" align="right" valign="top" class="summary">
408 <span class="summary-type">&nbsp;</span>
409 </td><td class="summary">
410 <table width="100%" cellpadding="0" cellspacing="0" border="0">
411 <tr>
412 <td><span class="summary-sig"><a name="copy"></a><span class="summary-sig-name">copy</span>(<span class="summary-sig-arg">self</span>,
413 <span class="summary-sig-arg">source</span>,
414 <span class="summary-sig-arg">dest</span>,
415 <span class="summary-sig-arg">nodes</span>,
416 <span class="summary-sig-arg">**kwargs</span>)</span><br />
417 Copy local file to distant nodes.</td>
418 <td align="right" valign="top">
419 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.copy">source&nbsp;code</a></span>
420
421 </td>
422 </tr>
423 </table>
424
425 </td>
426 </tr>
427 <tr class="private">
428 <td width="15%" align="right" valign="top" class="summary">
429 <span class="summary-type">&nbsp;</span>
430 </td><td class="summary">
431 <table width="100%" cellpadding="0" cellspacing="0" border="0">
432 <tr>
433 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#_add_port" class="summary-sig-name" onclick="show_private();">_add_port</a>(<span class="summary-sig-arg">*args</span>,
434 <span class="summary-sig-arg">**kwargs</span>)</span><br />
435 Add an EnginePort instance to Engine (private method).</td>
436 <td align="right" valign="top">
437 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._add_port">source&nbsp;code</a></span>
438
439 </td>
440 </tr>
441 </table>
442
443 </td>
444 </tr>
445 <tr class="private">
446 <td width="15%" align="right" valign="top" class="summary">
447 <span class="summary-type">&nbsp;</span>
448 </td><td class="summary">
449 <table width="100%" cellpadding="0" cellspacing="0" border="0">
450 <tr>
451 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#_remove_port" class="summary-sig-name" onclick="show_private();">_remove_port</a>(<span class="summary-sig-arg">*args</span>,
452 <span class="summary-sig-arg">**kwargs</span>)</span><br />
453 Remove a port from Engine (private method).</td>
454 <td align="right" valign="top">
455 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._remove_port">source&nbsp;code</a></span>
456
457 </td>
458 </tr>
459 </table>
460
461 </td>
462 </tr>
463 <tr>
464 <td width="15%" align="right" valign="top" class="summary">
465 <span class="summary-type">&nbsp;</span>
466 </td><td class="summary">
467 <table width="100%" cellpadding="0" cellspacing="0" border="0">
468 <tr>
469 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#port" class="summary-sig-name">port</a>(<span class="summary-sig-arg">self</span>,
470 <span class="summary-sig-arg">handler</span>=<span class="summary-sig-default">None</span>,
471 <span class="summary-sig-arg">autoclose</span>=<span class="summary-sig-default">False</span>)</span><br />
472 Create a new task port.</td>
473 <td align="right" valign="top">
474 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.port">source&nbsp;code</a></span>
475
476 </td>
477 </tr>
478 </table>
479
480 </td>
481 </tr>
482 <tr>
483 <td width="15%" align="right" valign="top" class="summary">
484 <span class="summary-type">&nbsp;</span>
485 </td><td class="summary">
486 <table width="100%" cellpadding="0" cellspacing="0" border="0">
487 <tr>
488 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#timer" class="summary-sig-name">timer</a>(<span class="summary-sig-arg">*args</span>,
489 <span class="summary-sig-arg">**kwargs</span>)</span><br />
490 Create task's timer.</td>
491 <td align="right" valign="top">
492 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.timer">source&nbsp;code</a></span>
493
494 </td>
495 </tr>
496 </table>
497
498 </td>
499 </tr>
500 <tr>
501 <td width="15%" align="right" valign="top" class="summary">
502 <span class="summary-type">&nbsp;</span>
503 </td><td class="summary">
504 <table width="100%" cellpadding="0" cellspacing="0" border="0">
505 <tr>
506 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#schedule" class="summary-sig-name">schedule</a>(<span class="summary-sig-arg">*args</span>,
507 <span class="summary-sig-arg">**kwargs</span>)</span><br />
508 Schedule a worker for execution.</td>
509 <td align="right" valign="top">
510 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.schedule">source&nbsp;code</a></span>
511
512 </td>
513 </tr>
514 </table>
515
516 </td>
517 </tr>
518 <tr class="private">
519 <td width="15%" align="right" valign="top" class="summary">
520 <span class="summary-type">&nbsp;</span>
521 </td><td class="summary">
522 <table width="100%" cellpadding="0" cellspacing="0" border="0">
523 <tr>
524 <td><span class="summary-sig"><a name="_resume_thread"></a><span class="summary-sig-name">_resume_thread</span>(<span class="summary-sig-arg">self</span>)</span><br />
525 Resume called from another thread.</td>
526 <td align="right" valign="top">
527 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._resume_thread">source&nbsp;code</a></span>
528
529 </td>
530 </tr>
531 </table>
532
533 </td>
534 </tr>
535 <tr class="private">
536 <td width="15%" align="right" valign="top" class="summary">
537 <span class="summary-type">&nbsp;</span>
538 </td><td class="summary">
539 <table width="100%" cellpadding="0" cellspacing="0" border="0">
540 <tr>
541 <td><span class="summary-sig"><a name="_resume"></a><span class="summary-sig-name">_resume</span>(<span class="summary-sig-arg">self</span>)</span></td>
542 <td align="right" valign="top">
543 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._resume">source&nbsp;code</a></span>
544
545 </td>
546 </tr>
547 </table>
548
549 </td>
550 </tr>
551 <tr>
552 <td width="15%" align="right" valign="top" class="summary">
553 <span class="summary-type">&nbsp;</span>
554 </td><td class="summary">
555 <table width="100%" cellpadding="0" cellspacing="0" border="0">
556 <tr>
557 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#resume" class="summary-sig-name">resume</a>(<span class="summary-sig-arg">self</span>,
558 <span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">0</span>)</span><br />
559 Resume task.</td>
560 <td align="right" valign="top">
561 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.resume">source&nbsp;code</a></span>
562
563 </td>
564 </tr>
565 </table>
566
567 </td>
568 </tr>
569 <tr class="private">
570 <td width="15%" align="right" valign="top" class="summary">
571 <span class="summary-type">&nbsp;</span>
572 </td><td class="summary">
573 <table width="100%" cellpadding="0" cellspacing="0" border="0">
574 <tr>
575 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#_suspend_wait" class="summary-sig-name" onclick="show_private();">_suspend_wait</a>(<span class="summary-sig-arg">*args</span>,
576 <span class="summary-sig-arg">**kwargs</span>)</span></td>
577 <td align="right" valign="top">
578 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._suspend_wait">source&nbsp;code</a></span>
579
580 </td>
581 </tr>
582 </table>
583
584 </td>
585 </tr>
586 <tr>
587 <td width="15%" align="right" valign="top" class="summary">
588 <span class="summary-type">&nbsp;</span>
589 </td><td class="summary">
590 <table width="100%" cellpadding="0" cellspacing="0" border="0">
591 <tr>
592 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#suspend" class="summary-sig-name">suspend</a>(<span class="summary-sig-arg">self</span>)</span><br />
593 Suspend task execution.</td>
594 <td align="right" valign="top">
595 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.suspend">source&nbsp;code</a></span>
596
597 </td>
598 </tr>
599 </table>
600
601 </td>
602 </tr>
603 <tr class="private">
604 <td width="15%" align="right" valign="top" class="summary">
605 <span class="summary-type">&nbsp;</span>
606 </td><td class="summary">
607 <table width="100%" cellpadding="0" cellspacing="0" border="0">
608 <tr>
609 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#_abort" class="summary-sig-name" onclick="show_private();">_abort</a>(<span class="summary-sig-arg">*args</span>,
610 <span class="summary-sig-arg">**kwargs</span>)</span></td>
611 <td align="right" valign="top">
612 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._abort">source&nbsp;code</a></span>
613
614 </td>
615 </tr>
616 </table>
617
618 </td>
619 </tr>
620 <tr>
621 <td width="15%" align="right" valign="top" class="summary">
622 <span class="summary-type">&nbsp;</span>
623 </td><td class="summary">
624 <table width="100%" cellpadding="0" cellspacing="0" border="0">
625 <tr>
626 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#abort" class="summary-sig-name">abort</a>(<span class="summary-sig-arg">self</span>,
627 <span class="summary-sig-arg">kill</span>=<span class="summary-sig-default">False</span>)</span><br />
628 Abort a task.</td>
629 <td align="right" valign="top">
630 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.abort">source&nbsp;code</a></span>
631
632 </td>
633 </tr>
634 </table>
635
636 </td>
637 </tr>
638 <tr class="private">
639 <td width="15%" align="right" valign="top" class="summary">
640 <span class="summary-type">&nbsp;</span>
641 </td><td class="summary">
642 <table width="100%" cellpadding="0" cellspacing="0" border="0">
643 <tr>
644 <td><span class="summary-sig"><a name="_terminate"></a><span class="summary-sig-name">_terminate</span>(<span class="summary-sig-arg">self</span>,
645 <span class="summary-sig-arg">kill</span>)</span><br />
646 Abort completion subroutine.</td>
647 <td align="right" valign="top">
648 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._terminate">source&nbsp;code</a></span>
649
650 </td>
651 </tr>
652 </table>
653
654 </td>
655 </tr>
656 <tr>
657 <td width="15%" align="right" valign="top" class="summary">
658 <span class="summary-type">&nbsp;</span>
659 </td><td class="summary">
660 <table width="100%" cellpadding="0" cellspacing="0" border="0">
661 <tr>
662 <td><span class="summary-sig"><a name="join"></a><span class="summary-sig-name">join</span>(<span class="summary-sig-arg">self</span>)</span><br />
663 Suspend execution of the calling thread until the target task
664 terminates, unless the target task has already terminated.</td>
665 <td align="right" valign="top">
666 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.join">source&nbsp;code</a></span>
667
668 </td>
669 </tr>
670 </table>
671
672 </td>
673 </tr>
674 <tr>
675 <td width="15%" align="right" valign="top" class="summary">
676 <span class="summary-type">&nbsp;</span>
677 </td><td class="summary">
678 <table width="100%" cellpadding="0" cellspacing="0" border="0">
679 <tr>
680 <td><span class="summary-sig"><a name="running"></a><span class="summary-sig-name">running</span>(<span class="summary-sig-arg">self</span>)</span><br />
681 Return True if the task is running.</td>
682 <td align="right" valign="top">
683 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.running">source&nbsp;code</a></span>
684
685 </td>
686 </tr>
687 </table>
688
689 </td>
690 </tr>
691 <tr class="private">
692 <td width="15%" align="right" valign="top" class="summary">
693 <span class="summary-type">&nbsp;</span>
694 </td><td class="summary">
695 <table width="100%" cellpadding="0" cellspacing="0" border="0">
696 <tr>
697 <td><span class="summary-sig"><a name="_reset"></a><span class="summary-sig-name">_reset</span>(<span class="summary-sig-arg">self</span>)</span><br />
698 Reset buffers and retcodes management variables.</td>
699 <td align="right" valign="top">
700 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._reset">source&nbsp;code</a></span>
701
702 </td>
703 </tr>
704 </table>
705
706 </td>
707 </tr>
708 <tr class="private">
709 <td width="15%" align="right" valign="top" class="summary">
710 <span class="summary-type">&nbsp;</span>
711 </td><td class="summary">
712 <table width="100%" cellpadding="0" cellspacing="0" border="0">
713 <tr>
714 <td><span class="summary-sig"><a name="_msg_add"></a><span class="summary-sig-name">_msg_add</span>(<span class="summary-sig-arg">self</span>,
715 <span class="summary-sig-arg">source</span>,
716 <span class="summary-sig-arg">msg</span>)</span><br />
717 Add a worker message associated with a source.</td>
718 <td align="right" valign="top">
719 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._msg_add">source&nbsp;code</a></span>
720
721 </td>
722 </tr>
723 </table>
724
725 </td>
726 </tr>
727 <tr class="private">
728 <td width="15%" align="right" valign="top" class="summary">
729 <span class="summary-type">&nbsp;</span>
730 </td><td class="summary">
731 <table width="100%" cellpadding="0" cellspacing="0" border="0">
732 <tr>
733 <td><span class="summary-sig"><a name="_errmsg_add"></a><span class="summary-sig-name">_errmsg_add</span>(<span class="summary-sig-arg">self</span>,
734 <span class="summary-sig-arg">source</span>,
735 <span class="summary-sig-arg">msg</span>)</span><br />
736 Add a worker error message associated with a source.</td>
737 <td align="right" valign="top">
738 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._errmsg_add">source&nbsp;code</a></span>
739
740 </td>
741 </tr>
742 </table>
743
744 </td>
745 </tr>
746 <tr class="private">
747 <td width="15%" align="right" valign="top" class="summary">
748 <span class="summary-type">&nbsp;</span>
749 </td><td class="summary">
750 <table width="100%" cellpadding="0" cellspacing="0" border="0">
751 <tr>
752 <td><span class="summary-sig"><a name="_rc_set"></a><span class="summary-sig-name">_rc_set</span>(<span class="summary-sig-arg">self</span>,
753 <span class="summary-sig-arg">source</span>,
754 <span class="summary-sig-arg">rc</span>,
755 <span class="summary-sig-arg">override</span>=<span class="summary-sig-default">True</span>)</span><br />
756 Add a worker return code associated with a source.</td>
757 <td align="right" valign="top">
758 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._rc_set">source&nbsp;code</a></span>
759
760 </td>
761 </tr>
762 </table>
763
764 </td>
765 </tr>
766 <tr class="private">
767 <td width="15%" align="right" valign="top" class="summary">
768 <span class="summary-type">&nbsp;</span>
769 </td><td class="summary">
770 <table width="100%" cellpadding="0" cellspacing="0" border="0">
771 <tr>
772 <td><span class="summary-sig"><a name="_timeout_add"></a><span class="summary-sig-name">_timeout_add</span>(<span class="summary-sig-arg">self</span>,
773 <span class="summary-sig-arg">source</span>)</span><br />
774 Add a worker timeout associated with a source.</td>
775 <td align="right" valign="top">
776 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._timeout_add">source&nbsp;code</a></span>
777
778 </td>
779 </tr>
780 </table>
781
782 </td>
783 </tr>
784 <tr class="private">
785 <td width="15%" align="right" valign="top" class="summary">
786 <span class="summary-type">&nbsp;</span>
787 </td><td class="summary">
788 <table width="100%" cellpadding="0" cellspacing="0" border="0">
789 <tr>
790 <td><span class="summary-sig"><a name="_msg_by_source"></a><span class="summary-sig-name">_msg_by_source</span>(<span class="summary-sig-arg">self</span>,
791 <span class="summary-sig-arg">source</span>)</span><br />
792 Get a message by its source (worker, key).</td>
793 <td align="right" valign="top">
794 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._msg_by_source">source&nbsp;code</a></span>
795
796 </td>
797 </tr>
798 </table>
799
800 </td>
801 </tr>
802 <tr class="private">
803 <td width="15%" align="right" valign="top" class="summary">
804 <span class="summary-type">&nbsp;</span>
805 </td><td class="summary">
806 <table width="100%" cellpadding="0" cellspacing="0" border="0">
807 <tr>
808 <td><span class="summary-sig"><a name="_errmsg_by_source"></a><span class="summary-sig-name">_errmsg_by_source</span>(<span class="summary-sig-arg">self</span>,
809 <span class="summary-sig-arg">source</span>)</span><br />
810 Get an error message by its source (worker, key).</td>
811 <td align="right" valign="top">
812 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._errmsg_by_source">source&nbsp;code</a></span>
813
814 </td>
815 </tr>
816 </table>
817
818 </td>
819 </tr>
820 <tr class="private">
821 <td width="15%" align="right" valign="top" class="summary">
822 <span class="summary-type">&nbsp;</span>
823 </td><td class="summary">
824 <table width="100%" cellpadding="0" cellspacing="0" border="0">
825 <tr>
826 <td><span class="summary-sig"><a name="_call_tree_matcher"></a><span class="summary-sig-name">_call_tree_matcher</span>(<span class="summary-sig-arg">self</span>,
827 <span class="summary-sig-arg">tree_match_func</span>,
828 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>,
829 <span class="summary-sig-arg">worker</span>=<span class="summary-sig-default">None</span>)</span><br />
830 Call identified tree matcher (items, walk) method with options.</td>
831 <td align="right" valign="top">
832 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._call_tree_matcher">source&nbsp;code</a></span>
833
834 </td>
835 </tr>
836 </table>
837
838 </td>
839 </tr>
840 <tr class="private">
841 <td width="15%" align="right" valign="top" class="summary">
842 <span class="summary-type">&nbsp;</span>
843 </td><td class="summary">
844 <table width="100%" cellpadding="0" cellspacing="0" border="0">
845 <tr>
846 <td><span class="summary-sig"><a name="_rc_by_source"></a><span class="summary-sig-name">_rc_by_source</span>(<span class="summary-sig-arg">self</span>,
847 <span class="summary-sig-arg">source</span>)</span><br />
848 Get a return code by its source (worker, key).</td>
849 <td align="right" valign="top">
850 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._rc_by_source">source&nbsp;code</a></span>
851
852 </td>
853 </tr>
854 </table>
855
856 </td>
857 </tr>
858 <tr class="private">
859 <td width="15%" align="right" valign="top" class="summary">
860 <span class="summary-type">&nbsp;</span>
861 </td><td class="summary">
862 <table width="100%" cellpadding="0" cellspacing="0" border="0">
863 <tr>
864 <td><span class="summary-sig"><a name="_rc_iter_by_key"></a><span class="summary-sig-name">_rc_iter_by_key</span>(<span class="summary-sig-arg">self</span>,
865 <span class="summary-sig-arg">key</span>)</span><br />
866 Return an iterator over return codes for the given key.</td>
867 <td align="right" valign="top">
868 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._rc_iter_by_key">source&nbsp;code</a></span>
869
870 </td>
871 </tr>
872 </table>
873
874 </td>
875 </tr>
876 <tr class="private">
877 <td width="15%" align="right" valign="top" class="summary">
878 <span class="summary-type">&nbsp;</span>
879 </td><td class="summary">
880 <table width="100%" cellpadding="0" cellspacing="0" border="0">
881 <tr>
882 <td><span class="summary-sig"><a name="_rc_iter_by_worker"></a><span class="summary-sig-name">_rc_iter_by_worker</span>(<span class="summary-sig-arg">self</span>,
883 <span class="summary-sig-arg">worker</span>,
884 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
885 Return an iterator over return codes and keys list for a specific
886 worker and optional matching keys.</td>
887 <td align="right" valign="top">
888 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._rc_iter_by_worker">source&nbsp;code</a></span>
889
890 </td>
891 </tr>
892 </table>
893
894 </td>
895 </tr>
896 <tr class="private">
897 <td width="15%" align="right" valign="top" class="summary">
898 <span class="summary-type">&nbsp;</span>
899 </td><td class="summary">
900 <table width="100%" cellpadding="0" cellspacing="0" border="0">
901 <tr>
902 <td><span class="summary-sig"><a name="_krc_iter_by_worker"></a><span class="summary-sig-name">_krc_iter_by_worker</span>(<span class="summary-sig-arg">self</span>,
903 <span class="summary-sig-arg">worker</span>)</span><br />
904 Return an iterator over key, rc for a specific worker.</td>
905 <td align="right" valign="top">
906 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._krc_iter_by_worker">source&nbsp;code</a></span>
907
908 </td>
909 </tr>
910 </table>
911
912 </td>
913 </tr>
914 <tr class="private">
915 <td width="15%" align="right" valign="top" class="summary">
916 <span class="summary-type">&nbsp;</span>
917 </td><td class="summary">
918 <table width="100%" cellpadding="0" cellspacing="0" border="0">
919 <tr>
920 <td><span class="summary-sig"><a name="_num_timeout_by_worker"></a><span class="summary-sig-name">_num_timeout_by_worker</span>(<span class="summary-sig-arg">self</span>,
921 <span class="summary-sig-arg">worker</span>)</span><br />
922 Return the number of timed out &quot;keys&quot; for a specific
923 worker.</td>
924 <td align="right" valign="top">
925 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._num_timeout_by_worker">source&nbsp;code</a></span>
926
927 </td>
928 </tr>
929 </table>
930
931 </td>
932 </tr>
933 <tr class="private">
934 <td width="15%" align="right" valign="top" class="summary">
935 <span class="summary-type">&nbsp;</span>
936 </td><td class="summary">
937 <table width="100%" cellpadding="0" cellspacing="0" border="0">
938 <tr>
939 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#_iter_keys_timeout_by_worker" class="summary-sig-name" onclick="show_private();">_iter_keys_timeout_by_worker</a>(<span class="summary-sig-arg">self</span>,
940 <span class="summary-sig-arg">worker</span>)</span><br />
941 Iterate over timed out keys (ie.</td>
942 <td align="right" valign="top">
943 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._iter_keys_timeout_by_worker">source&nbsp;code</a></span>
944
945 </td>
946 </tr>
947 </table>
948
949 </td>
950 </tr>
951 <tr class="private">
952 <td width="15%" align="right" valign="top" class="summary">
953 <span class="summary-type">&nbsp;</span>
954 </td><td class="summary">
955 <table width="100%" cellpadding="0" cellspacing="0" border="0">
956 <tr>
957 <td><span class="summary-sig"><a name="_flush_buffers_by_worker"></a><span class="summary-sig-name">_flush_buffers_by_worker</span>(<span class="summary-sig-arg">self</span>,
958 <span class="summary-sig-arg">worker</span>)</span><br />
959 Remove any messages from specified worker.</td>
960 <td align="right" valign="top">
961 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._flush_buffers_by_worker">source&nbsp;code</a></span>
962
963 </td>
964 </tr>
965 </table>
966
967 </td>
968 </tr>
969 <tr class="private">
970 <td width="15%" align="right" valign="top" class="summary">
971 <span class="summary-type">&nbsp;</span>
972 </td><td class="summary">
973 <table width="100%" cellpadding="0" cellspacing="0" border="0">
974 <tr>
975 <td><span class="summary-sig"><a name="_flush_errors_by_worker"></a><span class="summary-sig-name">_flush_errors_by_worker</span>(<span class="summary-sig-arg">self</span>,
976 <span class="summary-sig-arg">worker</span>)</span><br />
977 Remove any error messages from specified worker.</td>
978 <td align="right" valign="top">
979 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._flush_errors_by_worker">source&nbsp;code</a></span>
980
981 </td>
982 </tr>
983 </table>
984
985 </td>
986 </tr>
987 <tr>
988 <td width="15%" align="right" valign="top" class="summary">
989 <span class="summary-type">&nbsp;</span>
990 </td><td class="summary">
991 <table width="100%" cellpadding="0" cellspacing="0" border="0">
992 <tr>
993 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#key_buffer" class="summary-sig-name">key_buffer</a>(<span class="summary-sig-arg">self</span>,
994 <span class="summary-sig-arg">key</span>)</span><br />
995 Get buffer for a specific key.</td>
996 <td align="right" valign="top">
997 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_buffer">source&nbsp;code</a></span>
998
999 </td>
1000 </tr>
1001 </table>
1002
1003 </td>
1004 </tr>
1005 <tr>
1006 <td width="15%" align="right" valign="top" class="summary">
1007 <span class="summary-type">&nbsp;</span>
1008 </td><td class="summary">
1009 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1010 <tr>
1011 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#node_buffer" class="summary-sig-name">node_buffer</a>(<span class="summary-sig-arg">self</span>,
1012 <span class="summary-sig-arg">key</span>)</span><br />
1013 Get buffer for a specific key.</td>
1014 <td align="right" valign="top">
1015 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_buffer">source&nbsp;code</a></span>
1016
1017 </td>
1018 </tr>
1019 </table>
1020
1021 </td>
1022 </tr>
1023 <tr>
1024 <td width="15%" align="right" valign="top" class="summary">
1025 <span class="summary-type">&nbsp;</span>
1026 </td><td class="summary">
1027 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1028 <tr>
1029 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#key_error" class="summary-sig-name">key_error</a>(<span class="summary-sig-arg">self</span>,
1030 <span class="summary-sig-arg">key</span>)</span><br />
1031 Get error buffer for a specific key.</td>
1032 <td align="right" valign="top">
1033 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_error">source&nbsp;code</a></span>
1034
1035 </td>
1036 </tr>
1037 </table>
1038
1039 </td>
1040 </tr>
1041 <tr>
1042 <td width="15%" align="right" valign="top" class="summary">
1043 <span class="summary-type">&nbsp;</span>
1044 </td><td class="summary">
1045 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1046 <tr>
1047 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#node_error" class="summary-sig-name">node_error</a>(<span class="summary-sig-arg">self</span>,
1048 <span class="summary-sig-arg">key</span>)</span><br />
1049 Get error buffer for a specific key.</td>
1050 <td align="right" valign="top">
1051 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_error">source&nbsp;code</a></span>
1052
1053 </td>
1054 </tr>
1055 </table>
1056
1057 </td>
1058 </tr>
1059 <tr>
1060 <td width="15%" align="right" valign="top" class="summary">
1061 <span class="summary-type">&nbsp;</span>
1062 </td><td class="summary">
1063 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1064 <tr>
1065 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#key_retcode" class="summary-sig-name">key_retcode</a>(<span class="summary-sig-arg">self</span>,
1066 <span class="summary-sig-arg">key</span>)</span><br />
1067 Return return code for a specific key.</td>
1068 <td align="right" valign="top">
1069 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_retcode">source&nbsp;code</a></span>
1070
1071 </td>
1072 </tr>
1073 </table>
1074
1075 </td>
1076 </tr>
1077 <tr>
1078 <td width="15%" align="right" valign="top" class="summary">
1079 <span class="summary-type">&nbsp;</span>
1080 </td><td class="summary">
1081 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1082 <tr>
1083 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#node_retcode" class="summary-sig-name">node_retcode</a>(<span class="summary-sig-arg">self</span>,
1084 <span class="summary-sig-arg">key</span>)</span><br />
1085 Return return code for a specific key.</td>
1086 <td align="right" valign="top">
1087 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_retcode">source&nbsp;code</a></span>
1088
1089 </td>
1090 </tr>
1091 </table>
1092
1093 </td>
1094 </tr>
1095 <tr>
1096 <td width="15%" align="right" valign="top" class="summary">
1097 <span class="summary-type">&nbsp;</span>
1098 </td><td class="summary">
1099 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1100 <tr>
1101 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#max_retcode" class="summary-sig-name">max_retcode</a>(<span class="summary-sig-arg">self</span>)</span><br />
1102 Get max return code encountered during last run.</td>
1103 <td align="right" valign="top">
1104 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.max_retcode">source&nbsp;code</a></span>
1105
1106 </td>
1107 </tr>
1108 </table>
1109
1110 </td>
1111 </tr>
1112 <tr>
1113 <td width="15%" align="right" valign="top" class="summary">
1114 <span class="summary-type">&nbsp;</span>
1115 </td><td class="summary">
1116 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1117 <tr>
1118 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#iter_buffers" class="summary-sig-name">iter_buffers</a>(<span class="summary-sig-arg">self</span>,
1119 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
1120 Iterate over buffers, returns a tuple (buffer, keys).</td>
1121 <td align="right" valign="top">
1122 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.iter_buffers">source&nbsp;code</a></span>
1123
1124 </td>
1125 </tr>
1126 </table>
1127
1128 </td>
1129 </tr>
1130 <tr>
1131 <td width="15%" align="right" valign="top" class="summary">
1132 <span class="summary-type">&nbsp;</span>
1133 </td><td class="summary">
1134 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1135 <tr>
1136 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#iter_errors" class="summary-sig-name">iter_errors</a>(<span class="summary-sig-arg">self</span>,
1137 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
1138 Iterate over error buffers, returns a tuple (buffer, keys).</td>
1139 <td align="right" valign="top">
1140 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.iter_errors">source&nbsp;code</a></span>
1141
1142 </td>
1143 </tr>
1144 </table>
1145
1146 </td>
1147 </tr>
1148 <tr>
1149 <td width="15%" align="right" valign="top" class="summary">
1150 <span class="summary-type">&nbsp;</span>
1151 </td><td class="summary">
1152 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1153 <tr>
1154 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#iter_retcodes" class="summary-sig-name">iter_retcodes</a>(<span class="summary-sig-arg">self</span>,
1155 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
1156 Iterate over return codes, returns a tuple (rc, keys).</td>
1157 <td align="right" valign="top">
1158 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.iter_retcodes">source&nbsp;code</a></span>
1159
1160 </td>
1161 </tr>
1162 </table>
1163
1164 </td>
1165 </tr>
1166 <tr>
1167 <td width="15%" align="right" valign="top" class="summary">
1168 <span class="summary-type">&nbsp;</span>
1169 </td><td class="summary">
1170 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1171 <tr>
1172 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#num_timeout" class="summary-sig-name">num_timeout</a>(<span class="summary-sig-arg">self</span>)</span><br />
1173 Return the number of timed out &quot;keys&quot; (ie.</td>
1174 <td align="right" valign="top">
1175 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.num_timeout">source&nbsp;code</a></span>
1176
1177 </td>
1178 </tr>
1179 </table>
1180
1181 </td>
1182 </tr>
1183 <tr>
1184 <td width="15%" align="right" valign="top" class="summary">
1185 <span class="summary-type">&nbsp;</span>
1186 </td><td class="summary">
1187 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1188 <tr>
1189 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#iter_keys_timeout" class="summary-sig-name">iter_keys_timeout</a>(<span class="summary-sig-arg">self</span>)</span><br />
1190 Iterate over timed out keys (ie.</td>
1191 <td align="right" valign="top">
1192 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.iter_keys_timeout">source&nbsp;code</a></span>
1193
1194 </td>
1195 </tr>
1196 </table>
1197
1198 </td>
1199 </tr>
1200 <tr>
1201 <td width="15%" align="right" valign="top" class="summary">
1202 <span class="summary-type">&nbsp;</span>
1203 </td><td class="summary">
1204 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1205 <tr>
1206 <td><span class="summary-sig"><a name="flush_buffers"></a><span class="summary-sig-name">flush_buffers</span>(<span class="summary-sig-arg">self</span>)</span><br />
1207 Flush all task messages (from all task workers).</td>
1208 <td align="right" valign="top">
1209 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.flush_buffers">source&nbsp;code</a></span>
1210
1211 </td>
1212 </tr>
1213 </table>
1214
1215 </td>
1216 </tr>
1217 <tr>
1218 <td width="15%" align="right" valign="top" class="summary">
1219 <span class="summary-type">&nbsp;</span>
1220 </td><td class="summary">
1221 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1222 <tr>
1223 <td><span class="summary-sig"><a name="flush_errors"></a><span class="summary-sig-name">flush_errors</span>(<span class="summary-sig-arg">self</span>)</span><br />
1224 Flush all task error messages (from all task workers).</td>
1225 <td align="right" valign="top">
1226 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.flush_errors">source&nbsp;code</a></span>
1227
1228 </td>
1229 </tr>
1230 </table>
1231
1232 </td>
1233 </tr>
1234 <tr>
1235 <td colspan="2" class="summary">
1236 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
1237 <code>__delattr__</code>,
1238 <code>__format__</code>,
1239 <code>__getattribute__</code>,
1240 <code>__hash__</code>,
1241 <code>__reduce__</code>,
1242 <code>__reduce_ex__</code>,
1243 <code>__repr__</code>,
1244 <code>__setattr__</code>,
1245 <code>__sizeof__</code>,
1246 <code>__str__</code>,
1247 <code>__subclasshook__</code>
1248 </p>
1249 </td>
1250 </tr>
1251 </table>
1252 <!-- ==================== CLASS METHODS ==================== -->
1253 <a name="section-ClassMethods"></a>
1254 <table class="summary" border="1" cellpadding="3"
1255 cellspacing="0" width="100%" bgcolor="white">
1256 <tr bgcolor="#70b0f0" class="table-header">
1257 <td colspan="2" class="table-header">
1258 <table border="0" cellpadding="0" cellspacing="0" width="100%">
1259 <tr valign="top">
1260 <td align="left"><span class="table-header">Class Methods</span></td>
1261 <td align="right" valign="top"
1262 ><span class="options">[<a href="#section-ClassMethods"
1263 class="privatelink" onclick="toggle_private();"
1264 >hide private</a>]</span></td>
1265 </tr>
1266 </table>
1267 </td>
1268 </tr>
1269 <tr>
1270 <td width="15%" align="right" valign="top" class="summary">
1271 <span class="summary-type">&nbsp;</span>
1272 </td><td class="summary">
1273 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1274 <tr>
1275 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#wait" class="summary-sig-name">wait</a>(<span class="summary-sig-arg">cls</span>,
1276 <span class="summary-sig-arg">from_thread</span>)</span><br />
1277 Class method that blocks calling thread until all tasks have finished
1278 (from a ClusterShell point of view, for instance, their task.resume()
1279 return).</td>
1280 <td align="right" valign="top">
1281 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.wait">source&nbsp;code</a></span>
1282
1283 </td>
1284 </tr>
1285 </table>
1286
1287 </td>
1288 </tr>
1289 </table>
1290 <!-- ==================== STATIC METHODS ==================== -->
1291 <a name="section-StaticMethods"></a>
1292 <table class="summary" border="1" cellpadding="3"
1293 cellspacing="0" width="100%" bgcolor="white">
1294 <tr bgcolor="#70b0f0" class="table-header">
1295 <td colspan="2" class="table-header">
1296 <table border="0" cellpadding="0" cellspacing="0" width="100%">
1297 <tr valign="top">
1298 <td align="left"><span class="table-header">Static Methods</span></td>
1299 <td align="right" valign="top"
1300 ><span class="options">[<a href="#section-StaticMethods"
1301 class="privatelink" onclick="toggle_private();"
1302 >hide private</a>]</span></td>
1303 </tr>
1304 </table>
1305 </td>
1306 </tr>
1307 <tr>
1308 <td width="15%" align="right" valign="top" class="summary">
1309 <span class="summary-type">a new object with type S, a subtype of T</span>
1310 </td><td class="summary">
1311 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1312 <tr>
1313 <td><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#__new__" class="summary-sig-name">__new__</a>(<span class="summary-sig-arg">cls</span>,
1314 <span class="summary-sig-arg">thread</span>=<span class="summary-sig-default">None</span>)</span><br />
1315 For task bound to a specific thread, this class acts like a
1316 &quot;thread singleton&quot;, so new style class is used and new
1317 object are only instantiated if needed.</td>
1318 <td align="right" valign="top">
1319 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.__new__">source&nbsp;code</a></span>
1320
1321 </td>
1322 </tr>
1323 </table>
1324
1325 </td>
1326 </tr>
1327 </table>
1328 <!-- ==================== CLASS VARIABLES ==================== -->
1329 <a name="section-ClassVariables"></a>
1330 <table class="summary" border="1" cellpadding="3"
1331 cellspacing="0" width="100%" bgcolor="white">
1332 <tr bgcolor="#70b0f0" class="table-header">
1333 <td colspan="2" class="table-header">
1334 <table border="0" cellpadding="0" cellspacing="0" width="100%">
1335 <tr valign="top">
1336 <td align="left"><span class="table-header">Class Variables</span></td>
1337 <td align="right" valign="top"
1338 ><span class="options">[<a href="#section-ClassVariables"
1339 class="privatelink" onclick="toggle_private();"
1340 >hide private</a>]</span></td>
1341 </tr>
1342 </table>
1343 </td>
1344 </tr>
1345 <tr class="private">
1346 <td width="15%" align="right" valign="top" class="summary">
1347 <span class="summary-type">&nbsp;</span>
1348 </td><td class="summary">
1349 <a href="ClusterShell.Task.Task-class.html#_std_default" class="summary-name" onclick="show_private();">_std_default</a> = <code title="{'engine': 'auto',
1350 'port_qlimit': 32,
1351 'stderr': False,
1352 'stderr_msgtree': True,
1353 'stdout_msgtree': True}"><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">engine</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">auto</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">port_qlimit</code><code class="variable-quote">'</code><code class="variable-op">: </code>32<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">stderr</code><code class="variable-quote">'</code><code class="variable-op">:</code><code class="variable-ellipsis">...</code></code>
1354 </td>
1355 </tr>
1356 <tr class="private">
1357 <td width="15%" align="right" valign="top" class="summary">
1358 <span class="summary-type">&nbsp;</span>
1359 </td><td class="summary">
1360 <a href="ClusterShell.Task.Task-class.html#_std_info" class="summary-name" onclick="show_private();">_std_info</a> = <code title="{'command_timeout': 0,
1361 'connect_timeout': 10,
1362 'debug': False,
1363 'fanout': 64,
1364 'print_debug': &lt;function _task_print_debug at 0x1d3ac80&gt;}"><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">command_timeout</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">connect_timeout</code><code class="variable-quote">'</code><code class="variable-op">: </code>10<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">deb</code><code class="variable-ellipsis">...</code></code>
1365 </td>
1366 </tr>
1367 <tr class="private">
1368 <td width="15%" align="right" valign="top" class="summary">
1369 <span class="summary-type">&nbsp;</span>
1370 </td><td class="summary">
1371 <a name="_tasks"></a><span class="summary-name">_tasks</span> = <code title="{}"><code class="variable-group">{</code><code class="variable-group">}</code></code>
1372 </td>
1373 </tr>
1374 <tr class="private">
1375 <td width="15%" align="right" valign="top" class="summary">
1376 <span class="summary-type">&nbsp;</span>
1377 </td><td class="summary">
1378 <a name="_taskid_max"></a><span class="summary-name">_taskid_max</span> = <code title="0">0</code>
1379 </td>
1380 </tr>
1381 <tr class="private">
1382 <td width="15%" align="right" valign="top" class="summary">
1383 <span class="summary-type">&nbsp;</span>
1384 </td><td class="summary">
1385 <a name="_task_lock"></a><span class="summary-name">_task_lock</span> = <code title="threading.Lock()">threading.Lock()</code>
1386 </td>
1387 </tr>
1388 </table>
1389 <!-- ==================== PROPERTIES ==================== -->
1390 <a name="section-Properties"></a>
1391 <table class="summary" border="1" cellpadding="3"
1392 cellspacing="0" width="100%" bgcolor="white">
1393 <tr bgcolor="#70b0f0" class="table-header">
1394 <td colspan="2" class="table-header">
1395 <table border="0" cellpadding="0" cellspacing="0" width="100%">
1396 <tr valign="top">
1397 <td align="left"><span class="table-header">Properties</span></td>
1398 <td align="right" valign="top"
1399 ><span class="options">[<a href="#section-Properties"
1400 class="privatelink" onclick="toggle_private();"
1401 >hide private</a>]</span></td>
1402 </tr>
1403 </table>
1404 </td>
1405 </tr>
1406 <tr>
1407 <td width="15%" align="right" valign="top" class="summary">
1408 <span class="summary-type">&nbsp;</span>
1409 </td><td class="summary">
1410 <a href="ClusterShell.Task.Task-class.html#excepthook" class="summary-name">excepthook</a>
1411 </td>
1412 </tr>
1413 <tr>
1414 <td colspan="2" class="summary">
1415 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
1416 <code>__class__</code>
1417 </p>
1418 </td>
1419 </tr>
1420 </table>
1421 <!-- ==================== METHOD DETAILS ==================== -->
1422 <a name="section-MethodDetails"></a>
1423 <table class="details" border="1" cellpadding="3"
1424 cellspacing="0" width="100%" bgcolor="white">
1425 <tr bgcolor="#70b0f0" class="table-header">
1426 <td colspan="2" class="table-header">
1427 <table border="0" cellpadding="0" cellspacing="0" width="100%">
1428 <tr valign="top">
1429 <td align="left"><span class="table-header">Method Details</span></td>
1430 <td align="right" valign="top"
1431 ><span class="options">[<a href="#section-MethodDetails"
1432 class="privatelink" onclick="toggle_private();"
1433 >hide private</a>]</span></td>
1434 </tr>
1435 </table>
1436 </td>
1437 </tr>
1438 </table>
1439 <a name="__new__"></a>
1440 <div>
1441 <table class="details" border="1" cellpadding="3"
1442 cellspacing="0" width="100%" bgcolor="white">
1443 <tr><td>
1444 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1445 <tr valign="top"><td>
1446 <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">cls</span>,
1447 <span class="sig-arg">thread</span>=<span class="sig-default">None</span>)</span>
1448 <br /><em class="fname">Static Method</em>
1449 </h3>
1450 </td><td align="right" valign="top"
1451 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.__new__">source&nbsp;code</a></span>&nbsp;
1452 </td>
1453 </tr></table>
1454
1455 <p>For task bound to a specific thread, this class acts like a
1456 &quot;thread singleton&quot;, so new style class is used and new object
1457 are only instantiated if needed.</p>
1458 <dl class="fields">
1459 <dt>Returns: a new object with type S, a subtype of T</dt>
1460 <dt>Overrides:
1461 object.__new__
1462 </dt>
1463 </dl>
1464 </td></tr></table>
1465 </div>
1466 <a name="__init__"></a>
1467 <div>
1468 <table class="details" border="1" cellpadding="3"
1469 cellspacing="0" width="100%" bgcolor="white">
1470 <tr><td>
1471 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1472 <tr valign="top"><td>
1473 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
1474 <span class="sig-arg">thread</span>=<span class="sig-default">None</span>)</span>
1475 <br /><em class="fname">(Constructor)</em>
1476 </h3>
1477 </td><td align="right" valign="top"
1478 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.__init__">source&nbsp;code</a></span>&nbsp;
1479 </td>
1480 </tr></table>
1481
1482 <p>Initialize a Task, creating a new thread if needed.</p>
1483 <dl class="fields">
1484 <dt>Overrides:
1485 object.__init__
1486 </dt>
1487 </dl>
1488 </td></tr></table>
1489 </div>
1490 <a name="default_excepthook"></a>
1491 <div>
1492 <table class="details" border="1" cellpadding="3"
1493 cellspacing="0" width="100%" bgcolor="white">
1494 <tr><td>
1495 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1496 <tr valign="top"><td>
1497 <h3 class="epydoc"><span class="sig"><span class="sig-name">default_excepthook</span>(<span class="sig-arg">self</span>,
1498 <span class="sig-arg">type</span>,
1499 <span class="sig-arg">value</span>,
1500 <span class="sig-arg">tb</span>)</span>
1501 </h3>
1502 </td><td align="right" valign="top"
1503 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.default_excepthook">source&nbsp;code</a></span>&nbsp;
1504 </td>
1505 </tr></table>
1506
1507 <p>Default excepthook for a newly Task. When an exception is raised and
1508 uncaught on Task thread, excepthook is called, which is
1509 default_excepthook by default. Once excepthook overriden, you can still
1510 call default_excepthook if needed.</p>
1511 <dl class="fields">
1512 </dl>
1513 </td></tr></table>
1514 </div>
1515 <a name="_excepthook"></a>
1516 <div class="private">
1517 <table class="details" border="1" cellpadding="3"
1518 cellspacing="0" width="100%" bgcolor="white">
1519 <tr><td>
1520 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1521 <tr valign="top"><td>
1522 <h3 class="epydoc"><span class="sig"><span class="sig-name">_excepthook</span>(<span class="sig-arg">self</span>,
1523 <span class="sig-arg">type</span>,
1524 <span class="sig-arg">value</span>,
1525 <span class="sig-arg">tb</span>)</span>
1526 </h3>
1527 </td><td align="right" valign="top"
1528 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.default_excepthook">source&nbsp;code</a></span>&nbsp;
1529 </td>
1530 </tr></table>
1531
1532 <p>Default excepthook for a newly Task. When an exception is raised and
1533 uncaught on Task thread, excepthook is called, which is
1534 default_excepthook by default. Once excepthook overriden, you can still
1535 call default_excepthook if needed.</p>
1536 <dl class="fields">
1537 </dl>
1538 </td></tr></table>
1539 </div>
1540 <a name="default"></a>
1541 <div>
1542 <table class="details" border="1" cellpadding="3"
1543 cellspacing="0" width="100%" bgcolor="white">
1544 <tr><td>
1545 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1546 <tr valign="top"><td>
1547 <h3 class="epydoc"><span class="sig"><span class="sig-name">default</span>(<span class="sig-arg">self</span>,
1548 <span class="sig-arg">default_key</span>,
1549 <span class="sig-arg">def_val</span>=<span class="sig-default">None</span>)</span>
1550 </h3>
1551 </td><td align="right" valign="top"
1552 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.default">source&nbsp;code</a></span>&nbsp;
1553 </td>
1554 </tr></table>
1555
1556 <p>Return per-task value for key from the &quot;default&quot; dictionary.
1557 See set_default() for a list of reserved task default_keys.</p>
1558 <dl class="fields">
1559 </dl>
1560 </td></tr></table>
1561 </div>
1562 <a name="set_default"></a>
1563 <div>
1564 <table class="details" border="1" cellpadding="3"
1565 cellspacing="0" width="100%" bgcolor="white">
1566 <tr><td>
1567 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1568 <tr valign="top"><td>
1569 <h3 class="epydoc"><span class="sig"><span class="sig-name">set_default</span>(<span class="sig-arg">self</span>,
1570 <span class="sig-arg">default_key</span>,
1571 <span class="sig-arg">value</span>)</span>
1572 </h3>
1573 </td><td align="right" valign="top"
1574 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.set_default">source&nbsp;code</a></span>&nbsp;
1575 </td>
1576 </tr></table>
1577
1578 <p>Set task value for specified key in the dictionary
1579 &quot;default&quot;. Users may store their own task-specific key, value
1580 pairs using this method and retrieve them with default().</p>
1581 <p>Task default_keys are:</p>
1582 <ul>
1583 <li>
1584 &quot;stderr&quot;: Boolean value indicating whether to enable
1585 stdout/stderr separation when using task.shell(), if not specified
1586 explicitly (default: False).
1587 </li>
1588 <li>
1589 &quot;stdout_msgtree&quot;: Whether to enable standard output MsgTree
1590 for automatic internal gathering of result messages (default: True).
1591 </li>
1592 <li>
1593 &quot;stderr_msgtree&quot;: Same for stderr (default: True).
1594 </li>
1595 <li>
1596 &quot;engine&quot;: Used to specify an underlying Engine explicitly
1597 (default: &quot;auto&quot;).
1598 </li>
1599 <li>
1600 &quot;port_qlimit&quot;: Size of port messages queue (default: 32).
1601 </li>
1602 </ul>
1603 <h1 class="heading">Threading considerations</h1>
1604 <p>Unlike set_info(), when called from the task's thread or not,
1605 set_default() immediately updates the underlying dictionary in a
1606 thread-safe manner. This method doesn't wake up the engine when
1607 called.</p>
1608 <dl class="fields">
1609 </dl>
1610 </td></tr></table>
1611 </div>
1612 <a name="info"></a>
1613 <div>
1614 <table class="details" border="1" cellpadding="3"
1615 cellspacing="0" width="100%" bgcolor="white">
1616 <tr><td>
1617 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1618 <tr valign="top"><td>
1619 <h3 class="epydoc"><span class="sig"><span class="sig-name">info</span>(<span class="sig-arg">self</span>,
1620 <span class="sig-arg">info_key</span>,
1621 <span class="sig-arg">def_val</span>=<span class="sig-default">None</span>)</span>
1622 </h3>
1623 </td><td align="right" valign="top"
1624 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.info">source&nbsp;code</a></span>&nbsp;
1625 </td>
1626 </tr></table>
1627
1628 <p>Return per-task information. See set_info() for a list of reserved
1629 task info_keys.</p>
1630 <dl class="fields">
1631 </dl>
1632 </td></tr></table>
1633 </div>
1634 <a name="set_info"></a>
1635 <div>
1636 <table class="details" border="1" cellpadding="3"
1637 cellspacing="0" width="100%" bgcolor="white">
1638 <tr><td>
1639 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1640 <tr valign="top"><td>
1641 <h3 class="epydoc"><span class="sig"><span class="sig-name">set_info</span>(<span class="sig-arg">*args</span>,
1642 <span class="sig-arg">**kwargs</span>)</span>
1643 </h3>
1644 </td><td align="right" valign="top"
1645 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.set_info">source&nbsp;code</a></span>&nbsp;
1646 </td>
1647 </tr></table>
1648
1649 <p>Set task value for a specific key information. Key, value pairs can be
1650 passed to the engine and/or workers. Users may store their own
1651 task-specific info key, value pairs using this method and retrieve them
1652 with info().</p>
1653 <p>Task info_keys are:</p>
1654 <ul>
1655 <li>
1656 &quot;debug&quot;: Boolean value indicating whether to enable library
1657 debugging messages (default: False).
1658 </li>
1659 <li>
1660 &quot;print_debug&quot;: Debug messages processing function. This
1661 function takes 2 arguments: the task instance and the message string
1662 (default: an internal function doing standard print).
1663 </li>
1664 <li>
1665 &quot;fanout&quot;: Max number of registered clients in Engine at a
1666 time (default: 64).
1667 </li>
1668 <li>
1669 &quot;connect_timeout&quot;: Time in seconds to wait for connecting
1670 to remote host before aborting (default: 10).
1671 </li>
1672 <li>
1673 &quot;command_timeout&quot;: Time in seconds to wait for a command to
1674 complete before aborting (default: 0, which means unlimited).
1675 </li>
1676 </ul>
1677 <h1 class="heading">Threading considerations</h1>
1678 <p>Unlike set_default(), the underlying info dictionary is only
1679 modified from the task's thread. So calling set_info() from another
1680 thread leads to queueing the request for late apply (at run time) using
1681 the task dispatch port. When received, the request wakes up the engine
1682 when the task is running and the info dictionary is then updated.</p>
1683 <dl class="fields">
1684 <dt>Decorators:</dt>
1685 <dd><ul class="nomargin-top">
1686 <li><code>@tasksyncmethod()</code></li>
1687 </ul></dd>
1688 </dl>
1689 </td></tr></table>
1690 </div>
1691 <a name="shell"></a>
1692 <div>
1693 <table class="details" border="1" cellpadding="3"
1694 cellspacing="0" width="100%" bgcolor="white">
1695 <tr><td>
1696 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1697 <tr valign="top"><td>
1698 <h3 class="epydoc"><span class="sig"><span class="sig-name">shell</span>(<span class="sig-arg">self</span>,
1699 <span class="sig-arg">command</span>,
1700 <span class="sig-arg">**kwargs</span>)</span>
1701 </h3>
1702 </td><td align="right" valign="top"
1703 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.shell">source&nbsp;code</a></span>&nbsp;
1704 </td>
1705 </tr></table>
1706
1707 <p>Schedule a shell command for local or distant execution.</p>
1708 <p>Local usage:</p>
1709 <pre class="literalblock">
1710 task.shell(command [, key=key] [, handler=handler]
1711 [, timeout=secs] [, autoclose=enable_autoclose]
1712 [, stderr=enable_stderr])
1713 </pre>
1714 <p>Distant usage:</p>
1715 <pre class="literalblock">
1716 task.shell(command, nodes=nodeset [, handler=handler]
1717 [, timeout=secs], [, autoclose=enable_autoclose]
1718 [, strderr=enable_stderr])
1719 </pre>
1720 <dl class="fields">
1721 </dl>
1722 </td></tr></table>
1723 </div>
1724 <a name="_add_port"></a>
1725 <div class="private">
1726 <table class="details" border="1" cellpadding="3"
1727 cellspacing="0" width="100%" bgcolor="white">
1728 <tr><td>
1729 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1730 <tr valign="top"><td>
1731 <h3 class="epydoc"><span class="sig"><span class="sig-name">_add_port</span>(<span class="sig-arg">*args</span>,
1732 <span class="sig-arg">**kwargs</span>)</span>
1733 </h3>
1734 </td><td align="right" valign="top"
1735 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._add_port">source&nbsp;code</a></span>&nbsp;
1736 </td>
1737 </tr></table>
1738
1739 <p>Add an EnginePort instance to Engine (private method).</p>
1740 <dl class="fields">
1741 <dt>Decorators:</dt>
1742 <dd><ul class="nomargin-top">
1743 <li><code>@tasksyncmethod()</code></li>
1744 </ul></dd>
1745 </dl>
1746 </td></tr></table>
1747 </div>
1748 <a name="_remove_port"></a>
1749 <div class="private">
1750 <table class="details" border="1" cellpadding="3"
1751 cellspacing="0" width="100%" bgcolor="white">
1752 <tr><td>
1753 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1754 <tr valign="top"><td>
1755 <h3 class="epydoc"><span class="sig"><span class="sig-name">_remove_port</span>(<span class="sig-arg">*args</span>,
1756 <span class="sig-arg">**kwargs</span>)</span>
1757 </h3>
1758 </td><td align="right" valign="top"
1759 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._remove_port">source&nbsp;code</a></span>&nbsp;
1760 </td>
1761 </tr></table>
1762
1763 <p>Remove a port from Engine (private method).</p>
1764 <dl class="fields">
1765 <dt>Decorators:</dt>
1766 <dd><ul class="nomargin-top">
1767 <li><code>@tasksyncmethod()</code></li>
1768 </ul></dd>
1769 </dl>
1770 </td></tr></table>
1771 </div>
1772 <a name="port"></a>
1773 <div>
1774 <table class="details" border="1" cellpadding="3"
1775 cellspacing="0" width="100%" bgcolor="white">
1776 <tr><td>
1777 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1778 <tr valign="top"><td>
1779 <h3 class="epydoc"><span class="sig"><span class="sig-name">port</span>(<span class="sig-arg">self</span>,
1780 <span class="sig-arg">handler</span>=<span class="sig-default">None</span>,
1781 <span class="sig-arg">autoclose</span>=<span class="sig-default">False</span>)</span>
1782 </h3>
1783 </td><td align="right" valign="top"
1784 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.port">source&nbsp;code</a></span>&nbsp;
1785 </td>
1786 </tr></table>
1787
1788 <p>Create a new task port. A task port is an abstraction object to
1789 deliver messages reliably between tasks.</p>
1790 <p>Basic rules:</p>
1791 <ul>
1792 <li>
1793 A task can send messages to another task port (thread safe).
1794 </li>
1795 <li>
1796 A task can receive messages from an acquired port either by setting
1797 up a notification mechanism or using a polling mechanism that may
1798 block the task waiting for a message sent on the port.
1799 </li>
1800 <li>
1801 A port can be acquired by one task only.
1802 </li>
1803 </ul>
1804 <p>If handler is set to a valid EventHandler object, the port is a
1805 send-once port, ie. a message sent to this port generates an ev_msg event
1806 notification issued the port's task. If handler is not set, the task can
1807 only receive messages on the port by calling port.msg_recv().</p>
1808 <dl class="fields">
1809 </dl>
1810 </td></tr></table>
1811 </div>
1812 <a name="timer"></a>
1813 <div>
1814 <table class="details" border="1" cellpadding="3"
1815 cellspacing="0" width="100%" bgcolor="white">
1816 <tr><td>
1817 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1818 <tr valign="top"><td>
1819 <h3 class="epydoc"><span class="sig"><span class="sig-name">timer</span>(<span class="sig-arg">*args</span>,
1820 <span class="sig-arg">**kwargs</span>)</span>
1821 </h3>
1822 </td><td align="right" valign="top"
1823 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.timer">source&nbsp;code</a></span>&nbsp;
1824 </td>
1825 </tr></table>
1826
1827 <p>Create task's timer.</p>
1828 <dl class="fields">
1829 <dt>Decorators:</dt>
1830 <dd><ul class="nomargin-top">
1831 <li><code>@tasksyncmethod()</code></li>
1832 </ul></dd>
1833 </dl>
1834 </td></tr></table>
1835 </div>
1836 <a name="schedule"></a>
1837 <div>
1838 <table class="details" border="1" cellpadding="3"
1839 cellspacing="0" width="100%" bgcolor="white">
1840 <tr><td>
1841 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1842 <tr valign="top"><td>
1843 <h3 class="epydoc"><span class="sig"><span class="sig-name">schedule</span>(<span class="sig-arg">*args</span>,
1844 <span class="sig-arg">**kwargs</span>)</span>
1845 </h3>
1846 </td><td align="right" valign="top"
1847 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.schedule">source&nbsp;code</a></span>&nbsp;
1848 </td>
1849 </tr></table>
1850
1851 <p>Schedule a worker for execution. Only useful for manually instantiated
1852 workers.</p>
1853 <dl class="fields">
1854 <dt>Decorators:</dt>
1855 <dd><ul class="nomargin-top">
1856 <li><code>@tasksyncmethod()</code></li>
1857 </ul></dd>
1858 </dl>
1859 </td></tr></table>
1860 </div>
1861 <a name="resume"></a>
1862 <div>
1863 <table class="details" border="1" cellpadding="3"
1864 cellspacing="0" width="100%" bgcolor="white">
1865 <tr><td>
1866 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1867 <tr valign="top"><td>
1868 <h3 class="epydoc"><span class="sig"><span class="sig-name">resume</span>(<span class="sig-arg">self</span>,
1869 <span class="sig-arg">timeout</span>=<span class="sig-default">0</span>)</span>
1870 </h3>
1871 </td><td align="right" valign="top"
1872 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.resume">source&nbsp;code</a></span>&nbsp;
1873 </td>
1874 </tr></table>
1875
1876 <p>Resume task. If task is task_self(), workers are executed in the
1877 calling thread so this method will block until workers have finished.
1878 This is always the case for a single-threaded application (eg. which
1879 doesn't create other Task() instance than task_self()). Otherwise, the
1880 current thread doesn't block. In that case, you may then want to call
1881 task_wait() to wait for completion.</p>
1882 <dl class="fields">
1883 </dl>
1884 </td></tr></table>
1885 </div>
1886 <a name="_suspend_wait"></a>
1887 <div class="private">
1888 <table class="details" border="1" cellpadding="3"
1889 cellspacing="0" width="100%" bgcolor="white">
1890 <tr><td>
1891 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1892 <tr valign="top"><td>
1893 <h3 class="epydoc"><span class="sig"><span class="sig-name">_suspend_wait</span>(<span class="sig-arg">*args</span>,
1894 <span class="sig-arg">**kwargs</span>)</span>
1895 </h3>
1896 </td><td align="right" valign="top"
1897 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._suspend_wait">source&nbsp;code</a></span>&nbsp;
1898 </td>
1899 </tr></table>
1900
1901
1902 <dl class="fields">
1903 <dt>Decorators:</dt>
1904 <dd><ul class="nomargin-top">
1905 <li><code>@tasksyncmethod()</code></li>
1906 </ul></dd>
1907 </dl>
1908 </td></tr></table>
1909 </div>
1910 <a name="suspend"></a>
1911 <div>
1912 <table class="details" border="1" cellpadding="3"
1913 cellspacing="0" width="100%" bgcolor="white">
1914 <tr><td>
1915 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1916 <tr valign="top"><td>
1917 <h3 class="epydoc"><span class="sig"><span class="sig-name">suspend</span>(<span class="sig-arg">self</span>)</span>
1918 </h3>
1919 </td><td align="right" valign="top"
1920 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.suspend">source&nbsp;code</a></span>&nbsp;
1921 </td>
1922 </tr></table>
1923
1924 <p>Suspend task execution. This method may be called from another task
1925 (thread-safe). The function returns False if the task cannot be suspended
1926 (eg. it's not running), or returns True if the task has been successfully
1927 suspended. To resume a suspended task, use task.resume().</p>
1928 <dl class="fields">
1929 </dl>
1930 </td></tr></table>
1931 </div>
1932 <a name="_abort"></a>
1933 <div class="private">
1934 <table class="details" border="1" cellpadding="3"
1935 cellspacing="0" width="100%" bgcolor="white">
1936 <tr><td>
1937 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1938 <tr valign="top"><td>
1939 <h3 class="epydoc"><span class="sig"><span class="sig-name">_abort</span>(<span class="sig-arg">*args</span>,
1940 <span class="sig-arg">**kwargs</span>)</span>
1941 </h3>
1942 </td><td align="right" valign="top"
1943 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._abort">source&nbsp;code</a></span>&nbsp;
1944 </td>
1945 </tr></table>
1946
1947
1948 <dl class="fields">
1949 <dt>Decorators:</dt>
1950 <dd><ul class="nomargin-top">
1951 <li><code>@tasksyncmethod()</code></li>
1952 </ul></dd>
1953 </dl>
1954 </td></tr></table>
1955 </div>
1956 <a name="abort"></a>
1957 <div>
1958 <table class="details" border="1" cellpadding="3"
1959 cellspacing="0" width="100%" bgcolor="white">
1960 <tr><td>
1961 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1962 <tr valign="top"><td>
1963 <h3 class="epydoc"><span class="sig"><span class="sig-name">abort</span>(<span class="sig-arg">self</span>,
1964 <span class="sig-arg">kill</span>=<span class="sig-default">False</span>)</span>
1965 </h3>
1966 </td><td align="right" valign="top"
1967 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.abort">source&nbsp;code</a></span>&nbsp;
1968 </td>
1969 </tr></table>
1970
1971 <p>Abort a task. Aborting a task removes (and stops when needed) all
1972 workers. If optional parameter kill is True, the task object is unbound
1973 from the current thread, so calling task_self() creates a new Task
1974 object.</p>
1975 <dl class="fields">
1976 </dl>
1977 </td></tr></table>
1978 </div>
1979 <a name="_iter_keys_timeout_by_worker"></a>
1980 <div class="private">
1981 <table class="details" border="1" cellpadding="3"
1982 cellspacing="0" width="100%" bgcolor="white">
1983 <tr><td>
1984 <table width="100%" cellpadding="0" cellspacing="0" border="0">
1985 <tr valign="top"><td>
1986 <h3 class="epydoc"><span class="sig"><span class="sig-name">_iter_keys_timeout_by_worker</span>(<span class="sig-arg">self</span>,
1987 <span class="sig-arg">worker</span>)</span>
1988 </h3>
1989 </td><td align="right" valign="top"
1990 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._iter_keys_timeout_by_worker">source&nbsp;code</a></span>&nbsp;
1991 </td>
1992 </tr></table>
1993
1994 <p>Iterate over timed out keys (ie. nodes) for a specific worker.</p>
1995 <dl class="fields">
1996 </dl>
1997 </td></tr></table>
1998 </div>
1999 <a name="key_buffer"></a>
2000 <div>
2001 <table class="details" border="1" cellpadding="3"
2002 cellspacing="0" width="100%" bgcolor="white">
2003 <tr><td>
2004 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2005 <tr valign="top"><td>
2006 <h3 class="epydoc"><span class="sig"><span class="sig-name">key_buffer</span>(<span class="sig-arg">self</span>,
2007 <span class="sig-arg">key</span>)</span>
2008 </h3>
2009 </td><td align="right" valign="top"
2010 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_buffer">source&nbsp;code</a></span>&nbsp;
2011 </td>
2012 </tr></table>
2013
2014 <p>Get buffer for a specific key. When the key is associated to multiple
2015 workers, the resulting buffer will contain all workers content that may
2016 overlap. This method returns an empty buffer if key is not found in any
2017 workers.</p>
2018 <dl class="fields">
2019 </dl>
2020 </td></tr></table>
2021 </div>
2022 <a name="node_buffer"></a>
2023 <div>
2024 <table class="details" border="1" cellpadding="3"
2025 cellspacing="0" width="100%" bgcolor="white">
2026 <tr><td>
2027 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2028 <tr valign="top"><td>
2029 <h3 class="epydoc"><span class="sig"><span class="sig-name">node_buffer</span>(<span class="sig-arg">self</span>,
2030 <span class="sig-arg">key</span>)</span>
2031 </h3>
2032 </td><td align="right" valign="top"
2033 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_buffer">source&nbsp;code</a></span>&nbsp;
2034 </td>
2035 </tr></table>
2036
2037 <p>Get buffer for a specific key. When the key is associated to multiple
2038 workers, the resulting buffer will contain all workers content that may
2039 overlap. This method returns an empty buffer if key is not found in any
2040 workers.</p>
2041 <dl class="fields">
2042 </dl>
2043 </td></tr></table>
2044 </div>
2045 <a name="key_error"></a>
2046 <div>
2047 <table class="details" border="1" cellpadding="3"
2048 cellspacing="0" width="100%" bgcolor="white">
2049 <tr><td>
2050 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2051 <tr valign="top"><td>
2052 <h3 class="epydoc"><span class="sig"><span class="sig-name">key_error</span>(<span class="sig-arg">self</span>,
2053 <span class="sig-arg">key</span>)</span>
2054 </h3>
2055 </td><td align="right" valign="top"
2056 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_error">source&nbsp;code</a></span>&nbsp;
2057 </td>
2058 </tr></table>
2059
2060 <p>Get error buffer for a specific key. When the key is associated to
2061 multiple workers, the resulting buffer will contain all workers content
2062 that may overlap. This method returns an empty error buffer if key is not
2063 found in any workers.</p>
2064 <dl class="fields">
2065 </dl>
2066 </td></tr></table>
2067 </div>
2068 <a name="node_error"></a>
2069 <div>
2070 <table class="details" border="1" cellpadding="3"
2071 cellspacing="0" width="100%" bgcolor="white">
2072 <tr><td>
2073 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2074 <tr valign="top"><td>
2075 <h3 class="epydoc"><span class="sig"><span class="sig-name">node_error</span>(<span class="sig-arg">self</span>,
2076 <span class="sig-arg">key</span>)</span>
2077 </h3>
2078 </td><td align="right" valign="top"
2079 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_error">source&nbsp;code</a></span>&nbsp;
2080 </td>
2081 </tr></table>
2082
2083 <p>Get error buffer for a specific key. When the key is associated to
2084 multiple workers, the resulting buffer will contain all workers content
2085 that may overlap. This method returns an empty error buffer if key is not
2086 found in any workers.</p>
2087 <dl class="fields">
2088 </dl>
2089 </td></tr></table>
2090 </div>
2091 <a name="key_retcode"></a>
2092 <div>
2093 <table class="details" border="1" cellpadding="3"
2094 cellspacing="0" width="100%" bgcolor="white">
2095 <tr><td>
2096 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2097 <tr valign="top"><td>
2098 <h3 class="epydoc"><span class="sig"><span class="sig-name">key_retcode</span>(<span class="sig-arg">self</span>,
2099 <span class="sig-arg">key</span>)</span>
2100 </h3>
2101 </td><td align="right" valign="top"
2102 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_retcode">source&nbsp;code</a></span>&nbsp;
2103 </td>
2104 </tr></table>
2105
2106 <p>Return return code for a specific key. When the key is associated to
2107 multiple workers, return the max return code from these workers. Raises a
2108 KeyError if key is not found in any finished workers.</p>
2109 <dl class="fields">
2110 </dl>
2111 </td></tr></table>
2112 </div>
2113 <a name="node_retcode"></a>
2114 <div>
2115 <table class="details" border="1" cellpadding="3"
2116 cellspacing="0" width="100%" bgcolor="white">
2117 <tr><td>
2118 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2119 <tr valign="top"><td>
2120 <h3 class="epydoc"><span class="sig"><span class="sig-name">node_retcode</span>(<span class="sig-arg">self</span>,
2121 <span class="sig-arg">key</span>)</span>
2122 </h3>
2123 </td><td align="right" valign="top"
2124 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.key_retcode">source&nbsp;code</a></span>&nbsp;
2125 </td>
2126 </tr></table>
2127
2128 <p>Return return code for a specific key. When the key is associated to
2129 multiple workers, return the max return code from these workers. Raises a
2130 KeyError if key is not found in any finished workers.</p>
2131 <dl class="fields">
2132 </dl>
2133 </td></tr></table>
2134 </div>
2135 <a name="max_retcode"></a>
2136 <div>
2137 <table class="details" border="1" cellpadding="3"
2138 cellspacing="0" width="100%" bgcolor="white">
2139 <tr><td>
2140 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2141 <tr valign="top"><td>
2142 <h3 class="epydoc"><span class="sig"><span class="sig-name">max_retcode</span>(<span class="sig-arg">self</span>)</span>
2143 </h3>
2144 </td><td align="right" valign="top"
2145 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.max_retcode">source&nbsp;code</a></span>&nbsp;
2146 </td>
2147 </tr></table>
2148
2149 <p>Get max return code encountered during last run.</p>
2150 <h1 class="heading">How retcodes work</h1>
2151 <p>If the process exits normally, the return code is its exit status.
2152 If the process is terminated by a signal, the return code is 128 +
2153 signal number.</p>
2154 <dl class="fields">
2155 </dl>
2156 </td></tr></table>
2157 </div>
2158 <a name="iter_buffers"></a>
2159 <div>
2160 <table class="details" border="1" cellpadding="3"
2161 cellspacing="0" width="100%" bgcolor="white">
2162 <tr><td>
2163 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2164 <tr valign="top"><td>
2165 <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_buffers</span>(<span class="sig-arg">self</span>,
2166 <span class="sig-arg">match_keys</span>=<span class="sig-default">None</span>)</span>
2167 </h3>
2168 </td><td align="right" valign="top"
2169 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.iter_buffers">source&nbsp;code</a></span>&nbsp;
2170 </td>
2171 </tr></table>
2172
2173 <p>Iterate over buffers, returns a tuple (buffer, keys). For remote
2174 workers (Ssh), keys are list of nodes. In that case, you should use
2175 NodeSet.fromlist(keys) to get a NodeSet instance (which is more
2176 convenient and efficient):</p>
2177 <p>Optional parameter match_keys add filtering on these keys.</p>
2178 <p>Usage example:</p>
2179 <pre class="py-doctest">
2180 <span class="py-prompt">&gt;&gt;&gt; </span><span class="py-keyword">for</span> buffer, nodelist <span class="py-keyword">in</span> task.iter_buffers():
2181 <span class="py-more">... </span> <span class="py-keyword">print</span> NodeSet.fromlist(nodelist)
2182 <span class="py-more">... </span> <span class="py-keyword">print</span> buffer</pre>
2183 <dl class="fields">
2184 </dl>
2185 </td></tr></table>
2186 </div>
2187 <a name="iter_errors"></a>
2188 <div>
2189 <table class="details" border="1" cellpadding="3"
2190 cellspacing="0" width="100%" bgcolor="white">
2191 <tr><td>
2192 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2193 <tr valign="top"><td>
2194 <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_errors</span>(<span class="sig-arg">self</span>,
2195 <span class="sig-arg">match_keys</span>=<span class="sig-default">None</span>)</span>
2196 </h3>
2197 </td><td align="right" valign="top"
2198 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.iter_errors">source&nbsp;code</a></span>&nbsp;
2199 </td>
2200 </tr></table>
2201
2202 <p>Iterate over error buffers, returns a tuple (buffer, keys).</p>
2203 <p>See iter_buffers().</p>
2204 <dl class="fields">
2205 </dl>
2206 </td></tr></table>
2207 </div>
2208 <a name="iter_retcodes"></a>
2209 <div>
2210 <table class="details" border="1" cellpadding="3"
2211 cellspacing="0" width="100%" bgcolor="white">
2212 <tr><td>
2213 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2214 <tr valign="top"><td>
2215 <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_retcodes</span>(<span class="sig-arg">self</span>,
2216 <span class="sig-arg">match_keys</span>=<span class="sig-default">None</span>)</span>
2217 </h3>
2218 </td><td align="right" valign="top"
2219 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.iter_retcodes">source&nbsp;code</a></span>&nbsp;
2220 </td>
2221 </tr></table>
2222
2223 <p>Iterate over return codes, returns a tuple (rc, keys).</p>
2224 <p>Optional parameter match_keys add filtering on these keys.</p>
2225 <h1 class="heading">How retcodes work</h1>
2226 <p>If the process exits normally, the return code is its exit status.
2227 If the process is terminated by a signal, the return code is 128 +
2228 signal number.</p>
2229 <dl class="fields">
2230 </dl>
2231 </td></tr></table>
2232 </div>
2233 <a name="num_timeout"></a>
2234 <div>
2235 <table class="details" border="1" cellpadding="3"
2236 cellspacing="0" width="100%" bgcolor="white">
2237 <tr><td>
2238 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2239 <tr valign="top"><td>
2240 <h3 class="epydoc"><span class="sig"><span class="sig-name">num_timeout</span>(<span class="sig-arg">self</span>)</span>
2241 </h3>
2242 </td><td align="right" valign="top"
2243 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.num_timeout">source&nbsp;code</a></span>&nbsp;
2244 </td>
2245 </tr></table>
2246
2247 <p>Return the number of timed out &quot;keys&quot; (ie. nodes).</p>
2248 <dl class="fields">
2249 </dl>
2250 </td></tr></table>
2251 </div>
2252 <a name="iter_keys_timeout"></a>
2253 <div>
2254 <table class="details" border="1" cellpadding="3"
2255 cellspacing="0" width="100%" bgcolor="white">
2256 <tr><td>
2257 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2258 <tr valign="top"><td>
2259 <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_keys_timeout</span>(<span class="sig-arg">self</span>)</span>
2260 </h3>
2261 </td><td align="right" valign="top"
2262 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.iter_keys_timeout">source&nbsp;code</a></span>&nbsp;
2263 </td>
2264 </tr></table>
2265
2266 <p>Iterate over timed out keys (ie. nodes).</p>
2267 <dl class="fields">
2268 </dl>
2269 </td></tr></table>
2270 </div>
2271 <a name="wait"></a>
2272 <div>
2273 <table class="details" border="1" cellpadding="3"
2274 cellspacing="0" width="100%" bgcolor="white">
2275 <tr><td>
2276 <table width="100%" cellpadding="0" cellspacing="0" border="0">
2277 <tr valign="top"><td>
2278 <h3 class="epydoc"><span class="sig"><span class="sig-name">wait</span>(<span class="sig-arg">cls</span>,
2279 <span class="sig-arg">from_thread</span>)</span>
2280 <br /><em class="fname">Class Method</em>
2281 </h3>
2282 </td><td align="right" valign="top"
2283 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.wait">source&nbsp;code</a></span>&nbsp;
2284 </td>
2285 </tr></table>
2286
2287 <p>Class method that blocks calling thread until all tasks have finished
2288 (from a ClusterShell point of view, for instance, their task.resume()
2289 return). It doesn't necessarly mean that associated threads have
2290 finished.</p>
2291 <dl class="fields">
2292 </dl>
2293 </td></tr></table>
2294 </div>
2295 <br />
2296 <!-- ==================== CLASS VARIABLE DETAILS ==================== -->
2297 <a name="section-ClassVariableDetails"></a>
2298 <table class="details" border="1" cellpadding="3"
2299 cellspacing="0" width="100%" bgcolor="white">
2300 <tr bgcolor="#70b0f0" class="table-header">
2301 <td colspan="2" class="table-header">
2302 <table border="0" cellpadding="0" cellspacing="0" width="100%">
2303 <tr valign="top">
2304 <td align="left"><span class="table-header">Class Variable Details</span></td>
2305 <td align="right" valign="top"
2306 ><span class="options">[<a href="#section-ClassVariableDetails"
2307 class="privatelink" onclick="toggle_private();"
2308 >hide private</a>]</span></td>
2309 </tr>
2310 </table>
2311 </td>
2312 </tr>
2313 </table>
2314 <a name="_std_default"></a>
2315 <div class="private">
2316 <table class="details" border="1" cellpadding="3"
2317 cellspacing="0" width="100%" bgcolor="white">
2318 <tr><td>
2319 <h3 class="epydoc">_std_default</h3>
2320
2321 <dl class="fields">
2322 </dl>
2323 <dl class="fields">
2324 <dt>Value:</dt>
2325 <dd><table><tr><td><pre class="variable">
2326 <code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">engine</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">auto</code><code class="variable-quote">'</code><code class="variable-op">,</code>
2327 <code class="variable-quote">'</code><code class="variable-string">port_qlimit</code><code class="variable-quote">'</code><code class="variable-op">: </code>32<code class="variable-op">,</code>
2328 <code class="variable-quote">'</code><code class="variable-string">stderr</code><code class="variable-quote">'</code><code class="variable-op">: </code>False<code class="variable-op">,</code>
2329 <code class="variable-quote">'</code><code class="variable-string">stderr_msgtree</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-op">,</code>
2330 <code class="variable-quote">'</code><code class="variable-string">stdout_msgtree</code><code class="variable-quote">'</code><code class="variable-op">: </code>True<code class="variable-group">}</code>
2331 </pre></td></tr></table>
2332 </dd>
2333 </dl>
2334 </td></tr></table>
2335 </div>
2336 <a name="_std_info"></a>
2337 <div class="private">
2338 <table class="details" border="1" cellpadding="3"
2339 cellspacing="0" width="100%" bgcolor="white">
2340 <tr><td>
2341 <h3 class="epydoc">_std_info</h3>
2342
2343 <dl class="fields">
2344 </dl>
2345 <dl class="fields">
2346 <dt>Value:</dt>
2347 <dd><table><tr><td><pre class="variable">
2348 <code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">command_timeout</code><code class="variable-quote">'</code><code class="variable-op">: </code>0<code class="variable-op">,</code>
2349 <code class="variable-quote">'</code><code class="variable-string">connect_timeout</code><code class="variable-quote">'</code><code class="variable-op">: </code>10<code class="variable-op">,</code>
2350 <code class="variable-quote">'</code><code class="variable-string">debug</code><code class="variable-quote">'</code><code class="variable-op">: </code>False<code class="variable-op">,</code>
2351 <code class="variable-quote">'</code><code class="variable-string">fanout</code><code class="variable-quote">'</code><code class="variable-op">: </code>64<code class="variable-op">,</code>
2352 <code class="variable-quote">'</code><code class="variable-string">print_debug</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _task_print_debug at 0x1d3ac80&gt;<code class="variable-group">}</code>
2353 </pre></td></tr></table>
2354 </dd>
2355 </dl>
2356 </td></tr></table>
2357 </div>
2358 <br />
2359 <!-- ==================== PROPERTY DETAILS ==================== -->
2360 <a name="section-PropertyDetails"></a>
2361 <table class="details" border="1" cellpadding="3"
2362 cellspacing="0" width="100%" bgcolor="white">
2363 <tr bgcolor="#70b0f0" class="table-header">
2364 <td colspan="2" class="table-header">
2365 <table border="0" cellpadding="0" cellspacing="0" width="100%">
2366 <tr valign="top">
2367 <td align="left"><span class="table-header">Property Details</span></td>
2368 <td align="right" valign="top"
2369 ><span class="options">[<a href="#section-PropertyDetails"
2370 class="privatelink" onclick="toggle_private();"
2371 >hide private</a>]</span></td>
2372 </tr>
2373 </table>
2374 </td>
2375 </tr>
2376 </table>
2377 <a name="excepthook"></a>
2378 <div>
2379 <table class="details" border="1" cellpadding="3"
2380 cellspacing="0" width="100%" bgcolor="white">
2381 <tr><td>
2382 <h3 class="epydoc">excepthook</h3>
2383
2384 <dl class="fields">
2385 <dt>Get Method:</dt>
2386 <dd class="value"><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#_getexcepthook" class="summary-sig-name" onclick="show_private();">_getexcepthook</a>(<span class="summary-sig-arg">self</span>)</span>
2387 </dd>
2388 <dt>Set Method:</dt>
2389 <dd class="value"><span class="summary-sig"><a href="ClusterShell.Task.Task-class.html#_setexcepthook" class="summary-sig-name" onclick="show_private();">_setexcepthook</a>(<span class="summary-sig-arg">self</span>,
2390 <span class="summary-sig-arg">hook</span>)</span>
2391 </dd>
2392 </dl>
2393 </td></tr></table>
2394 </div>
2395 <br />
2396 <!-- ==================== NAVIGATION BAR ==================== -->
2397 <table class="navbar" border="0" width="100%" cellpadding="0"
2398 bgcolor="#a0c0ff" cellspacing="0">
2399 <tr valign="middle">
2400
2401 <!-- Tree link -->
2402 <th>&nbsp;&nbsp;&nbsp;<a
2403 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
2404
2405 <!-- Index link -->
2406 <th>&nbsp;&nbsp;&nbsp;<a
2407 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
2408
2409 <!-- Help link -->
2410 <th>&nbsp;&nbsp;&nbsp;<a
2411 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
2412
2413 <!-- Project homepage -->
2414 <th class="navbar" align="right" width="100%">
2415 <table border="0" cellpadding="0" cellspacing="0">
2416 <tr><th class="navbar" align="center"
2417 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
2418 </tr></table></th>
2419 </tr>
2420 </table>
2421 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
2422 <tr>
2423 <td align="left" class="footer">
2424 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
2425 </td>
2426 <td align="right" class="footer">
2427 <a target="mainFrame" href="http://epydoc.sourceforge.net"
2428 >http://epydoc.sourceforge.net</a>
2429 </td>
2430 </tr>
2431 </table>
2432
2433 <script type="text/javascript">
2434 <!--
2435 // Private objects are initially displayed (because if
2436 // javascript is turned off then we want them to be
2437 // visible); but by default, we want to hide them. So hide
2438 // them unless we have a cookie that says to show them.
2439 checkCookie();
2440 // -->
2441 </script>
2442 </body>
2443 </html>
+0
-320
doc/epydoc/html/ClusterShell.Task.Task._SuspendCondition-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.Task._SuspendCondition</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 <a href="ClusterShell.Task.Task-class.html">Class&nbsp;Task</a> ::
44 Class&nbsp;_SuspendCondition
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.Task._SuspendCondition-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class _SuspendCondition</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SuspendCondition">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_39" name="uml_class_diagram_for_clusters_39">
64 <area shape="rect" id="node142" href="ClusterShell.Task.Task._SuspendCondition-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,39,307,57"/>
65 <area shape="rect" id="node142" href="ClusterShell.Task.Task._SuspendCondition-class.html#atomic_inc" title="Increase suspend count." alt="" coords="17,57,307,76"/>
66 <area shape="rect" id="node142" href="ClusterShell.Task.Task._SuspendCondition-class.html#atomic_dec" title="Decrease suspend count." alt="" coords="17,76,307,95"/>
67 <area shape="rect" id="node142" href="ClusterShell.Task.Task._SuspendCondition-class.html#wait_check" title="Wait for condition if needed." alt="" coords="17,95,307,113"/>
68 <area shape="rect" id="node142" href="ClusterShell.Task.Task._SuspendCondition-class.html#notify_all" title="Signal all threads waiting for condition." alt="" coords="17,113,307,132"/>
69 <area shape="rect" id="node1" href="ClusterShell.Task.Task._SuspendCondition-class.html" title="Special class to manage task suspend condition." alt="" coords="5,6,317,138"/>
70 </map>
71 <img src="uml_class_diagram_for_clusters_39.png" alt='' usemap="#uml_class_diagram_for_clusters_39" ismap="ismap" class="graph-without-title" />
72 </center>
73 </center>
74 <hr />
75 <p>Special class to manage task suspend condition.</p>
76
77 <!-- ==================== INSTANCE METHODS ==================== -->
78 <a name="section-InstanceMethods"></a>
79 <table class="summary" border="1" cellpadding="3"
80 cellspacing="0" width="100%" bgcolor="white">
81 <tr bgcolor="#70b0f0" class="table-header">
82 <td colspan="2" class="table-header">
83 <table border="0" cellpadding="0" cellspacing="0" width="100%">
84 <tr valign="top">
85 <td align="left"><span class="table-header">Instance Methods</span></td>
86 <td align="right" valign="top"
87 ><span class="options">[<a href="#section-InstanceMethods"
88 class="privatelink" onclick="toggle_private();"
89 >hide private</a>]</span></td>
90 </tr>
91 </table>
92 </td>
93 </tr>
94 <tr>
95 <td width="15%" align="right" valign="top" class="summary">
96 <span class="summary-type">&nbsp;</span>
97 </td><td class="summary">
98 <table width="100%" cellpadding="0" cellspacing="0" border="0">
99 <tr>
100 <td><span class="summary-sig"><a href="ClusterShell.Task.Task._SuspendCondition-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
101 <span class="summary-sig-arg">lock</span>=<span class="summary-sig-default">&lt;_RLock(None, 0)&gt;</span>,
102 <span class="summary-sig-arg">initial</span>=<span class="summary-sig-default">0</span>)</span><br />
103 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
104 <td align="right" valign="top">
105 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SuspendCondition.__init__">source&nbsp;code</a></span>
106
107 </td>
108 </tr>
109 </table>
110
111 </td>
112 </tr>
113 <tr>
114 <td width="15%" align="right" valign="top" class="summary">
115 <span class="summary-type">&nbsp;</span>
116 </td><td class="summary">
117 <table width="100%" cellpadding="0" cellspacing="0" border="0">
118 <tr>
119 <td><span class="summary-sig"><a name="atomic_inc"></a><span class="summary-sig-name">atomic_inc</span>(<span class="summary-sig-arg">self</span>)</span><br />
120 Increase suspend count.</td>
121 <td align="right" valign="top">
122 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SuspendCondition.atomic_inc">source&nbsp;code</a></span>
123
124 </td>
125 </tr>
126 </table>
127
128 </td>
129 </tr>
130 <tr>
131 <td width="15%" align="right" valign="top" class="summary">
132 <span class="summary-type">&nbsp;</span>
133 </td><td class="summary">
134 <table width="100%" cellpadding="0" cellspacing="0" border="0">
135 <tr>
136 <td><span class="summary-sig"><a name="atomic_dec"></a><span class="summary-sig-name">atomic_dec</span>(<span class="summary-sig-arg">self</span>)</span><br />
137 Decrease suspend count.</td>
138 <td align="right" valign="top">
139 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SuspendCondition.atomic_dec">source&nbsp;code</a></span>
140
141 </td>
142 </tr>
143 </table>
144
145 </td>
146 </tr>
147 <tr>
148 <td width="15%" align="right" valign="top" class="summary">
149 <span class="summary-type">&nbsp;</span>
150 </td><td class="summary">
151 <table width="100%" cellpadding="0" cellspacing="0" border="0">
152 <tr>
153 <td><span class="summary-sig"><a name="wait_check"></a><span class="summary-sig-name">wait_check</span>(<span class="summary-sig-arg">self</span>,
154 <span class="summary-sig-arg">release_lock</span>=<span class="summary-sig-default">None</span>)</span><br />
155 Wait for condition if needed.</td>
156 <td align="right" valign="top">
157 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SuspendCondition.wait_check">source&nbsp;code</a></span>
158
159 </td>
160 </tr>
161 </table>
162
163 </td>
164 </tr>
165 <tr>
166 <td width="15%" align="right" valign="top" class="summary">
167 <span class="summary-type">&nbsp;</span>
168 </td><td class="summary">
169 <table width="100%" cellpadding="0" cellspacing="0" border="0">
170 <tr>
171 <td><span class="summary-sig"><a name="notify_all"></a><span class="summary-sig-name">notify_all</span>(<span class="summary-sig-arg">self</span>)</span><br />
172 Signal all threads waiting for condition.</td>
173 <td align="right" valign="top">
174 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SuspendCondition.notify_all">source&nbsp;code</a></span>
175
176 </td>
177 </tr>
178 </table>
179
180 </td>
181 </tr>
182 <tr>
183 <td colspan="2" class="summary">
184 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
185 <code>__delattr__</code>,
186 <code>__format__</code>,
187 <code>__getattribute__</code>,
188 <code>__hash__</code>,
189 <code>__new__</code>,
190 <code>__reduce__</code>,
191 <code>__reduce_ex__</code>,
192 <code>__repr__</code>,
193 <code>__setattr__</code>,
194 <code>__sizeof__</code>,
195 <code>__str__</code>,
196 <code>__subclasshook__</code>
197 </p>
198 </td>
199 </tr>
200 </table>
201 <!-- ==================== PROPERTIES ==================== -->
202 <a name="section-Properties"></a>
203 <table class="summary" border="1" cellpadding="3"
204 cellspacing="0" width="100%" bgcolor="white">
205 <tr bgcolor="#70b0f0" class="table-header">
206 <td colspan="2" class="table-header">
207 <table border="0" cellpadding="0" cellspacing="0" width="100%">
208 <tr valign="top">
209 <td align="left"><span class="table-header">Properties</span></td>
210 <td align="right" valign="top"
211 ><span class="options">[<a href="#section-Properties"
212 class="privatelink" onclick="toggle_private();"
213 >hide private</a>]</span></td>
214 </tr>
215 </table>
216 </td>
217 </tr>
218 <tr>
219 <td colspan="2" class="summary">
220 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
221 <code>__class__</code>
222 </p>
223 </td>
224 </tr>
225 </table>
226 <!-- ==================== METHOD DETAILS ==================== -->
227 <a name="section-MethodDetails"></a>
228 <table class="details" border="1" cellpadding="3"
229 cellspacing="0" width="100%" bgcolor="white">
230 <tr bgcolor="#70b0f0" class="table-header">
231 <td colspan="2" class="table-header">
232 <table border="0" cellpadding="0" cellspacing="0" width="100%">
233 <tr valign="top">
234 <td align="left"><span class="table-header">Method Details</span></td>
235 <td align="right" valign="top"
236 ><span class="options">[<a href="#section-MethodDetails"
237 class="privatelink" onclick="toggle_private();"
238 >hide private</a>]</span></td>
239 </tr>
240 </table>
241 </td>
242 </tr>
243 </table>
244 <a name="__init__"></a>
245 <div>
246 <table class="details" border="1" cellpadding="3"
247 cellspacing="0" width="100%" bgcolor="white">
248 <tr><td>
249 <table width="100%" cellpadding="0" cellspacing="0" border="0">
250 <tr valign="top"><td>
251 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
252 <span class="sig-arg">lock</span>=<span class="sig-default">&lt;_RLock(None, 0)&gt;</span>,
253 <span class="sig-arg">initial</span>=<span class="sig-default">0</span>)</span>
254 <br /><em class="fname">(Constructor)</em>
255 </h3>
256 </td><td align="right" valign="top"
257 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SuspendCondition.__init__">source&nbsp;code</a></span>&nbsp;
258 </td>
259 </tr></table>
260
261 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
262 signature</p>
263 <dl class="fields">
264 <dt>Overrides:
265 object.__init__
266 <dd><em class="note">(inherited documentation)</em></dd>
267 </dt>
268 </dl>
269 </td></tr></table>
270 </div>
271 <br />
272 <!-- ==================== NAVIGATION BAR ==================== -->
273 <table class="navbar" border="0" width="100%" cellpadding="0"
274 bgcolor="#a0c0ff" cellspacing="0">
275 <tr valign="middle">
276
277 <!-- Tree link -->
278 <th>&nbsp;&nbsp;&nbsp;<a
279 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
280
281 <!-- Index link -->
282 <th>&nbsp;&nbsp;&nbsp;<a
283 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
284
285 <!-- Help link -->
286 <th>&nbsp;&nbsp;&nbsp;<a
287 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
288
289 <!-- Project homepage -->
290 <th class="navbar" align="right" width="100%">
291 <table border="0" cellpadding="0" cellspacing="0">
292 <tr><th class="navbar" align="center"
293 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
294 </tr></table></th>
295 </tr>
296 </table>
297 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
298 <tr>
299 <td align="left" class="footer">
300 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
301 </td>
302 <td align="right" class="footer">
303 <a target="mainFrame" href="http://epydoc.sourceforge.net"
304 >http://epydoc.sourceforge.net</a>
305 </td>
306 </tr>
307 </table>
308
309 <script type="text/javascript">
310 <!--
311 // Private objects are initially displayed (because if
312 // javascript is turned off then we want them to be
313 // visible); but by default, we want to hide them. So hide
314 // them unless we have a cookie that says to show them.
315 checkCookie();
316 // -->
317 </script>
318 </body>
319 </html>
+0
-272
doc/epydoc/html/ClusterShell.Task.Task._SyncMsgHandler-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.Task._SyncMsgHandler</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 <a href="ClusterShell.Task.Task-class.html">Class&nbsp;Task</a> ::
44 Class&nbsp;_SyncMsgHandler
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.Task._SyncMsgHandler-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class _SyncMsgHandler</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SyncMsgHandler">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_40" name="uml_class_diagram_for_clusters_40">
64 <area shape="rect" id="node143" href="ClusterShell.Task.Task._SyncMsgHandler-class.html#ev_msg" title="Message received: call appropriate task method." alt="" coords="19,247,164,265"/>
65 <area shape="rect" id="node1" href="ClusterShell.Task.Task._SyncMsgHandler-class.html" title="Special task control port event handler." alt="" coords="7,214,175,271"/>
66 <area shape="rect" id="node144" href="ClusterShell.Event.EventHandler-class.html#ev_start" title="Called to indicate that a worker has just started." alt="" coords="17,39,165,57"/>
67 <area shape="rect" id="node144" href="ClusterShell.Event.EventHandler-class.html#ev_read" title="Called to indicate that a worker has data to read." alt="" coords="17,57,165,76"/>
68 <area shape="rect" id="node144" href="ClusterShell.Event.EventHandler-class.html#ev_error" title="Called to indicate that a worker has error to read (on stderr)." alt="" coords="17,76,165,95"/>
69 <area shape="rect" id="node144" href="ClusterShell.Event.EventHandler-class.html#ev_written" title="Called to indicate that writing has been done." alt="" coords="17,95,165,113"/>
70 <area shape="rect" id="node144" href="ClusterShell.Event.EventHandler-class.html#ev_hup" title="Called to indicate that a worker&#39;s connection has been closed." alt="" coords="17,113,165,132"/>
71 <area shape="rect" id="node144" href="ClusterShell.Event.EventHandler-class.html#ev_timeout" title="Called to indicate that a worker has timed out (worker timeout only)." alt="" coords="17,132,165,151"/>
72 <area shape="rect" id="node144" href="ClusterShell.Event.EventHandler-class.html#ev_close" title="Called to indicate that a worker has just finished (it may already have &#160;failed on timeout)." alt="" coords="17,151,165,169"/>
73 <area shape="rect" id="node144" href="ClusterShell.Event.EventHandler-class.html#ev_timer" title="Handle firing timer." alt="" coords="17,169,165,188"/>
74 <area shape="rect" id="node2" href="ClusterShell.Event.EventHandler-class.html" title="Base class EventHandler." alt="" coords="5,6,176,194"/>
75 </map>
76 <img src="uml_class_diagram_for_clusters_40.png" alt='' usemap="#uml_class_diagram_for_clusters_40" ismap="ismap" class="graph-without-title" />
77 </center>
78 </center>
79 <hr />
80 <p>Special task control port event handler. When a message is received on
81 the port, call appropriate task method.</p>
82
83 <!-- ==================== INSTANCE METHODS ==================== -->
84 <a name="section-InstanceMethods"></a>
85 <table class="summary" border="1" cellpadding="3"
86 cellspacing="0" width="100%" bgcolor="white">
87 <tr bgcolor="#70b0f0" class="table-header">
88 <td colspan="2" class="table-header">
89 <table border="0" cellpadding="0" cellspacing="0" width="100%">
90 <tr valign="top">
91 <td align="left"><span class="table-header">Instance Methods</span></td>
92 <td align="right" valign="top"
93 ><span class="options">[<a href="#section-InstanceMethods"
94 class="privatelink" onclick="toggle_private();"
95 >hide private</a>]</span></td>
96 </tr>
97 </table>
98 </td>
99 </tr>
100 <tr>
101 <td width="15%" align="right" valign="top" class="summary">
102 <span class="summary-type">&nbsp;</span>
103 </td><td class="summary">
104 <table width="100%" cellpadding="0" cellspacing="0" border="0">
105 <tr>
106 <td><span class="summary-sig"><a href="ClusterShell.Task.Task._SyncMsgHandler-class.html#ev_msg" class="summary-sig-name">ev_msg</a>(<span class="summary-sig-arg">self</span>,
107 <span class="summary-sig-arg">port</span>,
108 <span class="summary-sig-arg">msg</span>)</span><br />
109 Message received: call appropriate task method.</td>
110 <td align="right" valign="top">
111 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SyncMsgHandler.ev_msg">source&nbsp;code</a></span>
112
113 </td>
114 </tr>
115 </table>
116
117 </td>
118 </tr>
119 <tr>
120 <td colspan="2" class="summary">
121 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">Event.EventHandler</a></code></b>:
122 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_close">ev_close</a></code>,
123 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_error">ev_error</a></code>,
124 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_hup">ev_hup</a></code>,
125 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_read">ev_read</a></code>,
126 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_start">ev_start</a></code>,
127 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_timeout">ev_timeout</a></code>,
128 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_timer">ev_timer</a></code>,
129 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_written">ev_written</a></code>
130 </p>
131 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">Event.EventHandler</a></code></b> (private):
132 <code><a href="ClusterShell.Event.EventHandler-class.html#_invoke" onclick="show_private();">_invoke</a></code>
133 </p></div>
134 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
135 <code>__delattr__</code>,
136 <code>__format__</code>,
137 <code>__getattribute__</code>,
138 <code>__hash__</code>,
139 <code>__init__</code>,
140 <code>__new__</code>,
141 <code>__reduce__</code>,
142 <code>__reduce_ex__</code>,
143 <code>__repr__</code>,
144 <code>__setattr__</code>,
145 <code>__sizeof__</code>,
146 <code>__str__</code>,
147 <code>__subclasshook__</code>
148 </p>
149 </td>
150 </tr>
151 </table>
152 <!-- ==================== PROPERTIES ==================== -->
153 <a name="section-Properties"></a>
154 <table class="summary" border="1" cellpadding="3"
155 cellspacing="0" width="100%" bgcolor="white">
156 <tr bgcolor="#70b0f0" class="table-header">
157 <td colspan="2" class="table-header">
158 <table border="0" cellpadding="0" cellspacing="0" width="100%">
159 <tr valign="top">
160 <td align="left"><span class="table-header">Properties</span></td>
161 <td align="right" valign="top"
162 ><span class="options">[<a href="#section-Properties"
163 class="privatelink" onclick="toggle_private();"
164 >hide private</a>]</span></td>
165 </tr>
166 </table>
167 </td>
168 </tr>
169 <tr>
170 <td colspan="2" class="summary">
171 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
172 <code>__class__</code>
173 </p>
174 </td>
175 </tr>
176 </table>
177 <!-- ==================== METHOD DETAILS ==================== -->
178 <a name="section-MethodDetails"></a>
179 <table class="details" border="1" cellpadding="3"
180 cellspacing="0" width="100%" bgcolor="white">
181 <tr bgcolor="#70b0f0" class="table-header">
182 <td colspan="2" class="table-header">
183 <table border="0" cellpadding="0" cellspacing="0" width="100%">
184 <tr valign="top">
185 <td align="left"><span class="table-header">Method Details</span></td>
186 <td align="right" valign="top"
187 ><span class="options">[<a href="#section-MethodDetails"
188 class="privatelink" onclick="toggle_private();"
189 >hide private</a>]</span></td>
190 </tr>
191 </table>
192 </td>
193 </tr>
194 </table>
195 <a name="ev_msg"></a>
196 <div>
197 <table class="details" border="1" cellpadding="3"
198 cellspacing="0" width="100%" bgcolor="white">
199 <tr><td>
200 <table width="100%" cellpadding="0" cellspacing="0" border="0">
201 <tr valign="top"><td>
202 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_msg</span>(<span class="sig-arg">self</span>,
203 <span class="sig-arg">port</span>,
204 <span class="sig-arg">msg</span>)</span>
205 </h3>
206 </td><td align="right" valign="top"
207 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task._SyncMsgHandler.ev_msg">source&nbsp;code</a></span>&nbsp;
208 </td>
209 </tr></table>
210
211 <p>Message received: call appropriate task method.</p>
212 <dl class="fields">
213 <dt>Parameters:</dt>
214 <dd><ul class="nomargin-top">
215 <li><strong class="pname"><code>port</code></strong> - The port object on which a message is available.</li>
216 </ul></dd>
217 <dt>Overrides:
218 <a href="ClusterShell.Event.EventHandler-class.html#ev_msg">Event.EventHandler.ev_msg</a>
219 </dt>
220 </dl>
221 </td></tr></table>
222 </div>
223 <br />
224 <!-- ==================== NAVIGATION BAR ==================== -->
225 <table class="navbar" border="0" width="100%" cellpadding="0"
226 bgcolor="#a0c0ff" cellspacing="0">
227 <tr valign="middle">
228
229 <!-- Tree link -->
230 <th>&nbsp;&nbsp;&nbsp;<a
231 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
232
233 <!-- Index link -->
234 <th>&nbsp;&nbsp;&nbsp;<a
235 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
236
237 <!-- Help link -->
238 <th>&nbsp;&nbsp;&nbsp;<a
239 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
240
241 <!-- Project homepage -->
242 <th class="navbar" align="right" width="100%">
243 <table border="0" cellpadding="0" cellspacing="0">
244 <tr><th class="navbar" align="center"
245 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
246 </tr></table></th>
247 </tr>
248 </table>
249 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
250 <tr>
251 <td align="left" class="footer">
252 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
253 </td>
254 <td align="right" class="footer">
255 <a target="mainFrame" href="http://epydoc.sourceforge.net"
256 >http://epydoc.sourceforge.net</a>
257 </td>
258 </tr>
259 </table>
260
261 <script type="text/javascript">
262 <!--
263 // Private objects are initially displayed (because if
264 // javascript is turned off then we want them to be
265 // visible); but by default, we want to hide them. So hide
266 // them unless we have a cookie that says to show them.
267 checkCookie();
268 // -->
269 </script>
270 </body>
271 </html>
+0
-202
doc/epydoc/html/ClusterShell.Task.Task.tasksyncmethod-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.Task.tasksyncmethod</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 <a href="ClusterShell.Task.Task-class.html">Class&nbsp;Task</a> ::
44 Class&nbsp;tasksyncmethod
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.Task.tasksyncmethod-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class tasksyncmethod</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.tasksyncmethod">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_41" name="uml_class_diagram_for_clusters_41">
64 <area shape="rect" id="node145" href="ClusterShell.Task.Task.tasksyncmethod-class.html#__call__" title="ClusterShell.Task.Task.tasksyncmethod.__call__" alt="" coords="17,39,116,57"/>
65 <area shape="rect" id="node1" href="ClusterShell.Task.Task.tasksyncmethod-class.html" title="Class encapsulating a function that checks if the calling task is running or is the current task, and allowing it to be used as a decorator making the wrapped task method thread&#45;safe." alt="" coords="5,6,128,63"/>
66 </map>
67 <img src="uml_class_diagram_for_clusters_41.png" alt='' usemap="#uml_class_diagram_for_clusters_41" ismap="ismap" class="graph-without-title" />
68 </center>
69 </center>
70 <hr />
71 <p>Class encapsulating a function that checks if the calling task is
72 running or is the current task, and allowing it to be used as a decorator
73 making the wrapped task method thread-safe.</p>
74
75 <!-- ==================== INSTANCE METHODS ==================== -->
76 <a name="section-InstanceMethods"></a>
77 <table class="summary" border="1" cellpadding="3"
78 cellspacing="0" width="100%" bgcolor="white">
79 <tr bgcolor="#70b0f0" class="table-header">
80 <td colspan="2" class="table-header">
81 <table border="0" cellpadding="0" cellspacing="0" width="100%">
82 <tr valign="top">
83 <td align="left"><span class="table-header">Instance Methods</span></td>
84 <td align="right" valign="top"
85 ><span class="options">[<a href="#section-InstanceMethods"
86 class="privatelink" onclick="toggle_private();"
87 >hide private</a>]</span></td>
88 </tr>
89 </table>
90 </td>
91 </tr>
92 <tr>
93 <td width="15%" align="right" valign="top" class="summary">
94 <span class="summary-type">&nbsp;</span>
95 </td><td class="summary">
96 <table width="100%" cellpadding="0" cellspacing="0" border="0">
97 <tr>
98 <td><span class="summary-sig"><a name="__call__"></a><span class="summary-sig-name">__call__</span>(<span class="summary-sig-arg">self</span>,
99 <span class="summary-sig-arg">f</span>)</span></td>
100 <td align="right" valign="top">
101 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#Task.tasksyncmethod.__call__">source&nbsp;code</a></span>
102
103 </td>
104 </tr>
105 </table>
106
107 </td>
108 </tr>
109 <tr>
110 <td colspan="2" class="summary">
111 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
112 <code>__delattr__</code>,
113 <code>__format__</code>,
114 <code>__getattribute__</code>,
115 <code>__hash__</code>,
116 <code>__init__</code>,
117 <code>__new__</code>,
118 <code>__reduce__</code>,
119 <code>__reduce_ex__</code>,
120 <code>__repr__</code>,
121 <code>__setattr__</code>,
122 <code>__sizeof__</code>,
123 <code>__str__</code>,
124 <code>__subclasshook__</code>
125 </p>
126 </td>
127 </tr>
128 </table>
129 <!-- ==================== PROPERTIES ==================== -->
130 <a name="section-Properties"></a>
131 <table class="summary" border="1" cellpadding="3"
132 cellspacing="0" width="100%" bgcolor="white">
133 <tr bgcolor="#70b0f0" class="table-header">
134 <td colspan="2" class="table-header">
135 <table border="0" cellpadding="0" cellspacing="0" width="100%">
136 <tr valign="top">
137 <td align="left"><span class="table-header">Properties</span></td>
138 <td align="right" valign="top"
139 ><span class="options">[<a href="#section-Properties"
140 class="privatelink" onclick="toggle_private();"
141 >hide private</a>]</span></td>
142 </tr>
143 </table>
144 </td>
145 </tr>
146 <tr>
147 <td colspan="2" class="summary">
148 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
149 <code>__class__</code>
150 </p>
151 </td>
152 </tr>
153 </table>
154 <!-- ==================== NAVIGATION BAR ==================== -->
155 <table class="navbar" border="0" width="100%" cellpadding="0"
156 bgcolor="#a0c0ff" cellspacing="0">
157 <tr valign="middle">
158
159 <!-- Tree link -->
160 <th>&nbsp;&nbsp;&nbsp;<a
161 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
162
163 <!-- Index link -->
164 <th>&nbsp;&nbsp;&nbsp;<a
165 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
166
167 <!-- Help link -->
168 <th>&nbsp;&nbsp;&nbsp;<a
169 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
170
171 <!-- Project homepage -->
172 <th class="navbar" align="right" width="100%">
173 <table border="0" cellpadding="0" cellspacing="0">
174 <tr><th class="navbar" align="center"
175 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
176 </tr></table></th>
177 </tr>
178 </table>
179 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
180 <tr>
181 <td align="left" class="footer">
182 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
183 </td>
184 <td align="right" class="footer">
185 <a target="mainFrame" href="http://epydoc.sourceforge.net"
186 >http://epydoc.sourceforge.net</a>
187 </td>
188 </tr>
189 </table>
190
191 <script type="text/javascript">
192 <!--
193 // Private objects are initially displayed (because if
194 // javascript is turned off then we want them to be
195 // visible); but by default, we want to hide them. So hide
196 // them unless we have a cookie that says to show them.
197 checkCookie();
198 // -->
199 </script>
200 </body>
201 </html>
+0
-213
doc/epydoc/html/ClusterShell.Task.TaskError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.TaskError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 Class&nbsp;TaskError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.TaskError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class TaskError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#TaskError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_42" name="uml_class_diagram_for_clusters_42">
63 <area shape="rect" id="node149" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="169,31,327,49"/>
64 <area shape="rect" id="node149" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="169,49,327,68"/>
65 <area shape="rect" id="node149" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="169,71,327,89"/>
66 <area shape="rect" id="node149" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="169,89,327,108"/>
67 <area shape="rect" id="node149" href="javascript:void(0);" title="x[y]" alt="" coords="169,108,327,127"/>
68 <area shape="rect" id="node149" href="javascript:void(0);" title="x[i:j]" alt="" coords="169,127,327,145"/>
69 <area shape="rect" id="node149" href="javascript:void(0);" title="helper for pickle" alt="" coords="169,145,327,164"/>
70 <area shape="rect" id="node149" href="javascript:void(0);" title="repr(x)" alt="" coords="169,164,327,183"/>
71 <area shape="rect" id="node149" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="169,183,327,201"/>
72 <area shape="rect" id="node149" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="169,201,327,220"/>
73 <area shape="rect" id="node149" href="javascript:void(0);" title="str(x)" alt="" coords="169,220,327,239"/>
74 <area shape="rect" id="node149" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="169,239,327,257"/>
75 <area shape="rect" id="node1" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="157,6,339,263"/>
76 <area shape="rect" id="node148" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="184,316,311,335"/>
77 <area shape="rect" id="node148" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="184,335,311,353"/>
78 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="172,283,321,359"/>
79 <area shape="rect" id="node2" href="ClusterShell.Task.TaskException-class.html" title="Base task exception." alt="" coords="191,379,303,423"/>
80 <area shape="rect" id="node7" href="ClusterShell.Task.TaskError-class.html" title="Base task error exception." alt="" coords="207,443,289,487"/>
81 <area shape="rect" id="node3" href="ClusterShell.Task.AlreadyRunningError-class.html" title="Raised when trying to resume an already running task." alt="" coords="5,507,163,546"/>
82 <area shape="rect" id="node5" href="ClusterShell.Task.TimeoutError-class.html" title="Raised when the task timed out." alt="" coords="192,507,304,546"/>
83 <area shape="rect" id="node6" href="ClusterShell.Task.TaskMsgTreeError-class.html" title="Raised when trying to access disabled MsgTree." alt="" coords="333,507,477,546"/>
84 </map>
85 <img src="uml_class_diagram_for_clusters_42.png" alt='' usemap="#uml_class_diagram_for_clusters_42" ismap="ismap" class="graph-without-title" />
86 </center>
87 </center>
88 <hr />
89 <p>Base task error exception.</p>
90
91 <!-- ==================== INSTANCE METHODS ==================== -->
92 <a name="section-InstanceMethods"></a>
93 <table class="summary" border="1" cellpadding="3"
94 cellspacing="0" width="100%" bgcolor="white">
95 <tr bgcolor="#70b0f0" class="table-header">
96 <td colspan="2" class="table-header">
97 <table border="0" cellpadding="0" cellspacing="0" width="100%">
98 <tr valign="top">
99 <td align="left"><span class="table-header">Instance Methods</span></td>
100 <td align="right" valign="top"
101 ><span class="options">[<a href="#section-InstanceMethods"
102 class="privatelink" onclick="toggle_private();"
103 >hide private</a>]</span></td>
104 </tr>
105 </table>
106 </td>
107 </tr>
108 <tr>
109 <td colspan="2" class="summary">
110 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
111 <code>__init__</code>,
112 <code>__new__</code>
113 </p>
114 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
115 <code>__delattr__</code>,
116 <code>__getattribute__</code>,
117 <code>__getitem__</code>,
118 <code>__getslice__</code>,
119 <code>__reduce__</code>,
120 <code>__repr__</code>,
121 <code>__setattr__</code>,
122 <code>__setstate__</code>,
123 <code>__str__</code>,
124 <code>__unicode__</code>
125 </p>
126 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
127 <code>__format__</code>,
128 <code>__hash__</code>,
129 <code>__reduce_ex__</code>,
130 <code>__sizeof__</code>,
131 <code>__subclasshook__</code>
132 </p>
133 </td>
134 </tr>
135 </table>
136 <!-- ==================== PROPERTIES ==================== -->
137 <a name="section-Properties"></a>
138 <table class="summary" border="1" cellpadding="3"
139 cellspacing="0" width="100%" bgcolor="white">
140 <tr bgcolor="#70b0f0" class="table-header">
141 <td colspan="2" class="table-header">
142 <table border="0" cellpadding="0" cellspacing="0" width="100%">
143 <tr valign="top">
144 <td align="left"><span class="table-header">Properties</span></td>
145 <td align="right" valign="top"
146 ><span class="options">[<a href="#section-Properties"
147 class="privatelink" onclick="toggle_private();"
148 >hide private</a>]</span></td>
149 </tr>
150 </table>
151 </td>
152 </tr>
153 <tr>
154 <td colspan="2" class="summary">
155 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
156 <code>args</code>,
157 <code>message</code>
158 </p>
159 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
160 <code>__class__</code>
161 </p>
162 </td>
163 </tr>
164 </table>
165 <!-- ==================== NAVIGATION BAR ==================== -->
166 <table class="navbar" border="0" width="100%" cellpadding="0"
167 bgcolor="#a0c0ff" cellspacing="0">
168 <tr valign="middle">
169
170 <!-- Tree link -->
171 <th>&nbsp;&nbsp;&nbsp;<a
172 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
173
174 <!-- Index link -->
175 <th>&nbsp;&nbsp;&nbsp;<a
176 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
177
178 <!-- Help link -->
179 <th>&nbsp;&nbsp;&nbsp;<a
180 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
181
182 <!-- Project homepage -->
183 <th class="navbar" align="right" width="100%">
184 <table border="0" cellpadding="0" cellspacing="0">
185 <tr><th class="navbar" align="center"
186 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
187 </tr></table></th>
188 </tr>
189 </table>
190 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
191 <tr>
192 <td align="left" class="footer">
193 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
194 </td>
195 <td align="right" class="footer">
196 <a target="mainFrame" href="http://epydoc.sourceforge.net"
197 >http://epydoc.sourceforge.net</a>
198 </td>
199 </tr>
200 </table>
201
202 <script type="text/javascript">
203 <!--
204 // Private objects are initially displayed (because if
205 // javascript is turned off then we want them to be
206 // visible); but by default, we want to hide them. So hide
207 // them unless we have a cookie that says to show them.
208 checkCookie();
209 // -->
210 </script>
211 </body>
212 </html>
+0
-213
doc/epydoc/html/ClusterShell.Task.TaskException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.TaskException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 Class&nbsp;TaskException
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.TaskException-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class TaskException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#TaskException">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_43" name="uml_class_diagram_for_clusters_43">
63 <area shape="rect" id="node155" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="185,31,343,49"/>
64 <area shape="rect" id="node155" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="185,49,343,68"/>
65 <area shape="rect" id="node155" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="185,71,343,89"/>
66 <area shape="rect" id="node155" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="185,89,343,108"/>
67 <area shape="rect" id="node155" href="javascript:void(0);" title="x[y]" alt="" coords="185,108,343,127"/>
68 <area shape="rect" id="node155" href="javascript:void(0);" title="x[i:j]" alt="" coords="185,127,343,145"/>
69 <area shape="rect" id="node155" href="javascript:void(0);" title="helper for pickle" alt="" coords="185,145,343,164"/>
70 <area shape="rect" id="node155" href="javascript:void(0);" title="repr(x)" alt="" coords="185,164,343,183"/>
71 <area shape="rect" id="node155" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="185,183,343,201"/>
72 <area shape="rect" id="node155" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="185,201,343,220"/>
73 <area shape="rect" id="node155" href="javascript:void(0);" title="str(x)" alt="" coords="185,220,343,239"/>
74 <area shape="rect" id="node155" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="185,239,343,257"/>
75 <area shape="rect" id="node1" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="173,6,355,263"/>
76 <area shape="rect" id="node154" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="200,316,327,335"/>
77 <area shape="rect" id="node154" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="200,335,327,353"/>
78 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="188,283,337,359"/>
79 <area shape="rect" id="node6" href="ClusterShell.Task.TaskException-class.html" title="Base task exception." alt="" coords="207,379,319,423"/>
80 <area shape="rect" id="node3" href="ClusterShell.Task.AlreadyRunningError-class.html" title="Raised when trying to resume an already running task." alt="" coords="5,502,163,541"/>
81 <area shape="rect" id="node4" href="ClusterShell.Task.TaskError-class.html" title="Base task error exception." alt="" coords="217,443,311,482"/>
82 <area shape="rect" id="node5" href="ClusterShell.Task.TaskMsgTreeError-class.html" title="Raised when trying to access disabled MsgTree." alt="" coords="192,502,336,541"/>
83 <area shape="rect" id="node7" href="ClusterShell.Task.TimeoutError-class.html" title="Raised when the task timed out." alt="" coords="365,502,477,541"/>
84 </map>
85 <img src="uml_class_diagram_for_clusters_43.png" alt='' usemap="#uml_class_diagram_for_clusters_43" ismap="ismap" class="graph-without-title" />
86 </center>
87 </center>
88 <hr />
89 <p>Base task exception.</p>
90
91 <!-- ==================== INSTANCE METHODS ==================== -->
92 <a name="section-InstanceMethods"></a>
93 <table class="summary" border="1" cellpadding="3"
94 cellspacing="0" width="100%" bgcolor="white">
95 <tr bgcolor="#70b0f0" class="table-header">
96 <td colspan="2" class="table-header">
97 <table border="0" cellpadding="0" cellspacing="0" width="100%">
98 <tr valign="top">
99 <td align="left"><span class="table-header">Instance Methods</span></td>
100 <td align="right" valign="top"
101 ><span class="options">[<a href="#section-InstanceMethods"
102 class="privatelink" onclick="toggle_private();"
103 >hide private</a>]</span></td>
104 </tr>
105 </table>
106 </td>
107 </tr>
108 <tr>
109 <td colspan="2" class="summary">
110 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
111 <code>__init__</code>,
112 <code>__new__</code>
113 </p>
114 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
115 <code>__delattr__</code>,
116 <code>__getattribute__</code>,
117 <code>__getitem__</code>,
118 <code>__getslice__</code>,
119 <code>__reduce__</code>,
120 <code>__repr__</code>,
121 <code>__setattr__</code>,
122 <code>__setstate__</code>,
123 <code>__str__</code>,
124 <code>__unicode__</code>
125 </p>
126 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
127 <code>__format__</code>,
128 <code>__hash__</code>,
129 <code>__reduce_ex__</code>,
130 <code>__sizeof__</code>,
131 <code>__subclasshook__</code>
132 </p>
133 </td>
134 </tr>
135 </table>
136 <!-- ==================== PROPERTIES ==================== -->
137 <a name="section-Properties"></a>
138 <table class="summary" border="1" cellpadding="3"
139 cellspacing="0" width="100%" bgcolor="white">
140 <tr bgcolor="#70b0f0" class="table-header">
141 <td colspan="2" class="table-header">
142 <table border="0" cellpadding="0" cellspacing="0" width="100%">
143 <tr valign="top">
144 <td align="left"><span class="table-header">Properties</span></td>
145 <td align="right" valign="top"
146 ><span class="options">[<a href="#section-Properties"
147 class="privatelink" onclick="toggle_private();"
148 >hide private</a>]</span></td>
149 </tr>
150 </table>
151 </td>
152 </tr>
153 <tr>
154 <td colspan="2" class="summary">
155 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
156 <code>args</code>,
157 <code>message</code>
158 </p>
159 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
160 <code>__class__</code>
161 </p>
162 </td>
163 </tr>
164 </table>
165 <!-- ==================== NAVIGATION BAR ==================== -->
166 <table class="navbar" border="0" width="100%" cellpadding="0"
167 bgcolor="#a0c0ff" cellspacing="0">
168 <tr valign="middle">
169
170 <!-- Tree link -->
171 <th>&nbsp;&nbsp;&nbsp;<a
172 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
173
174 <!-- Index link -->
175 <th>&nbsp;&nbsp;&nbsp;<a
176 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
177
178 <!-- Help link -->
179 <th>&nbsp;&nbsp;&nbsp;<a
180 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
181
182 <!-- Project homepage -->
183 <th class="navbar" align="right" width="100%">
184 <table border="0" cellpadding="0" cellspacing="0">
185 <tr><th class="navbar" align="center"
186 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
187 </tr></table></th>
188 </tr>
189 </table>
190 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
191 <tr>
192 <td align="left" class="footer">
193 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
194 </td>
195 <td align="right" class="footer">
196 <a target="mainFrame" href="http://epydoc.sourceforge.net"
197 >http://epydoc.sourceforge.net</a>
198 </td>
199 </tr>
200 </table>
201
202 <script type="text/javascript">
203 <!--
204 // Private objects are initially displayed (because if
205 // javascript is turned off then we want them to be
206 // visible); but by default, we want to hide them. So hide
207 // them unless we have a cookie that says to show them.
208 checkCookie();
209 // -->
210 </script>
211 </body>
212 </html>
+0
-211
doc/epydoc/html/ClusterShell.Task.TaskMsgTreeError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.TaskMsgTreeError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 Class&nbsp;TaskMsgTreeError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.TaskMsgTreeError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class TaskMsgTreeError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#TaskMsgTreeError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_44" name="uml_class_diagram_for_clusters_44">
63 <area shape="rect" id="node1" href="ClusterShell.Task.TaskMsgTreeError-class.html" title="Raised when trying to access disabled MsgTree." alt="" coords="28,507,161,551"/>
64 <area shape="rect" id="node2" href="ClusterShell.Task.TaskError-class.html" title="Base task error exception." alt="" coords="55,443,137,487"/>
65 <area shape="rect" id="node163" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
66 <area shape="rect" id="node163" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
68 <area shape="rect" id="node4" href="ClusterShell.Task.TaskException-class.html" title="Base task exception." alt="" coords="39,379,151,423"/>
69 <area shape="rect" id="node164" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node164" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node164" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node164" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node164" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node164" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node164" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node164" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node164" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node164" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node164" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node164" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_44.png" alt='' usemap="#uml_class_diagram_for_clusters_44" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised when trying to access disabled MsgTree.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td colspan="2" class="summary">
108 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
109 <code>__init__</code>,
110 <code>__new__</code>
111 </p>
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
113 <code>__delattr__</code>,
114 <code>__getattribute__</code>,
115 <code>__getitem__</code>,
116 <code>__getslice__</code>,
117 <code>__reduce__</code>,
118 <code>__repr__</code>,
119 <code>__setattr__</code>,
120 <code>__setstate__</code>,
121 <code>__str__</code>,
122 <code>__unicode__</code>
123 </p>
124 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
125 <code>__format__</code>,
126 <code>__hash__</code>,
127 <code>__reduce_ex__</code>,
128 <code>__sizeof__</code>,
129 <code>__subclasshook__</code>
130 </p>
131 </td>
132 </tr>
133 </table>
134 <!-- ==================== PROPERTIES ==================== -->
135 <a name="section-Properties"></a>
136 <table class="summary" border="1" cellpadding="3"
137 cellspacing="0" width="100%" bgcolor="white">
138 <tr bgcolor="#70b0f0" class="table-header">
139 <td colspan="2" class="table-header">
140 <table border="0" cellpadding="0" cellspacing="0" width="100%">
141 <tr valign="top">
142 <td align="left"><span class="table-header">Properties</span></td>
143 <td align="right" valign="top"
144 ><span class="options">[<a href="#section-Properties"
145 class="privatelink" onclick="toggle_private();"
146 >hide private</a>]</span></td>
147 </tr>
148 </table>
149 </td>
150 </tr>
151 <tr>
152 <td colspan="2" class="summary">
153 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
154 <code>args</code>,
155 <code>message</code>
156 </p>
157 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
158 <code>__class__</code>
159 </p>
160 </td>
161 </tr>
162 </table>
163 <!-- ==================== NAVIGATION BAR ==================== -->
164 <table class="navbar" border="0" width="100%" cellpadding="0"
165 bgcolor="#a0c0ff" cellspacing="0">
166 <tr valign="middle">
167
168 <!-- Tree link -->
169 <th>&nbsp;&nbsp;&nbsp;<a
170 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
171
172 <!-- Index link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Help link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Project homepage -->
181 <th class="navbar" align="right" width="100%">
182 <table border="0" cellpadding="0" cellspacing="0">
183 <tr><th class="navbar" align="center"
184 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
185 </tr></table></th>
186 </tr>
187 </table>
188 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
189 <tr>
190 <td align="left" class="footer">
191 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
192 </td>
193 <td align="right" class="footer">
194 <a target="mainFrame" href="http://epydoc.sourceforge.net"
195 >http://epydoc.sourceforge.net</a>
196 </td>
197 </tr>
198 </table>
199
200 <script type="text/javascript">
201 <!--
202 // Private objects are initially displayed (because if
203 // javascript is turned off then we want them to be
204 // visible); but by default, we want to hide them. So hide
205 // them unless we have a cookie that says to show them.
206 checkCookie();
207 // -->
208 </script>
209 </body>
210 </html>
+0
-211
doc/epydoc/html/ClusterShell.Task.TimeoutError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task.TimeoutError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 Class&nbsp;TimeoutError
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Task.TimeoutError-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class TimeoutError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#TimeoutError">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_45" name="uml_class_diagram_for_clusters_45">
63 <area shape="rect" id="node1" href="ClusterShell.Task.TimeoutError-class.html" title="Raised when the task timed out." alt="" coords="45,507,147,551"/>
64 <area shape="rect" id="node2" href="ClusterShell.Task.TaskError-class.html" title="Base task error exception." alt="" coords="55,443,137,487"/>
65 <area shape="rect" id="node168" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
66 <area shape="rect" id="node168" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
67 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
68 <area shape="rect" id="node4" href="ClusterShell.Task.TaskException-class.html" title="Base task exception." alt="" coords="39,379,151,423"/>
69 <area shape="rect" id="node169" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node169" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node169" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node169" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node169" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node169" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node169" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node169" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node169" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node169" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node169" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node169" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_45.png" alt='' usemap="#uml_class_diagram_for_clusters_45" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>Raised when the task timed out.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td colspan="2" class="summary">
108 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
109 <code>__init__</code>,
110 <code>__new__</code>
111 </p>
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
113 <code>__delattr__</code>,
114 <code>__getattribute__</code>,
115 <code>__getitem__</code>,
116 <code>__getslice__</code>,
117 <code>__reduce__</code>,
118 <code>__repr__</code>,
119 <code>__setattr__</code>,
120 <code>__setstate__</code>,
121 <code>__str__</code>,
122 <code>__unicode__</code>
123 </p>
124 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
125 <code>__format__</code>,
126 <code>__hash__</code>,
127 <code>__reduce_ex__</code>,
128 <code>__sizeof__</code>,
129 <code>__subclasshook__</code>
130 </p>
131 </td>
132 </tr>
133 </table>
134 <!-- ==================== PROPERTIES ==================== -->
135 <a name="section-Properties"></a>
136 <table class="summary" border="1" cellpadding="3"
137 cellspacing="0" width="100%" bgcolor="white">
138 <tr bgcolor="#70b0f0" class="table-header">
139 <td colspan="2" class="table-header">
140 <table border="0" cellpadding="0" cellspacing="0" width="100%">
141 <tr valign="top">
142 <td align="left"><span class="table-header">Properties</span></td>
143 <td align="right" valign="top"
144 ><span class="options">[<a href="#section-Properties"
145 class="privatelink" onclick="toggle_private();"
146 >hide private</a>]</span></td>
147 </tr>
148 </table>
149 </td>
150 </tr>
151 <tr>
152 <td colspan="2" class="summary">
153 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
154 <code>args</code>,
155 <code>message</code>
156 </p>
157 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
158 <code>__class__</code>
159 </p>
160 </td>
161 </tr>
162 </table>
163 <!-- ==================== NAVIGATION BAR ==================== -->
164 <table class="navbar" border="0" width="100%" cellpadding="0"
165 bgcolor="#a0c0ff" cellspacing="0">
166 <tr valign="middle">
167
168 <!-- Tree link -->
169 <th>&nbsp;&nbsp;&nbsp;<a
170 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
171
172 <!-- Index link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Help link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Project homepage -->
181 <th class="navbar" align="right" width="100%">
182 <table border="0" cellpadding="0" cellspacing="0">
183 <tr><th class="navbar" align="center"
184 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
185 </tr></table></th>
186 </tr>
187 </table>
188 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
189 <tr>
190 <td align="left" class="footer">
191 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
192 </td>
193 <td align="right" class="footer">
194 <a target="mainFrame" href="http://epydoc.sourceforge.net"
195 >http://epydoc.sourceforge.net</a>
196 </td>
197 </tr>
198 </table>
199
200 <script type="text/javascript">
201 <!--
202 // Private objects are initially displayed (because if
203 // javascript is turned off then we want them to be
204 // visible); but by default, we want to hide them. So hide
205 // them unless we have a cookie that says to show them.
206 checkCookie();
207 // -->
208 </script>
209 </body>
210 </html>
+0
-279
doc/epydoc/html/ClusterShell.Task._TaskMsgTree-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Task._TaskMsgTree</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Task-module.html">Module&nbsp;Task</a> ::
43 Class&nbsp;_TaskMsgTree
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Task._TaskMsgTree-class.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== CLASS DESCRIPTION ==================== -->
60 <h1 class="epydoc">Class _TaskMsgTree</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Task-pysrc.html#_TaskMsgTree">source&nbsp;code</a></span></p>
61 <center>
62 <center> <map id="uml_class_diagram_for_clusters_46" name="uml_class_diagram_for_clusters_46">
63 <area shape="rect" id="node170" href="ClusterShell.Task._TaskMsgTree-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,39,189,57"/>
64 <area shape="rect" id="node170" href="ClusterShell.Task._TaskMsgTree-class.html#__getattr__" title="ClusterShell.Task._TaskMsgTree.__getattr__" alt="" coords="17,57,189,76"/>
65 <area shape="rect" id="node1" href="ClusterShell.Task._TaskMsgTree-class.html" title="Task special MsgTree wrapper class, for easy disabling of MsgTree buffering." alt="" coords="5,6,200,82"/>
66 </map>
67 <img src="uml_class_diagram_for_clusters_46.png" alt='' usemap="#uml_class_diagram_for_clusters_46" ismap="ismap" class="graph-without-title" />
68 </center>
69 </center>
70 <hr />
71 <p>Task special MsgTree wrapper class, for easy disabling of MsgTree
72 buffering. This class checks if task.default(keyword) is set before
73 effective MsgTree attribute lookup, according to following rules:</p>
74 <ul>
75 <li>
76 If set, allow all MsgTree methods, else:
77 <ul>
78 <li>
79 ignore add() calls
80 </li>
81 <li>
82 disallow MsgTree methods except clear()
83 </li>
84 </ul>
85 </li>
86 </ul>
87
88 <!-- ==================== INSTANCE METHODS ==================== -->
89 <a name="section-InstanceMethods"></a>
90 <table class="summary" border="1" cellpadding="3"
91 cellspacing="0" width="100%" bgcolor="white">
92 <tr bgcolor="#70b0f0" class="table-header">
93 <td colspan="2" class="table-header">
94 <table border="0" cellpadding="0" cellspacing="0" width="100%">
95 <tr valign="top">
96 <td align="left"><span class="table-header">Instance Methods</span></td>
97 <td align="right" valign="top"
98 ><span class="options">[<a href="#section-InstanceMethods"
99 class="privatelink" onclick="toggle_private();"
100 >hide private</a>]</span></td>
101 </tr>
102 </table>
103 </td>
104 </tr>
105 <tr>
106 <td width="15%" align="right" valign="top" class="summary">
107 <span class="summary-type">&nbsp;</span>
108 </td><td class="summary">
109 <table width="100%" cellpadding="0" cellspacing="0" border="0">
110 <tr>
111 <td><span class="summary-sig"><a href="ClusterShell.Task._TaskMsgTree-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
112 <span class="summary-sig-arg">task</span>,
113 <span class="summary-sig-arg">keyword</span>)</span><br />
114 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
115 <td align="right" valign="top">
116 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#_TaskMsgTree.__init__">source&nbsp;code</a></span>
117
118 </td>
119 </tr>
120 </table>
121
122 </td>
123 </tr>
124 <tr>
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type">&nbsp;</span>
127 </td><td class="summary">
128 <table width="100%" cellpadding="0" cellspacing="0" border="0">
129 <tr>
130 <td><span class="summary-sig"><a name="__getattr__"></a><span class="summary-sig-name">__getattr__</span>(<span class="summary-sig-arg">self</span>,
131 <span class="summary-sig-arg">name</span>)</span></td>
132 <td align="right" valign="top">
133 <span class="codelink"><a href="ClusterShell.Task-pysrc.html#_TaskMsgTree.__getattr__">source&nbsp;code</a></span>
134
135 </td>
136 </tr>
137 </table>
138
139 </td>
140 </tr>
141 <tr>
142 <td colspan="2" class="summary">
143 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
144 <code>__delattr__</code>,
145 <code>__format__</code>,
146 <code>__getattribute__</code>,
147 <code>__hash__</code>,
148 <code>__new__</code>,
149 <code>__reduce__</code>,
150 <code>__reduce_ex__</code>,
151 <code>__repr__</code>,
152 <code>__setattr__</code>,
153 <code>__sizeof__</code>,
154 <code>__str__</code>,
155 <code>__subclasshook__</code>
156 </p>
157 </td>
158 </tr>
159 </table>
160 <!-- ==================== PROPERTIES ==================== -->
161 <a name="section-Properties"></a>
162 <table class="summary" border="1" cellpadding="3"
163 cellspacing="0" width="100%" bgcolor="white">
164 <tr bgcolor="#70b0f0" class="table-header">
165 <td colspan="2" class="table-header">
166 <table border="0" cellpadding="0" cellspacing="0" width="100%">
167 <tr valign="top">
168 <td align="left"><span class="table-header">Properties</span></td>
169 <td align="right" valign="top"
170 ><span class="options">[<a href="#section-Properties"
171 class="privatelink" onclick="toggle_private();"
172 >hide private</a>]</span></td>
173 </tr>
174 </table>
175 </td>
176 </tr>
177 <tr>
178 <td colspan="2" class="summary">
179 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
180 <code>__class__</code>
181 </p>
182 </td>
183 </tr>
184 </table>
185 <!-- ==================== METHOD DETAILS ==================== -->
186 <a name="section-MethodDetails"></a>
187 <table class="details" border="1" cellpadding="3"
188 cellspacing="0" width="100%" bgcolor="white">
189 <tr bgcolor="#70b0f0" class="table-header">
190 <td colspan="2" class="table-header">
191 <table border="0" cellpadding="0" cellspacing="0" width="100%">
192 <tr valign="top">
193 <td align="left"><span class="table-header">Method Details</span></td>
194 <td align="right" valign="top"
195 ><span class="options">[<a href="#section-MethodDetails"
196 class="privatelink" onclick="toggle_private();"
197 >hide private</a>]</span></td>
198 </tr>
199 </table>
200 </td>
201 </tr>
202 </table>
203 <a name="__init__"></a>
204 <div>
205 <table class="details" border="1" cellpadding="3"
206 cellspacing="0" width="100%" bgcolor="white">
207 <tr><td>
208 <table width="100%" cellpadding="0" cellspacing="0" border="0">
209 <tr valign="top"><td>
210 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
211 <span class="sig-arg">task</span>,
212 <span class="sig-arg">keyword</span>)</span>
213 <br /><em class="fname">(Constructor)</em>
214 </h3>
215 </td><td align="right" valign="top"
216 ><span class="codelink"><a href="ClusterShell.Task-pysrc.html#_TaskMsgTree.__init__">source&nbsp;code</a></span>&nbsp;
217 </td>
218 </tr></table>
219
220 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
221 signature</p>
222 <dl class="fields">
223 <dt>Overrides:
224 object.__init__
225 <dd><em class="note">(inherited documentation)</em></dd>
226 </dt>
227 </dl>
228 </td></tr></table>
229 </div>
230 <br />
231 <!-- ==================== NAVIGATION BAR ==================== -->
232 <table class="navbar" border="0" width="100%" cellpadding="0"
233 bgcolor="#a0c0ff" cellspacing="0">
234 <tr valign="middle">
235
236 <!-- Tree link -->
237 <th>&nbsp;&nbsp;&nbsp;<a
238 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
239
240 <!-- Index link -->
241 <th>&nbsp;&nbsp;&nbsp;<a
242 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
243
244 <!-- Help link -->
245 <th>&nbsp;&nbsp;&nbsp;<a
246 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
247
248 <!-- Project homepage -->
249 <th class="navbar" align="right" width="100%">
250 <table border="0" cellpadding="0" cellspacing="0">
251 <tr><th class="navbar" align="center"
252 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
253 </tr></table></th>
254 </tr>
255 </table>
256 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
257 <tr>
258 <td align="left" class="footer">
259 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
260 </td>
261 <td align="right" class="footer">
262 <a target="mainFrame" href="http://epydoc.sourceforge.net"
263 >http://epydoc.sourceforge.net</a>
264 </td>
265 </tr>
266 </table>
267
268 <script type="text/javascript">
269 <!--
270 // Private objects are initially displayed (because if
271 // javascript is turned off then we want them to be
272 // visible); but by default, we want to hide them. So hide
273 // them unless we have a cookie that says to show them.
274 checkCookie();
275 // -->
276 </script>
277 </body>
278 </html>
+0
-161
doc/epydoc/html/ClusterShell.Worker-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Package&nbsp;Worker
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker-module.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== PACKAGE DESCRIPTION ==================== -->
59 <h1 class="epydoc">Package Worker</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker-pysrc.html">source&nbsp;code</a></span></p>
60 <!-- ==================== SUBMODULES ==================== -->
61 <a name="section-Submodules"></a>
62 <table class="summary" border="1" cellpadding="3"
63 cellspacing="0" width="100%" bgcolor="white">
64 <tr bgcolor="#70b0f0" class="table-header">
65 <td colspan="2" class="table-header">
66 <table border="0" cellpadding="0" cellspacing="0" width="100%">
67 <tr valign="top">
68 <td align="left"><span class="table-header">Submodules</span></td>
69 <td align="right" valign="top"
70 ><span class="options">[<a href="#section-Submodules"
71 class="privatelink" onclick="toggle_private();"
72 >hide private</a>]</span></td>
73 </tr>
74 </table>
75 </td>
76 </tr>
77 <tr><td class="summary">
78 <ul class="nomargin">
79 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a></strong>: <em class="summary">EngineClient</em> </li>
80 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Pdsh-module.html">ClusterShell.Worker.Pdsh</a></strong>: <em class="summary">WorkerPdsh</em> </li>
81 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Popen-module.html">ClusterShell.Worker.Popen</a></strong>: <em class="summary">WorkerPopen</em> </li>
82 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Ssh-module.html">ClusterShell.Worker.Ssh</a></strong>: <em class="summary">ClusterShell Ssh/Scp support</em> </li>
83 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a></strong>: <em class="summary">ClusterShell worker interface.</em> </li>
84 </ul></td></tr>
85 </table>
86
87 <br />
88 <!-- ==================== VARIABLES ==================== -->
89 <a name="section-Variables"></a>
90 <table class="summary" border="1" cellpadding="3"
91 cellspacing="0" width="100%" bgcolor="white">
92 <tr bgcolor="#70b0f0" class="table-header">
93 <td colspan="2" class="table-header">
94 <table border="0" cellpadding="0" cellspacing="0" width="100%">
95 <tr valign="top">
96 <td align="left"><span class="table-header">Variables</span></td>
97 <td align="right" valign="top"
98 ><span class="options">[<a href="#section-Variables"
99 class="privatelink" onclick="toggle_private();"
100 >hide private</a>]</span></td>
101 </tr>
102 </table>
103 </td>
104 </tr>
105 <tr>
106 <td width="15%" align="right" valign="top" class="summary">
107 <span class="summary-type">&nbsp;</span>
108 </td><td class="summary">
109 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
110 </td>
111 </tr>
112 </table>
113 <!-- ==================== NAVIGATION BAR ==================== -->
114 <table class="navbar" border="0" width="100%" cellpadding="0"
115 bgcolor="#a0c0ff" cellspacing="0">
116 <tr valign="middle">
117
118 <!-- Tree link -->
119 <th>&nbsp;&nbsp;&nbsp;<a
120 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
121
122 <!-- Index link -->
123 <th>&nbsp;&nbsp;&nbsp;<a
124 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
125
126 <!-- Help link -->
127 <th>&nbsp;&nbsp;&nbsp;<a
128 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
129
130 <!-- Project homepage -->
131 <th class="navbar" align="right" width="100%">
132 <table border="0" cellpadding="0" cellspacing="0">
133 <tr><th class="navbar" align="center"
134 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
135 </tr></table></th>
136 </tr>
137 </table>
138 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
139 <tr>
140 <td align="left" class="footer">
141 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
142 </td>
143 <td align="right" class="footer">
144 <a target="mainFrame" href="http://epydoc.sourceforge.net"
145 >http://epydoc.sourceforge.net</a>
146 </td>
147 </tr>
148 </table>
149
150 <script type="text/javascript">
151 <!--
152 // Private objects are initially displayed (because if
153 // javascript is turned off then we want them to be
154 // visible); but by default, we want to hide them. So hide
155 // them unless we have a cookie that says to show them.
156 checkCookie();
157 // -->
158 </script>
159 </body>
160 </html>
+0
-116
doc/epydoc/html/ClusterShell.Worker-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 Package&nbsp;Worker
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker-pysrc.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <h1 class="epydoc">Source Code for <a href="ClusterShell.Worker-module.html">Package ClusterShell.Worker</a></h1>
59 <pre class="py-src">
60 <a name="L1"></a><tt class="py-lineno">1</tt> <tt class="py-line"> </tt>
61 <a name="L2"></a><tt class="py-lineno">2</tt> <tt class="py-line"> </tt><script type="text/javascript">
62 <!--
63 expandto(location.href);
64 // -->
65 </script>
66 </pre>
67 <br />
68 <!-- ==================== NAVIGATION BAR ==================== -->
69 <table class="navbar" border="0" width="100%" cellpadding="0"
70 bgcolor="#a0c0ff" cellspacing="0">
71 <tr valign="middle">
72
73 <!-- Tree link -->
74 <th>&nbsp;&nbsp;&nbsp;<a
75 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
76
77 <!-- Index link -->
78 <th>&nbsp;&nbsp;&nbsp;<a
79 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
80
81 <!-- Help link -->
82 <th>&nbsp;&nbsp;&nbsp;<a
83 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
84
85 <!-- Project homepage -->
86 <th class="navbar" align="right" width="100%">
87 <table border="0" cellpadding="0" cellspacing="0">
88 <tr><th class="navbar" align="center"
89 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
90 </tr></table></th>
91 </tr>
92 </table>
93 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
94 <tr>
95 <td align="left" class="footer">
96 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
97 </td>
98 <td align="right" class="footer">
99 <a target="mainFrame" href="http://epydoc.sourceforge.net"
100 >http://epydoc.sourceforge.net</a>
101 </td>
102 </tr>
103 </table>
104
105 <script type="text/javascript">
106 <!--
107 // Private objects are initially displayed (because if
108 // javascript is turned off then we want them to be
109 // visible); but by default, we want to hide them. So hide
110 // them unless we have a cookie that says to show them.
111 checkCookie();
112 // -->
113 </script>
114 </body>
115 </html>
+0
-206
doc/epydoc/html/ClusterShell.Worker.EngineClient-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;EngineClient
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module EngineClient</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html">source&nbsp;code</a></span></p>
61 <p>EngineClient</p>
62 <p>ClusterShell engine's client interface.</p>
63 <p>An engine client is similar to a process, you can start/stop it, read
64 data from it and write data to it.</p>
65
66 <!-- ==================== CLASSES ==================== -->
67 <a name="section-Classes"></a>
68 <table class="summary" border="1" cellpadding="3"
69 cellspacing="0" width="100%" bgcolor="white">
70 <tr bgcolor="#70b0f0" class="table-header">
71 <td colspan="2" class="table-header">
72 <table border="0" cellpadding="0" cellspacing="0" width="100%">
73 <tr valign="top">
74 <td align="left"><span class="table-header">Classes</span></td>
75 <td align="right" valign="top"
76 ><span class="options">[<a href="#section-Classes"
77 class="privatelink" onclick="toggle_private();"
78 >hide private</a>]</span></td>
79 </tr>
80 </table>
81 </td>
82 </tr>
83 <tr>
84 <td width="15%" align="right" valign="top" class="summary">
85 <span class="summary-type">&nbsp;</span>
86 </td><td class="summary">
87 <a href="ClusterShell.Worker.EngineClient.EngineClientException-class.html" class="summary-name">EngineClientException</a><br />
88 Generic EngineClient exception.
89 </td>
90 </tr>
91 <tr>
92 <td width="15%" align="right" valign="top" class="summary">
93 <span class="summary-type">&nbsp;</span>
94 </td><td class="summary">
95 <a href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html" class="summary-name">EngineClientEOF</a><br />
96 EOF from client.
97 </td>
98 </tr>
99 <tr>
100 <td width="15%" align="right" valign="top" class="summary">
101 <span class="summary-type">&nbsp;</span>
102 </td><td class="summary">
103 <a href="ClusterShell.Worker.EngineClient.EngineClientError-class.html" class="summary-name">EngineClientError</a><br />
104 Base EngineClient error exception.
105 </td>
106 </tr>
107 <tr>
108 <td width="15%" align="right" valign="top" class="summary">
109 <span class="summary-type">&nbsp;</span>
110 </td><td class="summary">
111 <a href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html" class="summary-name">EngineClientNotSupportedError</a><br />
112 Operation not supported by EngineClient.
113 </td>
114 </tr>
115 <tr>
116 <td width="15%" align="right" valign="top" class="summary">
117 <span class="summary-type">&nbsp;</span>
118 </td><td class="summary">
119 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html" class="summary-name">EngineClient</a><br />
120 Abstract class EngineClient.
121 </td>
122 </tr>
123 <tr>
124 <td width="15%" align="right" valign="top" class="summary">
125 <span class="summary-type">&nbsp;</span>
126 </td><td class="summary">
127 <a href="ClusterShell.Worker.EngineClient.EnginePort-class.html" class="summary-name">EnginePort</a><br />
128 An EnginePort is an abstraction object to deliver messages reliably
129 between tasks.
130 </td>
131 </tr>
132 </table>
133 <!-- ==================== VARIABLES ==================== -->
134 <a name="section-Variables"></a>
135 <table class="summary" border="1" cellpadding="3"
136 cellspacing="0" width="100%" bgcolor="white">
137 <tr bgcolor="#70b0f0" class="table-header">
138 <td colspan="2" class="table-header">
139 <table border="0" cellpadding="0" cellspacing="0" width="100%">
140 <tr valign="top">
141 <td align="left"><span class="table-header">Variables</span></td>
142 <td align="right" valign="top"
143 ><span class="options">[<a href="#section-Variables"
144 class="privatelink" onclick="toggle_private();"
145 >hide private</a>]</span></td>
146 </tr>
147 </table>
148 </td>
149 </tr>
150 <tr>
151 <td width="15%" align="right" valign="top" class="summary">
152 <span class="summary-type">&nbsp;</span>
153 </td><td class="summary">
154 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Worker'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Worker</code><code class="variable-quote">'</code></code>
155 </td>
156 </tr>
157 </table>
158 <!-- ==================== NAVIGATION BAR ==================== -->
159 <table class="navbar" border="0" width="100%" cellpadding="0"
160 bgcolor="#a0c0ff" cellspacing="0">
161 <tr valign="middle">
162
163 <!-- Tree link -->
164 <th>&nbsp;&nbsp;&nbsp;<a
165 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
166
167 <!-- Index link -->
168 <th>&nbsp;&nbsp;&nbsp;<a
169 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
170
171 <!-- Help link -->
172 <th>&nbsp;&nbsp;&nbsp;<a
173 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
174
175 <!-- Project homepage -->
176 <th class="navbar" align="right" width="100%">
177 <table border="0" cellpadding="0" cellspacing="0">
178 <tr><th class="navbar" align="center"
179 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
180 </tr></table></th>
181 </tr>
182 </table>
183 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
184 <tr>
185 <td align="left" class="footer">
186 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
187 </td>
188 <td align="right" class="footer">
189 <a target="mainFrame" href="http://epydoc.sourceforge.net"
190 >http://epydoc.sourceforge.net</a>
191 </td>
192 </tr>
193 </table>
194
195 <script type="text/javascript">
196 <!--
197 // Private objects are initially displayed (because if
198 // javascript is turned off then we want them to be
199 // visible); but by default, we want to hide them. So hide
200 // them unless we have a cookie that says to show them.
201 checkCookie();
202 // -->
203 </script>
204 </body>
205 </html>
+0
-668
doc/epydoc/html/ClusterShell.Worker.EngineClient-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;EngineClient
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Worker.EngineClient-module.html">Module ClusterShell.Worker.EngineClient</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2009, 2010)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id$</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">EngineClient</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">ClusterShell engine's client interface.</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
100 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">An engine client is similar to a process, you can start/stop it, read data from</tt> </tt>
101 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring">it and write data to it.</tt> </tt>
102 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
103 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> </tt>
104 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">fcntl</tt> </tt>
105 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
106 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">Queue</tt> </tt>
107 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">subprocess</tt> <tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module ClusterShell.Worker.Popen=ClusterShell.Worker.Popen-module.html"><a title="ClusterShell.Worker.Popen" class="py-name" href="#" onclick="return doclink('link-0', 'Popen', 'link-0');">Popen</a></tt><tt class="py-op">,</tt> <tt class="py-name">PIPE</tt><tt class="py-op">,</tt> <tt class="py-name">STDOUT</tt> </tt>
108 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">thread</tt> </tt>
109 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> </tt>
110 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-1', 'ClusterShell', 'link-1');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Package ClusterShell.Engine=ClusterShell.Engine-module.html,Module ClusterShell.Engine.Engine=ClusterShell.Engine.Engine-module.html,Class ClusterShell.Engine.Engine.Engine=ClusterShell.Engine.Engine.Engine-class.html"><a title="ClusterShell.Engine
111 ClusterShell.Engine.Engine
112 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-2', 'Engine', 'link-2');">Engine</a></tt><tt class="py-op">.</tt><tt id="link-3" class="py-name"><a title="ClusterShell.Engine
113 ClusterShell.Engine.Engine
114 ClusterShell.Engine.Engine.Engine" class="py-name" href="#" onclick="return doclink('link-3', 'Engine', 'link-2');">Engine</a></tt> <tt class="py-keyword">import</tt> <tt id="link-4" class="py-name" targets="Class ClusterShell.Engine.Engine.EngineBaseTimer=ClusterShell.Engine.Engine.EngineBaseTimer-class.html"><a title="ClusterShell.Engine.Engine.EngineBaseTimer" class="py-name" href="#" onclick="return doclink('link-4', 'EngineBaseTimer', 'link-4');">EngineBaseTimer</a></tt> </tt>
115 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
116 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> </tt>
117 <a name="EngineClientException"></a><div id="EngineClientException-def"><a name="L53"></a><tt class="py-lineno"> 53</tt> <a class="py-toggle" href="#" id="EngineClientException-toggle" onclick="return toggle('EngineClientException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClientException-class.html">EngineClientException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
118 </div><div id="EngineClientException-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineClientException-expanded"><a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-docstring">"""Generic EngineClient exception."""</tt> </tt>
119 </div><a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> </tt>
120 <a name="EngineClientEOF"></a><div id="EngineClientEOF-def"><a name="L56"></a><tt class="py-lineno"> 56</tt> <a class="py-toggle" href="#" id="EngineClientEOF-toggle" onclick="return toggle('EngineClientEOF');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html">EngineClientEOF</a><tt class="py-op">(</tt><tt class="py-base-class">EngineClientException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
121 </div><div id="EngineClientEOF-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineClientEOF-expanded"><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-docstring">"""EOF from client."""</tt> </tt>
122 </div><a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> </tt>
123 <a name="EngineClientError"></a><div id="EngineClientError-def"><a name="L59"></a><tt class="py-lineno"> 59</tt> <a class="py-toggle" href="#" id="EngineClientError-toggle" onclick="return toggle('EngineClientError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClientError-class.html">EngineClientError</a><tt class="py-op">(</tt><tt class="py-base-class">EngineClientException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
124 </div><div id="EngineClientError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineClientError-expanded"><a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-docstring">"""Base EngineClient error exception."""</tt> </tt>
125 </div><a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> </tt>
126 <a name="EngineClientNotSupportedError"></a><div id="EngineClientNotSupportedError-def"><a name="L62"></a><tt class="py-lineno"> 62</tt> <a class="py-toggle" href="#" id="EngineClientNotSupportedError-toggle" onclick="return toggle('EngineClientNotSupportedError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html">EngineClientNotSupportedError</a><tt class="py-op">(</tt><tt class="py-base-class">EngineClientError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
127 </div><div id="EngineClientNotSupportedError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineClientNotSupportedError-expanded"><a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-docstring">"""Operation not supported by EngineClient."""</tt> </tt>
128 </div><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> </tt>
129 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> </tt>
130 <a name="EngineClient"></a><div id="EngineClient-def"><a name="L66"></a><tt class="py-lineno"> 66</tt> <a class="py-toggle" href="#" id="EngineClient-toggle" onclick="return toggle('EngineClient');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a><tt class="py-op">(</tt><tt class="py-base-class">EngineBaseTimer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
131 </div><div id="EngineClient-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EngineClient-expanded"><a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
132 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> Abstract class EngineClient.</tt> </tt>
133 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
134 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
135 <a name="EngineClient.__init__"></a><div id="EngineClient.__init__-def"><a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="EngineClient.__init__-toggle" onclick="return toggle('EngineClient.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-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">worker</tt><tt class="py-op">,</tt> <tt class="py-param">stderr</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
136 </div><div id="EngineClient.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient.__init__-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
137 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt class="py-docstring"> Initializer. Should be called from derived classes.</tt> </tt>
138 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
139 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt id="link-5" class="py-name"><a title="ClusterShell.Engine.Engine.EngineBaseTimer" class="py-name" href="#" onclick="return doclink('link-5', 'EngineBaseTimer', 'link-4');">EngineBaseTimer</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
140 ClusterShell.Engine.Engine.Engine.__init__
141 ClusterShell.Engine.Engine.EngineAbortException.__init__
142 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
143 ClusterShell.Engine.Engine.EngineTimer.__init__
144 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
145 ClusterShell.Engine.Engine._EngineTimerQ.__init__
146 ClusterShell.Engine.Poll.EnginePoll.__init__
147 ClusterShell.MsgTree.MsgTree.__init__
148 ClusterShell.MsgTree.MsgTreeElem.__init__
149 ClusterShell.NodeSet.NodeSet.__init__
150 ClusterShell.NodeSet.NodeSetBase.__init__
151 ClusterShell.NodeSet.NodeSetParseError.__init__
152 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
153 ClusterShell.NodeSet.ParsingEngine.__init__
154 ClusterShell.NodeSet.RangeSet.__init__
155 ClusterShell.NodeSet.RangeSetPaddingError.__init__
156 ClusterShell.NodeSet.RangeSetParseError.__init__
157 ClusterShell.NodeUtils.GroupResolver.__init__
158 ClusterShell.NodeUtils.GroupResolverConfig.__init__
159 ClusterShell.NodeUtils.GroupSource.__init__
160 ClusterShell.NodeUtils.GroupSourceException.__init__
161 ClusterShell.Task.Task._SuspendCondition.__init__
162 ClusterShell.Task.Task.__init__
163 ClusterShell.Task._TaskMsgTree.__init__
164 ClusterShell.Worker.EngineClient.EngineClient.__init__
165 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
166 ClusterShell.Worker.EngineClient.EnginePort.__init__
167 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
168 ClusterShell.Worker.Popen.WorkerPopen.__init__
169 ClusterShell.Worker.Ssh.Scp.__init__
170 ClusterShell.Worker.Ssh.Ssh.__init__
171 ClusterShell.Worker.Ssh.WorkerSsh.__init__
172 ClusterShell.Worker.Worker.DistantWorker.__init__
173 ClusterShell.Worker.Worker.Worker.__init__
174 ClusterShell.Worker.Worker.WorkerSimple.__init__
175 clubak.Display.__init__
176 clush.ClushConfig.__init__
177 clush.ClushConfigError.__init__
178 clush.DirectOutputHandler.__init__
179 clush.Display.__init__
180 clush.GatherOutputHandler.__init__
181 clush.RunTimer.__init__
182 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-6', '__init__', 'link-6');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt> </tt>
183 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> </tt>
184 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-comment"># engine-friendly variables</tt> </tt>
185 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_events</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> <tt class="py-comment"># current configured set of</tt> </tt>
186 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-comment"># interesting events (read,</tt> </tt>
187 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-comment"># write) for client</tt> </tt>
188 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_new_events</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> <tt class="py-comment"># new set of interesting events</tt> </tt>
189 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_processing</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> <tt class="py-comment"># engine is working on us</tt> </tt>
190 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> </tt>
191 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-comment"># read-only public</tt> </tt>
192 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> <tt class="py-comment"># registered on engine or not</tt> </tt>
193 <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">delayable</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> <tt class="py-comment"># subject to fanout limit</tt> </tt>
194 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> </tt>
195 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt> <tt class="py-op">=</tt> <tt class="py-name">worker</tt> </tt>
196 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
197 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-comment"># boolean indicating whether stderr is on a separate fd</tt> </tt>
198 <a name="L91"></a><tt class="py-lineno"> 91</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">stderr</tt> </tt>
199 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> </tt>
200 <a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-comment"># associated files</tt> </tt>
201 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
202 <a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
203 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
204 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> </tt>
205 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-comment"># initialize error, read and write buffers</tt> </tt>
206 <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">_ebuf</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
207 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
208 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
209 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_weof</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> <tt class="py-comment"># write-ends notification</tt> </tt>
210 </div><a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> </tt>
211 <a name="EngineClient._fire"></a><div id="EngineClient._fire-def"><a name="L104"></a><tt class="py-lineno">104</tt> <a class="py-toggle" href="#" id="EngineClient._fire-toggle" onclick="return toggle('EngineClient._fire');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire">_fire</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
212 </div><div id="EngineClient._fire-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._fire-expanded"><a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
213 <a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"><tt class="py-docstring"> Fire timeout timer.</tt> </tt>
214 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
215 <a name="L108"></a><tt class="py-lineno">108</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">_engine</tt><tt class="py-op">:</tt> </tt>
216 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.remove()=ClusterShell.Engine.Engine.Engine-class.html#remove,Method ClusterShell.MsgTree.MsgTree.remove()=ClusterShell.MsgTree.MsgTree-class.html#remove,Method ClusterShell.NodeSet.NodeSetBase.remove()=ClusterShell.NodeSet.NodeSetBase-class.html#remove,Method ClusterShell.NodeSet.RangeSet.remove()=ClusterShell.NodeSet.RangeSet-class.html#remove"><a title="ClusterShell.Engine.Engine.Engine.remove
217 ClusterShell.MsgTree.MsgTree.remove
218 ClusterShell.NodeSet.NodeSetBase.remove
219 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-7', 'remove', 'link-7');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-8" class="py-name" targets="Method ClusterShell.Worker.Worker.Worker.did_timeout()=ClusterShell.Worker.Worker.Worker-class.html#did_timeout"><a title="ClusterShell.Worker.Worker.Worker.did_timeout" class="py-name" href="#" onclick="return doclink('link-8', 'did_timeout', 'link-8');">did_timeout</a></tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
220 </div><a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> </tt>
221 <a name="EngineClient._start"></a><div id="EngineClient._start-def"><a name="L111"></a><tt class="py-lineno">111</tt> <a class="py-toggle" href="#" id="EngineClient._start-toggle" onclick="return toggle('EngineClient._start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start">_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
222 </div><div id="EngineClient._start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._start-expanded"><a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
223 <a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"><tt class="py-docstring"> Starts client and returns client instance as a convenience.</tt> </tt>
224 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"><tt class="py-docstring"> Derived classes (except EnginePort) must implement.</tt> </tt>
225 <a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
226 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
227 </div><a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> </tt>
228 <a name="EngineClient.error_fileno"></a><div id="EngineClient.error_fileno-def"><a name="L118"></a><tt class="py-lineno">118</tt> <a class="py-toggle" href="#" id="EngineClient.error_fileno-toggle" onclick="return toggle('EngineClient.error_fileno');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno">error_fileno</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
229 </div><div id="EngineClient.error_fileno-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient.error_fileno-expanded"><a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
230 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> Return the standard error reader file descriptor as an integer.</tt> </tt>
231 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
232 <a name="L122"></a><tt class="py-lineno">122</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">file_error</tt><tt class="py-op">:</tt> </tt>
233 <a name="L123"></a><tt class="py-lineno">123</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">file_error</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
234 <a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
235 </div><a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> </tt>
236 <a name="EngineClient.reader_fileno"></a><div id="EngineClient.reader_fileno-def"><a name="L126"></a><tt class="py-lineno">126</tt> <a class="py-toggle" href="#" id="EngineClient.reader_fileno-toggle" onclick="return toggle('EngineClient.reader_fileno');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno">reader_fileno</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
237 </div><div id="EngineClient.reader_fileno-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient.reader_fileno-expanded"><a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
238 <a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"><tt class="py-docstring"> Return the reader file descriptor as an integer.</tt> </tt>
239 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
240 <a name="L130"></a><tt class="py-lineno">130</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">file_reader</tt><tt class="py-op">:</tt> </tt>
241 <a name="L131"></a><tt class="py-lineno">131</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">file_reader</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
242 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
243 </div><a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt>
244 <a name="EngineClient.writer_fileno"></a><div id="EngineClient.writer_fileno-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="EngineClient.writer_fileno-toggle" onclick="return toggle('EngineClient.writer_fileno');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno">writer_fileno</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
245 </div><div id="EngineClient.writer_fileno-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient.writer_fileno-expanded"><a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
246 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"><tt class="py-docstring"> Return the writer file descriptor as an integer.</tt> </tt>
247 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
248 <a name="L138"></a><tt class="py-lineno">138</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">file_writer</tt><tt class="py-op">:</tt> </tt>
249 <a name="L139"></a><tt class="py-lineno">139</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">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
250 <a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
251 </div><a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> </tt>
252 <a name="EngineClient._close"></a><div id="EngineClient._close-def"><a name="L142"></a><tt class="py-lineno">142</tt> <a class="py-toggle" href="#" id="EngineClient._close-toggle" onclick="return toggle('EngineClient._close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close">_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
253 </div><div id="EngineClient._close-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._close-expanded"><a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
254 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"><tt class="py-docstring"> Close client. Called by the engine after client has been</tt> </tt>
255 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-docstring"> unregistered. This method should handle all termination types</tt> </tt>
256 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"><tt class="py-docstring"> (normal, forced or on timeout).</tt> </tt>
257 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"><tt class="py-docstring"> Derived classes must implement.</tt> </tt>
258 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
259 <a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
260 </div><a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> </tt>
261 <a name="EngineClient._set_reading"></a><div id="EngineClient._set_reading-def"><a name="L151"></a><tt class="py-lineno">151</tt> <a class="py-toggle" href="#" id="EngineClient._set_reading-toggle" onclick="return toggle('EngineClient._set_reading');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading">_set_reading</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
262 </div><div id="EngineClient._set_reading-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._set_reading-expanded"><a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
263 <a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"><tt class="py-docstring"> Set reading state.</tt> </tt>
264 <a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
265 <a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.set_reading()=ClusterShell.Engine.Engine.Engine-class.html#set_reading"><a title="ClusterShell.Engine.Engine.Engine.set_reading" class="py-name" href="#" onclick="return doclink('link-9', 'set_reading', 'link-9');">set_reading</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
266 </div><a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> </tt>
267 <a name="EngineClient._set_reading_error"></a><div id="EngineClient._set_reading_error-def"><a name="L157"></a><tt class="py-lineno">157</tt> <a class="py-toggle" href="#" id="EngineClient._set_reading_error-toggle" onclick="return toggle('EngineClient._set_reading_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error">_set_reading_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
268 </div><div id="EngineClient._set_reading_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._set_reading_error-expanded"><a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
269 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"><tt class="py-docstring"> Set error reading state.</tt> </tt>
270 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
271 <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">_engine</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.set_reading_error()=ClusterShell.Engine.Engine.Engine-class.html#set_reading_error"><a title="ClusterShell.Engine.Engine.Engine.set_reading_error" class="py-name" href="#" onclick="return doclink('link-10', 'set_reading_error', 'link-10');">set_reading_error</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
272 </div><a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> </tt>
273 <a name="EngineClient._set_writing"></a><div id="EngineClient._set_writing-def"><a name="L163"></a><tt class="py-lineno">163</tt> <a class="py-toggle" href="#" id="EngineClient._set_writing-toggle" onclick="return toggle('EngineClient._set_writing');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing">_set_writing</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
274 </div><div id="EngineClient._set_writing-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._set_writing-expanded"><a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
275 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"><tt class="py-docstring"> Set writing state.</tt> </tt>
276 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
277 <a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.set_writing()=ClusterShell.Engine.Engine.Engine-class.html#set_writing"><a title="ClusterShell.Engine.Engine.Engine.set_writing" class="py-name" href="#" onclick="return doclink('link-11', 'set_writing', 'link-11');">set_writing</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
278 </div><a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> </tt>
279 <a name="EngineClient._read"></a><div id="EngineClient._read-def"><a name="L169"></a><tt class="py-lineno">169</tt> <a class="py-toggle" href="#" id="EngineClient._read-toggle" onclick="return toggle('EngineClient._read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_read">_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">size</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
280 </div><div id="EngineClient._read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._read-expanded"><a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
281 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"><tt class="py-docstring"> Read data from process.</tt> </tt>
282 <a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
283 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple.read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#read"><a title="ClusterShell.Worker.Worker.WorkerSimple.read" class="py-name" href="#" onclick="return doclink('link-12', 'read', 'link-12');">read</a></tt><tt class="py-op">(</tt><tt class="py-name">size</tt><tt class="py-op">)</tt> </tt>
284 <a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
285 <a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-13" class="py-name" targets="Class ClusterShell.Worker.EngineClient.EngineClientEOF=ClusterShell.Worker.EngineClient.EngineClientEOF-class.html"><a title="ClusterShell.Worker.EngineClient.EngineClientEOF" class="py-name" href="#" onclick="return doclink('link-13', 'EngineClientEOF', 'link-13');">EngineClientEOF</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
286 <a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._set_reading()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading"><a title="ClusterShell.Worker.EngineClient.EngineClient._set_reading" class="py-name" href="#" onclick="return doclink('link-14', '_set_reading', 'link-14');">_set_reading</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
287 <a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">result</tt> </tt>
288 </div><a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> </tt>
289 <a name="EngineClient._readerr"></a><div id="EngineClient._readerr-def"><a name="L179"></a><tt class="py-lineno">179</tt> <a class="py-toggle" href="#" id="EngineClient._readerr-toggle" onclick="return toggle('EngineClient._readerr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr">_readerr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">size</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
290 </div><div id="EngineClient._readerr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._readerr-expanded"><a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
291 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"><tt class="py-docstring"> Read error data from process.</tt> </tt>
292 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
293 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerSimple.read" class="py-name" href="#" onclick="return doclink('link-15', 'read', 'link-12');">read</a></tt><tt class="py-op">(</tt><tt class="py-name">size</tt><tt class="py-op">)</tt> </tt>
294 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
295 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-16" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClientEOF" class="py-name" href="#" onclick="return doclink('link-16', 'EngineClientEOF', 'link-13');">EngineClientEOF</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
296 <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-17" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._set_reading_error()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error"><a title="ClusterShell.Worker.EngineClient.EngineClient._set_reading_error" class="py-name" href="#" onclick="return doclink('link-17', '_set_reading_error', 'link-17');">_set_reading_error</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
297 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">result</tt> </tt>
298 </div><a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> </tt>
299 <a name="EngineClient._handle_read"></a><div id="EngineClient._handle_read-def"><a name="L189"></a><tt class="py-lineno">189</tt> <a class="py-toggle" href="#" id="EngineClient._handle_read-toggle" onclick="return toggle('EngineClient._handle_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read">_handle_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
300 </div><div id="EngineClient._handle_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._handle_read-expanded"><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
301 <a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"><tt class="py-docstring"> Handle a read notification. Called by the engine as the result of an</tt> </tt>
302 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-docstring"> event indicating that a read is available.</tt> </tt>
303 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
304 <a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
305 </div><a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> </tt>
306 <a name="EngineClient._handle_error"></a><div id="EngineClient._handle_error-def"><a name="L196"></a><tt class="py-lineno">196</tt> <a class="py-toggle" href="#" id="EngineClient._handle_error-toggle" onclick="return toggle('EngineClient._handle_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error">_handle_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
307 </div><div id="EngineClient._handle_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._handle_error-expanded"><a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
308 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"><tt class="py-docstring"> Handle a stderr read notification. Called by the engine as the result</tt> </tt>
309 <a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"><tt class="py-docstring"> of an event indicating that a read is available on stderr.</tt> </tt>
310 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
311 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
312 </div><a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> </tt>
313 <a name="EngineClient._handle_write"></a><div id="EngineClient._handle_write-def"><a name="L203"></a><tt class="py-lineno">203</tt> <a class="py-toggle" href="#" id="EngineClient._handle_write-toggle" onclick="return toggle('EngineClient._handle_write');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write">_handle_write</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
314 </div><div id="EngineClient._handle_write-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._handle_write-expanded"><a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
315 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"><tt class="py-docstring"> Handle a write notification. Called by the engine as the result of an</tt> </tt>
316 <a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"><tt class="py-docstring"> event indicating that a write can be performed now.</tt> </tt>
317 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
318 <a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
319 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-comment"># write syscall</tt> </tt>
320 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">c</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method ClusterShell.Worker.Pdsh.WorkerPdsh.write()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#write,Method ClusterShell.Worker.Ssh.WorkerSsh.write()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#write,Method ClusterShell.Worker.Worker.WorkerSimple.write()=ClusterShell.Worker.Worker.WorkerSimple-class.html#write"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
321 ClusterShell.Worker.Ssh.WorkerSsh.write
322 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-18', 'write', 'link-18');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</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">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt><tt class="py-op">)</tt> </tt>
323 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-comment"># dequeue written buffer</tt> </tt>
324 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt><tt class="py-op">[</tt><tt class="py-name">c</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
325 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-comment"># check for possible ending</tt> </tt>
326 <a name="L214"></a><tt class="py-lineno">214</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">_weof</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt><tt class="py-op">:</tt> </tt>
327 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._close_writer()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer"><a title="ClusterShell.Worker.EngineClient.EngineClient._close_writer" class="py-name" href="#" onclick="return doclink('link-19', '_close_writer', 'link-19');">_close_writer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
328 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
329 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._set_writing()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing"><a title="ClusterShell.Worker.EngineClient.EngineClient._set_writing" class="py-name" href="#" onclick="return doclink('link-20', '_set_writing', 'link-20');">_set_writing</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
330 </div><a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> </tt>
331 <a name="EngineClient._exec_nonblock"></a><div id="EngineClient._exec_nonblock-def"><a name="L219"></a><tt class="py-lineno">219</tt> <a class="py-toggle" href="#" id="EngineClient._exec_nonblock-toggle" onclick="return toggle('EngineClient._exec_nonblock');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock">_exec_nonblock</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">commandlist</tt><tt class="py-op">,</tt> <tt class="py-param">shell</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">env</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
332 </div><div id="EngineClient._exec_nonblock-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._exec_nonblock-expanded"><a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
333 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"><tt class="py-docstring"> Utility method to launch a command with stdin/stdout file</tt> </tt>
334 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"><tt class="py-docstring"> descriptors configured in non-blocking mode.</tt> </tt>
335 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
336 <a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-name">full_env</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
337 <a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">env</tt><tt class="py-op">:</tt> </tt>
338 <a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-name">full_env</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name" targets="Method ClusterShell.Task.Task.copy()=ClusterShell.Task.Task-class.html#copy"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-21', 'copy', 'link-21');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
339 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">full_env</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.update()=ClusterShell.NodeSet.NodeSet-class.html#update,Method ClusterShell.NodeSet.NodeSetBase.update()=ClusterShell.NodeSet.NodeSetBase-class.html#update,Method ClusterShell.NodeSet.RangeSet.update()=ClusterShell.NodeSet.RangeSet-class.html#update,Method clush.RunTimer.update()=clush.RunTimer-class.html#update"><a title="ClusterShell.NodeSet.NodeSet.update
340 ClusterShell.NodeSet.NodeSetBase.update
341 ClusterShell.NodeSet.RangeSet.update
342 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-22', 'update', 'link-22');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">env</tt><tt class="py-op">)</tt> </tt>
343 <a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> </tt>
344 <a name="L229"></a><tt class="py-lineno">229</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>
345 <a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-name">stderr_setup</tt> <tt class="py-op">=</tt> <tt class="py-name">PIPE</tt> </tt>
346 <a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
347 <a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-name">stderr_setup</tt> <tt class="py-op">=</tt> <tt class="py-name">STDOUT</tt> </tt>
348 <a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> </tt>
349 <a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-comment"># Launch process in non-blocking mode</tt> </tt>
350 <a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-name">proc</tt> <tt class="py-op">=</tt> <tt id="link-23" class="py-name"><a title="ClusterShell.Worker.Popen" class="py-name" href="#" onclick="return doclink('link-23', 'Popen', 'link-0');">Popen</a></tt><tt class="py-op">(</tt><tt class="py-name">commandlist</tt><tt class="py-op">,</tt> <tt class="py-name">bufsize</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">stdin</tt><tt class="py-op">=</tt><tt class="py-name">PIPE</tt><tt class="py-op">,</tt> <tt class="py-name">stdout</tt><tt class="py-op">=</tt><tt class="py-name">PIPE</tt><tt class="py-op">,</tt> </tt>
351 <a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">stderr</tt><tt class="py-op">=</tt><tt class="py-name">stderr_setup</tt><tt class="py-op">,</tt> <tt class="py-name">close_fds</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt id="link-24" class="py-name" targets="Method ClusterShell.Task.Task.shell()=ClusterShell.Task.Task-class.html#shell"><a title="ClusterShell.Task.Task.shell" class="py-name" href="#" onclick="return doclink('link-24', 'shell', 'link-24');">shell</a></tt><tt class="py-op">=</tt><tt id="link-25" class="py-name"><a title="ClusterShell.Task.Task.shell" class="py-name" href="#" onclick="return doclink('link-25', 'shell', 'link-24');">shell</a></tt><tt class="py-op">,</tt> <tt class="py-name">env</tt><tt class="py-op">=</tt><tt class="py-name">full_env</tt><tt class="py-op">)</tt> </tt>
352 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> </tt>
353 <a name="L238"></a><tt class="py-lineno">238</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>
354 <a name="L239"></a><tt class="py-lineno">239</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">proc</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>
355 <a name="L240"></a><tt class="py-lineno">240</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">proc</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_GETFL</tt><tt class="py-op">)</tt> <tt class="py-op">|</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NDELAY</tt><tt class="py-op">)</tt> </tt>
356 <a name="L241"></a><tt class="py-lineno">241</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">proc</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>
357 <a name="L242"></a><tt class="py-lineno">242</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">proc</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_GETFL</tt><tt class="py-op">)</tt> <tt class="py-op">|</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NDELAY</tt><tt class="py-op">)</tt> </tt>
358 <a name="L243"></a><tt class="py-lineno">243</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">proc</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>
359 <a name="L244"></a><tt class="py-lineno">244</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">proc</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_GETFL</tt><tt class="py-op">)</tt> <tt class="py-op">|</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NDELAY</tt><tt class="py-op">)</tt> </tt>
360 <a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> </tt>
361 <a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">proc</tt> </tt>
362 </div><a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> </tt>
363 <a name="EngineClient._readlines"></a><div id="EngineClient._readlines-def"><a name="L248"></a><tt class="py-lineno">248</tt> <a class="py-toggle" href="#" id="EngineClient._readlines-toggle" onclick="return toggle('EngineClient._readlines');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines">_readlines</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
364 </div><div id="EngineClient._readlines-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._readlines-expanded"><a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
365 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"><tt class="py-docstring"> Utility method to read client lines</tt> </tt>
366 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
367 <a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-comment"># read a chunk of data, may raise eof</tt> </tt>
368 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-name">readbuf</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._read()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_read,Method ClusterShell.Worker.EngineClient.EnginePort._read()=ClusterShell.Worker.EngineClient.EnginePort-class.html#_read,Method ClusterShell.Worker.Worker.WorkerSimple._read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_read"><a title="ClusterShell.Worker.EngineClient.EngineClient._read
369 ClusterShell.Worker.EngineClient.EnginePort._read
370 ClusterShell.Worker.Worker.WorkerSimple._read" class="py-name" href="#" onclick="return doclink('link-26', '_read', 'link-26');">_read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
371 <a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">readbuf</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-string">"assertion failed: len(readbuf) &gt; 0"</tt> </tt>
372 <a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> </tt>
373 <a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-comment"># Current version implements line-buffered reads. If needed, we could</tt> </tt>
374 <a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-comment"># easily provide direct, non-buffered, data reads in the future.</tt> </tt>
375 <a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> </tt>
376 <a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-name">buf</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt> <tt class="py-op">+</tt> <tt class="py-name">readbuf</tt> </tt>
377 <a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt id="link-27" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.lines()=ClusterShell.MsgTree.MsgTreeElem-class.html#lines"><a title="ClusterShell.MsgTree.MsgTreeElem.lines" class="py-name" href="#" onclick="return doclink('link-27', 'lines', 'link-27');">lines</a></tt> <tt class="py-op">=</tt> <tt class="py-name">buf</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
378 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
379 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt id="link-28" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.lines" class="py-name" href="#" onclick="return doclink('link-28', 'lines', 'link-27');">lines</a></tt><tt class="py-op">:</tt> </tt>
380 <a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
381 <a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
382 <a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">line</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> <tt class="py-comment"># trim CRLF</tt> </tt>
383 <a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
384 <a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-comment"># trim LF</tt> </tt>
385 <a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">line</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-comment"># trim LF</tt> </tt>
386 <a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
387 <a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-comment"># keep partial line in buffer</tt> </tt>
388 <a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt> </tt>
389 </div><a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-comment"># breaking here</tt> </tt>
390 <a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> </tt>
391 <a name="EngineClient._readerrlines"></a><div id="EngineClient._readerrlines-def"><a name="L274"></a><tt class="py-lineno">274</tt> <a class="py-toggle" href="#" id="EngineClient._readerrlines-toggle" onclick="return toggle('EngineClient._readerrlines');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines">_readerrlines</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
392 </div><div id="EngineClient._readerrlines-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._readerrlines-expanded"><a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
393 <a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"><tt class="py-docstring"> Utility method to read client lines</tt> </tt>
394 <a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
395 <a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-comment"># read a chunk of data, may raise eof</tt> </tt>
396 <a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-name">readerrbuf</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._readerr()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr,Method ClusterShell.Worker.Worker.WorkerSimple._readerr()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_readerr"><a title="ClusterShell.Worker.EngineClient.EngineClient._readerr
397 ClusterShell.Worker.Worker.WorkerSimple._readerr" class="py-name" href="#" onclick="return doclink('link-29', '_readerr', 'link-29');">_readerr</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
398 <a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">readerrbuf</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-string">"assertion failed: len(readerrbuf) &gt; 0"</tt> </tt>
399 <a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> </tt>
400 <a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-name">buf</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ebuf</tt> <tt class="py-op">+</tt> <tt class="py-name">readerrbuf</tt> </tt>
401 <a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt id="link-30" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.lines" class="py-name" href="#" onclick="return doclink('link-30', 'lines', 'link-27');">lines</a></tt> <tt class="py-op">=</tt> <tt class="py-name">buf</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
402 <a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ebuf</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
403 <a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt id="link-31" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.lines" class="py-name" href="#" onclick="return doclink('link-31', 'lines', 'link-27');">lines</a></tt><tt class="py-op">:</tt> </tt>
404 <a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
405 <a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
406 <a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">line</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> <tt class="py-comment"># trim CRLF</tt> </tt>
407 <a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
408 <a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-comment"># trim LF</tt> </tt>
409 <a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">line</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-comment"># trim LF</tt> </tt>
410 <a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
411 <a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt class="py-comment"># keep partial line in buffer</tt> </tt>
412 <a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ebuf</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt> </tt>
413 </div><a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-comment"># breaking here</tt> </tt>
414 <a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> </tt>
415 <a name="EngineClient._write"></a><div id="EngineClient._write-def"><a name="L297"></a><tt class="py-lineno">297</tt> <a class="py-toggle" href="#" id="EngineClient._write-toggle" onclick="return toggle('EngineClient._write');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_write">_write</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">buf</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
416 </div><div id="EngineClient._write-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._write-expanded"><a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
417 <a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"><tt class="py-docstring"> Add some data to be written to the client.</tt> </tt>
418 <a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
419 <a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient.writer_fileno()=ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno,Method ClusterShell.Worker.Worker.WorkerSimple.writer_fileno()=ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
420 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-32', 'writer_fileno', 'link-32');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
421 <a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt><tt class="py-op">:</tt> </tt>
422 <a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">closed</tt> </tt>
423 <a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-comment"># TODO: write now if ready</tt> </tt>
424 <a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt> <tt class="py-op">+=</tt> <tt class="py-name">buf</tt> </tt>
425 <a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient._set_writing" class="py-name" href="#" onclick="return doclink('link-33', '_set_writing', 'link-20');">_set_writing</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
426 <a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
427 <a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-comment"># bufferize until pipe is ready</tt> </tt>
428 <a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt> <tt class="py-op">+=</tt> <tt class="py-name">buf</tt> </tt>
429 </div><a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> </tt>
430 <a name="EngineClient._set_write_eof"></a><div id="EngineClient._set_write_eof-def"><a name="L311"></a><tt class="py-lineno">311</tt> <a class="py-toggle" href="#" id="EngineClient._set_write_eof-toggle" onclick="return toggle('EngineClient._set_write_eof');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof">_set_write_eof</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
431 </div><div id="EngineClient._set_write_eof-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._set_write_eof-expanded"><a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_weof</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
432 <a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_wbuf</tt><tt class="py-op">:</tt> </tt>
433 <a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-comment"># sendq empty, try to close writer now</tt> </tt>
434 <a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient._close_writer" class="py-name" href="#" onclick="return doclink('link-34', '_close_writer', 'link-19');">_close_writer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
435 </div><a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> </tt>
436 <a name="EngineClient._close_writer"></a><div id="EngineClient._close_writer-def"><a name="L317"></a><tt class="py-lineno">317</tt> <a class="py-toggle" href="#" id="EngineClient._close_writer-toggle" onclick="return toggle('EngineClient._close_writer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer">_close_writer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
437 </div><div id="EngineClient._close_writer-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EngineClient._close_writer-expanded"><a name="L318"></a><tt class="py-lineno">318</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">file_writer</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">closed</tt><tt class="py-op">:</tt> </tt>
438 <a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.unregister_writer()=ClusterShell.Engine.Engine.Engine-class.html#unregister_writer"><a title="ClusterShell.Engine.Engine.Engine.unregister_writer" class="py-name" href="#" onclick="return doclink('link-35', 'unregister_writer', 'link-35');">unregister_writer</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
439 <a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
440 <a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
441 </div></div><a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> </tt>
442 <a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> </tt>
443 <a name="EnginePort"></a><div id="EnginePort-def"><a name="L324"></a><tt class="py-lineno">324</tt> <a class="py-toggle" href="#" id="EnginePort-toggle" onclick="return toggle('EnginePort');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a><tt class="py-op">(</tt><tt class="py-base-class">EngineClient</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
444 </div><div id="EnginePort-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EnginePort-expanded"><a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
445 <a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"><tt class="py-docstring"> An EnginePort is an abstraction object to deliver messages</tt> </tt>
446 <a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"><tt class="py-docstring"> reliably between tasks.</tt> </tt>
447 <a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
448 <a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> </tt>
449 <a name="EnginePort._Msg"></a><div id="EnginePort._Msg-def"><a name="L330"></a><tt class="py-lineno">330</tt> <a class="py-toggle" href="#" id="EnginePort._Msg-toggle" onclick="return toggle('EnginePort._Msg');">-</a><tt class="py-line"> <tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html">_Msg</a><tt class="py-op">:</tt> </tt>
450 </div><div id="EnginePort._Msg-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePort._Msg-expanded"><a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-docstring">"""Private class representing a port message.</tt> </tt>
451 <a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
452 <a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"><tt class="py-docstring"> A port message may be any Python object.</tt> </tt>
453 <a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
454 <a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> </tt>
455 <a name="EnginePort._Msg.__init__"></a><div id="EnginePort._Msg.__init__-def"><a name="L336"></a><tt class="py-lineno">336</tt> <a class="py-toggle" href="#" id="EnginePort._Msg.__init__-toggle" onclick="return toggle('EnginePort._Msg.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort._Msg-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">user_msg</tt><tt class="py-op">,</tt> <tt class="py-param">sync</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
456 </div><div id="EnginePort._Msg.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="EnginePort._Msg.__init__-expanded"><a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_user_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">user_msg</tt> </tt>
457 <a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sync_msg</tt> <tt class="py-op">=</tt> <tt id="link-36" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort._Msg.sync()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#sync"><a title="ClusterShell.Worker.EngineClient.EnginePort._Msg.sync" class="py-name" href="#" onclick="return doclink('link-36', 'sync', 'link-36');">sync</a></tt> </tt>
458 <a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reply_lock</tt> <tt class="py-op">=</tt> <tt class="py-name">thread</tt><tt class="py-op">.</tt><tt class="py-name">allocate_lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
459 <a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reply_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
460 </div><a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> </tt>
461 <a name="EnginePort._Msg.get"></a><div id="EnginePort._Msg.get-def"><a name="L342"></a><tt class="py-lineno">342</tt> <a class="py-toggle" href="#" id="EnginePort._Msg.get-toggle" onclick="return toggle('EnginePort._Msg.get');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
462 </div><div id="EnginePort._Msg.get-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="EnginePort._Msg.get-expanded"><a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
463 <a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"><tt class="py-docstring"> Get and acknowledge message.</tt> </tt>
464 <a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
465 <a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reply_lock</tt><tt class="py-op">.</tt><tt class="py-name">release</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
466 <a name="L347"></a><tt class="py-lineno">347</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">_user_msg</tt> </tt>
467 </div><a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> </tt>
468 <a name="EnginePort._Msg.sync"></a><div id="EnginePort._Msg.sync-def"><a name="L349"></a><tt class="py-lineno">349</tt> <a class="py-toggle" href="#" id="EnginePort._Msg.sync-toggle" onclick="return toggle('EnginePort._Msg.sync');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#sync">sync</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
469 </div><div id="EnginePort._Msg.sync-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="EnginePort._Msg.sync-expanded"><a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
470 <a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"><tt class="py-docstring"> Wait for message acknowledgment if needed.</tt> </tt>
471 <a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
472 <a name="L353"></a><tt class="py-lineno">353</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">_sync_msg</tt><tt class="py-op">:</tt> </tt>
473 <a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reply_lock</tt><tt class="py-op">.</tt><tt class="py-name">acquire</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
474 </div></div><a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> </tt>
475 <a name="EnginePort.__init__"></a><div id="EnginePort.__init__-def"><a name="L356"></a><tt class="py-lineno">356</tt> <a class="py-toggle" href="#" id="EnginePort.__init__-toggle" onclick="return toggle('EnginePort.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort-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">task</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
476 </div><div id="EnginePort.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePort.__init__-expanded"><a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
477 <a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"><tt class="py-docstring"> Initialize EnginePort object.</tt> </tt>
478 <a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
479 <a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt id="link-37" class="py-name" targets="Module ClusterShell.Worker.EngineClient=ClusterShell.Worker.EngineClient-module.html,Class ClusterShell.Worker.EngineClient.EngineClient=ClusterShell.Worker.EngineClient.EngineClient-class.html"><a title="ClusterShell.Worker.EngineClient
480 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-37', 'EngineClient', 'link-37');">EngineClient</a></tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
481 ClusterShell.Engine.Engine.Engine.__init__
482 ClusterShell.Engine.Engine.EngineAbortException.__init__
483 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
484 ClusterShell.Engine.Engine.EngineTimer.__init__
485 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
486 ClusterShell.Engine.Engine._EngineTimerQ.__init__
487 ClusterShell.Engine.Poll.EnginePoll.__init__
488 ClusterShell.MsgTree.MsgTree.__init__
489 ClusterShell.MsgTree.MsgTreeElem.__init__
490 ClusterShell.NodeSet.NodeSet.__init__
491 ClusterShell.NodeSet.NodeSetBase.__init__
492 ClusterShell.NodeSet.NodeSetParseError.__init__
493 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
494 ClusterShell.NodeSet.ParsingEngine.__init__
495 ClusterShell.NodeSet.RangeSet.__init__
496 ClusterShell.NodeSet.RangeSetPaddingError.__init__
497 ClusterShell.NodeSet.RangeSetParseError.__init__
498 ClusterShell.NodeUtils.GroupResolver.__init__
499 ClusterShell.NodeUtils.GroupResolverConfig.__init__
500 ClusterShell.NodeUtils.GroupSource.__init__
501 ClusterShell.NodeUtils.GroupSourceException.__init__
502 ClusterShell.Task.Task._SuspendCondition.__init__
503 ClusterShell.Task.Task.__init__
504 ClusterShell.Task._TaskMsgTree.__init__
505 ClusterShell.Worker.EngineClient.EngineClient.__init__
506 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
507 ClusterShell.Worker.EngineClient.EnginePort.__init__
508 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
509 ClusterShell.Worker.Popen.WorkerPopen.__init__
510 ClusterShell.Worker.Ssh.Scp.__init__
511 ClusterShell.Worker.Ssh.Ssh.__init__
512 ClusterShell.Worker.Ssh.WorkerSsh.__init__
513 ClusterShell.Worker.Worker.DistantWorker.__init__
514 ClusterShell.Worker.Worker.Worker.__init__
515 ClusterShell.Worker.Worker.WorkerSimple.__init__
516 clubak.Display.__init__
517 clush.ClushConfig.__init__
518 clush.ClushConfigError.__init__
519 clush.DirectOutputHandler.__init__
520 clush.Display.__init__
521 clush.GatherOutputHandler.__init__
522 clush.RunTimer.__init__
523 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-38', '__init__', 'link-6');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt> </tt>
524 <a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt> </tt>
525 <a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt> <tt class="py-op">=</tt> <tt class="py-name">handler</tt> </tt>
526 <a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-comment"># ports are no subject to fanout</tt> </tt>
527 <a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">delayable</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
528 <a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> </tt>
529 <a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-comment"># Port messages queue</tt> </tt>
530 <a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgq</tt> <tt class="py-op">=</tt> <tt class="py-name">Queue</tt><tt class="py-op">.</tt><tt class="py-name">Queue</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method ClusterShell.Task.Task.default()=ClusterShell.Task.Task-class.html#default"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-39', 'default', 'link-39');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"port_qlimit"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
531 <a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> </tt>
532 <a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-comment"># Request pipe</tt> </tt>
533 <a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">readfd</tt><tt class="py-op">,</tt> <tt class="py-name">writefd</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
534 <a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-comment"># Use file objects instead of FD for convenience</tt> </tt>
535 <a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">fdopen</tt><tt class="py-op">(</tt><tt class="py-name">readfd</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
536 <a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">fdopen</tt><tt class="py-op">(</tt><tt class="py-name">writefd</tt><tt class="py-op">,</tt> <tt class="py-string">'w'</tt><tt class="py-op">)</tt> </tt>
537 <a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-comment"># Set nonblocking flag</tt> </tt>
538 <a name="L375"></a><tt class="py-lineno">375</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">readfd</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>
539 <a name="L376"></a><tt class="py-lineno">376</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">readfd</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_GETFL</tt><tt class="py-op">)</tt> <tt class="py-op">|</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NDELAY</tt><tt class="py-op">)</tt> </tt>
540 <a name="L377"></a><tt class="py-lineno">377</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">writefd</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>
541 <a name="L378"></a><tt class="py-lineno">378</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">writefd</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_GETFL</tt><tt class="py-op">)</tt> <tt class="py-op">|</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NDELAY</tt><tt class="py-op">)</tt> </tt>
542 </div><a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> </tt>
543 <a name="EnginePort._start"></a><div id="EnginePort._start-def"><a name="L380"></a><tt class="py-lineno">380</tt> <a class="py-toggle" href="#" id="EnginePort._start-toggle" onclick="return toggle('EnginePort._start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_start">_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
544 </div><div id="EnginePort._start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePort._start-expanded"><a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
545 </div><a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> </tt>
546 <a name="EnginePort._close"></a><div id="EnginePort._close-def"><a name="L383"></a><tt class="py-lineno">383</tt> <a class="py-toggle" href="#" id="EnginePort._close-toggle" onclick="return toggle('EnginePort._close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_close">_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
547 </div><div id="EnginePort._close-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePort._close-expanded"><a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
548 <a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"><tt class="py-docstring"> Close port pipes.</tt> </tt>
549 <a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
550 <a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgq</tt><tt class="py-op">.</tt><tt class="py-name">empty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
551 <a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-comment"># purge msgq</tt> </tt>
552 <a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
553 <a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgq</tt><tt class="py-op">.</tt><tt class="py-name">empty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
554 <a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-name">pmsg</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgq</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
555 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-40', 'get', 'link-40');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">block</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
556 <a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-41', 'info', 'link-41');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> </tt>
557 <a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> <tt class="py-string">"EnginePort: dropped msg: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">pmsg</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
558 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-42', 'get', 'link-40');">get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
559 <a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Queue</tt><tt class="py-op">.</tt><tt class="py-name">Empty</tt><tt class="py-op">:</tt> </tt>
560 <a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
561 <a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgq</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
562 <a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
563 <a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
564 </div><a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> </tt>
565 <a name="EnginePort._read"></a><div id="EnginePort._read-def"><a name="L400"></a><tt class="py-lineno">400</tt> <a class="py-toggle" href="#" id="EnginePort._read-toggle" onclick="return toggle('EnginePort._read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_read">_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">size</tt><tt class="py-op">=</tt><tt class="py-number">4096</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
566 </div><div id="EnginePort._read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePort._read-expanded"><a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
567 <a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"><tt class="py-docstring"> Read data from pipe.</tt> </tt>
568 <a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
569 <a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-43" class="py-name"><a title="ClusterShell.Worker.EngineClient
570 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-43', 'EngineClient', 'link-37');">EngineClient</a></tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient._read
571 ClusterShell.Worker.EngineClient.EnginePort._read
572 ClusterShell.Worker.Worker.WorkerSimple._read" class="py-name" href="#" onclick="return doclink('link-44', '_read', 'link-26');">_read</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">size</tt><tt class="py-op">)</tt> </tt>
573 </div><a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> </tt>
574 <a name="EnginePort._handle_read"></a><div id="EnginePort._handle_read-def"><a name="L406"></a><tt class="py-lineno">406</tt> <a class="py-toggle" href="#" id="EnginePort._handle_read-toggle" onclick="return toggle('EnginePort._handle_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_handle_read">_handle_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
575 </div><div id="EnginePort._handle_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePort._handle_read-expanded"><a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
576 <a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"><tt class="py-docstring"> Handle a read notification. Called by the engine as the result of an</tt> </tt>
577 <a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"><tt class="py-docstring"> event indicating that a read is available.</tt> </tt>
578 <a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
579 <a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-name">readbuf</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient._read
580 ClusterShell.Worker.EngineClient.EnginePort._read
581 ClusterShell.Worker.Worker.WorkerSimple._read" class="py-name" href="#" onclick="return doclink('link-45', '_read', 'link-26');">_read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
582 <a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">readbuf</tt><tt class="py-op">:</tt> </tt>
583 <a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-comment"># raise Empty if empty (should never happen)</tt> </tt>
584 <a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-name">pmsg</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgq</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
585 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-46', 'get', 'link-40');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">block</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
586 <a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method ClusterShell.Event.EventHandler.ev_msg()=ClusterShell.Event.EventHandler-class.html#ev_msg,Method ClusterShell.Task.Task._SyncMsgHandler.ev_msg()=ClusterShell.Task.Task._SyncMsgHandler-class.html#ev_msg"><a title="ClusterShell.Event.EventHandler.ev_msg
587 ClusterShell.Task.Task._SyncMsgHandler.ev_msg" class="py-name" href="#" onclick="return doclink('link-47', 'ev_msg', 'link-47');">ev_msg</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">pmsg</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
588 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-48', 'get', 'link-40');">get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
589 </div><a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> </tt>
590 <a name="EnginePort.msg"></a><div id="EnginePort.msg-def"><a name="L417"></a><tt class="py-lineno">417</tt> <a class="py-toggle" href="#" id="EnginePort.msg-toggle" onclick="return toggle('EnginePort.msg');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#msg">msg</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">send_msg</tt><tt class="py-op">,</tt> <tt class="py-param">send_once</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
591 </div><div id="EnginePort.msg-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePort.msg-expanded"><a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
592 <a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"><tt class="py-docstring"> Port message send with optional reply.</tt> </tt>
593 <a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
594 <a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-name">pmsg</tt> <tt class="py-op">=</tt> <tt id="link-49" class="py-name" targets="Class ClusterShell.Worker.EngineClient.EnginePort=ClusterShell.Worker.EngineClient.EnginePort-class.html"><a title="ClusterShell.Worker.EngineClient.EnginePort" class="py-name" href="#" onclick="return doclink('link-49', 'EnginePort', 'link-49');">EnginePort</a></tt><tt class="py-op">.</tt><tt id="link-50" class="py-name" targets="Class ClusterShell.Worker.EngineClient.EnginePort._Msg=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html"><a title="ClusterShell.Worker.EngineClient.EnginePort._Msg" class="py-name" href="#" onclick="return doclink('link-50', '_Msg', 'link-50');">_Msg</a></tt><tt class="py-op">(</tt><tt class="py-name">send_msg</tt><tt class="py-op">,</tt> <tt class="py-keyword">not</tt> <tt class="py-name">send_once</tt><tt class="py-op">)</tt> </tt>
595 <a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_msgq</tt><tt class="py-op">.</tt><tt class="py-name">put</tt><tt class="py-op">(</tt><tt class="py-name">pmsg</tt><tt class="py-op">,</tt> <tt class="py-name">block</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
596 <a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> </tt>
597 <a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
598 <a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-name">ret</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
599 ClusterShell.Worker.Ssh.WorkerSsh.write
600 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-51', 'write', 'link-18');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient.writer_fileno
601 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno" class="py-name" href="#" onclick="return doclink('link-52', 'writer_fileno', 'link-32');">writer_fileno</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">"M"</tt><tt class="py-op">)</tt> </tt>
602 <a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OSError</tt><tt class="py-op">:</tt> </tt>
603 <a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
604 <a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> </tt>
605 <a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-name">pmsg</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort._Msg.sync" class="py-name" href="#" onclick="return doclink('link-53', 'sync', 'link-36');">sync</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
606 <a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ret</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt> </tt>
607 </div><a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> </tt>
608 <a name="EnginePort.msg_send"></a><div id="EnginePort.msg_send-def"><a name="L432"></a><tt class="py-lineno">432</tt> <a class="py-toggle" href="#" id="EnginePort.msg_send-toggle" onclick="return toggle('EnginePort.msg_send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#msg_send">msg_send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">send_msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
609 </div><div id="EnginePort.msg_send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EnginePort.msg_send-expanded"><a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
610 <a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"><tt class="py-docstring"> Port message send-once method (no reply).</tt> </tt>
611 <a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
612 <a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-54', 'msg', 'link-54');">msg</a></tt><tt class="py-op">(</tt><tt class="py-name">send_msg</tt><tt class="py-op">,</tt> <tt class="py-name">send_once</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
613 </div></div><a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> </tt><script type="text/javascript">
614 <!--
615 expandto(location.href);
616 // -->
617 </script>
618 </pre>
619 <br />
620 <!-- ==================== NAVIGATION BAR ==================== -->
621 <table class="navbar" border="0" width="100%" cellpadding="0"
622 bgcolor="#a0c0ff" cellspacing="0">
623 <tr valign="middle">
624
625 <!-- Tree link -->
626 <th>&nbsp;&nbsp;&nbsp;<a
627 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
628
629 <!-- Index link -->
630 <th>&nbsp;&nbsp;&nbsp;<a
631 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
632
633 <!-- Help link -->
634 <th>&nbsp;&nbsp;&nbsp;<a
635 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
636
637 <!-- Project homepage -->
638 <th class="navbar" align="right" width="100%">
639 <table border="0" cellpadding="0" cellspacing="0">
640 <tr><th class="navbar" align="center"
641 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
642 </tr></table></th>
643 </tr>
644 </table>
645 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
646 <tr>
647 <td align="left" class="footer">
648 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
649 </td>
650 <td align="right" class="footer">
651 <a target="mainFrame" href="http://epydoc.sourceforge.net"
652 >http://epydoc.sourceforge.net</a>
653 </td>
654 </tr>
655 </table>
656
657 <script type="text/javascript">
658 <!--
659 // Private objects are initially displayed (because if
660 // javascript is turned off then we want them to be
661 // visible); but by default, we want to hide them. So hide
662 // them unless we have a cookie that says to show them.
663 checkCookie();
664 // -->
665 </script>
666 </body>
667 </html>
+0
-703
doc/epydoc/html/ClusterShell.Worker.EngineClient.EngineClient-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient.EngineClient</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.EngineClient-module.html">Module&nbsp;EngineClient</a> ::
44 Class&nbsp;EngineClient
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineClient</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_47" name="uml_class_diagram_for_clusters_47">
64 <area shape="rect" id="node172" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="163,39,400,57"/>
65 <area shape="rect" id="node172" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="163,57,400,76"/>
66 <area shape="rect" id="node172" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="163,76,400,95"/>
67 <area shape="rect" id="node1" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="151,6,412,101"/>
68 <area shape="rect" id="node171" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__" title="Initializer." alt="" coords="139,153,423,172"/>
69 <area shape="rect" id="node171" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno" title="Return the standard error reader file descriptor as an integer." alt="" coords="139,172,423,191"/>
70 <area shape="rect" id="node171" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno" title="Return the reader file descriptor as an integer." alt="" coords="139,191,423,209"/>
71 <area shape="rect" id="node171" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno" title="Return the writer file descriptor as an integer." alt="" coords="139,209,423,228"/>
72 <area shape="rect" id="node6" href="ClusterShell.Worker.EngineClient.EngineClient-class.html" title="Abstract class EngineClient." alt="" coords="127,121,433,234"/>
73 <area shape="rect" id="node2" href="ClusterShell.Worker.Ssh.Ssh-class.html" title="Ssh EngineClient." alt="" coords="5,254,91,293"/>
74 <area shape="rect" id="node5" href="ClusterShell.Worker.Ssh.Scp-class.html" title="Scp EngineClient." alt="" coords="5,313,91,351"/>
75 <area shape="rect" id="node3" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html" title="ClusterShell pdsh&#45;based worker Class." alt="" coords="120,254,261,293"/>
76 <area shape="rect" id="node4" href="ClusterShell.Worker.Popen.WorkerPopen-class.html" title="Implements the Popen Worker." alt="" coords="295,313,452,351"/>
77 <area shape="rect" id="node7" href="ClusterShell.Worker.Worker.WorkerSimple-class.html" title="Implements a simple Worker being itself an EngineClient." alt="" coords="291,254,456,293"/>
78 <area shape="rect" id="node8" href="ClusterShell.Worker.EngineClient.EnginePort-class.html" title="An EnginePort is an abstraction object to deliver messages reliably between tasks." alt="" coords="485,254,587,293"/>
79 </map>
80 <img src="uml_class_diagram_for_clusters_47.png" alt='' usemap="#uml_class_diagram_for_clusters_47" ismap="ismap" class="graph-without-title" />
81 </center>
82 </center>
83 <hr />
84 <p>Abstract class EngineClient.</p>
85
86 <!-- ==================== INSTANCE METHODS ==================== -->
87 <a name="section-InstanceMethods"></a>
88 <table class="summary" border="1" cellpadding="3"
89 cellspacing="0" width="100%" bgcolor="white">
90 <tr bgcolor="#70b0f0" class="table-header">
91 <td colspan="2" class="table-header">
92 <table border="0" cellpadding="0" cellspacing="0" width="100%">
93 <tr valign="top">
94 <td align="left"><span class="table-header">Instance Methods</span></td>
95 <td align="right" valign="top"
96 ><span class="options">[<a href="#section-InstanceMethods"
97 class="privatelink" onclick="toggle_private();"
98 >hide private</a>]</span></td>
99 </tr>
100 </table>
101 </td>
102 </tr>
103 <tr>
104 <td width="15%" align="right" valign="top" class="summary">
105 <span class="summary-type">&nbsp;</span>
106 </td><td class="summary">
107 <table width="100%" cellpadding="0" cellspacing="0" border="0">
108 <tr>
109 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
110 <span class="summary-sig-arg">worker</span>,
111 <span class="summary-sig-arg">stderr</span>,
112 <span class="summary-sig-arg">timeout</span>,
113 <span class="summary-sig-arg">autoclose</span>)</span><br />
114 Initializer.</td>
115 <td align="right" valign="top">
116 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient.__init__">source&nbsp;code</a></span>
117
118 </td>
119 </tr>
120 </table>
121
122 </td>
123 </tr>
124 <tr class="private">
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type">&nbsp;</span>
127 </td><td class="summary">
128 <table width="100%" cellpadding="0" cellspacing="0" border="0">
129 <tr>
130 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire" class="summary-sig-name" onclick="show_private();">_fire</a>(<span class="summary-sig-arg">self</span>)</span><br />
131 Fire timeout timer.</td>
132 <td align="right" valign="top">
133 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._fire">source&nbsp;code</a></span>
134
135 </td>
136 </tr>
137 </table>
138
139 </td>
140 </tr>
141 <tr class="private">
142 <td width="15%" align="right" valign="top" class="summary">
143 <span class="summary-type">&nbsp;</span>
144 </td><td class="summary">
145 <table width="100%" cellpadding="0" cellspacing="0" border="0">
146 <tr>
147 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start" class="summary-sig-name" onclick="show_private();">_start</a>(<span class="summary-sig-arg">self</span>)</span><br />
148 Starts client and returns client instance as a convenience.</td>
149 <td align="right" valign="top">
150 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._start">source&nbsp;code</a></span>
151
152 </td>
153 </tr>
154 </table>
155
156 </td>
157 </tr>
158 <tr>
159 <td width="15%" align="right" valign="top" class="summary">
160 <span class="summary-type">&nbsp;</span>
161 </td><td class="summary">
162 <table width="100%" cellpadding="0" cellspacing="0" border="0">
163 <tr>
164 <td><span class="summary-sig"><a name="error_fileno"></a><span class="summary-sig-name">error_fileno</span>(<span class="summary-sig-arg">self</span>)</span><br />
165 Return the standard error reader file descriptor as an integer.</td>
166 <td align="right" valign="top">
167 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient.error_fileno">source&nbsp;code</a></span>
168
169 </td>
170 </tr>
171 </table>
172
173 </td>
174 </tr>
175 <tr>
176 <td width="15%" align="right" valign="top" class="summary">
177 <span class="summary-type">&nbsp;</span>
178 </td><td class="summary">
179 <table width="100%" cellpadding="0" cellspacing="0" border="0">
180 <tr>
181 <td><span class="summary-sig"><a name="reader_fileno"></a><span class="summary-sig-name">reader_fileno</span>(<span class="summary-sig-arg">self</span>)</span><br />
182 Return the reader file descriptor as an integer.</td>
183 <td align="right" valign="top">
184 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient.reader_fileno">source&nbsp;code</a></span>
185
186 </td>
187 </tr>
188 </table>
189
190 </td>
191 </tr>
192 <tr>
193 <td width="15%" align="right" valign="top" class="summary">
194 <span class="summary-type">&nbsp;</span>
195 </td><td class="summary">
196 <table width="100%" cellpadding="0" cellspacing="0" border="0">
197 <tr>
198 <td><span class="summary-sig"><a name="writer_fileno"></a><span class="summary-sig-name">writer_fileno</span>(<span class="summary-sig-arg">self</span>)</span><br />
199 Return the writer file descriptor as an integer.</td>
200 <td align="right" valign="top">
201 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient.writer_fileno">source&nbsp;code</a></span>
202
203 </td>
204 </tr>
205 </table>
206
207 </td>
208 </tr>
209 <tr class="private">
210 <td width="15%" align="right" valign="top" class="summary">
211 <span class="summary-type">&nbsp;</span>
212 </td><td class="summary">
213 <table width="100%" cellpadding="0" cellspacing="0" border="0">
214 <tr>
215 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close" class="summary-sig-name" onclick="show_private();">_close</a>(<span class="summary-sig-arg">self</span>,
216 <span class="summary-sig-arg">force</span>,
217 <span class="summary-sig-arg">timeout</span>)</span><br />
218 Close client.</td>
219 <td align="right" valign="top">
220 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._close">source&nbsp;code</a></span>
221
222 </td>
223 </tr>
224 </table>
225
226 </td>
227 </tr>
228 <tr class="private">
229 <td width="15%" align="right" valign="top" class="summary">
230 <span class="summary-type">&nbsp;</span>
231 </td><td class="summary">
232 <table width="100%" cellpadding="0" cellspacing="0" border="0">
233 <tr>
234 <td><span class="summary-sig"><a name="_set_reading"></a><span class="summary-sig-name">_set_reading</span>(<span class="summary-sig-arg">self</span>)</span><br />
235 Set reading state.</td>
236 <td align="right" valign="top">
237 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._set_reading">source&nbsp;code</a></span>
238
239 </td>
240 </tr>
241 </table>
242
243 </td>
244 </tr>
245 <tr class="private">
246 <td width="15%" align="right" valign="top" class="summary">
247 <span class="summary-type">&nbsp;</span>
248 </td><td class="summary">
249 <table width="100%" cellpadding="0" cellspacing="0" border="0">
250 <tr>
251 <td><span class="summary-sig"><a name="_set_reading_error"></a><span class="summary-sig-name">_set_reading_error</span>(<span class="summary-sig-arg">self</span>)</span><br />
252 Set error reading state.</td>
253 <td align="right" valign="top">
254 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._set_reading_error">source&nbsp;code</a></span>
255
256 </td>
257 </tr>
258 </table>
259
260 </td>
261 </tr>
262 <tr class="private">
263 <td width="15%" align="right" valign="top" class="summary">
264 <span class="summary-type">&nbsp;</span>
265 </td><td class="summary">
266 <table width="100%" cellpadding="0" cellspacing="0" border="0">
267 <tr>
268 <td><span class="summary-sig"><a name="_set_writing"></a><span class="summary-sig-name">_set_writing</span>(<span class="summary-sig-arg">self</span>)</span><br />
269 Set writing state.</td>
270 <td align="right" valign="top">
271 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._set_writing">source&nbsp;code</a></span>
272
273 </td>
274 </tr>
275 </table>
276
277 </td>
278 </tr>
279 <tr class="private">
280 <td width="15%" align="right" valign="top" class="summary">
281 <span class="summary-type">&nbsp;</span>
282 </td><td class="summary">
283 <table width="100%" cellpadding="0" cellspacing="0" border="0">
284 <tr>
285 <td><span class="summary-sig"><a name="_read"></a><span class="summary-sig-name">_read</span>(<span class="summary-sig-arg">self</span>,
286 <span class="summary-sig-arg">size</span>=<span class="summary-sig-default">-1</span>)</span><br />
287 Read data from process.</td>
288 <td align="right" valign="top">
289 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._read">source&nbsp;code</a></span>
290
291 </td>
292 </tr>
293 </table>
294
295 </td>
296 </tr>
297 <tr class="private">
298 <td width="15%" align="right" valign="top" class="summary">
299 <span class="summary-type">&nbsp;</span>
300 </td><td class="summary">
301 <table width="100%" cellpadding="0" cellspacing="0" border="0">
302 <tr>
303 <td><span class="summary-sig"><a name="_readerr"></a><span class="summary-sig-name">_readerr</span>(<span class="summary-sig-arg">self</span>,
304 <span class="summary-sig-arg">size</span>=<span class="summary-sig-default">-1</span>)</span><br />
305 Read error data from process.</td>
306 <td align="right" valign="top">
307 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._readerr">source&nbsp;code</a></span>
308
309 </td>
310 </tr>
311 </table>
312
313 </td>
314 </tr>
315 <tr class="private">
316 <td width="15%" align="right" valign="top" class="summary">
317 <span class="summary-type">&nbsp;</span>
318 </td><td class="summary">
319 <table width="100%" cellpadding="0" cellspacing="0" border="0">
320 <tr>
321 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read" class="summary-sig-name" onclick="show_private();">_handle_read</a>(<span class="summary-sig-arg">self</span>)</span><br />
322 Handle a read notification.</td>
323 <td align="right" valign="top">
324 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._handle_read">source&nbsp;code</a></span>
325
326 </td>
327 </tr>
328 </table>
329
330 </td>
331 </tr>
332 <tr class="private">
333 <td width="15%" align="right" valign="top" class="summary">
334 <span class="summary-type">&nbsp;</span>
335 </td><td class="summary">
336 <table width="100%" cellpadding="0" cellspacing="0" border="0">
337 <tr>
338 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error" class="summary-sig-name" onclick="show_private();">_handle_error</a>(<span class="summary-sig-arg">self</span>)</span><br />
339 Handle a stderr read notification.</td>
340 <td align="right" valign="top">
341 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._handle_error">source&nbsp;code</a></span>
342
343 </td>
344 </tr>
345 </table>
346
347 </td>
348 </tr>
349 <tr class="private">
350 <td width="15%" align="right" valign="top" class="summary">
351 <span class="summary-type">&nbsp;</span>
352 </td><td class="summary">
353 <table width="100%" cellpadding="0" cellspacing="0" border="0">
354 <tr>
355 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write" class="summary-sig-name" onclick="show_private();">_handle_write</a>(<span class="summary-sig-arg">self</span>)</span><br />
356 Handle a write notification.</td>
357 <td align="right" valign="top">
358 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._handle_write">source&nbsp;code</a></span>
359
360 </td>
361 </tr>
362 </table>
363
364 </td>
365 </tr>
366 <tr class="private">
367 <td width="15%" align="right" valign="top" class="summary">
368 <span class="summary-type">&nbsp;</span>
369 </td><td class="summary">
370 <table width="100%" cellpadding="0" cellspacing="0" border="0">
371 <tr>
372 <td><span class="summary-sig"><a name="_exec_nonblock"></a><span class="summary-sig-name">_exec_nonblock</span>(<span class="summary-sig-arg">self</span>,
373 <span class="summary-sig-arg">commandlist</span>,
374 <span class="summary-sig-arg">shell</span>=<span class="summary-sig-default">False</span>,
375 <span class="summary-sig-arg">env</span>=<span class="summary-sig-default">None</span>)</span><br />
376 Utility method to launch a command with stdin/stdout file descriptors
377 configured in non-blocking mode.</td>
378 <td align="right" valign="top">
379 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._exec_nonblock">source&nbsp;code</a></span>
380
381 </td>
382 </tr>
383 </table>
384
385 </td>
386 </tr>
387 <tr class="private">
388 <td width="15%" align="right" valign="top" class="summary">
389 <span class="summary-type">&nbsp;</span>
390 </td><td class="summary">
391 <table width="100%" cellpadding="0" cellspacing="0" border="0">
392 <tr>
393 <td><span class="summary-sig"><a name="_readlines"></a><span class="summary-sig-name">_readlines</span>(<span class="summary-sig-arg">self</span>)</span><br />
394 Utility method to read client lines</td>
395 <td align="right" valign="top">
396 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._readlines">source&nbsp;code</a></span>
397
398 </td>
399 </tr>
400 </table>
401
402 </td>
403 </tr>
404 <tr class="private">
405 <td width="15%" align="right" valign="top" class="summary">
406 <span class="summary-type">&nbsp;</span>
407 </td><td class="summary">
408 <table width="100%" cellpadding="0" cellspacing="0" border="0">
409 <tr>
410 <td><span class="summary-sig"><a name="_readerrlines"></a><span class="summary-sig-name">_readerrlines</span>(<span class="summary-sig-arg">self</span>)</span><br />
411 Utility method to read client lines</td>
412 <td align="right" valign="top">
413 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._readerrlines">source&nbsp;code</a></span>
414
415 </td>
416 </tr>
417 </table>
418
419 </td>
420 </tr>
421 <tr class="private">
422 <td width="15%" align="right" valign="top" class="summary">
423 <span class="summary-type">&nbsp;</span>
424 </td><td class="summary">
425 <table width="100%" cellpadding="0" cellspacing="0" border="0">
426 <tr>
427 <td><span class="summary-sig"><a name="_write"></a><span class="summary-sig-name">_write</span>(<span class="summary-sig-arg">self</span>,
428 <span class="summary-sig-arg">buf</span>)</span><br />
429 Add some data to be written to the client.</td>
430 <td align="right" valign="top">
431 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._write">source&nbsp;code</a></span>
432
433 </td>
434 </tr>
435 </table>
436
437 </td>
438 </tr>
439 <tr class="private">
440 <td width="15%" align="right" valign="top" class="summary">
441 <span class="summary-type">&nbsp;</span>
442 </td><td class="summary">
443 <table width="100%" cellpadding="0" cellspacing="0" border="0">
444 <tr>
445 <td><span class="summary-sig"><a name="_set_write_eof"></a><span class="summary-sig-name">_set_write_eof</span>(<span class="summary-sig-arg">self</span>)</span></td>
446 <td align="right" valign="top">
447 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._set_write_eof">source&nbsp;code</a></span>
448
449 </td>
450 </tr>
451 </table>
452
453 </td>
454 </tr>
455 <tr class="private">
456 <td width="15%" align="right" valign="top" class="summary">
457 <span class="summary-type">&nbsp;</span>
458 </td><td class="summary">
459 <table width="100%" cellpadding="0" cellspacing="0" border="0">
460 <tr>
461 <td><span class="summary-sig"><a name="_close_writer"></a><span class="summary-sig-name">_close_writer</span>(<span class="summary-sig-arg">self</span>)</span></td>
462 <td align="right" valign="top">
463 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._close_writer">source&nbsp;code</a></span>
464
465 </td>
466 </tr>
467 </table>
468
469 </td>
470 </tr>
471 <tr>
472 <td colspan="2" class="summary">
473 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b>:
474 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a></code>,
475 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a></code>,
476 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a></code>
477 </p>
478 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b> (private):
479 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine" onclick="show_private();">_set_engine</a></code>
480 </p></div>
481 </td>
482 </tr>
483 </table>
484 <!-- ==================== METHOD DETAILS ==================== -->
485 <a name="section-MethodDetails"></a>
486 <table class="details" border="1" cellpadding="3"
487 cellspacing="0" width="100%" bgcolor="white">
488 <tr bgcolor="#70b0f0" class="table-header">
489 <td colspan="2" class="table-header">
490 <table border="0" cellpadding="0" cellspacing="0" width="100%">
491 <tr valign="top">
492 <td align="left"><span class="table-header">Method Details</span></td>
493 <td align="right" valign="top"
494 ><span class="options">[<a href="#section-MethodDetails"
495 class="privatelink" onclick="toggle_private();"
496 >hide private</a>]</span></td>
497 </tr>
498 </table>
499 </td>
500 </tr>
501 </table>
502 <a name="__init__"></a>
503 <div>
504 <table class="details" border="1" cellpadding="3"
505 cellspacing="0" width="100%" bgcolor="white">
506 <tr><td>
507 <table width="100%" cellpadding="0" cellspacing="0" border="0">
508 <tr valign="top"><td>
509 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
510 <span class="sig-arg">worker</span>,
511 <span class="sig-arg">stderr</span>,
512 <span class="sig-arg">timeout</span>,
513 <span class="sig-arg">autoclose</span>)</span>
514 <br /><em class="fname">(Constructor)</em>
515 </h3>
516 </td><td align="right" valign="top"
517 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient.__init__">source&nbsp;code</a></span>&nbsp;
518 </td>
519 </tr></table>
520
521 <p>Initializer. Should be called from derived classes.</p>
522 <dl class="fields">
523 <dt>Overrides:
524 <a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__">Engine.Engine.EngineBaseTimer.__init__</a>
525 </dt>
526 </dl>
527 </td></tr></table>
528 </div>
529 <a name="_fire"></a>
530 <div class="private">
531 <table class="details" border="1" cellpadding="3"
532 cellspacing="0" width="100%" bgcolor="white">
533 <tr><td>
534 <table width="100%" cellpadding="0" cellspacing="0" border="0">
535 <tr valign="top"><td>
536 <h3 class="epydoc"><span class="sig"><span class="sig-name">_fire</span>(<span class="sig-arg">self</span>)</span>
537 </h3>
538 </td><td align="right" valign="top"
539 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._fire">source&nbsp;code</a></span>&nbsp;
540 </td>
541 </tr></table>
542
543 <p>Fire timeout timer.</p>
544 <dl class="fields">
545 <dt>Overrides:
546 <a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_fire" onclick="show_private();">Engine.Engine.EngineBaseTimer._fire</a>
547 </dt>
548 </dl>
549 </td></tr></table>
550 </div>
551 <a name="_start"></a>
552 <div class="private">
553 <table class="details" border="1" cellpadding="3"
554 cellspacing="0" width="100%" bgcolor="white">
555 <tr><td>
556 <table width="100%" cellpadding="0" cellspacing="0" border="0">
557 <tr valign="top"><td>
558 <h3 class="epydoc"><span class="sig"><span class="sig-name">_start</span>(<span class="sig-arg">self</span>)</span>
559 </h3>
560 </td><td align="right" valign="top"
561 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._start">source&nbsp;code</a></span>&nbsp;
562 </td>
563 </tr></table>
564
565 <p>Starts client and returns client instance as a convenience. Derived
566 classes (except EnginePort) must implement.</p>
567 <dl class="fields">
568 </dl>
569 </td></tr></table>
570 </div>
571 <a name="_close"></a>
572 <div class="private">
573 <table class="details" border="1" cellpadding="3"
574 cellspacing="0" width="100%" bgcolor="white">
575 <tr><td>
576 <table width="100%" cellpadding="0" cellspacing="0" border="0">
577 <tr valign="top"><td>
578 <h3 class="epydoc"><span class="sig"><span class="sig-name">_close</span>(<span class="sig-arg">self</span>,
579 <span class="sig-arg">force</span>,
580 <span class="sig-arg">timeout</span>)</span>
581 </h3>
582 </td><td align="right" valign="top"
583 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._close">source&nbsp;code</a></span>&nbsp;
584 </td>
585 </tr></table>
586
587 <p>Close client. Called by the engine after client has been unregistered.
588 This method should handle all termination types (normal, forced or on
589 timeout). Derived classes must implement.</p>
590 <dl class="fields">
591 </dl>
592 </td></tr></table>
593 </div>
594 <a name="_handle_read"></a>
595 <div class="private">
596 <table class="details" border="1" cellpadding="3"
597 cellspacing="0" width="100%" bgcolor="white">
598 <tr><td>
599 <table width="100%" cellpadding="0" cellspacing="0" border="0">
600 <tr valign="top"><td>
601 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_read</span>(<span class="sig-arg">self</span>)</span>
602 </h3>
603 </td><td align="right" valign="top"
604 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._handle_read">source&nbsp;code</a></span>&nbsp;
605 </td>
606 </tr></table>
607
608 <p>Handle a read notification. Called by the engine as the result of an
609 event indicating that a read is available.</p>
610 <dl class="fields">
611 </dl>
612 </td></tr></table>
613 </div>
614 <a name="_handle_error"></a>
615 <div class="private">
616 <table class="details" border="1" cellpadding="3"
617 cellspacing="0" width="100%" bgcolor="white">
618 <tr><td>
619 <table width="100%" cellpadding="0" cellspacing="0" border="0">
620 <tr valign="top"><td>
621 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_error</span>(<span class="sig-arg">self</span>)</span>
622 </h3>
623 </td><td align="right" valign="top"
624 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._handle_error">source&nbsp;code</a></span>&nbsp;
625 </td>
626 </tr></table>
627
628 <p>Handle a stderr read notification. Called by the engine as the result
629 of an event indicating that a read is available on stderr.</p>
630 <dl class="fields">
631 </dl>
632 </td></tr></table>
633 </div>
634 <a name="_handle_write"></a>
635 <div class="private">
636 <table class="details" border="1" cellpadding="3"
637 cellspacing="0" width="100%" bgcolor="white">
638 <tr><td>
639 <table width="100%" cellpadding="0" cellspacing="0" border="0">
640 <tr valign="top"><td>
641 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_write</span>(<span class="sig-arg">self</span>)</span>
642 </h3>
643 </td><td align="right" valign="top"
644 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClient._handle_write">source&nbsp;code</a></span>&nbsp;
645 </td>
646 </tr></table>
647
648 <p>Handle a write notification. Called by the engine as the result of an
649 event indicating that a write can be performed now.</p>
650 <dl class="fields">
651 </dl>
652 </td></tr></table>
653 </div>
654 <br />
655 <!-- ==================== NAVIGATION BAR ==================== -->
656 <table class="navbar" border="0" width="100%" cellpadding="0"
657 bgcolor="#a0c0ff" cellspacing="0">
658 <tr valign="middle">
659
660 <!-- Tree link -->
661 <th>&nbsp;&nbsp;&nbsp;<a
662 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
663
664 <!-- Index link -->
665 <th>&nbsp;&nbsp;&nbsp;<a
666 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
667
668 <!-- Help link -->
669 <th>&nbsp;&nbsp;&nbsp;<a
670 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
671
672 <!-- Project homepage -->
673 <th class="navbar" align="right" width="100%">
674 <table border="0" cellpadding="0" cellspacing="0">
675 <tr><th class="navbar" align="center"
676 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
677 </tr></table></th>
678 </tr>
679 </table>
680 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
681 <tr>
682 <td align="left" class="footer">
683 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
684 </td>
685 <td align="right" class="footer">
686 <a target="mainFrame" href="http://epydoc.sourceforge.net"
687 >http://epydoc.sourceforge.net</a>
688 </td>
689 </tr>
690 </table>
691
692 <script type="text/javascript">
693 <!--
694 // Private objects are initially displayed (because if
695 // javascript is turned off then we want them to be
696 // visible); but by default, we want to hide them. So hide
697 // them unless we have a cookie that says to show them.
698 checkCookie();
699 // -->
700 </script>
701 </body>
702 </html>
+0
-211
doc/epydoc/html/ClusterShell.Worker.EngineClient.EngineClientEOF-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient.EngineClientEOF</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.EngineClient-module.html">Module&nbsp;EngineClient</a> ::
44 Class&nbsp;EngineClientEOF
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineClientEOF</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClientEOF">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_48" name="uml_class_diagram_for_clusters_48">
64 <area shape="rect" id="node1" href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html" title="EOF from client." alt="" coords="32,443,157,487"/>
65 <area shape="rect" id="node2" href="ClusterShell.Worker.EngineClient.EngineClientException-class.html" title="Generic EngineClient exception." alt="" coords="16,379,173,423"/>
66 <area shape="rect" id="node181" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
67 <area shape="rect" id="node181" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
68 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
69 <area shape="rect" id="node182" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
70 <area shape="rect" id="node182" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
71 <area shape="rect" id="node182" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
72 <area shape="rect" id="node182" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
73 <area shape="rect" id="node182" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
74 <area shape="rect" id="node182" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
75 <area shape="rect" id="node182" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
76 <area shape="rect" id="node182" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
77 <area shape="rect" id="node182" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
78 <area shape="rect" id="node182" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
79 <area shape="rect" id="node182" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
80 <area shape="rect" id="node182" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
81 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
82 </map>
83 <img src="uml_class_diagram_for_clusters_48.png" alt='' usemap="#uml_class_diagram_for_clusters_48" ismap="ismap" class="graph-without-title" />
84 </center>
85 </center>
86 <hr />
87 <p>EOF from client.</p>
88
89 <!-- ==================== INSTANCE METHODS ==================== -->
90 <a name="section-InstanceMethods"></a>
91 <table class="summary" border="1" cellpadding="3"
92 cellspacing="0" width="100%" bgcolor="white">
93 <tr bgcolor="#70b0f0" class="table-header">
94 <td colspan="2" class="table-header">
95 <table border="0" cellpadding="0" cellspacing="0" width="100%">
96 <tr valign="top">
97 <td align="left"><span class="table-header">Instance Methods</span></td>
98 <td align="right" valign="top"
99 ><span class="options">[<a href="#section-InstanceMethods"
100 class="privatelink" onclick="toggle_private();"
101 >hide private</a>]</span></td>
102 </tr>
103 </table>
104 </td>
105 </tr>
106 <tr>
107 <td colspan="2" class="summary">
108 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
109 <code>__init__</code>,
110 <code>__new__</code>
111 </p>
112 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
113 <code>__delattr__</code>,
114 <code>__getattribute__</code>,
115 <code>__getitem__</code>,
116 <code>__getslice__</code>,
117 <code>__reduce__</code>,
118 <code>__repr__</code>,
119 <code>__setattr__</code>,
120 <code>__setstate__</code>,
121 <code>__str__</code>,
122 <code>__unicode__</code>
123 </p>
124 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
125 <code>__format__</code>,
126 <code>__hash__</code>,
127 <code>__reduce_ex__</code>,
128 <code>__sizeof__</code>,
129 <code>__subclasshook__</code>
130 </p>
131 </td>
132 </tr>
133 </table>
134 <!-- ==================== PROPERTIES ==================== -->
135 <a name="section-Properties"></a>
136 <table class="summary" border="1" cellpadding="3"
137 cellspacing="0" width="100%" bgcolor="white">
138 <tr bgcolor="#70b0f0" class="table-header">
139 <td colspan="2" class="table-header">
140 <table border="0" cellpadding="0" cellspacing="0" width="100%">
141 <tr valign="top">
142 <td align="left"><span class="table-header">Properties</span></td>
143 <td align="right" valign="top"
144 ><span class="options">[<a href="#section-Properties"
145 class="privatelink" onclick="toggle_private();"
146 >hide private</a>]</span></td>
147 </tr>
148 </table>
149 </td>
150 </tr>
151 <tr>
152 <td colspan="2" class="summary">
153 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
154 <code>args</code>,
155 <code>message</code>
156 </p>
157 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
158 <code>__class__</code>
159 </p>
160 </td>
161 </tr>
162 </table>
163 <!-- ==================== NAVIGATION BAR ==================== -->
164 <table class="navbar" border="0" width="100%" cellpadding="0"
165 bgcolor="#a0c0ff" cellspacing="0">
166 <tr valign="middle">
167
168 <!-- Tree link -->
169 <th>&nbsp;&nbsp;&nbsp;<a
170 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
171
172 <!-- Index link -->
173 <th>&nbsp;&nbsp;&nbsp;<a
174 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
175
176 <!-- Help link -->
177 <th>&nbsp;&nbsp;&nbsp;<a
178 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
179
180 <!-- Project homepage -->
181 <th class="navbar" align="right" width="100%">
182 <table border="0" cellpadding="0" cellspacing="0">
183 <tr><th class="navbar" align="center"
184 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
185 </tr></table></th>
186 </tr>
187 </table>
188 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
189 <tr>
190 <td align="left" class="footer">
191 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:20 2010
192 </td>
193 <td align="right" class="footer">
194 <a target="mainFrame" href="http://epydoc.sourceforge.net"
195 >http://epydoc.sourceforge.net</a>
196 </td>
197 </tr>
198 </table>
199
200 <script type="text/javascript">
201 <!--
202 // Private objects are initially displayed (because if
203 // javascript is turned off then we want them to be
204 // visible); but by default, we want to hide them. So hide
205 // them unless we have a cookie that says to show them.
206 checkCookie();
207 // -->
208 </script>
209 </body>
210 </html>
+0
-212
doc/epydoc/html/ClusterShell.Worker.EngineClient.EngineClientError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient.EngineClientError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.EngineClient-module.html">Module&nbsp;EngineClient</a> ::
44 Class&nbsp;EngineClientError
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClientError-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineClientError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClientError">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_49" name="uml_class_diagram_for_clusters_49">
64 <area shape="rect" id="node1" href="ClusterShell.Worker.EngineClient.EngineClientError-class.html" title="Base EngineClient error exception." alt="" coords="51,443,179,487"/>
65 <area shape="rect" id="node5" href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html" title="Operation not supported by EngineClient." alt="" coords="5,507,224,546"/>
66 <area shape="rect" id="node2" href="ClusterShell.Worker.EngineClient.EngineClientException-class.html" title="Generic EngineClient exception." alt="" coords="35,379,192,423"/>
67 <area shape="rect" id="node185" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="51,316,177,335"/>
68 <area shape="rect" id="node185" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="51,335,177,353"/>
69 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="39,283,188,359"/>
70 <area shape="rect" id="node186" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="36,31,193,49"/>
71 <area shape="rect" id="node186" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="36,49,193,68"/>
72 <area shape="rect" id="node186" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="36,71,193,89"/>
73 <area shape="rect" id="node186" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="36,89,193,108"/>
74 <area shape="rect" id="node186" href="javascript:void(0);" title="x[y]" alt="" coords="36,108,193,127"/>
75 <area shape="rect" id="node186" href="javascript:void(0);" title="x[i:j]" alt="" coords="36,127,193,145"/>
76 <area shape="rect" id="node186" href="javascript:void(0);" title="helper for pickle" alt="" coords="36,145,193,164"/>
77 <area shape="rect" id="node186" href="javascript:void(0);" title="repr(x)" alt="" coords="36,164,193,183"/>
78 <area shape="rect" id="node186" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="36,183,193,201"/>
79 <area shape="rect" id="node186" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="36,201,193,220"/>
80 <area shape="rect" id="node186" href="javascript:void(0);" title="str(x)" alt="" coords="36,220,193,239"/>
81 <area shape="rect" id="node186" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="36,239,193,257"/>
82 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="24,6,205,263"/>
83 </map>
84 <img src="uml_class_diagram_for_clusters_49.png" alt='' usemap="#uml_class_diagram_for_clusters_49" ismap="ismap" class="graph-without-title" />
85 </center>
86 </center>
87 <hr />
88 <p>Base EngineClient error exception.</p>
89
90 <!-- ==================== INSTANCE METHODS ==================== -->
91 <a name="section-InstanceMethods"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Instance Methods</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-InstanceMethods"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td colspan="2" class="summary">
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
110 <code>__init__</code>,
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-213
doc/epydoc/html/ClusterShell.Worker.EngineClient.EngineClientException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient.EngineClientException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.EngineClient-module.html">Module&nbsp;EngineClient</a> ::
44 Class&nbsp;EngineClientException
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClientException-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineClientException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClientException">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_50" name="uml_class_diagram_for_clusters_50">
64 <area shape="rect" id="node1" href="ClusterShell.Worker.EngineClient.EngineClientError-class.html" title="Base EngineClient error exception." alt="" coords="45,443,184,482"/>
65 <area shape="rect" id="node5" href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html" title="Operation not supported by EngineClient." alt="" coords="5,502,224,541"/>
66 <area shape="rect" id="node189" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="133,316,260,335"/>
67 <area shape="rect" id="node189" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="133,335,260,353"/>
68 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="121,283,271,359"/>
69 <area shape="rect" id="node3" href="ClusterShell.Worker.EngineClient.EngineClientException-class.html" title="Generic EngineClient exception." alt="" coords="117,379,275,423"/>
70 <area shape="rect" id="node4" href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html" title="EOF from client." alt="" coords="213,443,349,482"/>
71 <area shape="rect" id="node190" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="119,31,276,49"/>
72 <area shape="rect" id="node190" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="119,49,276,68"/>
73 <area shape="rect" id="node190" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="119,71,276,89"/>
74 <area shape="rect" id="node190" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="119,89,276,108"/>
75 <area shape="rect" id="node190" href="javascript:void(0);" title="x[y]" alt="" coords="119,108,276,127"/>
76 <area shape="rect" id="node190" href="javascript:void(0);" title="x[i:j]" alt="" coords="119,127,276,145"/>
77 <area shape="rect" id="node190" href="javascript:void(0);" title="helper for pickle" alt="" coords="119,145,276,164"/>
78 <area shape="rect" id="node190" href="javascript:void(0);" title="repr(x)" alt="" coords="119,164,276,183"/>
79 <area shape="rect" id="node190" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="119,183,276,201"/>
80 <area shape="rect" id="node190" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="119,201,276,220"/>
81 <area shape="rect" id="node190" href="javascript:void(0);" title="str(x)" alt="" coords="119,220,276,239"/>
82 <area shape="rect" id="node190" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="119,239,276,257"/>
83 <area shape="rect" id="node6" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="107,6,288,263"/>
84 </map>
85 <img src="uml_class_diagram_for_clusters_50.png" alt='' usemap="#uml_class_diagram_for_clusters_50" ismap="ismap" class="graph-without-title" />
86 </center>
87 </center>
88 <hr />
89 <p>Generic EngineClient exception.</p>
90
91 <!-- ==================== INSTANCE METHODS ==================== -->
92 <a name="section-InstanceMethods"></a>
93 <table class="summary" border="1" cellpadding="3"
94 cellspacing="0" width="100%" bgcolor="white">
95 <tr bgcolor="#70b0f0" class="table-header">
96 <td colspan="2" class="table-header">
97 <table border="0" cellpadding="0" cellspacing="0" width="100%">
98 <tr valign="top">
99 <td align="left"><span class="table-header">Instance Methods</span></td>
100 <td align="right" valign="top"
101 ><span class="options">[<a href="#section-InstanceMethods"
102 class="privatelink" onclick="toggle_private();"
103 >hide private</a>]</span></td>
104 </tr>
105 </table>
106 </td>
107 </tr>
108 <tr>
109 <td colspan="2" class="summary">
110 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
111 <code>__init__</code>,
112 <code>__new__</code>
113 </p>
114 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
115 <code>__delattr__</code>,
116 <code>__getattribute__</code>,
117 <code>__getitem__</code>,
118 <code>__getslice__</code>,
119 <code>__reduce__</code>,
120 <code>__repr__</code>,
121 <code>__setattr__</code>,
122 <code>__setstate__</code>,
123 <code>__str__</code>,
124 <code>__unicode__</code>
125 </p>
126 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
127 <code>__format__</code>,
128 <code>__hash__</code>,
129 <code>__reduce_ex__</code>,
130 <code>__sizeof__</code>,
131 <code>__subclasshook__</code>
132 </p>
133 </td>
134 </tr>
135 </table>
136 <!-- ==================== PROPERTIES ==================== -->
137 <a name="section-Properties"></a>
138 <table class="summary" border="1" cellpadding="3"
139 cellspacing="0" width="100%" bgcolor="white">
140 <tr bgcolor="#70b0f0" class="table-header">
141 <td colspan="2" class="table-header">
142 <table border="0" cellpadding="0" cellspacing="0" width="100%">
143 <tr valign="top">
144 <td align="left"><span class="table-header">Properties</span></td>
145 <td align="right" valign="top"
146 ><span class="options">[<a href="#section-Properties"
147 class="privatelink" onclick="toggle_private();"
148 >hide private</a>]</span></td>
149 </tr>
150 </table>
151 </td>
152 </tr>
153 <tr>
154 <td colspan="2" class="summary">
155 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
156 <code>args</code>,
157 <code>message</code>
158 </p>
159 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
160 <code>__class__</code>
161 </p>
162 </td>
163 </tr>
164 </table>
165 <!-- ==================== NAVIGATION BAR ==================== -->
166 <table class="navbar" border="0" width="100%" cellpadding="0"
167 bgcolor="#a0c0ff" cellspacing="0">
168 <tr valign="middle">
169
170 <!-- Tree link -->
171 <th>&nbsp;&nbsp;&nbsp;<a
172 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
173
174 <!-- Index link -->
175 <th>&nbsp;&nbsp;&nbsp;<a
176 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
177
178 <!-- Help link -->
179 <th>&nbsp;&nbsp;&nbsp;<a
180 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
181
182 <!-- Project homepage -->
183 <th class="navbar" align="right" width="100%">
184 <table border="0" cellpadding="0" cellspacing="0">
185 <tr><th class="navbar" align="center"
186 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
187 </tr></table></th>
188 </tr>
189 </table>
190 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
191 <tr>
192 <td align="left" class="footer">
193 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
194 </td>
195 <td align="right" class="footer">
196 <a target="mainFrame" href="http://epydoc.sourceforge.net"
197 >http://epydoc.sourceforge.net</a>
198 </td>
199 </tr>
200 </table>
201
202 <script type="text/javascript">
203 <!--
204 // Private objects are initially displayed (because if
205 // javascript is turned off then we want them to be
206 // visible); but by default, we want to hide them. So hide
207 // them unless we have a cookie that says to show them.
208 checkCookie();
209 // -->
210 </script>
211 </body>
212 </html>
+0
-212
doc/epydoc/html/ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient.EngineClientNotSupportedError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.EngineClient-module.html">Module&nbsp;EngineClient</a> ::
44 Class&nbsp;EngineClientNotSupportedError
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EngineClientNotSupportedError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EngineClientNotSupportedError">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_51" name="uml_class_diagram_for_clusters_51">
64 <area shape="rect" id="node1" href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html" title="Operation not supported by EngineClient." alt="" coords="5,507,213,551"/>
65 <area shape="rect" id="node2" href="ClusterShell.Worker.EngineClient.EngineClientError-class.html" title="Base EngineClient error exception." alt="" coords="45,443,173,487"/>
66 <area shape="rect" id="node3" href="ClusterShell.Worker.EngineClient.EngineClientException-class.html" title="Generic EngineClient exception." alt="" coords="29,379,187,423"/>
67 <area shape="rect" id="node197" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="45,316,172,335"/>
68 <area shape="rect" id="node197" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="45,335,172,353"/>
69 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="33,283,183,359"/>
70 <area shape="rect" id="node198" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="31,31,188,49"/>
71 <area shape="rect" id="node198" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="31,49,188,68"/>
72 <area shape="rect" id="node198" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="31,71,188,89"/>
73 <area shape="rect" id="node198" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="31,89,188,108"/>
74 <area shape="rect" id="node198" href="javascript:void(0);" title="x[y]" alt="" coords="31,108,188,127"/>
75 <area shape="rect" id="node198" href="javascript:void(0);" title="x[i:j]" alt="" coords="31,127,188,145"/>
76 <area shape="rect" id="node198" href="javascript:void(0);" title="helper for pickle" alt="" coords="31,145,188,164"/>
77 <area shape="rect" id="node198" href="javascript:void(0);" title="repr(x)" alt="" coords="31,164,188,183"/>
78 <area shape="rect" id="node198" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="31,183,188,201"/>
79 <area shape="rect" id="node198" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="31,201,188,220"/>
80 <area shape="rect" id="node198" href="javascript:void(0);" title="str(x)" alt="" coords="31,220,188,239"/>
81 <area shape="rect" id="node198" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="31,239,188,257"/>
82 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="19,6,200,263"/>
83 </map>
84 <img src="uml_class_diagram_for_clusters_51.png" alt='' usemap="#uml_class_diagram_for_clusters_51" ismap="ismap" class="graph-without-title" />
85 </center>
86 </center>
87 <hr />
88 <p>Operation not supported by EngineClient.</p>
89
90 <!-- ==================== INSTANCE METHODS ==================== -->
91 <a name="section-InstanceMethods"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Instance Methods</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-InstanceMethods"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td colspan="2" class="summary">
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
110 <code>__init__</code>,
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-475
doc/epydoc/html/ClusterShell.Worker.EngineClient.EnginePort-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient.EnginePort</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.EngineClient-module.html">Module&nbsp;EngineClient</a> ::
44 Class&nbsp;EnginePort
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class EnginePort</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_52" name="uml_class_diagram_for_clusters_52">
64 <area shape="rect" id="node199" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__" title="Initialize EnginePort object." alt="" coords="17,268,325,287"/>
65 <area shape="rect" id="node199" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#msg" title="Port message send with optional reply." alt="" coords="17,287,325,305"/>
66 <area shape="rect" id="node199" href="ClusterShell.Worker.EngineClient.EnginePort-class.html#msg_send" title="Port message send&#45;once method (no reply)." alt="" coords="17,305,325,324"/>
67 <area shape="rect" id="node1" href="ClusterShell.Worker.EngineClient.EnginePort-class.html" title="An EnginePort is an abstraction object to deliver messages reliably between tasks." alt="" coords="5,235,336,330"/>
68 <area shape="rect" id="node200" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno" title="Return the standard error reader file descriptor as an integer." alt="" coords="116,153,227,172"/>
69 <area shape="rect" id="node200" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno" title="Return the reader file descriptor as an integer." alt="" coords="116,172,227,191"/>
70 <area shape="rect" id="node200" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno" title="Return the writer file descriptor as an integer." alt="" coords="116,191,227,209"/>
71 <area shape="rect" id="node2" href="ClusterShell.Worker.EngineClient.EngineClient-class.html" title="Abstract class EngineClient." alt="" coords="104,121,237,215"/>
72 <area shape="rect" id="node201" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="53,39,291,57"/>
73 <area shape="rect" id="node201" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="53,57,291,76"/>
74 <area shape="rect" id="node201" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="53,76,291,95"/>
75 <area shape="rect" id="node3" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="41,6,303,101"/>
76 </map>
77 <img src="uml_class_diagram_for_clusters_52.png" alt='' usemap="#uml_class_diagram_for_clusters_52" ismap="ismap" class="graph-without-title" />
78 </center>
79 </center>
80 <hr />
81 <p>An EnginePort is an abstraction object to deliver messages reliably
82 between tasks.</p>
83
84 <!-- ==================== NESTED CLASSES ==================== -->
85 <a name="section-NestedClasses"></a>
86 <table class="summary" border="1" cellpadding="3"
87 cellspacing="0" width="100%" bgcolor="white">
88 <tr bgcolor="#70b0f0" class="table-header">
89 <td colspan="2" class="table-header">
90 <table border="0" cellpadding="0" cellspacing="0" width="100%">
91 <tr valign="top">
92 <td align="left"><span class="table-header">Nested Classes</span></td>
93 <td align="right" valign="top"
94 ><span class="options">[<a href="#section-NestedClasses"
95 class="privatelink" onclick="toggle_private();"
96 >hide private</a>]</span></td>
97 </tr>
98 </table>
99 </td>
100 </tr>
101 <tr class="private">
102 <td width="15%" align="right" valign="top" class="summary">
103 <span class="summary-type">&nbsp;</span>
104 </td><td class="summary">
105 <a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html" class="summary-name" onclick="show_private();">_Msg</a><br />
106 Private class representing a port message.
107 </td>
108 </tr>
109 </table>
110 <!-- ==================== INSTANCE METHODS ==================== -->
111 <a name="section-InstanceMethods"></a>
112 <table class="summary" border="1" cellpadding="3"
113 cellspacing="0" width="100%" bgcolor="white">
114 <tr bgcolor="#70b0f0" class="table-header">
115 <td colspan="2" class="table-header">
116 <table border="0" cellpadding="0" cellspacing="0" width="100%">
117 <tr valign="top">
118 <td align="left"><span class="table-header">Instance Methods</span></td>
119 <td align="right" valign="top"
120 ><span class="options">[<a href="#section-InstanceMethods"
121 class="privatelink" onclick="toggle_private();"
122 >hide private</a>]</span></td>
123 </tr>
124 </table>
125 </td>
126 </tr>
127 <tr>
128 <td width="15%" align="right" valign="top" class="summary">
129 <span class="summary-type">&nbsp;</span>
130 </td><td class="summary">
131 <table width="100%" cellpadding="0" cellspacing="0" border="0">
132 <tr>
133 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
134 <span class="summary-sig-arg">task</span>,
135 <span class="summary-sig-arg">handler</span>=<span class="summary-sig-default">None</span>,
136 <span class="summary-sig-arg">autoclose</span>=<span class="summary-sig-default">False</span>)</span><br />
137 Initialize EnginePort object.</td>
138 <td align="right" valign="top">
139 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort.__init__">source&nbsp;code</a></span>
140
141 </td>
142 </tr>
143 </table>
144
145 </td>
146 </tr>
147 <tr class="private">
148 <td width="15%" align="right" valign="top" class="summary">
149 <span class="summary-type">&nbsp;</span>
150 </td><td class="summary">
151 <table width="100%" cellpadding="0" cellspacing="0" border="0">
152 <tr>
153 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_start" class="summary-sig-name" onclick="show_private();">_start</a>(<span class="summary-sig-arg">self</span>)</span><br />
154 Starts client and returns client instance as a convenience.</td>
155 <td align="right" valign="top">
156 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._start">source&nbsp;code</a></span>
157
158 </td>
159 </tr>
160 </table>
161
162 </td>
163 </tr>
164 <tr class="private">
165 <td width="15%" align="right" valign="top" class="summary">
166 <span class="summary-type">&nbsp;</span>
167 </td><td class="summary">
168 <table width="100%" cellpadding="0" cellspacing="0" border="0">
169 <tr>
170 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_close" class="summary-sig-name" onclick="show_private();">_close</a>(<span class="summary-sig-arg">self</span>,
171 <span class="summary-sig-arg">force</span>,
172 <span class="summary-sig-arg">timeout</span>)</span><br />
173 Close port pipes.</td>
174 <td align="right" valign="top">
175 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._close">source&nbsp;code</a></span>
176
177 </td>
178 </tr>
179 </table>
180
181 </td>
182 </tr>
183 <tr class="private">
184 <td width="15%" align="right" valign="top" class="summary">
185 <span class="summary-type">&nbsp;</span>
186 </td><td class="summary">
187 <table width="100%" cellpadding="0" cellspacing="0" border="0">
188 <tr>
189 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_read" class="summary-sig-name" onclick="show_private();">_read</a>(<span class="summary-sig-arg">self</span>,
190 <span class="summary-sig-arg">size</span>=<span class="summary-sig-default">4096</span>)</span><br />
191 Read data from pipe.</td>
192 <td align="right" valign="top">
193 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._read">source&nbsp;code</a></span>
194
195 </td>
196 </tr>
197 </table>
198
199 </td>
200 </tr>
201 <tr class="private">
202 <td width="15%" align="right" valign="top" class="summary">
203 <span class="summary-type">&nbsp;</span>
204 </td><td class="summary">
205 <table width="100%" cellpadding="0" cellspacing="0" border="0">
206 <tr>
207 <td><span class="summary-sig"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_handle_read" class="summary-sig-name" onclick="show_private();">_handle_read</a>(<span class="summary-sig-arg">self</span>)</span><br />
208 Handle a read notification.</td>
209 <td align="right" valign="top">
210 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._handle_read">source&nbsp;code</a></span>
211
212 </td>
213 </tr>
214 </table>
215
216 </td>
217 </tr>
218 <tr>
219 <td width="15%" align="right" valign="top" class="summary">
220 <span class="summary-type">&nbsp;</span>
221 </td><td class="summary">
222 <table width="100%" cellpadding="0" cellspacing="0" border="0">
223 <tr>
224 <td><span class="summary-sig"><a name="msg"></a><span class="summary-sig-name">msg</span>(<span class="summary-sig-arg">self</span>,
225 <span class="summary-sig-arg">send_msg</span>,
226 <span class="summary-sig-arg">send_once</span>=<span class="summary-sig-default">False</span>)</span><br />
227 Port message send with optional reply.</td>
228 <td align="right" valign="top">
229 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort.msg">source&nbsp;code</a></span>
230
231 </td>
232 </tr>
233 </table>
234
235 </td>
236 </tr>
237 <tr>
238 <td width="15%" align="right" valign="top" class="summary">
239 <span class="summary-type">&nbsp;</span>
240 </td><td class="summary">
241 <table width="100%" cellpadding="0" cellspacing="0" border="0">
242 <tr>
243 <td><span class="summary-sig"><a name="msg_send"></a><span class="summary-sig-name">msg_send</span>(<span class="summary-sig-arg">self</span>,
244 <span class="summary-sig-arg">send_msg</span>)</span><br />
245 Port message send-once method (no reply).</td>
246 <td align="right" valign="top">
247 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort.msg_send">source&nbsp;code</a></span>
248
249 </td>
250 </tr>
251 </table>
252
253 </td>
254 </tr>
255 <tr>
256 <td colspan="2" class="summary">
257 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a></code></b>:
258 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno">error_fileno</a></code>,
259 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno">reader_fileno</a></code>,
260 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno">writer_fileno</a></code>
261 </p>
262 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a></code></b> (private):
263 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer" onclick="show_private();">_close_writer</a></code>,
264 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock" onclick="show_private();">_exec_nonblock</a></code>,
265 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire" onclick="show_private();">_fire</a></code>,
266 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error" onclick="show_private();">_handle_error</a></code>,
267 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write" onclick="show_private();">_handle_write</a></code>,
268 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr" onclick="show_private();">_readerr</a></code>,
269 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines" onclick="show_private();">_readerrlines</a></code>,
270 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines" onclick="show_private();">_readlines</a></code>,
271 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading" onclick="show_private();">_set_reading</a></code>,
272 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error" onclick="show_private();">_set_reading_error</a></code>,
273 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof" onclick="show_private();">_set_write_eof</a></code>,
274 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing" onclick="show_private();">_set_writing</a></code>,
275 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_write" onclick="show_private();">_write</a></code>
276 </p></div>
277 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b>:
278 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a></code>,
279 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a></code>,
280 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a></code>
281 </p>
282 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b> (private):
283 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine" onclick="show_private();">_set_engine</a></code>
284 </p></div>
285 </td>
286 </tr>
287 </table>
288 <!-- ==================== METHOD DETAILS ==================== -->
289 <a name="section-MethodDetails"></a>
290 <table class="details" border="1" cellpadding="3"
291 cellspacing="0" width="100%" bgcolor="white">
292 <tr bgcolor="#70b0f0" class="table-header">
293 <td colspan="2" class="table-header">
294 <table border="0" cellpadding="0" cellspacing="0" width="100%">
295 <tr valign="top">
296 <td align="left"><span class="table-header">Method Details</span></td>
297 <td align="right" valign="top"
298 ><span class="options">[<a href="#section-MethodDetails"
299 class="privatelink" onclick="toggle_private();"
300 >hide private</a>]</span></td>
301 </tr>
302 </table>
303 </td>
304 </tr>
305 </table>
306 <a name="__init__"></a>
307 <div>
308 <table class="details" border="1" cellpadding="3"
309 cellspacing="0" width="100%" bgcolor="white">
310 <tr><td>
311 <table width="100%" cellpadding="0" cellspacing="0" border="0">
312 <tr valign="top"><td>
313 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
314 <span class="sig-arg">task</span>,
315 <span class="sig-arg">handler</span>=<span class="sig-default">None</span>,
316 <span class="sig-arg">autoclose</span>=<span class="sig-default">False</span>)</span>
317 <br /><em class="fname">(Constructor)</em>
318 </h3>
319 </td><td align="right" valign="top"
320 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort.__init__">source&nbsp;code</a></span>&nbsp;
321 </td>
322 </tr></table>
323
324 <p>Initialize EnginePort object.</p>
325 <dl class="fields">
326 <dt>Overrides:
327 <a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__">Engine.Engine.EngineBaseTimer.__init__</a>
328 </dt>
329 </dl>
330 </td></tr></table>
331 </div>
332 <a name="_start"></a>
333 <div class="private">
334 <table class="details" border="1" cellpadding="3"
335 cellspacing="0" width="100%" bgcolor="white">
336 <tr><td>
337 <table width="100%" cellpadding="0" cellspacing="0" border="0">
338 <tr valign="top"><td>
339 <h3 class="epydoc"><span class="sig"><span class="sig-name">_start</span>(<span class="sig-arg">self</span>)</span>
340 </h3>
341 </td><td align="right" valign="top"
342 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._start">source&nbsp;code</a></span>&nbsp;
343 </td>
344 </tr></table>
345
346 <p>Starts client and returns client instance as a convenience. Derived
347 classes (except EnginePort) must implement.</p>
348 <dl class="fields">
349 <dt>Overrides:
350 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start" onclick="show_private();">EngineClient._start</a>
351 <dd><em class="note">(inherited documentation)</em></dd>
352 </dt>
353 </dl>
354 </td></tr></table>
355 </div>
356 <a name="_close"></a>
357 <div class="private">
358 <table class="details" border="1" cellpadding="3"
359 cellspacing="0" width="100%" bgcolor="white">
360 <tr><td>
361 <table width="100%" cellpadding="0" cellspacing="0" border="0">
362 <tr valign="top"><td>
363 <h3 class="epydoc"><span class="sig"><span class="sig-name">_close</span>(<span class="sig-arg">self</span>,
364 <span class="sig-arg">force</span>,
365 <span class="sig-arg">timeout</span>)</span>
366 </h3>
367 </td><td align="right" valign="top"
368 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._close">source&nbsp;code</a></span>&nbsp;
369 </td>
370 </tr></table>
371
372 <p>Close port pipes.</p>
373 <dl class="fields">
374 <dt>Overrides:
375 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close" onclick="show_private();">EngineClient._close</a>
376 </dt>
377 </dl>
378 </td></tr></table>
379 </div>
380 <a name="_read"></a>
381 <div class="private">
382 <table class="details" border="1" cellpadding="3"
383 cellspacing="0" width="100%" bgcolor="white">
384 <tr><td>
385 <table width="100%" cellpadding="0" cellspacing="0" border="0">
386 <tr valign="top"><td>
387 <h3 class="epydoc"><span class="sig"><span class="sig-name">_read</span>(<span class="sig-arg">self</span>,
388 <span class="sig-arg">size</span>=<span class="sig-default">4096</span>)</span>
389 </h3>
390 </td><td align="right" valign="top"
391 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._read">source&nbsp;code</a></span>&nbsp;
392 </td>
393 </tr></table>
394
395 <p>Read data from pipe.</p>
396 <dl class="fields">
397 <dt>Overrides:
398 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_read" onclick="show_private();">EngineClient._read</a>
399 </dt>
400 </dl>
401 </td></tr></table>
402 </div>
403 <a name="_handle_read"></a>
404 <div class="private">
405 <table class="details" border="1" cellpadding="3"
406 cellspacing="0" width="100%" bgcolor="white">
407 <tr><td>
408 <table width="100%" cellpadding="0" cellspacing="0" border="0">
409 <tr valign="top"><td>
410 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_read</span>(<span class="sig-arg">self</span>)</span>
411 </h3>
412 </td><td align="right" valign="top"
413 ><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._handle_read">source&nbsp;code</a></span>&nbsp;
414 </td>
415 </tr></table>
416
417 <p>Handle a read notification. Called by the engine as the result of an
418 event indicating that a read is available.</p>
419 <dl class="fields">
420 <dt>Overrides:
421 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read" onclick="show_private();">EngineClient._handle_read</a>
422 </dt>
423 </dl>
424 </td></tr></table>
425 </div>
426 <br />
427 <!-- ==================== NAVIGATION BAR ==================== -->
428 <table class="navbar" border="0" width="100%" cellpadding="0"
429 bgcolor="#a0c0ff" cellspacing="0">
430 <tr valign="middle">
431
432 <!-- Tree link -->
433 <th>&nbsp;&nbsp;&nbsp;<a
434 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
435
436 <!-- Index link -->
437 <th>&nbsp;&nbsp;&nbsp;<a
438 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
439
440 <!-- Help link -->
441 <th>&nbsp;&nbsp;&nbsp;<a
442 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
443
444 <!-- Project homepage -->
445 <th class="navbar" align="right" width="100%">
446 <table border="0" cellpadding="0" cellspacing="0">
447 <tr><th class="navbar" align="center"
448 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
449 </tr></table></th>
450 </tr>
451 </table>
452 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
453 <tr>
454 <td align="left" class="footer">
455 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
456 </td>
457 <td align="right" class="footer">
458 <a target="mainFrame" href="http://epydoc.sourceforge.net"
459 >http://epydoc.sourceforge.net</a>
460 </td>
461 </tr>
462 </table>
463
464 <script type="text/javascript">
465 <!--
466 // Private objects are initially displayed (because if
467 // javascript is turned off then we want them to be
468 // visible); but by default, we want to hide them. So hide
469 // them unless we have a cookie that says to show them.
470 checkCookie();
471 // -->
472 </script>
473 </body>
474 </html>
+0
-184
doc/epydoc/html/ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.EngineClient.EnginePort._Msg</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.EngineClient-module.html">Module&nbsp;EngineClient</a> ::
44 <a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">Class&nbsp;EnginePort</a> ::
45 Class&nbsp;_Msg
46 </span>
47 </td>
48 <td>
49 <table cellpadding="0" cellspacing="0">
50 <!-- hide/show private -->
51 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
52 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
53 <tr><td align="right"><span class="options"
54 >[<a href="frames.html" target="_top">frames</a
55 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html"
56 target="_top">no&nbsp;frames</a>]</span></td></tr>
57 </table>
58 </td>
59 </tr>
60 </table>
61 <!-- ==================== CLASS DESCRIPTION ==================== -->
62 <h1 class="epydoc">Class _Msg</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._Msg">source&nbsp;code</a></span></p>
63 <p>Private class representing a port message.</p>
64 <p>A port message may be any Python object.</p>
65
66 <!-- ==================== INSTANCE METHODS ==================== -->
67 <a name="section-InstanceMethods"></a>
68 <table class="summary" border="1" cellpadding="3"
69 cellspacing="0" width="100%" bgcolor="white">
70 <tr bgcolor="#70b0f0" class="table-header">
71 <td colspan="2" class="table-header">
72 <table border="0" cellpadding="0" cellspacing="0" width="100%">
73 <tr valign="top">
74 <td align="left"><span class="table-header">Instance Methods</span></td>
75 <td align="right" valign="top"
76 ><span class="options">[<a href="#section-InstanceMethods"
77 class="privatelink" onclick="toggle_private();"
78 >hide private</a>]</span></td>
79 </tr>
80 </table>
81 </td>
82 </tr>
83 <tr>
84 <td width="15%" align="right" valign="top" class="summary">
85 <span class="summary-type">&nbsp;</span>
86 </td><td class="summary">
87 <table width="100%" cellpadding="0" cellspacing="0" border="0">
88 <tr>
89 <td><span class="summary-sig"><a name="__init__"></a><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,
90 <span class="summary-sig-arg">user_msg</span>,
91 <span class="summary-sig-arg">sync</span>)</span></td>
92 <td align="right" valign="top">
93 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._Msg.__init__">source&nbsp;code</a></span>
94
95 </td>
96 </tr>
97 </table>
98
99 </td>
100 </tr>
101 <tr>
102 <td width="15%" align="right" valign="top" class="summary">
103 <span class="summary-type">&nbsp;</span>
104 </td><td class="summary">
105 <table width="100%" cellpadding="0" cellspacing="0" border="0">
106 <tr>
107 <td><span class="summary-sig"><a name="get"></a><span class="summary-sig-name">get</span>(<span class="summary-sig-arg">self</span>)</span><br />
108 Get and acknowledge message.</td>
109 <td align="right" valign="top">
110 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._Msg.get">source&nbsp;code</a></span>
111
112 </td>
113 </tr>
114 </table>
115
116 </td>
117 </tr>
118 <tr>
119 <td width="15%" align="right" valign="top" class="summary">
120 <span class="summary-type">&nbsp;</span>
121 </td><td class="summary">
122 <table width="100%" cellpadding="0" cellspacing="0" border="0">
123 <tr>
124 <td><span class="summary-sig"><a name="sync"></a><span class="summary-sig-name">sync</span>(<span class="summary-sig-arg">self</span>)</span><br />
125 Wait for message acknowledgment if needed.</td>
126 <td align="right" valign="top">
127 <span class="codelink"><a href="ClusterShell.Worker.EngineClient-pysrc.html#EnginePort._Msg.sync">source&nbsp;code</a></span>
128
129 </td>
130 </tr>
131 </table>
132
133 </td>
134 </tr>
135 </table>
136 <!-- ==================== NAVIGATION BAR ==================== -->
137 <table class="navbar" border="0" width="100%" cellpadding="0"
138 bgcolor="#a0c0ff" cellspacing="0">
139 <tr valign="middle">
140
141 <!-- Tree link -->
142 <th>&nbsp;&nbsp;&nbsp;<a
143 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
144
145 <!-- Index link -->
146 <th>&nbsp;&nbsp;&nbsp;<a
147 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
148
149 <!-- Help link -->
150 <th>&nbsp;&nbsp;&nbsp;<a
151 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
152
153 <!-- Project homepage -->
154 <th class="navbar" align="right" width="100%">
155 <table border="0" cellpadding="0" cellspacing="0">
156 <tr><th class="navbar" align="center"
157 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
158 </tr></table></th>
159 </tr>
160 </table>
161 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
162 <tr>
163 <td align="left" class="footer">
164 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
165 </td>
166 <td align="right" class="footer">
167 <a target="mainFrame" href="http://epydoc.sourceforge.net"
168 >http://epydoc.sourceforge.net</a>
169 </td>
170 </tr>
171 </table>
172
173 <script type="text/javascript">
174 <!--
175 // Private objects are initially displayed (because if
176 // javascript is turned off then we want them to be
177 // visible); but by default, we want to hide them. So hide
178 // them unless we have a cookie that says to show them.
179 checkCookie();
180 // -->
181 </script>
182 </body>
183 </html>
+0
-163
doc/epydoc/html/ClusterShell.Worker.Pdsh-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Pdsh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;Pdsh
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Pdsh-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module Pdsh</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html">source&nbsp;code</a></span></p>
61 <p>WorkerPdsh</p>
62 <p>ClusterShell worker for executing commands with LLNL pdsh.</p>
63
64 <!-- ==================== CLASSES ==================== -->
65 <a name="section-Classes"></a>
66 <table class="summary" border="1" cellpadding="3"
67 cellspacing="0" width="100%" bgcolor="white">
68 <tr bgcolor="#70b0f0" class="table-header">
69 <td colspan="2" class="table-header">
70 <table border="0" cellpadding="0" cellspacing="0" width="100%">
71 <tr valign="top">
72 <td align="left"><span class="table-header">Classes</span></td>
73 <td align="right" valign="top"
74 ><span class="options">[<a href="#section-Classes"
75 class="privatelink" onclick="toggle_private();"
76 >hide private</a>]</span></td>
77 </tr>
78 </table>
79 </td>
80 </tr>
81 <tr>
82 <td width="15%" align="right" valign="top" class="summary">
83 <span class="summary-type">&nbsp;</span>
84 </td><td class="summary">
85 <a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html" class="summary-name">WorkerPdsh</a><br />
86 ClusterShell pdsh-based worker Class.
87 </td>
88 </tr>
89 </table>
90 <!-- ==================== VARIABLES ==================== -->
91 <a name="section-Variables"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Variables</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-Variables"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td width="15%" align="right" valign="top" class="summary">
109 <span class="summary-type">&nbsp;</span>
110 </td><td class="summary">
111 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Worker'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Worker</code><code class="variable-quote">'</code></code>
112 </td>
113 </tr>
114 </table>
115 <!-- ==================== NAVIGATION BAR ==================== -->
116 <table class="navbar" border="0" width="100%" cellpadding="0"
117 bgcolor="#a0c0ff" cellspacing="0">
118 <tr valign="middle">
119
120 <!-- Tree link -->
121 <th>&nbsp;&nbsp;&nbsp;<a
122 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
123
124 <!-- Index link -->
125 <th>&nbsp;&nbsp;&nbsp;<a
126 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
127
128 <!-- Help link -->
129 <th>&nbsp;&nbsp;&nbsp;<a
130 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
131
132 <!-- Project homepage -->
133 <th class="navbar" align="right" width="100%">
134 <table border="0" cellpadding="0" cellspacing="0">
135 <tr><th class="navbar" align="center"
136 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
137 </tr></table></th>
138 </tr>
139 </table>
140 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
141 <tr>
142 <td align="left" class="footer">
143 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
144 </td>
145 <td align="right" class="footer">
146 <a target="mainFrame" href="http://epydoc.sourceforge.net"
147 >http://epydoc.sourceforge.net</a>
148 </td>
149 </tr>
150 </table>
151
152 <script type="text/javascript">
153 <!--
154 // Private objects are initially displayed (because if
155 // javascript is turned off then we want them to be
156 // visible); but by default, we want to hide them. So hide
157 // them unless we have a cookie that says to show them.
158 checkCookie();
159 // -->
160 </script>
161 </body>
162 </html>
+0
-551
doc/epydoc/html/ClusterShell.Worker.Pdsh-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Pdsh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;Pdsh
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Pdsh-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Worker.Pdsh-module.html">Module ClusterShell.Worker.Pdsh</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Pdsh.py 292 2010-07-15 22:43:46Z st-cea $</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">WorkerPdsh</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">ClusterShell worker for executing commands with LLNL pdsh.</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
100 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> </tt>
101 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">errno</tt> </tt>
102 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
103 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
104 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
105 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> </tt>
106 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Module ClusterShell.NodeSet=ClusterShell.NodeSet-module.html,Class ClusterShell.NodeSet.NodeSet=ClusterShell.NodeSet.NodeSet-class.html"><a title="ClusterShell.NodeSet
107 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-1', 'NodeSet', 'link-1');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name"><a title="ClusterShell.NodeSet
108 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-2', 'NodeSet', 'link-1');">NodeSet</a></tt> </tt>
109 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-3', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Package ClusterShell.Worker=ClusterShell.Worker-module.html,Module ClusterShell.Worker.Worker=ClusterShell.Worker.Worker-module.html,Class ClusterShell.Worker.Worker.Worker=ClusterShell.Worker.Worker.Worker-class.html"><a title="ClusterShell.Worker
110 ClusterShell.Worker.Worker
111 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-4', 'Worker', 'link-4');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name" targets="Module ClusterShell.Worker.EngineClient=ClusterShell.Worker.EngineClient-module.html,Class ClusterShell.Worker.EngineClient.EngineClient=ClusterShell.Worker.EngineClient.EngineClient-class.html"><a title="ClusterShell.Worker.EngineClient
112 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-5', 'EngineClient', 'link-5');">EngineClient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name"><a title="ClusterShell.Worker.EngineClient
113 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-6', 'EngineClient', 'link-5');">EngineClient</a></tt> </tt>
114 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-7" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-7', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="ClusterShell.Worker
115 ClusterShell.Worker.Worker
116 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-8', 'Worker', 'link-4');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="ClusterShell.Worker.EngineClient
117 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-9', 'EngineClient', 'link-5');">EngineClient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-10" class="py-name" targets="Class ClusterShell.Worker.EngineClient.EngineClientError=ClusterShell.Worker.EngineClient.EngineClientError-class.html"><a title="ClusterShell.Worker.EngineClient.EngineClientError" class="py-name" href="#" onclick="return doclink('link-10', 'EngineClientError', 'link-10');">EngineClientError</a></tt> </tt>
118 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-11" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-11', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="ClusterShell.Worker
119 ClusterShell.Worker.Worker
120 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-12', 'Worker', 'link-4');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="ClusterShell.Worker.EngineClient
121 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-13', 'EngineClient', 'link-5');">EngineClient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-14" class="py-name" targets="Class ClusterShell.Worker.EngineClient.EngineClientNotSupportedError=ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html"><a title="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError" class="py-name" href="#" onclick="return doclink('link-14', 'EngineClientNotSupportedError', 'link-14');">EngineClientNotSupportedError</a></tt> </tt>
122 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-15" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-15', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="ClusterShell.Worker
123 ClusterShell.Worker.Worker
124 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-16', 'Worker', 'link-4');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="ClusterShell.Worker
125 ClusterShell.Worker.Worker
126 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-17', 'Worker', 'link-4');">Worker</a></tt> <tt class="py-keyword">import</tt> <tt id="link-18" class="py-name" targets="Class ClusterShell.Worker.Worker.DistantWorker=ClusterShell.Worker.Worker.DistantWorker-class.html"><a title="ClusterShell.Worker.Worker.DistantWorker" class="py-name" href="#" onclick="return doclink('link-18', 'DistantWorker', 'link-18');">DistantWorker</a></tt> </tt>
127 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-19" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-19', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="ClusterShell.Worker
128 ClusterShell.Worker.Worker
129 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-20', 'Worker', 'link-4');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="ClusterShell.Worker
130 ClusterShell.Worker.Worker
131 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-21', 'Worker', 'link-4');">Worker</a></tt> <tt class="py-keyword">import</tt> <tt id="link-22" class="py-name" targets="Class ClusterShell.Worker.Worker.WorkerError=ClusterShell.Worker.Worker.WorkerError-class.html"><a title="ClusterShell.Worker.Worker.WorkerError" class="py-name" href="#" onclick="return doclink('link-22', 'WorkerError', 'link-22');">WorkerError</a></tt><tt class="py-op">,</tt> <tt id="link-23" class="py-name" targets="Class ClusterShell.Worker.Worker.WorkerBadArgumentError=ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html"><a title="ClusterShell.Worker.Worker.WorkerBadArgumentError" class="py-name" href="#" onclick="return doclink('link-23', 'WorkerBadArgumentError', 'link-23');">WorkerBadArgumentError</a></tt> </tt>
132 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> </tt>
133 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt>
134 <a name="WorkerPdsh"></a><div id="WorkerPdsh-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="WorkerPdsh-toggle" onclick="return toggle('WorkerPdsh');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a><tt class="py-op">(</tt><tt class="py-base-class">EngineClient</tt><tt class="py-op">,</tt> <tt class="py-base-class">DistantWorker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
135 </div><div id="WorkerPdsh-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="WorkerPdsh-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
136 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> ClusterShell pdsh-based worker Class.</tt> </tt>
137 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
138 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> Remote Shell (pdsh) usage example:</tt> </tt>
139 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; worker = WorkerPdsh(nodeset, handler=MyEventHandler(),</tt> </tt>
140 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> ... timeout=30, command="/bin/hostname")</tt> </tt>
141 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.schedule(worker) # schedule worker for execution</tt> </tt>
142 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.resume() # run</tt> </tt>
143 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
144 <a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"> Remote Copy (pdcp) usage example: </tt> </tt>
145 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; worker = WorkerPdsh(nodeset, handler=MyEventHandler(),</tt> </tt>
146 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> ... timeout=30, source="/etc/my.conf",</tt> </tt>
147 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> ... dest="/etc/my.conf")</tt> </tt>
148 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.schedule(worker) # schedule worker for execution</tt> </tt>
149 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.resume() # run</tt> </tt>
150 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
151 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-docstring"> Known limitations:</tt> </tt>
152 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-docstring"> - write() is not supported by WorkerPdsh</tt> </tt>
153 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt class="py-docstring"> - return codes == 0 are not garanteed when a timeout is used (rc &gt; 0</tt> </tt>
154 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-docstring"> are fine)</tt> </tt>
155 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
156 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> </tt>
157 <a name="WorkerPdsh.__init__"></a><div id="WorkerPdsh.__init__-def"><a name="L77"></a><tt class="py-lineno"> 77</tt> <a class="py-toggle" href="#" id="WorkerPdsh.__init__-toggle" onclick="return toggle('WorkerPdsh.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-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">nodes</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</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>
158 </div><div id="WorkerPdsh.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh.__init__-expanded"><a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
159 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-docstring"> Initialize Pdsh worker instance.</tt> </tt>
160 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
161 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt id="link-24" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker" class="py-name" href="#" onclick="return doclink('link-24', 'DistantWorker', 'link-18');">DistantWorker</a></tt><tt class="py-op">.</tt><tt id="link-25" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
162 ClusterShell.Engine.Engine.Engine.__init__
163 ClusterShell.Engine.Engine.EngineAbortException.__init__
164 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
165 ClusterShell.Engine.Engine.EngineTimer.__init__
166 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
167 ClusterShell.Engine.Engine._EngineTimerQ.__init__
168 ClusterShell.Engine.Poll.EnginePoll.__init__
169 ClusterShell.MsgTree.MsgTree.__init__
170 ClusterShell.MsgTree.MsgTreeElem.__init__
171 ClusterShell.NodeSet.NodeSet.__init__
172 ClusterShell.NodeSet.NodeSetBase.__init__
173 ClusterShell.NodeSet.NodeSetParseError.__init__
174 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
175 ClusterShell.NodeSet.ParsingEngine.__init__
176 ClusterShell.NodeSet.RangeSet.__init__
177 ClusterShell.NodeSet.RangeSetPaddingError.__init__
178 ClusterShell.NodeSet.RangeSetParseError.__init__
179 ClusterShell.NodeUtils.GroupResolver.__init__
180 ClusterShell.NodeUtils.GroupResolverConfig.__init__
181 ClusterShell.NodeUtils.GroupSource.__init__
182 ClusterShell.NodeUtils.GroupSourceException.__init__
183 ClusterShell.Task.Task._SuspendCondition.__init__
184 ClusterShell.Task.Task.__init__
185 ClusterShell.Task._TaskMsgTree.__init__
186 ClusterShell.Worker.EngineClient.EngineClient.__init__
187 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
188 ClusterShell.Worker.EngineClient.EnginePort.__init__
189 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
190 ClusterShell.Worker.Popen.WorkerPopen.__init__
191 ClusterShell.Worker.Ssh.Scp.__init__
192 ClusterShell.Worker.Ssh.Ssh.__init__
193 ClusterShell.Worker.Ssh.WorkerSsh.__init__
194 ClusterShell.Worker.Worker.DistantWorker.__init__
195 ClusterShell.Worker.Worker.Worker.__init__
196 ClusterShell.Worker.Worker.WorkerSimple.__init__
197 clubak.Display.__init__
198 clush.ClushConfig.__init__
199 clush.ClushConfigError.__init__
200 clush.DirectOutputHandler.__init__
201 clush.Display.__init__
202 clush.GatherOutputHandler.__init__
203 clush.RunTimer.__init__
204 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-25', '__init__', 'link-25');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
205 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> </tt>
206 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt> <tt class="py-op">=</tt> <tt id="link-26" class="py-name"><a title="ClusterShell.NodeSet
207 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-26', 'NodeSet', 'link-1');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">nodes</tt><tt class="py-op">)</tt> </tt>
208 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">closed_nodes</tt> <tt class="py-op">=</tt> <tt id="link-27" class="py-name"><a title="ClusterShell.NodeSet
209 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-27', 'NodeSet', 'link-1');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
210 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> </tt>
211 <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">command</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
212 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-28', 'get', 'link-28');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'command'</tt><tt class="py-op">)</tt> </tt>
213 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
214 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-29', 'get', 'link-28');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'source'</tt><tt class="py-op">)</tt> </tt>
215 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dest</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
216 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-30', 'get', 'link-28');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'dest'</tt><tt class="py-op">)</tt> </tt>
217 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
218 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-name">autoclose</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
219 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-31', 'get', 'link-28');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'autoclose'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
220 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
221 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-32', 'get', 'link-28');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'stderr'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
222 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> </tt>
223 <a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="ClusterShell.Worker.EngineClient
224 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-33', 'EngineClient', 'link-5');">EngineClient</a></tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
225 ClusterShell.Engine.Engine.Engine.__init__
226 ClusterShell.Engine.Engine.EngineAbortException.__init__
227 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
228 ClusterShell.Engine.Engine.EngineTimer.__init__
229 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
230 ClusterShell.Engine.Engine._EngineTimerQ.__init__
231 ClusterShell.Engine.Poll.EnginePoll.__init__
232 ClusterShell.MsgTree.MsgTree.__init__
233 ClusterShell.MsgTree.MsgTreeElem.__init__
234 ClusterShell.NodeSet.NodeSet.__init__
235 ClusterShell.NodeSet.NodeSetBase.__init__
236 ClusterShell.NodeSet.NodeSetParseError.__init__
237 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
238 ClusterShell.NodeSet.ParsingEngine.__init__
239 ClusterShell.NodeSet.RangeSet.__init__
240 ClusterShell.NodeSet.RangeSetPaddingError.__init__
241 ClusterShell.NodeSet.RangeSetParseError.__init__
242 ClusterShell.NodeUtils.GroupResolver.__init__
243 ClusterShell.NodeUtils.GroupResolverConfig.__init__
244 ClusterShell.NodeUtils.GroupSource.__init__
245 ClusterShell.NodeUtils.GroupSourceException.__init__
246 ClusterShell.Task.Task._SuspendCondition.__init__
247 ClusterShell.Task.Task.__init__
248 ClusterShell.Task._TaskMsgTree.__init__
249 ClusterShell.Worker.EngineClient.EngineClient.__init__
250 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
251 ClusterShell.Worker.EngineClient.EnginePort.__init__
252 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
253 ClusterShell.Worker.Popen.WorkerPopen.__init__
254 ClusterShell.Worker.Ssh.Scp.__init__
255 ClusterShell.Worker.Ssh.Ssh.__init__
256 ClusterShell.Worker.Ssh.WorkerSsh.__init__
257 ClusterShell.Worker.Worker.DistantWorker.__init__
258 ClusterShell.Worker.Worker.Worker.__init__
259 ClusterShell.Worker.Worker.WorkerSimple.__init__
260 clubak.Display.__init__
261 clush.ClushConfig.__init__
262 clush.ClushConfigError.__init__
263 clush.DirectOutputHandler.__init__
264 clush.Display.__init__
265 clush.GatherOutputHandler.__init__
266 clush.RunTimer.__init__
267 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-34', '__init__', 'link-25');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</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">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt> </tt>
268 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> </tt>
269 <a name="L95"></a><tt class="py-lineno"> 95</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">command</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>
270 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-comment"># PDSH</tt> </tt>
271 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
272 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dest</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
273 <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">mode</tt> <tt class="py-op">=</tt> <tt class="py-string">'pdsh'</tt> </tt>
274 <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">source</tt><tt class="py-op">:</tt> </tt>
275 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-comment"># PDCP</tt> </tt>
276 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
277 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> <tt class="py-op">=</tt> <tt class="py-string">'pdcp'</tt> </tt>
278 <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 class="py-name">isdir</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">isdir</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt><tt class="py-op">)</tt> </tt>
279 <a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-comment"># Preserve modification times and modes?</tt> </tt>
280 <a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">preserve</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
281 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-35', 'get', 'link-28');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'preserve'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
282 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
283 <a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-36" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerBadArgumentError" class="py-name" href="#" onclick="return doclink('link-36', 'WorkerBadArgumentError', 'link-23');">WorkerBadArgumentError</a></tt><tt class="py-op">(</tt><tt class="py-string">"missing command or source in "</tt> \ </tt>
284 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-string">"WorkerPdsh constructor"</tt><tt class="py-op">)</tt> </tt>
285 <a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
286 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_buf</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
287 </div><a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> </tt>
288 <a name="WorkerPdsh._engine_clients"></a><div id="WorkerPdsh._engine_clients-def"><a name="L113"></a><tt class="py-lineno">113</tt> <a class="py-toggle" href="#" id="WorkerPdsh._engine_clients-toggle" onclick="return toggle('WorkerPdsh._engine_clients');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_engine_clients">_engine_clients</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
289 </div><div id="WorkerPdsh._engine_clients-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh._engine_clients-expanded"><a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">]</tt> </tt>
290 </div><a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> </tt>
291 <a name="WorkerPdsh._start"></a><div id="WorkerPdsh._start-def"><a name="L116"></a><tt class="py-lineno">116</tt> <a class="py-toggle" href="#" id="WorkerPdsh._start-toggle" onclick="return toggle('WorkerPdsh._start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_start">_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
292 </div><div id="WorkerPdsh._start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh._start-expanded"><a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
293 <a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"><tt class="py-docstring"> Start worker, initialize buffers, prepare command.</tt> </tt>
294 <a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
295 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-comment"># Initialize worker read buffer</tt> </tt>
296 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_buf</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
297 <a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> </tt>
298 <a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-name">pdsh_env</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
299 <a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> </tt>
300 <a name="L125"></a><tt class="py-lineno">125</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">command</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>
301 <a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-comment"># Build pdsh command</tt> </tt>
302 <a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-name">executable</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-37', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"pdsh_path"</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">"pdsh"</tt> </tt>
303 <a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">executable</tt><tt class="py-op">,</tt> <tt class="py-string">"-b"</tt> <tt class="py-op">]</tt> </tt>
304 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> </tt>
305 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-name">fanout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-38', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"fanout"</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
306 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fanout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
307 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.append()=ClusterShell.MsgTree.MsgTreeElem-class.html#append"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-39', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-f %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">fanout</tt><tt class="py-op">)</tt> </tt>
308 <a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt>
309 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-comment"># Pdsh flag '-t' do not really works well. Better to use</tt> </tt>
310 <a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-comment"># PDSH_SSH_ARGS_APPEND variable to transmit ssh ConnectTimeout</tt> </tt>
311 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-comment"># flag.</tt> </tt>
312 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-name">connect_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-40', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"connect_timeout"</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
313 <a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">connect_timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
314 <a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">pdsh_env</tt><tt class="py-op">[</tt><tt class="py-string">'PDSH_SSH_ARGS_APPEND'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">"-o ConnectTimeout=%d"</tt> <tt class="py-op">%</tt> \ </tt>
315 <a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">connect_timeout</tt> </tt>
316 <a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> </tt>
317 <a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">command_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-41', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"command_timeout"</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
318 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command_timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
319 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-42', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-u %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">command_timeout</tt><tt class="py-op">)</tt> </tt>
320 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> </tt>
321 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-43', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-w %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt><tt class="py-op">)</tt> </tt>
322 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-44', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</tt><tt class="py-op">)</tt> </tt>
323 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> </tt>
324 <a name="L149"></a><tt class="py-lineno">149</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">task</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-45', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
325 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-46', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"PDSH: %s"</tt> <tt class="py-op">%</tt> \ </tt>
326 <a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method ClusterShell.Task.Task.join()=ClusterShell.Task.Task-class.html#join"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-47', 'join', 'link-47');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_l</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
327 <a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
328 <a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-comment"># Build pdcp command</tt> </tt>
329 <a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-name">executable</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-48', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"pdcp_path"</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">"pdcp"</tt> </tt>
330 <a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">executable</tt><tt class="py-op">,</tt> <tt class="py-string">"-b"</tt> <tt class="py-op">]</tt> </tt>
331 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> </tt>
332 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">fanout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-49', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"fanout"</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
333 <a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fanout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
334 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-50', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-f %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">fanout</tt><tt class="py-op">)</tt> </tt>
335 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> </tt>
336 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-name">connect_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-51', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"connect_timeout"</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
337 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">connect_timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
338 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-52', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-t %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">connect_timeout</tt><tt class="py-op">)</tt> </tt>
339 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> </tt>
340 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-53', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-w %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt><tt class="py-op">)</tt> </tt>
341 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> </tt>
342 <a name="L167"></a><tt class="py-lineno">167</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">isdir</tt><tt class="py-op">:</tt> </tt>
343 <a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-54', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-r"</tt><tt class="py-op">)</tt> </tt>
344 <a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> </tt>
345 <a name="L170"></a><tt class="py-lineno">170</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">preserve</tt><tt class="py-op">:</tt> </tt>
346 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-55', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-p"</tt><tt class="py-op">)</tt> </tt>
347 <a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> </tt>
348 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-56', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt><tt class="py-op">)</tt> </tt>
349 <a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-57', 'append', 'link-39');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dest</tt><tt class="py-op">)</tt> </tt>
350 <a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> </tt>
351 <a name="L176"></a><tt class="py-lineno">176</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">task</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-58', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
352 <a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-59', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt><tt class="py-string">"PDCP: %s"</tt> <tt class="py-op">%</tt> \ </tt>
353 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-60', 'join', 'link-47');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_l</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
354 <a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> </tt>
355 <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 class="py-name">popen</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock"><a title="ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock" class="py-name" href="#" onclick="return doclink('link-61', '_exec_nonblock', 'link-61');">_exec_nonblock</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_l</tt><tt class="py-op">,</tt> <tt class="py-name">env</tt><tt class="py-op">=</tt><tt class="py-name">pdsh_env</tt><tt class="py-op">)</tt> </tt>
356 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
357 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> </tt>
358 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt> </tt>
359 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> </tt>
360 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker._on_start()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start"><a title="ClusterShell.Worker.Worker.DistantWorker._on_start" class="py-name" href="#" onclick="return doclink('link-62', '_on_start', 'link-62');">_on_start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
361 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> </tt>
362 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
363 </div><a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> </tt>
364 <a name="WorkerPdsh.write"></a><div id="WorkerPdsh.write-def"><a name="L189"></a><tt class="py-lineno">189</tt> <a class="py-toggle" href="#" id="WorkerPdsh.write-toggle" onclick="return toggle('WorkerPdsh.write');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#write">write</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">buf</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
365 </div><div id="WorkerPdsh.write-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh.write-expanded"><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
366 <a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"><tt class="py-docstring"> Write data to process. Not supported with Pdsh worker.</tt> </tt>
367 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
368 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-63" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError" class="py-name" href="#" onclick="return doclink('link-63', 'EngineClientNotSupportedError', 'link-14');">EngineClientNotSupportedError</a></tt><tt class="py-op">(</tt><tt class="py-string">"writing is not "</tt> \ </tt>
369 <a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-string">"supported by pdsh worker"</tt><tt class="py-op">)</tt> </tt>
370 </div><a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> </tt>
371 <a name="WorkerPdsh._close"></a><div id="WorkerPdsh._close-def"><a name="L196"></a><tt class="py-lineno">196</tt> <a class="py-toggle" href="#" id="WorkerPdsh._close-toggle" onclick="return toggle('WorkerPdsh._close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_close">_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
372 </div><div id="WorkerPdsh._close-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh._close-expanded"><a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
373 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"><tt class="py-docstring"> Close worker. Called by engine after worker has been</tt> </tt>
374 <a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"><tt class="py-docstring"> unregistered. This method should handle all termination types</tt> </tt>
375 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"><tt class="py-docstring"> (normal, forced or on timeout).</tt> </tt>
376 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
377 <a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">force</tt> <tt class="py-keyword">or</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
378 <a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-name">prc</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
379 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prc</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
380 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-comment"># process is still running, kill it</tt> </tt>
381 <a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">kill</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">pid</tt><tt class="py-op">,</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGKILL</tt><tt class="py-op">)</tt> </tt>
382 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
383 <a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name" targets="Method ClusterShell.Event.EventHandler._invoke()=ClusterShell.Event.EventHandler-class.html#_invoke,Method ClusterShell.Worker.Worker.Worker._invoke()=ClusterShell.Worker.Worker.Worker-class.html#_invoke"><a title="ClusterShell.Event.EventHandler._invoke
384 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-64', '_invoke', 'link-64');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_timeout"</tt><tt class="py-op">)</tt> </tt>
385 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
386 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">prc</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name" targets="Class Method ClusterShell.Task.Task.wait()=ClusterShell.Task.Task-class.html#wait"><a title="ClusterShell.Task.Task.wait" class="py-name" href="#" onclick="return doclink('link-65', 'wait', 'link-65');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
387 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prc</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
388 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">prc</tt> </tt>
389 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rc</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
390 <a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-66" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerError" class="py-name" href="#" onclick="return doclink('link-66', 'WorkerError', 'link-22');">WorkerError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Cannot run pdsh (error %d)"</tt> <tt class="py-op">%</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
391 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> </tt>
392 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-comment"># close</tt> </tt>
393 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</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>
394 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</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>
395 <a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> </tt>
396 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
397 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">closed_nodes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
398 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name" targets="Method ClusterShell.Worker.Ssh.WorkerSsh._on_node_timeout()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_timeout,Method ClusterShell.Worker.Worker.DistantWorker._on_node_timeout()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_timeout"><a title="ClusterShell.Worker.Ssh.WorkerSsh._on_node_timeout
399 ClusterShell.Worker.Worker.DistantWorker._on_node_timeout" class="py-name" href="#" onclick="return doclink('link-67', '_on_node_timeout', 'link-67');">_on_node_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
400 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
401 <a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">closed_nodes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
402 <a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Method ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_on_node_rc,Method ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_rc,Method ClusterShell.Worker.Worker.DistantWorker._on_node_rc()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_rc"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc
403 ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc
404 ClusterShell.Worker.Worker.DistantWorker._on_node_rc" class="py-name" href="#" onclick="return doclink('link-68', '_on_node_rc', 'link-68');">_on_node_rc</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
405 <a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> </tt>
406 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
407 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-69', '_invoke', 'link-64');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_close"</tt><tt class="py-op">)</tt> </tt>
408 </div><a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> </tt>
409 <a name="WorkerPdsh._parse_line"></a><div id="WorkerPdsh._parse_line-def"><a name="L229"></a><tt class="py-lineno">229</tt> <a class="py-toggle" href="#" id="WorkerPdsh._parse_line-toggle" onclick="return toggle('WorkerPdsh._parse_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_parse_line">_parse_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">,</tt> <tt class="py-param">stderr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
410 </div><div id="WorkerPdsh._parse_line-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh._parse_line-expanded"><a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
411 <a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"><tt class="py-docstring"> Parse Pdsh line syntax.</tt> </tt>
412 <a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
413 <a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">"pdsh@"</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> \ </tt>
414 <a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">"pdcp@"</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> \ </tt>
415 <a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">"sending "</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
416 <a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
417 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-comment"># pdsh@cors113: cors115: ssh exited with exit code 1</tt> </tt>
418 <a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-comment"># 0 1 2 3 4 5 6 7</tt> </tt>
419 <a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-comment"># corsUNKN: ssh: corsUNKN: Name or service not known</tt> </tt>
420 <a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-comment"># 0 1 2 3 4 5 6 7</tt> </tt>
421 <a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-comment"># pdsh@fortoy0: fortoy101: command timeout</tt> </tt>
422 <a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-comment"># 0 1 2 3</tt> </tt>
423 <a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-comment"># sending SIGTERM to ssh fortoy112 pid 32014</tt> </tt>
424 <a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-comment"># 0 1 2 3 4 5 6</tt> </tt>
425 <a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-comment"># pdcp@cors113: corsUNKN: ssh exited with exit code 255</tt> </tt>
426 <a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-comment"># 0 1 2 3 4 5 6 7</tt> </tt>
427 <a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-comment"># pdcp@cors113: cors115: fatal: /var/cache/shine/...</tt> </tt>
428 <a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-comment"># 0 1 2 3...</tt> </tt>
429 <a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> </tt>
430 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.split()=ClusterShell.NodeSet.NodeSet-class.html#split,Method ClusterShell.NodeSet.RangeSet.split()=ClusterShell.NodeSet.RangeSet-class.html#split"><a title="ClusterShell.NodeSet.NodeSet.split
431 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-70', 'split', 'link-70');">split</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
432 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-comment"># Set return code for nodename of worker</tt> </tt>
433 <a name="L252"></a><tt class="py-lineno">252</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">mode</tt> <tt class="py-op">==</tt> <tt class="py-string">'pdsh'</tt><tt class="py-op">:</tt> </tt>
434 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">4</tt> <tt class="py-keyword">and</tt> <tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">"command"</tt> <tt class="py-keyword">and</tt> \ </tt>
435 <a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">"timeout"</tt><tt class="py-op">:</tt> </tt>
436 <a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
437 <a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">8</tt> <tt class="py-keyword">and</tt> <tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">"exited"</tt> <tt class="py-keyword">and</tt> \ </tt>
438 <a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-number">7</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">isdigit</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
439 <a name="L258"></a><tt class="py-lineno">258</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="ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc
440 ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc
441 ClusterShell.Worker.Worker.DistantWorker._on_node_rc" class="py-name" href="#" onclick="return doclink('link-71', '_on_node_rc', 'link-68');">_on_node_rc</a></tt><tt class="py-op">(</tt><tt class="py-name">words</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-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-number">7</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
442 <a name="L259"></a><tt class="py-lineno">259</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">mode</tt> <tt class="py-op">==</tt> <tt class="py-string">'pdcp'</tt><tt class="py-op">:</tt> </tt>
443 <a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc
444 ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc
445 ClusterShell.Worker.Worker.DistantWorker._on_node_rc" class="py-name" href="#" onclick="return doclink('link-72', '_on_node_rc', 'link-68');">_on_node_rc</a></tt><tt class="py-op">(</tt><tt class="py-name">words</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-op">-</tt><tt class="py-number">1</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">ENOENT</tt><tt class="py-op">)</tt> </tt>
446 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> </tt>
447 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
448 <a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
449 <a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-73" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClientError" class="py-name" href="#" onclick="return doclink('link-73', 'EngineClientError', 'link-10');">EngineClientError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
450 <a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
451 <a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-comment"># split pdsh reply "nodename: msg"</tt> </tt>
452 <a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-name">nodename</tt><tt class="py-op">,</tt> <tt id="link-74" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-74', 'msg', 'link-74');">msg</a></tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.split
453 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-75', 'split', 'link-70');">split</a></tt><tt class="py-op">(</tt><tt class="py-string">': '</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
454 <a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stderr</tt><tt class="py-op">:</tt> </tt>
455 <a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker._on_node_errline()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline"><a title="ClusterShell.Worker.Worker.DistantWorker._on_node_errline" class="py-name" href="#" onclick="return doclink('link-76', '_on_node_errline', 'link-76');">_on_node_errline</a></tt><tt class="py-op">(</tt><tt class="py-name">nodename</tt><tt class="py-op">,</tt> <tt id="link-77" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-77', 'msg', 'link-74');">msg</a></tt><tt class="py-op">)</tt> </tt>
456 <a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
457 <a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker._on_node_msgline()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline"><a title="ClusterShell.Worker.Worker.DistantWorker._on_node_msgline" class="py-name" href="#" onclick="return doclink('link-78', '_on_node_msgline', 'link-78');">_on_node_msgline</a></tt><tt class="py-op">(</tt><tt class="py-name">nodename</tt><tt class="py-op">,</tt> <tt id="link-79" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-79', 'msg', 'link-74');">msg</a></tt><tt class="py-op">)</tt> </tt>
458 </div><a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> </tt>
459 <a name="WorkerPdsh._handle_read"></a><div id="WorkerPdsh._handle_read-def"><a name="L273"></a><tt class="py-lineno">273</tt> <a class="py-toggle" href="#" id="WorkerPdsh._handle_read-toggle" onclick="return toggle('WorkerPdsh._handle_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_read">_handle_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
460 </div><div id="WorkerPdsh._handle_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh._handle_read-expanded"><a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
461 <a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"><tt class="py-docstring"> Engine is telling us a read is available.</tt> </tt>
462 <a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
463 <a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-name">debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-80', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
464 <a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
465 <a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-81', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt> </tt>
466 <a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> </tt>
467 <a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-82" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-82', 'msg', 'link-74');">msg</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._readlines()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines"><a title="ClusterShell.Worker.EngineClient.EngineClient._readlines" class="py-name" href="#" onclick="return doclink('link-83', '_readlines', 'link-83');">_readlines</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
468 <a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
469 <a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"PDSH: %s"</tt> <tt class="py-op">%</tt> <tt id="link-84" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-84', 'msg', 'link-74');">msg</a></tt><tt class="py-op">)</tt> </tt>
470 <a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name" targets="Method ClusterShell.Worker.Pdsh.WorkerPdsh._parse_line()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_parse_line"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh._parse_line" class="py-name" href="#" onclick="return doclink('link-85', '_parse_line', 'link-85');">_parse_line</a></tt><tt class="py-op">(</tt><tt id="link-86" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-86', 'msg', 'link-74');">msg</a></tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
471 </div><a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> </tt>
472 <a name="WorkerPdsh._handle_error"></a><div id="WorkerPdsh._handle_error-def"><a name="L286"></a><tt class="py-lineno">286</tt> <a class="py-toggle" href="#" id="WorkerPdsh._handle_error-toggle" onclick="return toggle('WorkerPdsh._handle_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_error">_handle_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
473 </div><div id="WorkerPdsh._handle_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh._handle_error-expanded"><a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
474 <a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"><tt class="py-docstring"> Engine is telling us an error read is available.</tt> </tt>
475 <a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
476 <a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-name">debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-87', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
477 <a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
478 <a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-88', 'info', 'link-37');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt> </tt>
479 <a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> </tt>
480 <a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-89" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-89', 'msg', 'link-74');">msg</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._readerrlines()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines"><a title="ClusterShell.Worker.EngineClient.EngineClient._readerrlines" class="py-name" href="#" onclick="return doclink('link-90', '_readerrlines', 'link-90');">_readerrlines</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
481 <a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
482 <a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"PDSH@STDERR: %s"</tt> <tt class="py-op">%</tt> <tt id="link-91" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-91', 'msg', 'link-74');">msg</a></tt><tt class="py-op">)</tt> </tt>
483 <a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh._parse_line" class="py-name" href="#" onclick="return doclink('link-92', '_parse_line', 'link-85');">_parse_line</a></tt><tt class="py-op">(</tt><tt id="link-93" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-93', 'msg', 'link-74');">msg</a></tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
484 </div><a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> </tt>
485 <a name="WorkerPdsh._on_node_rc"></a><div id="WorkerPdsh._on_node_rc-def"><a name="L299"></a><tt class="py-lineno">299</tt> <a class="py-toggle" href="#" id="WorkerPdsh._on_node_rc-toggle" onclick="return toggle('WorkerPdsh._on_node_rc');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_on_node_rc">_on_node_rc</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">rc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
486 </div><div id="WorkerPdsh._on_node_rc-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPdsh._on_node_rc-expanded"><a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
487 <a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"><tt class="py-docstring"> Return code received from a node, update last* stuffs.</tt> </tt>
488 <a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
489 <a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt id="link-94" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker" class="py-name" href="#" onclick="return doclink('link-94', 'DistantWorker', 'link-18');">DistantWorker</a></tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc
490 ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc
491 ClusterShell.Worker.Worker.DistantWorker._on_node_rc" class="py-name" href="#" onclick="return doclink('link-95', '_on_node_rc', 'link-68');">_on_node_rc</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
492 <a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">closed_nodes</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.add()=ClusterShell.Engine.Engine.Engine-class.html#add,Method ClusterShell.MsgTree.MsgTree.add()=ClusterShell.MsgTree.MsgTree-class.html#add,Method ClusterShell.NodeSet.NodeSetBase.add()=ClusterShell.NodeSet.NodeSetBase-class.html#add,Method ClusterShell.NodeSet.RangeSet.add()=ClusterShell.NodeSet.RangeSet-class.html#add"><a title="ClusterShell.Engine.Engine.Engine.add
493 ClusterShell.MsgTree.MsgTree.add
494 ClusterShell.NodeSet.NodeSetBase.add
495 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-96', 'add', 'link-96');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
496 </div></div><a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> </tt><script type="text/javascript">
497 <!--
498 expandto(location.href);
499 // -->
500 </script>
501 </pre>
502 <br />
503 <!-- ==================== NAVIGATION BAR ==================== -->
504 <table class="navbar" border="0" width="100%" cellpadding="0"
505 bgcolor="#a0c0ff" cellspacing="0">
506 <tr valign="middle">
507
508 <!-- Tree link -->
509 <th>&nbsp;&nbsp;&nbsp;<a
510 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
511
512 <!-- Index link -->
513 <th>&nbsp;&nbsp;&nbsp;<a
514 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
515
516 <!-- Help link -->
517 <th>&nbsp;&nbsp;&nbsp;<a
518 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
519
520 <!-- Project homepage -->
521 <th class="navbar" align="right" width="100%">
522 <table border="0" cellpadding="0" cellspacing="0">
523 <tr><th class="navbar" align="center"
524 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
525 </tr></table></th>
526 </tr>
527 </table>
528 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
529 <tr>
530 <td align="left" class="footer">
531 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
532 </td>
533 <td align="right" class="footer">
534 <a target="mainFrame" href="http://epydoc.sourceforge.net"
535 >http://epydoc.sourceforge.net</a>
536 </td>
537 </tr>
538 </table>
539
540 <script type="text/javascript">
541 <!--
542 // Private objects are initially displayed (because if
543 // javascript is turned off then we want them to be
544 // visible); but by default, we want to hide them. So hide
545 // them unless we have a cookie that says to show them.
546 checkCookie();
547 // -->
548 </script>
549 </body>
550 </html>
+0
-665
doc/epydoc/html/ClusterShell.Worker.Pdsh.WorkerPdsh-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Pdsh.WorkerPdsh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Pdsh-module.html">Module&nbsp;Pdsh</a> ::
44 Class&nbsp;WorkerPdsh
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class WorkerPdsh</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_53" name="uml_class_diagram_for_clusters_53">
64 <area shape="rect" id="node202" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__" title="Initialize Pdsh worker instance." alt="" coords="123,492,408,511"/>
65 <area shape="rect" id="node202" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#write" title="Write data to process." alt="" coords="123,511,408,529"/>
66 <area shape="rect" id="node1" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html" title="ClusterShell pdsh&#45;based worker Class." alt="" coords="111,459,420,535"/>
67 <area shape="rect" id="node203" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno" title="Return the standard error reader file descriptor as an integer." alt="" coords="59,265,213,284"/>
68 <area shape="rect" id="node203" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno" title="Return the reader file descriptor as an integer." alt="" coords="59,284,213,303"/>
69 <area shape="rect" id="node203" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno" title="Return the writer file descriptor as an integer." alt="" coords="59,303,213,321"/>
70 <area shape="rect" id="node2" href="ClusterShell.Worker.EngineClient.EngineClient-class.html" title="Abstract class EngineClient." alt="" coords="47,233,225,327"/>
71 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_node" title="Get last node, useful to get the node in an EventHandler callback like &#160;ev_timeout()." alt="" coords="267,153,521,172"/>
72 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_read" title="Get last (node, buffer), useful in an EventHandler.ev_read()" alt="" coords="267,172,521,191"/>
73 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_error" title="Get last (node, error_buffer), useful in an EventHandler.ev_error()" alt="" coords="267,191,521,209"/>
74 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode" title="Get last (node, rc), useful in an EventHandler.ev_hup()" alt="" coords="267,209,521,228"/>
75 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer" title="Get specific node buffer." alt="" coords="267,228,521,247"/>
76 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error" title="Get specific node error buffer." alt="" coords="267,247,521,265"/>
77 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error_buffer" title="Get specific node error buffer." alt="" coords="267,265,521,284"/>
78 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode" title="Get specific node return code." alt="" coords="267,284,521,303"/>
79 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc" title="Get specific node return code." alt="" coords="267,303,521,321"/>
80 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers" title="Returns an iterator over available buffers and associated NodeSet." alt="" coords="267,321,521,340"/>
81 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors" title="Returns an iterator over available error buffers and associated NodeSet." alt="" coords="267,340,521,359"/>
82 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers" title="Returns an iterator over each node and associated buffer." alt="" coords="267,359,521,377"/>
83 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors" title="Returns an iterator over each node and associated error buffer." alt="" coords="267,377,521,396"/>
84 <area shape="rect" id="node205" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout" title="Iterate over timed out keys (ie." alt="" coords="267,415,521,433"/>
85 <area shape="rect" id="node3" href="ClusterShell.Worker.Worker.DistantWorker-class.html" title="Base class DistantWorker, which provides a useful set of setters/getters to use with distant workers like ssh or pdsh." alt="" coords="255,121,532,439"/>
86 <area shape="rect" id="node206" href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout" title="Return True if this worker aborted due to timeout." alt="" coords="339,39,451,57"/>
87 <area shape="rect" id="node206" href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers" title="Flush any messages associated to this worker." alt="" coords="339,57,451,76"/>
88 <area shape="rect" id="node206" href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors" title="Flush any error messages associated to this worker." alt="" coords="339,76,451,95"/>
89 <area shape="rect" id="node4" href="ClusterShell.Worker.Worker.Worker-class.html" title="Base class Worker." alt="" coords="327,6,463,101"/>
90 <area shape="rect" id="node204" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="17,39,255,57"/>
91 <area shape="rect" id="node204" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="17,57,255,76"/>
92 <area shape="rect" id="node204" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="17,76,255,95"/>
93 <area shape="rect" id="node5" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="5,6,267,101"/>
94 </map>
95 <img src="uml_class_diagram_for_clusters_53.png" alt='' usemap="#uml_class_diagram_for_clusters_53" ismap="ismap" class="graph-without-title" />
96 </center>
97 </center>
98 <hr />
99 <p>ClusterShell pdsh-based worker Class.</p>
100 <p>Remote Shell (pdsh) usage example:</p>
101 <pre class="py-doctest">
102 <span class="py-prompt">&gt;&gt;&gt; </span>worker = WorkerPdsh(nodeset, handler=MyEventHandler(),
103 <span class="py-more">... </span> timeout=30, command=<span class="py-string">&quot;/bin/hostname&quot;</span>)
104 <span class="py-prompt">&gt;&gt;&gt; </span>task.schedule(worker) <span class="py-comment"># schedule worker for execution</span>
105 <span class="py-prompt">&gt;&gt;&gt; </span>task.resume() <span class="py-comment"># run</span></pre>
106 <p>Remote Copy (pdcp) usage example:</p>
107 <pre class="py-doctest">
108 <span class="py-prompt">&gt;&gt;&gt; </span>worker = WorkerPdsh(nodeset, handler=MyEventHandler(),
109 <span class="py-more">... </span> timeout=30, source=<span class="py-string">&quot;/etc/my.conf&quot;</span>,
110 <span class="py-more">... </span> dest=<span class="py-string">&quot;/etc/my.conf&quot;</span>)
111 <span class="py-prompt">&gt;&gt;&gt; </span>task.schedule(worker) <span class="py-comment"># schedule worker for execution</span>
112 <span class="py-prompt">&gt;&gt;&gt; </span>task.resume() <span class="py-comment"># run</span></pre>
113 <p>Known limitations:</p>
114 <ul>
115 <li>
116 write() is not supported by WorkerPdsh
117 </li>
118 <li>
119 return codes == 0 are not garanteed when a timeout is used (rc &gt; 0
120 are fine)
121 </li>
122 </ul>
123
124 <!-- ==================== INSTANCE METHODS ==================== -->
125 <a name="section-InstanceMethods"></a>
126 <table class="summary" border="1" cellpadding="3"
127 cellspacing="0" width="100%" bgcolor="white">
128 <tr bgcolor="#70b0f0" class="table-header">
129 <td colspan="2" class="table-header">
130 <table border="0" cellpadding="0" cellspacing="0" width="100%">
131 <tr valign="top">
132 <td align="left"><span class="table-header">Instance Methods</span></td>
133 <td align="right" valign="top"
134 ><span class="options">[<a href="#section-InstanceMethods"
135 class="privatelink" onclick="toggle_private();"
136 >hide private</a>]</span></td>
137 </tr>
138 </table>
139 </td>
140 </tr>
141 <tr>
142 <td width="15%" align="right" valign="top" class="summary">
143 <span class="summary-type">&nbsp;</span>
144 </td><td class="summary">
145 <table width="100%" cellpadding="0" cellspacing="0" border="0">
146 <tr>
147 <td><span class="summary-sig"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
148 <span class="summary-sig-arg">nodes</span>,
149 <span class="summary-sig-arg">handler</span>,
150 <span class="summary-sig-arg">timeout</span>,
151 <span class="summary-sig-arg">**kwargs</span>)</span><br />
152 Initialize Pdsh worker instance.</td>
153 <td align="right" valign="top">
154 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh.__init__">source&nbsp;code</a></span>
155
156 </td>
157 </tr>
158 </table>
159
160 </td>
161 </tr>
162 <tr class="private">
163 <td width="15%" align="right" valign="top" class="summary">
164 <span class="summary-type">&nbsp;</span>
165 </td><td class="summary">
166 <table width="100%" cellpadding="0" cellspacing="0" border="0">
167 <tr>
168 <td><span class="summary-sig"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_engine_clients" class="summary-sig-name" onclick="show_private();">_engine_clients</a>(<span class="summary-sig-arg">self</span>)</span><br />
169 Return a list of underlying engine clients.</td>
170 <td align="right" valign="top">
171 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._engine_clients">source&nbsp;code</a></span>
172
173 </td>
174 </tr>
175 </table>
176
177 </td>
178 </tr>
179 <tr class="private">
180 <td width="15%" align="right" valign="top" class="summary">
181 <span class="summary-type">&nbsp;</span>
182 </td><td class="summary">
183 <table width="100%" cellpadding="0" cellspacing="0" border="0">
184 <tr>
185 <td><span class="summary-sig"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_start" class="summary-sig-name" onclick="show_private();">_start</a>(<span class="summary-sig-arg">self</span>)</span><br />
186 Start worker, initialize buffers, prepare command.</td>
187 <td align="right" valign="top">
188 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._start">source&nbsp;code</a></span>
189
190 </td>
191 </tr>
192 </table>
193
194 </td>
195 </tr>
196 <tr>
197 <td width="15%" align="right" valign="top" class="summary">
198 <span class="summary-type">&nbsp;</span>
199 </td><td class="summary">
200 <table width="100%" cellpadding="0" cellspacing="0" border="0">
201 <tr>
202 <td><span class="summary-sig"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#write" class="summary-sig-name">write</a>(<span class="summary-sig-arg">self</span>,
203 <span class="summary-sig-arg">buf</span>)</span><br />
204 Write data to process.</td>
205 <td align="right" valign="top">
206 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh.write">source&nbsp;code</a></span>
207
208 </td>
209 </tr>
210 </table>
211
212 </td>
213 </tr>
214 <tr class="private">
215 <td width="15%" align="right" valign="top" class="summary">
216 <span class="summary-type">&nbsp;</span>
217 </td><td class="summary">
218 <table width="100%" cellpadding="0" cellspacing="0" border="0">
219 <tr>
220 <td><span class="summary-sig"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_close" class="summary-sig-name" onclick="show_private();">_close</a>(<span class="summary-sig-arg">self</span>,
221 <span class="summary-sig-arg">force</span>,
222 <span class="summary-sig-arg">timeout</span>)</span><br />
223 Close worker.</td>
224 <td align="right" valign="top">
225 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._close">source&nbsp;code</a></span>
226
227 </td>
228 </tr>
229 </table>
230
231 </td>
232 </tr>
233 <tr class="private">
234 <td width="15%" align="right" valign="top" class="summary">
235 <span class="summary-type">&nbsp;</span>
236 </td><td class="summary">
237 <table width="100%" cellpadding="0" cellspacing="0" border="0">
238 <tr>
239 <td><span class="summary-sig"><a name="_parse_line"></a><span class="summary-sig-name">_parse_line</span>(<span class="summary-sig-arg">self</span>,
240 <span class="summary-sig-arg">line</span>,
241 <span class="summary-sig-arg">stderr</span>)</span><br />
242 Parse Pdsh line syntax.</td>
243 <td align="right" valign="top">
244 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._parse_line">source&nbsp;code</a></span>
245
246 </td>
247 </tr>
248 </table>
249
250 </td>
251 </tr>
252 <tr class="private">
253 <td width="15%" align="right" valign="top" class="summary">
254 <span class="summary-type">&nbsp;</span>
255 </td><td class="summary">
256 <table width="100%" cellpadding="0" cellspacing="0" border="0">
257 <tr>
258 <td><span class="summary-sig"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_read" class="summary-sig-name" onclick="show_private();">_handle_read</a>(<span class="summary-sig-arg">self</span>)</span><br />
259 Engine is telling us a read is available.</td>
260 <td align="right" valign="top">
261 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._handle_read">source&nbsp;code</a></span>
262
263 </td>
264 </tr>
265 </table>
266
267 </td>
268 </tr>
269 <tr class="private">
270 <td width="15%" align="right" valign="top" class="summary">
271 <span class="summary-type">&nbsp;</span>
272 </td><td class="summary">
273 <table width="100%" cellpadding="0" cellspacing="0" border="0">
274 <tr>
275 <td><span class="summary-sig"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_error" class="summary-sig-name" onclick="show_private();">_handle_error</a>(<span class="summary-sig-arg">self</span>)</span><br />
276 Engine is telling us an error read is available.</td>
277 <td align="right" valign="top">
278 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._handle_error">source&nbsp;code</a></span>
279
280 </td>
281 </tr>
282 </table>
283
284 </td>
285 </tr>
286 <tr class="private">
287 <td width="15%" align="right" valign="top" class="summary">
288 <span class="summary-type">&nbsp;</span>
289 </td><td class="summary">
290 <table width="100%" cellpadding="0" cellspacing="0" border="0">
291 <tr>
292 <td><span class="summary-sig"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_on_node_rc" class="summary-sig-name" onclick="show_private();">_on_node_rc</a>(<span class="summary-sig-arg">self</span>,
293 <span class="summary-sig-arg">node</span>,
294 <span class="summary-sig-arg">rc</span>)</span><br />
295 Return code received from a node, update last* stuffs.</td>
296 <td align="right" valign="top">
297 <span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._on_node_rc">source&nbsp;code</a></span>
298
299 </td>
300 </tr>
301 </table>
302
303 </td>
304 </tr>
305 <tr>
306 <td colspan="2" class="summary">
307 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient.EngineClient</a></code></b>:
308 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno">error_fileno</a></code>,
309 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno">reader_fileno</a></code>,
310 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno">writer_fileno</a></code>
311 </p>
312 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient.EngineClient</a></code></b> (private):
313 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer" onclick="show_private();">_close_writer</a></code>,
314 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock" onclick="show_private();">_exec_nonblock</a></code>,
315 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire" onclick="show_private();">_fire</a></code>,
316 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write" onclick="show_private();">_handle_write</a></code>,
317 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_read" onclick="show_private();">_read</a></code>,
318 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr" onclick="show_private();">_readerr</a></code>,
319 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines" onclick="show_private();">_readerrlines</a></code>,
320 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines" onclick="show_private();">_readlines</a></code>,
321 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading" onclick="show_private();">_set_reading</a></code>,
322 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error" onclick="show_private();">_set_reading_error</a></code>,
323 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof" onclick="show_private();">_set_write_eof</a></code>,
324 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing" onclick="show_private();">_set_writing</a></code>,
325 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_write" onclick="show_private();">_write</a></code>
326 </p></div>
327 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b>:
328 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a></code>,
329 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a></code>,
330 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a></code>
331 </p>
332 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b> (private):
333 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine" onclick="show_private();">_set_engine</a></code>
334 </p></div>
335 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html">Worker.DistantWorker</a></code></b>:
336 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers">iter_buffers</a></code>,
337 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors">iter_errors</a></code>,
338 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout">iter_keys_timeout</a></code>,
339 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers">iter_node_buffers</a></code>,
340 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors">iter_node_errors</a></code>,
341 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_retcodes">iter_node_retcodes</a></code>,
342 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes">iter_retcodes</a></code>,
343 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_error">last_error</a></code>,
344 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_node">last_node</a></code>,
345 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_read">last_read</a></code>,
346 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode">last_retcode</a></code>,
347 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer">node_buffer</a></code>,
348 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error">node_error</a></code>,
349 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error_buffer">node_error_buffer</a></code>,
350 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc">node_rc</a></code>,
351 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode">node_retcode</a></code>,
352 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout">num_timeout</a></code>
353 </p>
354 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html">Worker.DistantWorker</a></code></b> (private):
355 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline" onclick="show_private();">_on_node_errline</a></code>,
356 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline" onclick="show_private();">_on_node_msgline</a></code>,
357 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_timeout" onclick="show_private();">_on_node_timeout</a></code>,
358 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start" onclick="show_private();">_on_start</a></code>
359 </p></div>
360 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker.Worker</a></code></b>:
361 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout">did_timeout</a></code>,
362 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers">flush_buffers</a></code>,
363 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors">flush_errors</a></code>
364 </p>
365 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker.Worker</a></code></b> (private):
366 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_invoke" onclick="show_private();">_invoke</a></code>,
367 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_set_task" onclick="show_private();">_set_task</a></code>,
368 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check" onclick="show_private();">_task_bound_check</a></code>
369 </p></div>
370 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
371 <code>__delattr__</code>,
372 <code>__format__</code>,
373 <code>__getattribute__</code>,
374 <code>__hash__</code>,
375 <code>__new__</code>,
376 <code>__reduce__</code>,
377 <code>__reduce_ex__</code>,
378 <code>__repr__</code>,
379 <code>__setattr__</code>,
380 <code>__sizeof__</code>,
381 <code>__str__</code>,
382 <code>__subclasshook__</code>
383 </p>
384 </td>
385 </tr>
386 </table>
387 <!-- ==================== PROPERTIES ==================== -->
388 <a name="section-Properties"></a>
389 <table class="summary" border="1" cellpadding="3"
390 cellspacing="0" width="100%" bgcolor="white">
391 <tr bgcolor="#70b0f0" class="table-header">
392 <td colspan="2" class="table-header">
393 <table border="0" cellpadding="0" cellspacing="0" width="100%">
394 <tr valign="top">
395 <td align="left"><span class="table-header">Properties</span></td>
396 <td align="right" valign="top"
397 ><span class="options">[<a href="#section-Properties"
398 class="privatelink" onclick="toggle_private();"
399 >hide private</a>]</span></td>
400 </tr>
401 </table>
402 </td>
403 </tr>
404 <tr>
405 <td colspan="2" class="summary">
406 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
407 <code>__class__</code>
408 </p>
409 </td>
410 </tr>
411 </table>
412 <!-- ==================== METHOD DETAILS ==================== -->
413 <a name="section-MethodDetails"></a>
414 <table class="details" border="1" cellpadding="3"
415 cellspacing="0" width="100%" bgcolor="white">
416 <tr bgcolor="#70b0f0" class="table-header">
417 <td colspan="2" class="table-header">
418 <table border="0" cellpadding="0" cellspacing="0" width="100%">
419 <tr valign="top">
420 <td align="left"><span class="table-header">Method Details</span></td>
421 <td align="right" valign="top"
422 ><span class="options">[<a href="#section-MethodDetails"
423 class="privatelink" onclick="toggle_private();"
424 >hide private</a>]</span></td>
425 </tr>
426 </table>
427 </td>
428 </tr>
429 </table>
430 <a name="__init__"></a>
431 <div>
432 <table class="details" border="1" cellpadding="3"
433 cellspacing="0" width="100%" bgcolor="white">
434 <tr><td>
435 <table width="100%" cellpadding="0" cellspacing="0" border="0">
436 <tr valign="top"><td>
437 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
438 <span class="sig-arg">nodes</span>,
439 <span class="sig-arg">handler</span>,
440 <span class="sig-arg">timeout</span>,
441 <span class="sig-arg">**kwargs</span>)</span>
442 <br /><em class="fname">(Constructor)</em>
443 </h3>
444 </td><td align="right" valign="top"
445 ><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh.__init__">source&nbsp;code</a></span>&nbsp;
446 </td>
447 </tr></table>
448
449 <p>Initialize Pdsh worker instance.</p>
450 <dl class="fields">
451 <dt>Overrides:
452 object.__init__
453 </dt>
454 </dl>
455 </td></tr></table>
456 </div>
457 <a name="_engine_clients"></a>
458 <div class="private">
459 <table class="details" border="1" cellpadding="3"
460 cellspacing="0" width="100%" bgcolor="white">
461 <tr><td>
462 <table width="100%" cellpadding="0" cellspacing="0" border="0">
463 <tr valign="top"><td>
464 <h3 class="epydoc"><span class="sig"><span class="sig-name">_engine_clients</span>(<span class="sig-arg">self</span>)</span>
465 </h3>
466 </td><td align="right" valign="top"
467 ><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._engine_clients">source&nbsp;code</a></span>&nbsp;
468 </td>
469 </tr></table>
470
471 <p>Return a list of underlying engine clients.</p>
472 <dl class="fields">
473 <dt>Overrides:
474 <a href="ClusterShell.Worker.Worker.Worker-class.html#_engine_clients" onclick="show_private();">Worker.Worker._engine_clients</a>
475 <dd><em class="note">(inherited documentation)</em></dd>
476 </dt>
477 </dl>
478 </td></tr></table>
479 </div>
480 <a name="_start"></a>
481 <div class="private">
482 <table class="details" border="1" cellpadding="3"
483 cellspacing="0" width="100%" bgcolor="white">
484 <tr><td>
485 <table width="100%" cellpadding="0" cellspacing="0" border="0">
486 <tr valign="top"><td>
487 <h3 class="epydoc"><span class="sig"><span class="sig-name">_start</span>(<span class="sig-arg">self</span>)</span>
488 </h3>
489 </td><td align="right" valign="top"
490 ><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._start">source&nbsp;code</a></span>&nbsp;
491 </td>
492 </tr></table>
493
494 <p>Start worker, initialize buffers, prepare command.</p>
495 <dl class="fields">
496 <dt>Overrides:
497 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start" onclick="show_private();">EngineClient.EngineClient._start</a>
498 </dt>
499 </dl>
500 </td></tr></table>
501 </div>
502 <a name="write"></a>
503 <div>
504 <table class="details" border="1" cellpadding="3"
505 cellspacing="0" width="100%" bgcolor="white">
506 <tr><td>
507 <table width="100%" cellpadding="0" cellspacing="0" border="0">
508 <tr valign="top"><td>
509 <h3 class="epydoc"><span class="sig"><span class="sig-name">write</span>(<span class="sig-arg">self</span>,
510 <span class="sig-arg">buf</span>)</span>
511 </h3>
512 </td><td align="right" valign="top"
513 ><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh.write">source&nbsp;code</a></span>&nbsp;
514 </td>
515 </tr></table>
516
517 <p>Write data to process. Not supported with Pdsh worker.</p>
518 <dl class="fields">
519 </dl>
520 </td></tr></table>
521 </div>
522 <a name="_close"></a>
523 <div class="private">
524 <table class="details" border="1" cellpadding="3"
525 cellspacing="0" width="100%" bgcolor="white">
526 <tr><td>
527 <table width="100%" cellpadding="0" cellspacing="0" border="0">
528 <tr valign="top"><td>
529 <h3 class="epydoc"><span class="sig"><span class="sig-name">_close</span>(<span class="sig-arg">self</span>,
530 <span class="sig-arg">force</span>,
531 <span class="sig-arg">timeout</span>)</span>
532 </h3>
533 </td><td align="right" valign="top"
534 ><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._close">source&nbsp;code</a></span>&nbsp;
535 </td>
536 </tr></table>
537
538 <p>Close worker. Called by engine after worker has been unregistered.
539 This method should handle all termination types (normal, forced or on
540 timeout).</p>
541 <dl class="fields">
542 <dt>Overrides:
543 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close" onclick="show_private();">EngineClient.EngineClient._close</a>
544 </dt>
545 </dl>
546 </td></tr></table>
547 </div>
548 <a name="_handle_read"></a>
549 <div class="private">
550 <table class="details" border="1" cellpadding="3"
551 cellspacing="0" width="100%" bgcolor="white">
552 <tr><td>
553 <table width="100%" cellpadding="0" cellspacing="0" border="0">
554 <tr valign="top"><td>
555 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_read</span>(<span class="sig-arg">self</span>)</span>
556 </h3>
557 </td><td align="right" valign="top"
558 ><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._handle_read">source&nbsp;code</a></span>&nbsp;
559 </td>
560 </tr></table>
561
562 <p>Engine is telling us a read is available.</p>
563 <dl class="fields">
564 <dt>Overrides:
565 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read" onclick="show_private();">EngineClient.EngineClient._handle_read</a>
566 </dt>
567 </dl>
568 </td></tr></table>
569 </div>
570 <a name="_handle_error"></a>
571 <div class="private">
572 <table class="details" border="1" cellpadding="3"
573 cellspacing="0" width="100%" bgcolor="white">
574 <tr><td>
575 <table width="100%" cellpadding="0" cellspacing="0" border="0">
576 <tr valign="top"><td>
577 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_error</span>(<span class="sig-arg">self</span>)</span>
578 </h3>
579 </td><td align="right" valign="top"
580 ><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._handle_error">source&nbsp;code</a></span>&nbsp;
581 </td>
582 </tr></table>
583
584 <p>Engine is telling us an error read is available.</p>
585 <dl class="fields">
586 <dt>Overrides:
587 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error" onclick="show_private();">EngineClient.EngineClient._handle_error</a>
588 </dt>
589 </dl>
590 </td></tr></table>
591 </div>
592 <a name="_on_node_rc"></a>
593 <div class="private">
594 <table class="details" border="1" cellpadding="3"
595 cellspacing="0" width="100%" bgcolor="white">
596 <tr><td>
597 <table width="100%" cellpadding="0" cellspacing="0" border="0">
598 <tr valign="top"><td>
599 <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_node_rc</span>(<span class="sig-arg">self</span>,
600 <span class="sig-arg">node</span>,
601 <span class="sig-arg">rc</span>)</span>
602 </h3>
603 </td><td align="right" valign="top"
604 ><span class="codelink"><a href="ClusterShell.Worker.Pdsh-pysrc.html#WorkerPdsh._on_node_rc">source&nbsp;code</a></span>&nbsp;
605 </td>
606 </tr></table>
607
608 <p>Return code received from a node, update last* stuffs.</p>
609 <dl class="fields">
610 <dt>Overrides:
611 <a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_rc" onclick="show_private();">Worker.DistantWorker._on_node_rc</a>
612 </dt>
613 </dl>
614 </td></tr></table>
615 </div>
616 <br />
617 <!-- ==================== NAVIGATION BAR ==================== -->
618 <table class="navbar" border="0" width="100%" cellpadding="0"
619 bgcolor="#a0c0ff" cellspacing="0">
620 <tr valign="middle">
621
622 <!-- Tree link -->
623 <th>&nbsp;&nbsp;&nbsp;<a
624 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
625
626 <!-- Index link -->
627 <th>&nbsp;&nbsp;&nbsp;<a
628 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
629
630 <!-- Help link -->
631 <th>&nbsp;&nbsp;&nbsp;<a
632 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
633
634 <!-- Project homepage -->
635 <th class="navbar" align="right" width="100%">
636 <table border="0" cellpadding="0" cellspacing="0">
637 <tr><th class="navbar" align="center"
638 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
639 </tr></table></th>
640 </tr>
641 </table>
642 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
643 <tr>
644 <td align="left" class="footer">
645 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
646 </td>
647 <td align="right" class="footer">
648 <a target="mainFrame" href="http://epydoc.sourceforge.net"
649 >http://epydoc.sourceforge.net</a>
650 </td>
651 </tr>
652 </table>
653
654 <script type="text/javascript">
655 <!--
656 // Private objects are initially displayed (because if
657 // javascript is turned off then we want them to be
658 // visible); but by default, we want to hide them. So hide
659 // them unless we have a cookie that says to show them.
660 checkCookie();
661 // -->
662 </script>
663 </body>
664 </html>
+0
-172
doc/epydoc/html/ClusterShell.Worker.Popen-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Popen</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;Popen
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Popen-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module Popen</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html">source&nbsp;code</a></span></p>
61 <p>WorkerPopen</p>
62 <p>ClusterShell worker for executing local commands.</p>
63 <p>Usage example:</p>
64 <pre class="py-doctest">
65 <span class="py-prompt">&gt;&gt;&gt; </span>worker = WorkerPopen(<span class="py-string">&quot;/bin/uname&quot;</span>, key=<span class="py-string">&quot;mykernel&quot;</span>)
66 <span class="py-prompt">&gt;&gt;&gt; </span>task.schedule(worker) <span class="py-comment"># schedule worker</span>
67 <span class="py-prompt">&gt;&gt;&gt; </span>task.resume() <span class="py-comment"># run task</span>
68 <span class="py-prompt">&gt;&gt;&gt; </span>worker.retcode() <span class="py-comment"># get return code</span>
69 <span class="py-output">0</span>
70 <span class="py-output"></span><span class="py-prompt">&gt;&gt;&gt; </span>worker.read() <span class="py-comment"># read command output</span>
71 <span class="py-output">'Linux'</span></pre>
72
73 <!-- ==================== CLASSES ==================== -->
74 <a name="section-Classes"></a>
75 <table class="summary" border="1" cellpadding="3"
76 cellspacing="0" width="100%" bgcolor="white">
77 <tr bgcolor="#70b0f0" class="table-header">
78 <td colspan="2" class="table-header">
79 <table border="0" cellpadding="0" cellspacing="0" width="100%">
80 <tr valign="top">
81 <td align="left"><span class="table-header">Classes</span></td>
82 <td align="right" valign="top"
83 ><span class="options">[<a href="#section-Classes"
84 class="privatelink" onclick="toggle_private();"
85 >hide private</a>]</span></td>
86 </tr>
87 </table>
88 </td>
89 </tr>
90 <tr>
91 <td width="15%" align="right" valign="top" class="summary">
92 <span class="summary-type">&nbsp;</span>
93 </td><td class="summary">
94 <a href="ClusterShell.Worker.Popen.WorkerPopen-class.html" class="summary-name">WorkerPopen</a><br />
95 Implements the Popen Worker.
96 </td>
97 </tr>
98 </table>
99 <!-- ==================== VARIABLES ==================== -->
100 <a name="section-Variables"></a>
101 <table class="summary" border="1" cellpadding="3"
102 cellspacing="0" width="100%" bgcolor="white">
103 <tr bgcolor="#70b0f0" class="table-header">
104 <td colspan="2" class="table-header">
105 <table border="0" cellpadding="0" cellspacing="0" width="100%">
106 <tr valign="top">
107 <td align="left"><span class="table-header">Variables</span></td>
108 <td align="right" valign="top"
109 ><span class="options">[<a href="#section-Variables"
110 class="privatelink" onclick="toggle_private();"
111 >hide private</a>]</span></td>
112 </tr>
113 </table>
114 </td>
115 </tr>
116 <tr>
117 <td width="15%" align="right" valign="top" class="summary">
118 <span class="summary-type">&nbsp;</span>
119 </td><td class="summary">
120 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Worker'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Worker</code><code class="variable-quote">'</code></code>
121 </td>
122 </tr>
123 </table>
124 <!-- ==================== NAVIGATION BAR ==================== -->
125 <table class="navbar" border="0" width="100%" cellpadding="0"
126 bgcolor="#a0c0ff" cellspacing="0">
127 <tr valign="middle">
128
129 <!-- Tree link -->
130 <th>&nbsp;&nbsp;&nbsp;<a
131 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
132
133 <!-- Index link -->
134 <th>&nbsp;&nbsp;&nbsp;<a
135 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
136
137 <!-- Help link -->
138 <th>&nbsp;&nbsp;&nbsp;<a
139 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
140
141 <!-- Project homepage -->
142 <th class="navbar" align="right" width="100%">
143 <table border="0" cellpadding="0" cellspacing="0">
144 <tr><th class="navbar" align="center"
145 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
146 </tr></table></th>
147 </tr>
148 </table>
149 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
150 <tr>
151 <td align="left" class="footer">
152 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
153 </td>
154 <td align="right" class="footer">
155 <a target="mainFrame" href="http://epydoc.sourceforge.net"
156 >http://epydoc.sourceforge.net</a>
157 </td>
158 </tr>
159 </table>
160
161 <script type="text/javascript">
162 <!--
163 // Private objects are initially displayed (because if
164 // javascript is turned off then we want them to be
165 // visible); but by default, we want to hide them. So hide
166 // them unless we have a cookie that says to show them.
167 checkCookie();
168 // -->
169 </script>
170 </body>
171 </html>
+0
-313
doc/epydoc/html/ClusterShell.Worker.Popen-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Popen</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;Popen
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Popen-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Worker.Popen-module.html">Module ClusterShell.Worker.Popen</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2008, 2009, 2010)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Popen.py 292 2010-07-15 22:43:46Z st-cea $</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">WorkerPopen</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">ClusterShell worker for executing local commands.</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
100 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">Usage example:</tt> </tt>
101 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; worker = WorkerPopen("/bin/uname", key="mykernel") </tt> </tt>
102 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.schedule(worker) # schedule worker</tt> </tt>
103 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.resume() # run task</tt> </tt>
104 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; worker.retcode() # get return code</tt> </tt>
105 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"> 0</tt> </tt>
106 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; worker.read() # read command output</tt> </tt>
107 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"> 'Linux'</tt> </tt>
108 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
109 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
110 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> </tt>
111 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
112 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
113 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt>
114 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package ClusterShell.Worker=ClusterShell.Worker-module.html,Module ClusterShell.Worker.Worker=ClusterShell.Worker.Worker-module.html,Class ClusterShell.Worker.Worker.Worker=ClusterShell.Worker.Worker.Worker-class.html"><a title="ClusterShell.Worker
115 ClusterShell.Worker.Worker
116 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-1', 'Worker', 'link-1');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name"><a title="ClusterShell.Worker
117 ClusterShell.Worker.Worker
118 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-2', 'Worker', 'link-1');">Worker</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Class ClusterShell.Worker.Worker.WorkerSimple=ClusterShell.Worker.Worker.WorkerSimple-class.html"><a title="ClusterShell.Worker.Worker.WorkerSimple" class="py-name" href="#" onclick="return doclink('link-3', 'WorkerSimple', 'link-3');">WorkerSimple</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Class ClusterShell.Worker.Worker.WorkerBadArgumentError=ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html"><a title="ClusterShell.Worker.Worker.WorkerBadArgumentError" class="py-name" href="#" onclick="return doclink('link-4', 'WorkerBadArgumentError', 'link-4');">WorkerBadArgumentError</a></tt> </tt>
119 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> </tt>
120 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> </tt>
121 <a name="WorkerPopen"></a><div id="WorkerPopen-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <a class="py-toggle" href="#" id="WorkerPopen-toggle" onclick="return toggle('WorkerPopen');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Popen.WorkerPopen-class.html">WorkerPopen</a><tt class="py-op">(</tt><tt class="py-base-class">WorkerSimple</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
122 </div><div id="WorkerPopen-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="WorkerPopen-expanded"><a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
123 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> Implements the Popen Worker.</tt> </tt>
124 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
125 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> </tt>
126 <a name="WorkerPopen.__init__"></a><div id="WorkerPopen.__init__-def"><a name="L62"></a><tt class="py-lineno"> 62</tt> <a class="py-toggle" href="#" id="WorkerPopen.__init__-toggle" onclick="return toggle('WorkerPopen.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Popen.WorkerPopen-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">command</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
127 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-param">stderr</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
128 </div><div id="WorkerPopen.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPopen.__init__-expanded"><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
129 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> Initialize Popen worker.</tt> </tt>
130 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
131 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt id="link-5" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerSimple" class="py-name" href="#" onclick="return doclink('link-5', 'WorkerSimple', 'link-3');">WorkerSimple</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
132 ClusterShell.Engine.Engine.Engine.__init__
133 ClusterShell.Engine.Engine.EngineAbortException.__init__
134 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
135 ClusterShell.Engine.Engine.EngineTimer.__init__
136 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
137 ClusterShell.Engine.Engine._EngineTimerQ.__init__
138 ClusterShell.Engine.Poll.EnginePoll.__init__
139 ClusterShell.MsgTree.MsgTree.__init__
140 ClusterShell.MsgTree.MsgTreeElem.__init__
141 ClusterShell.NodeSet.NodeSet.__init__
142 ClusterShell.NodeSet.NodeSetBase.__init__
143 ClusterShell.NodeSet.NodeSetParseError.__init__
144 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
145 ClusterShell.NodeSet.ParsingEngine.__init__
146 ClusterShell.NodeSet.RangeSet.__init__
147 ClusterShell.NodeSet.RangeSetPaddingError.__init__
148 ClusterShell.NodeSet.RangeSetParseError.__init__
149 ClusterShell.NodeUtils.GroupResolver.__init__
150 ClusterShell.NodeUtils.GroupResolverConfig.__init__
151 ClusterShell.NodeUtils.GroupSource.__init__
152 ClusterShell.NodeUtils.GroupSourceException.__init__
153 ClusterShell.Task.Task._SuspendCondition.__init__
154 ClusterShell.Task.Task.__init__
155 ClusterShell.Task._TaskMsgTree.__init__
156 ClusterShell.Worker.EngineClient.EngineClient.__init__
157 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
158 ClusterShell.Worker.EngineClient.EnginePort.__init__
159 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
160 ClusterShell.Worker.Popen.WorkerPopen.__init__
161 ClusterShell.Worker.Ssh.Scp.__init__
162 ClusterShell.Worker.Ssh.Ssh.__init__
163 ClusterShell.Worker.Ssh.WorkerSsh.__init__
164 ClusterShell.Worker.Worker.DistantWorker.__init__
165 ClusterShell.Worker.Worker.Worker.__init__
166 ClusterShell.Worker.Worker.WorkerSimple.__init__
167 clubak.Display.__init__
168 clush.ClushConfig.__init__
169 clush.ClushConfigError.__init__
170 clush.DirectOutputHandler.__init__
171 clush.Display.__init__
172 clush.GatherOutputHandler.__init__
173 clush.RunTimer.__init__
174 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-6', '__init__', 'link-6');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">,</tt> </tt>
175 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt> </tt>
176 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> </tt>
177 <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">command</tt> <tt class="py-op">=</tt> <tt class="py-name">command</tt> </tt>
178 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</tt><tt class="py-op">:</tt> </tt>
179 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-7" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerBadArgumentError" class="py-name" href="#" onclick="return doclink('link-7', 'WorkerBadArgumentError', 'link-4');">WorkerBadArgumentError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
180 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
181 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
182 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
183 </div><a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> </tt>
184 <a name="WorkerPopen._start"></a><div id="WorkerPopen._start-def"><a name="L77"></a><tt class="py-lineno"> 77</tt> <a class="py-toggle" href="#" id="WorkerPopen._start-toggle" onclick="return toggle('WorkerPopen._start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Popen.WorkerPopen-class.html#_start">_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
185 </div><div id="WorkerPopen._start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPopen._start-expanded"><a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
186 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-docstring"> Start worker.</tt> </tt>
187 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
188 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> </tt>
189 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> </tt>
190 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock"><a title="ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock" class="py-name" href="#" onclick="return doclink('link-8', '_exec_nonblock', 'link-8');">_exec_nonblock</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</tt><tt class="py-op">,</tt> <tt id="link-9" class="py-name" targets="Method ClusterShell.Task.Task.shell()=ClusterShell.Task.Task-class.html#shell"><a title="ClusterShell.Task.Task.shell" class="py-name" href="#" onclick="return doclink('link-9', 'shell', 'link-9');">shell</a></tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
191 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> </tt>
192 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
193 <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">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt> </tt>
194 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> </tt>
195 <a name="L88"></a><tt class="py-lineno"> 88</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">task</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-10', 'info', 'link-10');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
196 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-11', 'info', 'link-10');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"POPEN: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</tt><tt class="py-op">)</tt> </tt>
197 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> </tt>
198 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method ClusterShell.Event.EventHandler._invoke()=ClusterShell.Event.EventHandler-class.html#_invoke,Method ClusterShell.Worker.Worker.Worker._invoke()=ClusterShell.Worker.Worker.Worker-class.html#_invoke"><a title="ClusterShell.Event.EventHandler._invoke
199 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-12', '_invoke', 'link-12');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_start"</tt><tt class="py-op">)</tt> </tt>
200 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> </tt>
201 <a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
202 </div><a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> </tt>
203 <a name="WorkerPopen._close"></a><div id="WorkerPopen._close-def"><a name="L95"></a><tt class="py-lineno"> 95</tt> <a class="py-toggle" href="#" id="WorkerPopen._close-toggle" onclick="return toggle('WorkerPopen._close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Popen.WorkerPopen-class.html#_close">_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
204 </div><div id="WorkerPopen._close-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPopen._close-expanded"><a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
205 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"><tt class="py-docstring"> Close worker. Called by engine after worker has been</tt> </tt>
206 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"><tt class="py-docstring"> unregistered. This method should handle all termination types</tt> </tt>
207 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"><tt class="py-docstring"> (normal, forced or on timeout).</tt> </tt>
208 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
209 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">force</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt><tt class="py-op">:</tt> </tt>
210 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-comment"># We still have some read data available in buffer, but no</tt> </tt>
211 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-comment"># EOL. Generate a final message before closing.</tt> </tt>
212 <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 class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple._on_msgline()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_msgline"><a title="ClusterShell.Worker.Worker.WorkerSimple._on_msgline" class="py-name" href="#" onclick="return doclink('link-13', '_on_msgline', 'link-13');">_on_msgline</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt><tt class="py-op">)</tt> </tt>
213 <a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> </tt>
214 <a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
215 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">force</tt> <tt class="py-keyword">or</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
216 <a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-comment"># check if process has terminated</tt> </tt>
217 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">prc</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
218 <a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prc</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
219 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-comment"># process is still running, kill it</tt> </tt>
220 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">kill</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">pid</tt><tt class="py-op">,</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGKILL</tt><tt class="py-op">)</tt> </tt>
221 <a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
222 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-comment"># close process / check if it has terminated</tt> </tt>
223 <a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-name">prc</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Class Method ClusterShell.Task.Task.wait()=ClusterShell.Task.Task-class.html#wait"><a title="ClusterShell.Task.Task.wait" class="py-name" href="#" onclick="return doclink('link-14', 'wait', 'link-14');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
224 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-comment"># get exit status</tt> </tt>
225 <a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prc</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
226 <a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-comment"># process exited normally</tt> </tt>
227 <a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">prc</tt> </tt>
228 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
229 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-comment"># if process was signaled, return 128 + signum (bash-like)</tt> </tt>
230 <a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-number">128</tt> <tt class="py-op">+</tt> <tt class="py-op">-</tt><tt class="py-name">prc</tt> </tt>
231 <a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> </tt>
232 <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">popen</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>
233 <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">popen</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>
234 <a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> </tt>
235 <a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rc</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
236 <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 id="link-15" class="py-name" targets="Method ClusterShell.Worker.Popen.WorkerPopen._on_rc()=ClusterShell.Worker.Popen.WorkerPopen-class.html#_on_rc"><a title="ClusterShell.Worker.Popen.WorkerPopen._on_rc" class="py-name" href="#" onclick="return doclink('link-15', '_on_rc', 'link-15');">_on_rc</a></tt><tt class="py-op">(</tt><tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
237 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
238 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple._on_timeout()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_timeout"><a title="ClusterShell.Worker.Worker.WorkerSimple._on_timeout" class="py-name" href="#" onclick="return doclink('link-16', '_on_timeout', 'link-16');">_on_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
239 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> </tt>
240 <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-17" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
241 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-17', '_invoke', 'link-12');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_close"</tt><tt class="py-op">)</tt> </tt>
242 </div><a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt>
243 <a name="WorkerPopen._on_rc"></a><div id="WorkerPopen._on_rc-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="WorkerPopen._on_rc-toggle" onclick="return toggle('WorkerPopen._on_rc');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Popen.WorkerPopen-class.html#_on_rc">_on_rc</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">rc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
244 </div><div id="WorkerPopen._on_rc-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPopen._on_rc-expanded"><a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
245 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"><tt class="py-docstring"> Set return code.</tt> </tt>
246 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
247 <a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">rc</tt> </tt>
248 <a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method ClusterShell.Task.Task._rc_set()=ClusterShell.Task.Task-class.html#_rc_set"><a title="ClusterShell.Task.Task._rc_set" class="py-name" href="#" onclick="return doclink('link-18', '_rc_set', 'link-18');">_rc_set</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
249 <a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> </tt>
250 <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 id="link-19" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
251 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-19', '_invoke', 'link-12');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_hup"</tt><tt class="py-op">)</tt> </tt>
252 </div><a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> </tt>
253 <a name="WorkerPopen.retcode"></a><div id="WorkerPopen.retcode-def"><a name="L143"></a><tt class="py-lineno">143</tt> <a class="py-toggle" href="#" id="WorkerPopen.retcode-toggle" onclick="return toggle('WorkerPopen.retcode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Popen.WorkerPopen-class.html#retcode">retcode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
254 </div><div id="WorkerPopen.retcode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerPopen.retcode-expanded"><a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
255 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-docstring"> Return return code or None if command is still in progress.</tt> </tt>
256 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
257 <a name="L147"></a><tt class="py-lineno">147</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">rc</tt> </tt>
258 </div></div><a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> </tt><script type="text/javascript">
259 <!--
260 expandto(location.href);
261 // -->
262 </script>
263 </pre>
264 <br />
265 <!-- ==================== NAVIGATION BAR ==================== -->
266 <table class="navbar" border="0" width="100%" cellpadding="0"
267 bgcolor="#a0c0ff" cellspacing="0">
268 <tr valign="middle">
269
270 <!-- Tree link -->
271 <th>&nbsp;&nbsp;&nbsp;<a
272 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
273
274 <!-- Index link -->
275 <th>&nbsp;&nbsp;&nbsp;<a
276 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
277
278 <!-- Help link -->
279 <th>&nbsp;&nbsp;&nbsp;<a
280 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
281
282 <!-- Project homepage -->
283 <th class="navbar" align="right" width="100%">
284 <table border="0" cellpadding="0" cellspacing="0">
285 <tr><th class="navbar" align="center"
286 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
287 </tr></table></th>
288 </tr>
289 </table>
290 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
291 <tr>
292 <td align="left" class="footer">
293 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
294 </td>
295 <td align="right" class="footer">
296 <a target="mainFrame" href="http://epydoc.sourceforge.net"
297 >http://epydoc.sourceforge.net</a>
298 </td>
299 </tr>
300 </table>
301
302 <script type="text/javascript">
303 <!--
304 // Private objects are initially displayed (because if
305 // javascript is turned off then we want them to be
306 // visible); but by default, we want to hide them. So hide
307 // them unless we have a cookie that says to show them.
308 checkCookie();
309 // -->
310 </script>
311 </body>
312 </html>
+0
-446
doc/epydoc/html/ClusterShell.Worker.Popen.WorkerPopen-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Popen.WorkerPopen</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Popen-module.html">Module&nbsp;Popen</a> ::
44 Class&nbsp;WorkerPopen
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Popen.WorkerPopen-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class WorkerPopen</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_54" name="uml_class_diagram_for_clusters_54">
64 <area shape="rect" id="node207" href="ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__" title="Initialize Popen worker." alt="" coords="17,513,576,532"/>
65 <area shape="rect" id="node207" href="ClusterShell.Worker.Popen.WorkerPopen-class.html#retcode" title="Return return code or None if command is still in progress." alt="" coords="17,532,576,551"/>
66 <area shape="rect" id="node1" href="ClusterShell.Worker.Popen.WorkerPopen-class.html" title="Implements the Popen Worker." alt="" coords="5,481,587,557"/>
67 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_key" title="Source key for this worker is free for use." alt="" coords="232,268,363,287"/>
68 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno" title="Returns the standard error reader file descriptor as an integer." alt="" coords="232,287,363,305"/>
69 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno" title="Returns the reader file descriptor as an integer." alt="" coords="232,305,363,324"/>
70 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno" title="Returns the writer file descriptor as an integer." alt="" coords="232,324,363,343"/>
71 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read" title="Read last msg, useful in an EventHandler." alt="" coords="232,343,363,361"/>
72 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error" title="Get last error message from event handler." alt="" coords="232,361,363,380"/>
73 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#read" title="Read worker buffer." alt="" coords="232,380,363,399"/>
74 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error" title="Read worker error buffer." alt="" coords="232,399,363,417"/>
75 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#write" title="Write to worker." alt="" coords="232,417,363,436"/>
76 <area shape="rect" id="node208" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof" title="Tell worker to close its writer file descriptor once flushed." alt="" coords="232,436,363,455"/>
77 <area shape="rect" id="node2" href="ClusterShell.Worker.Worker.WorkerSimple-class.html" title="Implements a simple Worker being itself an EngineClient." alt="" coords="220,235,375,461"/>
78 <area shape="rect" id="node211" href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout" title="Return True if this worker aborted due to timeout." alt="" coords="148,153,260,172"/>
79 <area shape="rect" id="node211" href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers" title="Flush any messages associated to this worker." alt="" coords="148,172,260,191"/>
80 <area shape="rect" id="node211" href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors" title="Flush any error messages associated to this worker." alt="" coords="148,191,260,209"/>
81 <area shape="rect" id="node3" href="ClusterShell.Worker.Worker.Worker-class.html" title="Base class Worker." alt="" coords="136,121,272,215"/>
82 <area shape="rect" id="node4" href="ClusterShell.Worker.EngineClient.EngineClient-class.html" title="Abstract class EngineClient." alt="" coords="301,146,480,190"/>
83 <area shape="rect" id="node210" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="272,39,509,57"/>
84 <area shape="rect" id="node210" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="272,57,509,76"/>
85 <area shape="rect" id="node210" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="272,76,509,95"/>
86 <area shape="rect" id="node5" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="260,6,521,101"/>
87 </map>
88 <img src="uml_class_diagram_for_clusters_54.png" alt='' usemap="#uml_class_diagram_for_clusters_54" ismap="ismap" class="graph-without-title" />
89 </center>
90 </center>
91 <hr />
92 <p>Implements the Popen Worker.</p>
93
94 <!-- ==================== INSTANCE METHODS ==================== -->
95 <a name="section-InstanceMethods"></a>
96 <table class="summary" border="1" cellpadding="3"
97 cellspacing="0" width="100%" bgcolor="white">
98 <tr bgcolor="#70b0f0" class="table-header">
99 <td colspan="2" class="table-header">
100 <table border="0" cellpadding="0" cellspacing="0" width="100%">
101 <tr valign="top">
102 <td align="left"><span class="table-header">Instance Methods</span></td>
103 <td align="right" valign="top"
104 ><span class="options">[<a href="#section-InstanceMethods"
105 class="privatelink" onclick="toggle_private();"
106 >hide private</a>]</span></td>
107 </tr>
108 </table>
109 </td>
110 </tr>
111 <tr>
112 <td width="15%" align="right" valign="top" class="summary">
113 <span class="summary-type">&nbsp;</span>
114 </td><td class="summary">
115 <table width="100%" cellpadding="0" cellspacing="0" border="0">
116 <tr>
117 <td><span class="summary-sig"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
118 <span class="summary-sig-arg">command</span>,
119 <span class="summary-sig-arg">key</span>=<span class="summary-sig-default">None</span>,
120 <span class="summary-sig-arg">handler</span>=<span class="summary-sig-default">None</span>,
121 <span class="summary-sig-arg">stderr</span>=<span class="summary-sig-default">False</span>,
122 <span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">-1</span>,
123 <span class="summary-sig-arg">autoclose</span>=<span class="summary-sig-default">False</span>)</span><br />
124 Initialize Popen worker.</td>
125 <td align="right" valign="top">
126 <span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen.__init__">source&nbsp;code</a></span>
127
128 </td>
129 </tr>
130 </table>
131
132 </td>
133 </tr>
134 <tr class="private">
135 <td width="15%" align="right" valign="top" class="summary">
136 <span class="summary-type">&nbsp;</span>
137 </td><td class="summary">
138 <table width="100%" cellpadding="0" cellspacing="0" border="0">
139 <tr>
140 <td><span class="summary-sig"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html#_start" class="summary-sig-name" onclick="show_private();">_start</a>(<span class="summary-sig-arg">self</span>)</span><br />
141 Start worker.</td>
142 <td align="right" valign="top">
143 <span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen._start">source&nbsp;code</a></span>
144
145 </td>
146 </tr>
147 </table>
148
149 </td>
150 </tr>
151 <tr class="private">
152 <td width="15%" align="right" valign="top" class="summary">
153 <span class="summary-type">&nbsp;</span>
154 </td><td class="summary">
155 <table width="100%" cellpadding="0" cellspacing="0" border="0">
156 <tr>
157 <td><span class="summary-sig"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html#_close" class="summary-sig-name" onclick="show_private();">_close</a>(<span class="summary-sig-arg">self</span>,
158 <span class="summary-sig-arg">force</span>,
159 <span class="summary-sig-arg">timeout</span>)</span><br />
160 Close worker.</td>
161 <td align="right" valign="top">
162 <span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen._close">source&nbsp;code</a></span>
163
164 </td>
165 </tr>
166 </table>
167
168 </td>
169 </tr>
170 <tr class="private">
171 <td width="15%" align="right" valign="top" class="summary">
172 <span class="summary-type">&nbsp;</span>
173 </td><td class="summary">
174 <table width="100%" cellpadding="0" cellspacing="0" border="0">
175 <tr>
176 <td><span class="summary-sig"><a name="_on_rc"></a><span class="summary-sig-name">_on_rc</span>(<span class="summary-sig-arg">self</span>,
177 <span class="summary-sig-arg">rc</span>)</span><br />
178 Set return code.</td>
179 <td align="right" valign="top">
180 <span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen._on_rc">source&nbsp;code</a></span>
181
182 </td>
183 </tr>
184 </table>
185
186 </td>
187 </tr>
188 <tr>
189 <td width="15%" align="right" valign="top" class="summary">
190 <span class="summary-type">&nbsp;</span>
191 </td><td class="summary">
192 <table width="100%" cellpadding="0" cellspacing="0" border="0">
193 <tr>
194 <td><span class="summary-sig"><a name="retcode"></a><span class="summary-sig-name">retcode</span>(<span class="summary-sig-arg">self</span>)</span><br />
195 Return return code or None if command is still in progress.</td>
196 <td align="right" valign="top">
197 <span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen.retcode">source&nbsp;code</a></span>
198
199 </td>
200 </tr>
201 </table>
202
203 </td>
204 </tr>
205 <tr>
206 <td colspan="2" class="summary">
207 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">Worker.WorkerSimple</a></code></b>:
208 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error">error</a></code>,
209 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno">error_fileno</a></code>,
210 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error">last_error</a></code>,
211 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read">last_read</a></code>,
212 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#read">read</a></code>,
213 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno">reader_fileno</a></code>,
214 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_key">set_key</a></code>,
215 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof">set_write_eof</a></code>,
216 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#write">write</a></code>,
217 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno">writer_fileno</a></code>
218 </p>
219 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">Worker.WorkerSimple</a></code></b> (private):
220 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_engine_clients" onclick="show_private();">_engine_clients</a></code>,
221 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_error" onclick="show_private();">_handle_error</a></code>,
222 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read" onclick="show_private();">_handle_read</a></code>,
223 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_errmsgline" onclick="show_private();">_on_errmsgline</a></code>,
224 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_msgline" onclick="show_private();">_on_msgline</a></code>,
225 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_timeout" onclick="show_private();">_on_timeout</a></code>,
226 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_read" onclick="show_private();">_read</a></code>,
227 <code><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_readerr" onclick="show_private();">_readerr</a></code>
228 </p></div>
229 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient.EngineClient</a></code></b> (private):
230 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer" onclick="show_private();">_close_writer</a></code>,
231 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock" onclick="show_private();">_exec_nonblock</a></code>,
232 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire" onclick="show_private();">_fire</a></code>,
233 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write" onclick="show_private();">_handle_write</a></code>,
234 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines" onclick="show_private();">_readerrlines</a></code>,
235 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines" onclick="show_private();">_readlines</a></code>,
236 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading" onclick="show_private();">_set_reading</a></code>,
237 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error" onclick="show_private();">_set_reading_error</a></code>,
238 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof" onclick="show_private();">_set_write_eof</a></code>,
239 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing" onclick="show_private();">_set_writing</a></code>,
240 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_write" onclick="show_private();">_write</a></code>
241 </p></div>
242 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b>:
243 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a></code>,
244 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a></code>,
245 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a></code>
246 </p>
247 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b> (private):
248 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine" onclick="show_private();">_set_engine</a></code>
249 </p></div>
250 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker.Worker</a></code></b>:
251 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout">did_timeout</a></code>,
252 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers">flush_buffers</a></code>,
253 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors">flush_errors</a></code>
254 </p>
255 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker.Worker</a></code></b> (private):
256 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_invoke" onclick="show_private();">_invoke</a></code>,
257 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_set_task" onclick="show_private();">_set_task</a></code>,
258 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check" onclick="show_private();">_task_bound_check</a></code>
259 </p></div>
260 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
261 <code>__delattr__</code>,
262 <code>__format__</code>,
263 <code>__getattribute__</code>,
264 <code>__hash__</code>,
265 <code>__new__</code>,
266 <code>__reduce__</code>,
267 <code>__reduce_ex__</code>,
268 <code>__repr__</code>,
269 <code>__setattr__</code>,
270 <code>__sizeof__</code>,
271 <code>__str__</code>,
272 <code>__subclasshook__</code>
273 </p>
274 </td>
275 </tr>
276 </table>
277 <!-- ==================== PROPERTIES ==================== -->
278 <a name="section-Properties"></a>
279 <table class="summary" border="1" cellpadding="3"
280 cellspacing="0" width="100%" bgcolor="white">
281 <tr bgcolor="#70b0f0" class="table-header">
282 <td colspan="2" class="table-header">
283 <table border="0" cellpadding="0" cellspacing="0" width="100%">
284 <tr valign="top">
285 <td align="left"><span class="table-header">Properties</span></td>
286 <td align="right" valign="top"
287 ><span class="options">[<a href="#section-Properties"
288 class="privatelink" onclick="toggle_private();"
289 >hide private</a>]</span></td>
290 </tr>
291 </table>
292 </td>
293 </tr>
294 <tr>
295 <td colspan="2" class="summary">
296 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
297 <code>__class__</code>
298 </p>
299 </td>
300 </tr>
301 </table>
302 <!-- ==================== METHOD DETAILS ==================== -->
303 <a name="section-MethodDetails"></a>
304 <table class="details" border="1" cellpadding="3"
305 cellspacing="0" width="100%" bgcolor="white">
306 <tr bgcolor="#70b0f0" class="table-header">
307 <td colspan="2" class="table-header">
308 <table border="0" cellpadding="0" cellspacing="0" width="100%">
309 <tr valign="top">
310 <td align="left"><span class="table-header">Method Details</span></td>
311 <td align="right" valign="top"
312 ><span class="options">[<a href="#section-MethodDetails"
313 class="privatelink" onclick="toggle_private();"
314 >hide private</a>]</span></td>
315 </tr>
316 </table>
317 </td>
318 </tr>
319 </table>
320 <a name="__init__"></a>
321 <div>
322 <table class="details" border="1" cellpadding="3"
323 cellspacing="0" width="100%" bgcolor="white">
324 <tr><td>
325 <table width="100%" cellpadding="0" cellspacing="0" border="0">
326 <tr valign="top"><td>
327 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
328 <span class="sig-arg">command</span>,
329 <span class="sig-arg">key</span>=<span class="sig-default">None</span>,
330 <span class="sig-arg">handler</span>=<span class="sig-default">None</span>,
331 <span class="sig-arg">stderr</span>=<span class="sig-default">False</span>,
332 <span class="sig-arg">timeout</span>=<span class="sig-default">-1</span>,
333 <span class="sig-arg">autoclose</span>=<span class="sig-default">False</span>)</span>
334 <br /><em class="fname">(Constructor)</em>
335 </h3>
336 </td><td align="right" valign="top"
337 ><span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen.__init__">source&nbsp;code</a></span>&nbsp;
338 </td>
339 </tr></table>
340
341 <p>Initialize Popen worker.</p>
342 <dl class="fields">
343 <dt>Overrides:
344 object.__init__
345 </dt>
346 </dl>
347 </td></tr></table>
348 </div>
349 <a name="_start"></a>
350 <div class="private">
351 <table class="details" border="1" cellpadding="3"
352 cellspacing="0" width="100%" bgcolor="white">
353 <tr><td>
354 <table width="100%" cellpadding="0" cellspacing="0" border="0">
355 <tr valign="top"><td>
356 <h3 class="epydoc"><span class="sig"><span class="sig-name">_start</span>(<span class="sig-arg">self</span>)</span>
357 </h3>
358 </td><td align="right" valign="top"
359 ><span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen._start">source&nbsp;code</a></span>&nbsp;
360 </td>
361 </tr></table>
362
363 <p>Start worker.</p>
364 <dl class="fields">
365 <dt>Overrides:
366 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start" onclick="show_private();">EngineClient.EngineClient._start</a>
367 </dt>
368 </dl>
369 </td></tr></table>
370 </div>
371 <a name="_close"></a>
372 <div class="private">
373 <table class="details" border="1" cellpadding="3"
374 cellspacing="0" width="100%" bgcolor="white">
375 <tr><td>
376 <table width="100%" cellpadding="0" cellspacing="0" border="0">
377 <tr valign="top"><td>
378 <h3 class="epydoc"><span class="sig"><span class="sig-name">_close</span>(<span class="sig-arg">self</span>,
379 <span class="sig-arg">force</span>,
380 <span class="sig-arg">timeout</span>)</span>
381 </h3>
382 </td><td align="right" valign="top"
383 ><span class="codelink"><a href="ClusterShell.Worker.Popen-pysrc.html#WorkerPopen._close">source&nbsp;code</a></span>&nbsp;
384 </td>
385 </tr></table>
386
387 <p>Close worker. Called by engine after worker has been unregistered.
388 This method should handle all termination types (normal, forced or on
389 timeout).</p>
390 <dl class="fields">
391 <dt>Overrides:
392 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close" onclick="show_private();">EngineClient.EngineClient._close</a>
393 </dt>
394 </dl>
395 </td></tr></table>
396 </div>
397 <br />
398 <!-- ==================== NAVIGATION BAR ==================== -->
399 <table class="navbar" border="0" width="100%" cellpadding="0"
400 bgcolor="#a0c0ff" cellspacing="0">
401 <tr valign="middle">
402
403 <!-- Tree link -->
404 <th>&nbsp;&nbsp;&nbsp;<a
405 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
406
407 <!-- Index link -->
408 <th>&nbsp;&nbsp;&nbsp;<a
409 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
410
411 <!-- Help link -->
412 <th>&nbsp;&nbsp;&nbsp;<a
413 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
414
415 <!-- Project homepage -->
416 <th class="navbar" align="right" width="100%">
417 <table border="0" cellpadding="0" cellspacing="0">
418 <tr><th class="navbar" align="center"
419 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
420 </tr></table></th>
421 </tr>
422 </table>
423 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
424 <tr>
425 <td align="left" class="footer">
426 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
427 </td>
428 <td align="right" class="footer">
429 <a target="mainFrame" href="http://epydoc.sourceforge.net"
430 >http://epydoc.sourceforge.net</a>
431 </td>
432 </tr>
433 </table>
434
435 <script type="text/javascript">
436 <!--
437 // Private objects are initially displayed (because if
438 // javascript is turned off then we want them to be
439 // visible); but by default, we want to hide them. So hide
440 // them unless we have a cookie that says to show them.
441 checkCookie();
442 // -->
443 </script>
444 </body>
445 </html>
+0
-179
doc/epydoc/html/ClusterShell.Worker.Ssh-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Ssh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;Ssh
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Ssh-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module Ssh</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html">source&nbsp;code</a></span></p>
61 <p>ClusterShell Ssh/Scp support</p>
62 <p>This module implements OpenSSH engine client and task's worker.</p>
63
64 <!-- ==================== CLASSES ==================== -->
65 <a name="section-Classes"></a>
66 <table class="summary" border="1" cellpadding="3"
67 cellspacing="0" width="100%" bgcolor="white">
68 <tr bgcolor="#70b0f0" class="table-header">
69 <td colspan="2" class="table-header">
70 <table border="0" cellpadding="0" cellspacing="0" width="100%">
71 <tr valign="top">
72 <td align="left"><span class="table-header">Classes</span></td>
73 <td align="right" valign="top"
74 ><span class="options">[<a href="#section-Classes"
75 class="privatelink" onclick="toggle_private();"
76 >hide private</a>]</span></td>
77 </tr>
78 </table>
79 </td>
80 </tr>
81 <tr>
82 <td width="15%" align="right" valign="top" class="summary">
83 <span class="summary-type">&nbsp;</span>
84 </td><td class="summary">
85 <a href="ClusterShell.Worker.Ssh.Ssh-class.html" class="summary-name">Ssh</a><br />
86 Ssh EngineClient.
87 </td>
88 </tr>
89 <tr>
90 <td width="15%" align="right" valign="top" class="summary">
91 <span class="summary-type">&nbsp;</span>
92 </td><td class="summary">
93 <a href="ClusterShell.Worker.Ssh.Scp-class.html" class="summary-name">Scp</a><br />
94 Scp EngineClient.
95 </td>
96 </tr>
97 <tr>
98 <td width="15%" align="right" valign="top" class="summary">
99 <span class="summary-type">&nbsp;</span>
100 </td><td class="summary">
101 <a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html" class="summary-name">WorkerSsh</a><br />
102 ClusterShell ssh-based worker Class.
103 </td>
104 </tr>
105 </table>
106 <!-- ==================== VARIABLES ==================== -->
107 <a name="section-Variables"></a>
108 <table class="summary" border="1" cellpadding="3"
109 cellspacing="0" width="100%" bgcolor="white">
110 <tr bgcolor="#70b0f0" class="table-header">
111 <td colspan="2" class="table-header">
112 <table border="0" cellpadding="0" cellspacing="0" width="100%">
113 <tr valign="top">
114 <td align="left"><span class="table-header">Variables</span></td>
115 <td align="right" valign="top"
116 ><span class="options">[<a href="#section-Variables"
117 class="privatelink" onclick="toggle_private();"
118 >hide private</a>]</span></td>
119 </tr>
120 </table>
121 </td>
122 </tr>
123 <tr>
124 <td width="15%" align="right" valign="top" class="summary">
125 <span class="summary-type">&nbsp;</span>
126 </td><td class="summary">
127 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Worker'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Worker</code><code class="variable-quote">'</code></code>
128 </td>
129 </tr>
130 </table>
131 <!-- ==================== NAVIGATION BAR ==================== -->
132 <table class="navbar" border="0" width="100%" cellpadding="0"
133 bgcolor="#a0c0ff" cellspacing="0">
134 <tr valign="middle">
135
136 <!-- Tree link -->
137 <th>&nbsp;&nbsp;&nbsp;<a
138 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
139
140 <!-- Index link -->
141 <th>&nbsp;&nbsp;&nbsp;<a
142 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
143
144 <!-- Help link -->
145 <th>&nbsp;&nbsp;&nbsp;<a
146 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
147
148 <!-- Project homepage -->
149 <th class="navbar" align="right" width="100%">
150 <table border="0" cellpadding="0" cellspacing="0">
151 <tr><th class="navbar" align="center"
152 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
153 </tr></table></th>
154 </tr>
155 </table>
156 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
157 <tr>
158 <td align="left" class="footer">
159 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
160 </td>
161 <td align="right" class="footer">
162 <a target="mainFrame" href="http://epydoc.sourceforge.net"
163 >http://epydoc.sourceforge.net</a>
164 </td>
165 </tr>
166 </table>
167
168 <script type="text/javascript">
169 <!--
170 // Private objects are initially displayed (because if
171 // javascript is turned off then we want them to be
172 // visible); but by default, we want to hide them. So hide
173 // them unless we have a cookie that says to show them.
174 checkCookie();
175 // -->
176 </script>
177 </body>
178 </html>
+0
-596
doc/epydoc/html/ClusterShell.Worker.Ssh-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Ssh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;Ssh
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Ssh-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Worker.Ssh-module.html">Module ClusterShell.Worker.Ssh</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2008, 2009)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Ssh.py 292 2010-07-15 22:43:46Z st-cea $</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">ClusterShell Ssh/Scp support</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">This module implements OpenSSH engine client and task's worker.</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
100 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> </tt>
101 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Method ClusterShell.Task.Task.copy()=ClusterShell.Task.Task-class.html#copy"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-0', 'copy', 'link-0');">copy</a></tt> </tt>
102 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
103 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
104 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> </tt>
105 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-1', 'ClusterShell', 'link-1');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Module ClusterShell.NodeSet=ClusterShell.NodeSet-module.html,Class ClusterShell.NodeSet.NodeSet=ClusterShell.NodeSet.NodeSet-class.html"><a title="ClusterShell.NodeSet
106 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-2', 'NodeSet', 'link-2');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name"><a title="ClusterShell.NodeSet
107 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-3', 'NodeSet', 'link-2');">NodeSet</a></tt> </tt>
108 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-4', 'ClusterShell', 'link-1');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name" targets="Package ClusterShell.Worker=ClusterShell.Worker-module.html,Module ClusterShell.Worker.Worker=ClusterShell.Worker.Worker-module.html,Class ClusterShell.Worker.Worker.Worker=ClusterShell.Worker.Worker.Worker-class.html"><a title="ClusterShell.Worker
109 ClusterShell.Worker.Worker
110 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-5', 'Worker', 'link-5');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Module ClusterShell.Worker.EngineClient=ClusterShell.Worker.EngineClient-module.html,Class ClusterShell.Worker.EngineClient.EngineClient=ClusterShell.Worker.EngineClient.EngineClient-class.html"><a title="ClusterShell.Worker.EngineClient
111 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-6', 'EngineClient', 'link-6');">EngineClient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name"><a title="ClusterShell.Worker.EngineClient
112 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-7', 'EngineClient', 'link-6');">EngineClient</a></tt> </tt>
113 <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="ClusterShell" class="py-name" href="#" onclick="return doclink('link-8', 'ClusterShell', 'link-1');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="ClusterShell.Worker
114 ClusterShell.Worker.Worker
115 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-9', 'Worker', 'link-5');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.Worker
116 ClusterShell.Worker.Worker
117 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-10', 'Worker', 'link-5');">Worker</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.Worker.Worker.DistantWorker=ClusterShell.Worker.Worker.DistantWorker-class.html"><a title="ClusterShell.Worker.Worker.DistantWorker" class="py-name" href="#" onclick="return doclink('link-11', 'DistantWorker', 'link-11');">DistantWorker</a></tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name" targets="Class ClusterShell.Worker.Worker.WorkerBadArgumentError=ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html"><a title="ClusterShell.Worker.Worker.WorkerBadArgumentError" class="py-name" href="#" onclick="return doclink('link-12', 'WorkerBadArgumentError', 'link-12');">WorkerBadArgumentError</a></tt> </tt>
118 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> </tt>
119 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> </tt>
120 <a name="Ssh"></a><div id="Ssh-def"><a name="L50"></a><tt class="py-lineno"> 50</tt> <a class="py-toggle" href="#" id="Ssh-toggle" onclick="return toggle('Ssh');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Ssh-class.html">Ssh</a><tt class="py-op">(</tt><tt class="py-base-class">EngineClient</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
121 </div><div id="Ssh-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Ssh-expanded"><a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
122 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-docstring"> Ssh EngineClient.</tt> </tt>
123 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
124 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> </tt>
125 <a name="Ssh.__init__"></a><div id="Ssh.__init__-def"><a name="L55"></a><tt class="py-lineno"> 55</tt> <a class="py-toggle" href="#" id="Ssh.__init__-toggle" onclick="return toggle('Ssh.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Ssh-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">node</tt><tt class="py-op">,</tt> <tt class="py-param">command</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">,</tt> <tt class="py-param">stderr</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
126 </div><div id="Ssh.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Ssh.__init__-expanded"><a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
127 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> Initialize Ssh EngineClient instance.</tt> </tt>
128 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
129 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt id="link-13" class="py-name"><a title="ClusterShell.Worker.EngineClient
130 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-13', 'EngineClient', 'link-6');">EngineClient</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
131 ClusterShell.Engine.Engine.Engine.__init__
132 ClusterShell.Engine.Engine.EngineAbortException.__init__
133 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
134 ClusterShell.Engine.Engine.EngineTimer.__init__
135 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
136 ClusterShell.Engine.Engine._EngineTimerQ.__init__
137 ClusterShell.Engine.Poll.EnginePoll.__init__
138 ClusterShell.MsgTree.MsgTree.__init__
139 ClusterShell.MsgTree.MsgTreeElem.__init__
140 ClusterShell.NodeSet.NodeSet.__init__
141 ClusterShell.NodeSet.NodeSetBase.__init__
142 ClusterShell.NodeSet.NodeSetParseError.__init__
143 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
144 ClusterShell.NodeSet.ParsingEngine.__init__
145 ClusterShell.NodeSet.RangeSet.__init__
146 ClusterShell.NodeSet.RangeSetPaddingError.__init__
147 ClusterShell.NodeSet.RangeSetParseError.__init__
148 ClusterShell.NodeUtils.GroupResolver.__init__
149 ClusterShell.NodeUtils.GroupResolverConfig.__init__
150 ClusterShell.NodeUtils.GroupSource.__init__
151 ClusterShell.NodeUtils.GroupSourceException.__init__
152 ClusterShell.Task.Task._SuspendCondition.__init__
153 ClusterShell.Task.Task.__init__
154 ClusterShell.Task._TaskMsgTree.__init__
155 ClusterShell.Worker.EngineClient.EngineClient.__init__
156 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
157 ClusterShell.Worker.EngineClient.EnginePort.__init__
158 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
159 ClusterShell.Worker.Popen.WorkerPopen.__init__
160 ClusterShell.Worker.Ssh.Scp.__init__
161 ClusterShell.Worker.Ssh.Ssh.__init__
162 ClusterShell.Worker.Ssh.WorkerSsh.__init__
163 ClusterShell.Worker.Worker.DistantWorker.__init__
164 ClusterShell.Worker.Worker.Worker.__init__
165 ClusterShell.Worker.Worker.WorkerSimple.__init__
166 clubak.Display.__init__
167 clush.ClushConfig.__init__
168 clush.ClushConfigError.__init__
169 clush.DirectOutputHandler.__init__
170 clush.Display.__init__
171 clush.GatherOutputHandler.__init__
172 clush.RunTimer.__init__
173 clush.StdInputHandler.__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 class="py-name">worker</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt> </tt>
174 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> </tt>
175 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt id="link-15" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-15', 'copy', 'link-0');">copy</a></tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-16', 'copy', 'link-0');">copy</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
176 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-name">command</tt> </tt>
177 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
178 </div><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> </tt>
179 <a name="Ssh._start"></a><div id="Ssh._start-def"><a name="L65"></a><tt class="py-lineno"> 65</tt> <a class="py-toggle" href="#" id="Ssh._start-toggle" onclick="return toggle('Ssh._start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Ssh-class.html#_start">_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
180 </div><div id="Ssh._start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Ssh._start-expanded"><a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
181 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> Start worker, initialize buffers, prepare command.</tt> </tt>
182 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
183 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-name">task</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt> </tt>
184 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
185 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-comment"># Build ssh command</tt> </tt>
186 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-17', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_path"</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">"ssh"</tt><tt class="py-op">,</tt> <tt class="py-string">"-a"</tt><tt class="py-op">,</tt> <tt class="py-string">"-x"</tt> <tt class="py-op">]</tt> </tt>
187 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
188 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-name">user</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-18', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_user"</tt><tt class="py-op">)</tt> </tt>
189 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">user</tt><tt class="py-op">:</tt> </tt>
190 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.append()=ClusterShell.MsgTree.MsgTreeElem-class.html#append"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-19', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-l %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
191 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> </tt>
192 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">connect_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-20', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"connect_timeout"</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
193 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">connect_timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
194 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-21', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-oConnectTimeout=%d"</tt> <tt class="py-op">%</tt> <tt class="py-name">connect_timeout</tt><tt class="py-op">)</tt> </tt>
195 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> </tt>
196 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-comment"># Disable passphrase/password querying</tt> </tt>
197 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-22', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-oBatchMode=yes"</tt><tt class="py-op">)</tt> </tt>
198 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
199 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-comment"># Add custom ssh options</tt> </tt>
200 <a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-name">ssh_options</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-23', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_options"</tt><tt class="py-op">)</tt> </tt>
201 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ssh_options</tt><tt class="py-op">:</tt> </tt>
202 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-24', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">ssh_options</tt><tt class="py-op">)</tt> </tt>
203 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
204 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-25', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
205 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-26', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</tt><tt class="py-op">)</tt> </tt>
206 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> </tt>
207 <a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-27', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
208 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-28', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"SSH: %s"</tt> <tt class="py-op">%</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method ClusterShell.Task.Task.join()=ClusterShell.Task.Task-class.html#join"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-29', 'join', 'link-29');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_l</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
209 <a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt>
210 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock"><a title="ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock" class="py-name" href="#" onclick="return doclink('link-30', '_exec_nonblock', 'link-30');">_exec_nonblock</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_l</tt><tt class="py-op">)</tt> </tt>
211 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
212 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> </tt>
213 <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">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt> </tt>
214 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> </tt>
215 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker._on_start()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start"><a title="ClusterShell.Worker.Worker.DistantWorker._on_start" class="py-name" href="#" onclick="return doclink('link-31', '_on_start', 'link-31');">_on_start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
216 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> </tt>
217 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
218 </div><a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> </tt>
219 <a name="Ssh._close"></a><div id="Ssh._close-def"><a name="L105"></a><tt class="py-lineno">105</tt> <a class="py-toggle" href="#" id="Ssh._close-toggle" onclick="return toggle('Ssh._close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Ssh-class.html#_close">_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
220 </div><div id="Ssh._close-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Ssh._close-expanded"><a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
221 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"><tt class="py-docstring"> Close client. Called by engine after the client has been</tt> </tt>
222 <a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"><tt class="py-docstring"> unregistered. This method should handle all termination types</tt> </tt>
223 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"><tt class="py-docstring"> (normal, forced or on timeout).</tt> </tt>
224 <a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
225 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">force</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt><tt class="py-op">:</tt> </tt>
226 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-comment"># We still have some read data available in buffer, but no</tt> </tt>
227 <a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-comment"># EOL. Generate a final message before closing.</tt> </tt>
228 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker._on_node_msgline()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline"><a title="ClusterShell.Worker.Worker.DistantWorker._on_node_msgline" class="py-name" href="#" onclick="return doclink('link-32', '_on_node_msgline', 'link-32');">_on_node_msgline</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt><tt class="py-op">)</tt> </tt>
229 <a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> </tt>
230 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
231 <a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">force</tt> <tt class="py-keyword">or</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
232 <a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-name">prc</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
233 <a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prc</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
234 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-comment"># process is still running, kill it</tt> </tt>
235 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">kill</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">pid</tt><tt class="py-op">,</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGKILL</tt><tt class="py-op">)</tt> </tt>
236 <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>
237 <a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-name">prc</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Class Method ClusterShell.Task.Task.wait()=ClusterShell.Task.Task-class.html#wait"><a title="ClusterShell.Task.Task.wait" class="py-name" href="#" onclick="return doclink('link-33', 'wait', 'link-33');">wait</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
238 <a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prc</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
239 <a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">prc</tt> </tt>
240 <a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> </tt>
241 <a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</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>
242 <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">popen</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>
243 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> </tt>
244 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rc</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
245 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_on_node_rc,Method ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_rc,Method ClusterShell.Worker.Worker.DistantWorker._on_node_rc()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_rc"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc
246 ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc
247 ClusterShell.Worker.Worker.DistantWorker._on_node_rc" class="py-name" href="#" onclick="return doclink('link-34', '_on_node_rc', 'link-34');">_on_node_rc</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
248 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
249 <a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Method ClusterShell.Worker.Ssh.WorkerSsh._on_node_timeout()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_timeout,Method ClusterShell.Worker.Worker.DistantWorker._on_node_timeout()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_timeout"><a title="ClusterShell.Worker.Ssh.WorkerSsh._on_node_timeout
250 ClusterShell.Worker.Worker.DistantWorker._on_node_timeout" class="py-name" href="#" onclick="return doclink('link-35', '_on_node_timeout', 'link-35');">_on_node_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
251 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> </tt>
252 <a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method ClusterShell.Worker.Ssh.WorkerSsh._check_fini()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#_check_fini"><a title="ClusterShell.Worker.Ssh.WorkerSsh._check_fini" class="py-name" href="#" onclick="return doclink('link-36', '_check_fini', 'link-36');">_check_fini</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
253 </div><a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> </tt>
254 <a name="Ssh._handle_read"></a><div id="Ssh._handle_read-def"><a name="L137"></a><tt class="py-lineno">137</tt> <a class="py-toggle" href="#" id="Ssh._handle_read-toggle" onclick="return toggle('Ssh._handle_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read">_handle_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
255 </div><div id="Ssh._handle_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Ssh._handle_read-expanded"><a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
256 <a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"><tt class="py-docstring"> Handle a read notification. Called by the engine as the result of an</tt> </tt>
257 <a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"><tt class="py-docstring"> event indicating that a read is available.</tt> </tt>
258 <a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
259 <a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-37', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
260 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
261 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-38', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt> </tt>
262 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> </tt>
263 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-39" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-39', 'msg', 'link-39');">msg</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._readlines()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines"><a title="ClusterShell.Worker.EngineClient.EngineClient._readlines" class="py-name" href="#" onclick="return doclink('link-40', '_readlines', 'link-40');">_readlines</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
264 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
265 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"%s: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-41" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-41', 'msg', 'link-39');">msg</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
266 <a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-comment"># handle full msg line</tt> </tt>
267 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker._on_node_msgline" class="py-name" href="#" onclick="return doclink('link-42', '_on_node_msgline', 'link-32');">_on_node_msgline</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-43" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-43', 'msg', 'link-39');">msg</a></tt><tt class="py-op">)</tt> </tt>
268 </div><a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> </tt>
269 <a name="Ssh._handle_error"></a><div id="Ssh._handle_error-def"><a name="L152"></a><tt class="py-lineno">152</tt> <a class="py-toggle" href="#" id="Ssh._handle_error-toggle" onclick="return toggle('Ssh._handle_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Ssh-class.html#_handle_error">_handle_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
270 </div><div id="Ssh._handle_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Ssh._handle_error-expanded"><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
271 <a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"><tt class="py-docstring"> Handle a read error (stderr) notification.</tt> </tt>
272 <a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
273 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-44', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
274 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
275 <a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-45', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt> </tt>
276 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> </tt>
277 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-46" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-46', 'msg', 'link-39');">msg</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._readerrlines()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines"><a title="ClusterShell.Worker.EngineClient.EngineClient._readerrlines" class="py-name" href="#" onclick="return doclink('link-47', '_readerrlines', 'link-47');">_readerrlines</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
278 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
279 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"%s@STDERR: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-48" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-48', 'msg', 'link-39');">msg</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
280 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-comment"># handle full msg line</tt> </tt>
281 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker._on_node_errline()=ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline"><a title="ClusterShell.Worker.Worker.DistantWorker._on_node_errline" class="py-name" href="#" onclick="return doclink('link-49', '_on_node_errline', 'link-49');">_on_node_errline</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-50" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-50', 'msg', 'link-39');">msg</a></tt><tt class="py-op">)</tt> </tt>
282 </div></div><a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> </tt>
283 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> </tt>
284 <a name="Scp"></a><div id="Scp-def"><a name="L167"></a><tt class="py-lineno">167</tt> <a class="py-toggle" href="#" id="Scp-toggle" onclick="return toggle('Scp');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Scp-class.html">Scp</a><tt class="py-op">(</tt><tt class="py-base-class">Ssh</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
285 </div><div id="Scp-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Scp-expanded"><a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
286 <a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"><tt class="py-docstring"> Scp EngineClient.</tt> </tt>
287 <a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
288 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> </tt>
289 <a name="Scp.__init__"></a><div id="Scp.__init__-def"><a name="L172"></a><tt class="py-lineno">172</tt> <a class="py-toggle" href="#" id="Scp.__init__-toggle" onclick="return toggle('Scp.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Scp-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">node</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">,</tt> <tt class="py-param">dest</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">,</tt> <tt class="py-param">stderr</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">,</tt> <tt class="py-param">preserve</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
290 </div><div id="Scp.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Scp.__init__-expanded"><a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
291 <a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"><tt class="py-docstring"> Initialize Scp instance.</tt> </tt>
292 <a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
293 <a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt id="link-51" class="py-name" targets="Module ClusterShell.Worker.Ssh=ClusterShell.Worker.Ssh-module.html,Class ClusterShell.Worker.Ssh.Ssh=ClusterShell.Worker.Ssh.Ssh-class.html"><a title="ClusterShell.Worker.Ssh
294 ClusterShell.Worker.Ssh.Ssh" class="py-name" href="#" onclick="return doclink('link-51', 'Ssh', 'link-51');">Ssh</a></tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
295 ClusterShell.Engine.Engine.Engine.__init__
296 ClusterShell.Engine.Engine.EngineAbortException.__init__
297 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
298 ClusterShell.Engine.Engine.EngineTimer.__init__
299 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
300 ClusterShell.Engine.Engine._EngineTimerQ.__init__
301 ClusterShell.Engine.Poll.EnginePoll.__init__
302 ClusterShell.MsgTree.MsgTree.__init__
303 ClusterShell.MsgTree.MsgTreeElem.__init__
304 ClusterShell.NodeSet.NodeSet.__init__
305 ClusterShell.NodeSet.NodeSetBase.__init__
306 ClusterShell.NodeSet.NodeSetParseError.__init__
307 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
308 ClusterShell.NodeSet.ParsingEngine.__init__
309 ClusterShell.NodeSet.RangeSet.__init__
310 ClusterShell.NodeSet.RangeSetPaddingError.__init__
311 ClusterShell.NodeSet.RangeSetParseError.__init__
312 ClusterShell.NodeUtils.GroupResolver.__init__
313 ClusterShell.NodeUtils.GroupResolverConfig.__init__
314 ClusterShell.NodeUtils.GroupSource.__init__
315 ClusterShell.NodeUtils.GroupSourceException.__init__
316 ClusterShell.Task.Task._SuspendCondition.__init__
317 ClusterShell.Task.Task.__init__
318 ClusterShell.Task._TaskMsgTree.__init__
319 ClusterShell.Worker.EngineClient.EngineClient.__init__
320 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
321 ClusterShell.Worker.EngineClient.EnginePort.__init__
322 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
323 ClusterShell.Worker.Popen.WorkerPopen.__init__
324 ClusterShell.Worker.Ssh.Scp.__init__
325 ClusterShell.Worker.Ssh.Ssh.__init__
326 ClusterShell.Worker.Ssh.WorkerSsh.__init__
327 ClusterShell.Worker.Worker.DistantWorker.__init__
328 ClusterShell.Worker.Worker.Worker.__init__
329 ClusterShell.Worker.Worker.WorkerSimple.__init__
330 clubak.Display.__init__
331 clush.ClushConfig.__init__
332 clush.ClushConfigError.__init__
333 clush.DirectOutputHandler.__init__
334 clush.Display.__init__
335 clush.GatherOutputHandler.__init__
336 clush.RunTimer.__init__
337 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-52', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">worker</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
338 <a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">source</tt> </tt>
339 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dest</tt> <tt class="py-op">=</tt> <tt class="py-name">dest</tt> </tt>
340 <a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
341 <a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> </tt>
342 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-comment"># Directory check</tt> </tt>
343 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">isdir</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">isdir</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt><tt class="py-op">)</tt> </tt>
344 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-comment"># Note: file sanity checks can be added to Scp._start() as</tt> </tt>
345 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-comment"># soon as Task._start_thread is able to dispatch exceptions on</tt> </tt>
346 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-comment"># _start (need trac ticket #21).</tt> </tt>
347 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> </tt>
348 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-comment"># Preserve modification times and modes?</tt> </tt>
349 <a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">preserve</tt> <tt class="py-op">=</tt> <tt class="py-name">preserve</tt> </tt>
350 </div><a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt>
351 <a name="Scp._start"></a><div id="Scp._start-def"><a name="L190"></a><tt class="py-lineno">190</tt> <a class="py-toggle" href="#" id="Scp._start-toggle" onclick="return toggle('Scp._start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.Scp-class.html#_start">_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
352 </div><div id="Scp._start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Scp._start-expanded"><a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
353 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-docstring"> Start client, initialize buffers, prepare command.</tt> </tt>
354 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
355 <a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">task</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt> </tt>
356 <a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> </tt>
357 <a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-comment"># Build scp command</tt> </tt>
358 <a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-53', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"scp_path"</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">"scp"</tt> <tt class="py-op">]</tt> </tt>
359 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> </tt>
360 <a name="L199"></a><tt class="py-lineno">199</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">isdir</tt><tt class="py-op">:</tt> </tt>
361 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-54', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-r"</tt><tt class="py-op">)</tt> </tt>
362 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> </tt>
363 <a name="L202"></a><tt class="py-lineno">202</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">preserve</tt><tt class="py-op">:</tt> </tt>
364 <a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-55', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-p"</tt><tt class="py-op">)</tt> </tt>
365 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> </tt>
366 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">user</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-56', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"scp_user"</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-57', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_user"</tt><tt class="py-op">)</tt> </tt>
367 <a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">user</tt><tt class="py-op">:</tt> </tt>
368 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-58', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-l %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
369 <a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> </tt>
370 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-name">connect_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-59', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"connect_timeout"</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
371 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">connect_timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
372 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-60', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-oConnectTimeout=%d"</tt> <tt class="py-op">%</tt> <tt class="py-name">connect_timeout</tt><tt class="py-op">)</tt> </tt>
373 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> </tt>
374 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-comment"># Disable passphrase/password querying</tt> </tt>
375 <a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-61', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"-oBatchMode=yes"</tt><tt class="py-op">)</tt> </tt>
376 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> </tt>
377 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-comment"># Add custom scp options</tt> </tt>
378 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt> <tt class="py-string">"ssh_options"</tt><tt class="py-op">,</tt> <tt class="py-string">"scp_options"</tt> <tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
379 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">ssh_options</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-62', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
380 <a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ssh_options</tt><tt class="py-op">:</tt> </tt>
381 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-63', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">ssh_options</tt><tt class="py-op">)</tt> </tt>
382 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> </tt>
383 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-64', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt><tt class="py-op">)</tt> </tt>
384 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> </tt>
385 <a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-name">user</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-65', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_user"</tt><tt class="py-op">)</tt> </tt>
386 <a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">user</tt><tt class="py-op">:</tt> </tt>
387 <a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-66', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s@%s:%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">user</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dest</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
388 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
389 <a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-name">cmd_l</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-67', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s:%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dest</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
390 <a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> </tt>
391 <a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-68', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
392 <a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-69', 'info', 'link-17');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"SCP: %s"</tt> <tt class="py-op">%</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-70', 'join', 'link-29');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_l</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
393 <a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> </tt>
394 <a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock" class="py-name" href="#" onclick="return doclink('link-71', '_exec_nonblock', 'link-30');">_exec_nonblock</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd_l</tt><tt class="py-op">)</tt> </tt>
395 <a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> </tt>
396 <a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
397 <a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt> </tt>
398 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> </tt>
399 <a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
400 </div></div><a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> </tt>
401 <a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> </tt>
402 <a name="WorkerSsh"></a><div id="WorkerSsh-def"><a name="L241"></a><tt class="py-lineno">241</tt> <a class="py-toggle" href="#" id="WorkerSsh-toggle" onclick="return toggle('WorkerSsh');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a><tt class="py-op">(</tt><tt class="py-base-class">DistantWorker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
403 </div><div id="WorkerSsh-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="WorkerSsh-expanded"><a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
404 <a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"><tt class="py-docstring"> ClusterShell ssh-based worker Class.</tt> </tt>
405 <a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
406 <a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"><tt class="py-docstring"> Remote Shell (ssh) usage example:</tt> </tt>
407 <a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; worker = WorkerSsh(nodeset, handler=MyEventHandler(),</tt> </tt>
408 <a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"><tt class="py-docstring"> ... timeout=30, command="/bin/hostname")</tt> </tt>
409 <a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.schedule(worker) # schedule worker for execution</tt> </tt>
410 <a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.resume() # run</tt> </tt>
411 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
412 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"><tt class="py-docstring"> Remote Copy (scp) usage example: </tt> </tt>
413 <a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; worker = WorkerSsh(nodeset, handler=MyEventHandler(),</tt> </tt>
414 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"><tt class="py-docstring"> ... timeout=30, source="/etc/my.conf",</tt> </tt>
415 <a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"><tt class="py-docstring"> ... dest="/etc/my.conf")</tt> </tt>
416 <a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.schedule(worker) # schedule worker for execution</tt> </tt>
417 <a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; task.resume() # run</tt> </tt>
418 <a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
419 <a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> </tt>
420 <a name="WorkerSsh.__init__"></a><div id="WorkerSsh.__init__-def"><a name="L259"></a><tt class="py-lineno">259</tt> <a class="py-toggle" href="#" id="WorkerSsh.__init__-toggle" onclick="return toggle('WorkerSsh.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.WorkerSsh-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">nodes</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</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>
421 </div><div id="WorkerSsh.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSsh.__init__-expanded"><a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
422 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"><tt class="py-docstring"> Initialize Ssh worker instance.</tt> </tt>
423 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
424 <a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt id="link-72" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker" class="py-name" href="#" onclick="return doclink('link-72', 'DistantWorker', 'link-11');">DistantWorker</a></tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
425 ClusterShell.Engine.Engine.Engine.__init__
426 ClusterShell.Engine.Engine.EngineAbortException.__init__
427 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
428 ClusterShell.Engine.Engine.EngineTimer.__init__
429 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
430 ClusterShell.Engine.Engine._EngineTimerQ.__init__
431 ClusterShell.Engine.Poll.EnginePoll.__init__
432 ClusterShell.MsgTree.MsgTree.__init__
433 ClusterShell.MsgTree.MsgTreeElem.__init__
434 ClusterShell.NodeSet.NodeSet.__init__
435 ClusterShell.NodeSet.NodeSetBase.__init__
436 ClusterShell.NodeSet.NodeSetParseError.__init__
437 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
438 ClusterShell.NodeSet.ParsingEngine.__init__
439 ClusterShell.NodeSet.RangeSet.__init__
440 ClusterShell.NodeSet.RangeSetPaddingError.__init__
441 ClusterShell.NodeSet.RangeSetParseError.__init__
442 ClusterShell.NodeUtils.GroupResolver.__init__
443 ClusterShell.NodeUtils.GroupResolverConfig.__init__
444 ClusterShell.NodeUtils.GroupSource.__init__
445 ClusterShell.NodeUtils.GroupSourceException.__init__
446 ClusterShell.Task.Task._SuspendCondition.__init__
447 ClusterShell.Task.Task.__init__
448 ClusterShell.Task._TaskMsgTree.__init__
449 ClusterShell.Worker.EngineClient.EngineClient.__init__
450 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
451 ClusterShell.Worker.EngineClient.EnginePort.__init__
452 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
453 ClusterShell.Worker.Popen.WorkerPopen.__init__
454 ClusterShell.Worker.Ssh.Scp.__init__
455 ClusterShell.Worker.Ssh.Ssh.__init__
456 ClusterShell.Worker.Ssh.WorkerSsh.__init__
457 ClusterShell.Worker.Worker.DistantWorker.__init__
458 ClusterShell.Worker.Worker.Worker.__init__
459 ClusterShell.Worker.Worker.WorkerSimple.__init__
460 clubak.Display.__init__
461 clush.ClushConfig.__init__
462 clush.ClushConfigError.__init__
463 clush.DirectOutputHandler.__init__
464 clush.Display.__init__
465 clush.GatherOutputHandler.__init__
466 clush.RunTimer.__init__
467 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-73', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
468 <a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> </tt>
469 <a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clients()=ClusterShell.Engine.Engine.Engine-class.html#clients"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-74', 'clients', 'link-74');">clients</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
470 <a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt> <tt class="py-op">=</tt> <tt id="link-75" class="py-name"><a title="ClusterShell.NodeSet
471 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-75', 'NodeSet', 'link-2');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">nodes</tt><tt class="py-op">)</tt> </tt>
472 <a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
473 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-76', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'command'</tt><tt class="py-op">)</tt> </tt>
474 <a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
475 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-77', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'source'</tt><tt class="py-op">)</tt> </tt>
476 <a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dest</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
477 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-78', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'dest'</tt><tt class="py-op">)</tt> </tt>
478 <a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-name">autoclose</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
479 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-79', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'autoclose'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
480 <a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
481 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-80', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'stderr'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
482 <a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_close_count</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
483 <a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_has_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
484 <a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> </tt>
485 <a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-comment"># Prepare underlying engine clients (ssh/scp processes)</tt> </tt>
486 <a name="L276"></a><tt class="py-lineno">276</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">command</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>
487 <a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-comment"># secure remote shell</tt> </tt>
488 <a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt><tt class="py-op">:</tt> </tt>
489 <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 id="link-81" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-81', 'clients', 'link-74');">clients</a></tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-82', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt id="link-83" class="py-name"><a title="ClusterShell.Worker.Ssh
490 ClusterShell.Worker.Ssh.Ssh" class="py-name" href="#" onclick="return doclink('link-83', 'Ssh', 'link-51');">Ssh</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">command</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>
491 <a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
492 <a name="L281"></a><tt class="py-lineno">281</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">source</tt><tt class="py-op">:</tt> </tt>
493 <a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-comment"># secure copy</tt> </tt>
494 <a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt><tt class="py-op">:</tt> </tt>
495 <a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-84', 'clients', 'link-74');">clients</a></tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.append" class="py-name" href="#" onclick="return doclink('link-85', 'append', 'link-19');">append</a></tt><tt class="py-op">(</tt><tt id="link-86" class="py-name" targets="Class ClusterShell.Worker.Ssh.Scp=ClusterShell.Worker.Ssh.Scp-class.html"><a title="ClusterShell.Worker.Ssh.Scp" class="py-name" href="#" onclick="return doclink('link-86', 'Scp', 'link-86');">Scp</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dest</tt><tt class="py-op">,</tt> </tt>
496 <a name="L285"></a><tt class="py-lineno">285</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">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.get
497 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-87', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'preserve'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
498 <a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
499 <a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-88" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerBadArgumentError" class="py-name" href="#" onclick="return doclink('link-88', 'WorkerBadArgumentError', 'link-12');">WorkerBadArgumentError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
500 </div><a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> </tt>
501 <a name="WorkerSsh._engine_clients"></a><div id="WorkerSsh._engine_clients-def"><a name="L289"></a><tt class="py-lineno">289</tt> <a class="py-toggle" href="#" id="WorkerSsh._engine_clients-toggle" onclick="return toggle('WorkerSsh._engine_clients');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_engine_clients">_engine_clients</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
502 </div><div id="WorkerSsh._engine_clients-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSsh._engine_clients-expanded"><a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
503 <a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"><tt class="py-docstring"> Access underlying engine clients.</tt> </tt>
504 <a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
505 <a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-89', 'clients', 'link-74');">clients</a></tt> </tt>
506 </div><a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> </tt>
507 <a name="WorkerSsh._on_node_rc"></a><div id="WorkerSsh._on_node_rc-def"><a name="L295"></a><tt class="py-lineno">295</tt> <a class="py-toggle" href="#" id="WorkerSsh._on_node_rc-toggle" onclick="return toggle('WorkerSsh._on_node_rc');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_rc">_on_node_rc</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">rc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
508 </div><div id="WorkerSsh._on_node_rc-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSsh._on_node_rc-expanded"><a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt id="link-90" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker" class="py-name" href="#" onclick="return doclink('link-90', 'DistantWorker', 'link-11');">DistantWorker</a></tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc
509 ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc
510 ClusterShell.Worker.Worker.DistantWorker._on_node_rc" class="py-name" href="#" onclick="return doclink('link-91', '_on_node_rc', 'link-34');">_on_node_rc</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
511 <a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_close_count</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
512 </div><a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> </tt>
513 <a name="WorkerSsh._on_node_timeout"></a><div id="WorkerSsh._on_node_timeout-def"><a name="L299"></a><tt class="py-lineno">299</tt> <a class="py-toggle" href="#" id="WorkerSsh._on_node_timeout-toggle" onclick="return toggle('WorkerSsh._on_node_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_timeout">_on_node_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
514 </div><div id="WorkerSsh._on_node_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSsh._on_node_timeout-expanded"><a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt id="link-92" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker" class="py-name" href="#" onclick="return doclink('link-92', 'DistantWorker', 'link-11');">DistantWorker</a></tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="ClusterShell.Worker.Ssh.WorkerSsh._on_node_timeout
515 ClusterShell.Worker.Worker.DistantWorker._on_node_timeout" class="py-name" href="#" onclick="return doclink('link-93', '_on_node_timeout', 'link-35');">_on_node_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
516 <a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_close_count</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
517 <a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_has_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
518 </div><a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> </tt>
519 <a name="WorkerSsh._check_fini"></a><div id="WorkerSsh._check_fini-def"><a name="L304"></a><tt class="py-lineno">304</tt> <a class="py-toggle" href="#" id="WorkerSsh._check_fini-toggle" onclick="return toggle('WorkerSsh._check_fini');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_check_fini">_check_fini</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
520 </div><div id="WorkerSsh._check_fini-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSsh._check_fini-expanded"><a name="L305"></a><tt class="py-lineno">305</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">_close_count</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-94', 'clients', 'link-74');">clients</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
521 <a name="L306"></a><tt class="py-lineno">306</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">_has_timeout</tt><tt class="py-op">:</tt> </tt>
522 <a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name" targets="Method ClusterShell.Event.EventHandler._invoke()=ClusterShell.Event.EventHandler-class.html#_invoke,Method ClusterShell.Worker.Worker.Worker._invoke()=ClusterShell.Worker.Worker.Worker-class.html#_invoke"><a title="ClusterShell.Event.EventHandler._invoke
523 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-95', '_invoke', 'link-95');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_timeout"</tt><tt class="py-op">)</tt> </tt>
524 <a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
525 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-96', '_invoke', 'link-95');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_close"</tt><tt class="py-op">)</tt> </tt>
526 </div><a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> </tt>
527 <a name="WorkerSsh.write"></a><div id="WorkerSsh.write-def"><a name="L310"></a><tt class="py-lineno">310</tt> <a class="py-toggle" href="#" id="WorkerSsh.write-toggle" onclick="return toggle('WorkerSsh.write');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#write">write</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">buf</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
528 </div><div id="WorkerSsh.write-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSsh.write-expanded"><a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
529 <a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"><tt class="py-docstring"> Write to worker clients.</tt> </tt>
530 <a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
531 <a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-97', 'clients', 'link-74');">clients</a></tt><tt class="py-op">:</tt> </tt>
532 <a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._write()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_write"><a title="ClusterShell.Worker.EngineClient.EngineClient._write" class="py-name" href="#" onclick="return doclink('link-98', '_write', 'link-98');">_write</a></tt><tt class="py-op">(</tt><tt class="py-name">buf</tt><tt class="py-op">)</tt> </tt>
533 </div><a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> </tt>
534 <a name="WorkerSsh.set_write_eof"></a><div id="WorkerSsh.set_write_eof-def"><a name="L317"></a><tt class="py-lineno">317</tt> <a class="py-toggle" href="#" id="WorkerSsh.set_write_eof-toggle" onclick="return toggle('WorkerSsh.set_write_eof');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#set_write_eof">set_write_eof</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
535 </div><div id="WorkerSsh.set_write_eof-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSsh.set_write_eof-expanded"><a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
536 <a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"><tt class="py-docstring"> Tell worker to close its writer file descriptor once flushed. Do not</tt> </tt>
537 <a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"><tt class="py-docstring"> perform writes after this call.</tt> </tt>
538 <a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
539 <a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-99', 'clients', 'link-74');">clients</a></tt><tt class="py-op">:</tt> </tt>
540 <a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._set_write_eof()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof"><a title="ClusterShell.Worker.EngineClient.EngineClient._set_write_eof" class="py-name" href="#" onclick="return doclink('link-100', '_set_write_eof', 'link-100');">_set_write_eof</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
541 </div></div><a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> </tt><script type="text/javascript">
542 <!--
543 expandto(location.href);
544 // -->
545 </script>
546 </pre>
547 <br />
548 <!-- ==================== NAVIGATION BAR ==================== -->
549 <table class="navbar" border="0" width="100%" cellpadding="0"
550 bgcolor="#a0c0ff" cellspacing="0">
551 <tr valign="middle">
552
553 <!-- Tree link -->
554 <th>&nbsp;&nbsp;&nbsp;<a
555 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
556
557 <!-- Index link -->
558 <th>&nbsp;&nbsp;&nbsp;<a
559 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
560
561 <!-- Help link -->
562 <th>&nbsp;&nbsp;&nbsp;<a
563 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
564
565 <!-- Project homepage -->
566 <th class="navbar" align="right" width="100%">
567 <table border="0" cellpadding="0" cellspacing="0">
568 <tr><th class="navbar" align="center"
569 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
570 </tr></table></th>
571 </tr>
572 </table>
573 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
574 <tr>
575 <td align="left" class="footer">
576 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:24 2010
577 </td>
578 <td align="right" class="footer">
579 <a target="mainFrame" href="http://epydoc.sourceforge.net"
580 >http://epydoc.sourceforge.net</a>
581 </td>
582 </tr>
583 </table>
584
585 <script type="text/javascript">
586 <!--
587 // Private objects are initially displayed (because if
588 // javascript is turned off then we want them to be
589 // visible); but by default, we want to hide them. So hide
590 // them unless we have a cookie that says to show them.
591 checkCookie();
592 // -->
593 </script>
594 </body>
595 </html>
+0
-297
doc/epydoc/html/ClusterShell.Worker.Ssh.Scp-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Ssh.Scp</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Ssh-module.html">Module&nbsp;Ssh</a> ::
44 Class&nbsp;Scp
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Ssh.Scp-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class Scp</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Scp">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_55" name="uml_class_diagram_for_clusters_55">
64 <area shape="rect" id="node212" href="ClusterShell.Worker.Ssh.Scp-class.html#__init__" title="Initialize Scp instance." alt="" coords="17,332,412,351"/>
65 <area shape="rect" id="node1" href="ClusterShell.Worker.Ssh.Scp-class.html" title="Scp EngineClient." alt="" coords="5,299,424,357"/>
66 <area shape="rect" id="node2" href="ClusterShell.Worker.Ssh.Ssh-class.html" title="Ssh EngineClient." alt="" coords="189,235,237,279"/>
67 <area shape="rect" id="node214" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno" title="Return the standard error reader file descriptor as an integer." alt="" coords="137,153,292,172"/>
68 <area shape="rect" id="node214" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno" title="Return the reader file descriptor as an integer." alt="" coords="137,172,292,191"/>
69 <area shape="rect" id="node214" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno" title="Return the writer file descriptor as an integer." alt="" coords="137,191,292,209"/>
70 <area shape="rect" id="node3" href="ClusterShell.Worker.EngineClient.EngineClient-class.html" title="Abstract class EngineClient." alt="" coords="125,121,304,215"/>
71 <area shape="rect" id="node215" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="96,39,333,57"/>
72 <area shape="rect" id="node215" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="96,57,333,76"/>
73 <area shape="rect" id="node215" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="96,76,333,95"/>
74 <area shape="rect" id="node4" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="84,6,345,101"/>
75 </map>
76 <img src="uml_class_diagram_for_clusters_55.png" alt='' usemap="#uml_class_diagram_for_clusters_55" ismap="ismap" class="graph-without-title" />
77 </center>
78 </center>
79 <hr />
80 <p>Scp EngineClient.</p>
81
82 <!-- ==================== INSTANCE METHODS ==================== -->
83 <a name="section-InstanceMethods"></a>
84 <table class="summary" border="1" cellpadding="3"
85 cellspacing="0" width="100%" bgcolor="white">
86 <tr bgcolor="#70b0f0" class="table-header">
87 <td colspan="2" class="table-header">
88 <table border="0" cellpadding="0" cellspacing="0" width="100%">
89 <tr valign="top">
90 <td align="left"><span class="table-header">Instance Methods</span></td>
91 <td align="right" valign="top"
92 ><span class="options">[<a href="#section-InstanceMethods"
93 class="privatelink" onclick="toggle_private();"
94 >hide private</a>]</span></td>
95 </tr>
96 </table>
97 </td>
98 </tr>
99 <tr>
100 <td width="15%" align="right" valign="top" class="summary">
101 <span class="summary-type">&nbsp;</span>
102 </td><td class="summary">
103 <table width="100%" cellpadding="0" cellspacing="0" border="0">
104 <tr>
105 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.Scp-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
106 <span class="summary-sig-arg">node</span>,
107 <span class="summary-sig-arg">source</span>,
108 <span class="summary-sig-arg">dest</span>,
109 <span class="summary-sig-arg">worker</span>,
110 <span class="summary-sig-arg">stderr</span>,
111 <span class="summary-sig-arg">timeout</span>,
112 <span class="summary-sig-arg">preserve</span>)</span><br />
113 Initialize Scp instance.</td>
114 <td align="right" valign="top">
115 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Scp.__init__">source&nbsp;code</a></span>
116
117 </td>
118 </tr>
119 </table>
120
121 </td>
122 </tr>
123 <tr class="private">
124 <td width="15%" align="right" valign="top" class="summary">
125 <span class="summary-type">&nbsp;</span>
126 </td><td class="summary">
127 <table width="100%" cellpadding="0" cellspacing="0" border="0">
128 <tr>
129 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.Scp-class.html#_start" class="summary-sig-name" onclick="show_private();">_start</a>(<span class="summary-sig-arg">self</span>)</span><br />
130 Start client, initialize buffers, prepare command.</td>
131 <td align="right" valign="top">
132 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Scp._start">source&nbsp;code</a></span>
133
134 </td>
135 </tr>
136 </table>
137
138 </td>
139 </tr>
140 <tr>
141 <td colspan="2" class="summary">
142 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Ssh.Ssh-class.html">Ssh</a></code></b> (private):
143 <code><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_close" onclick="show_private();">_close</a></code>,
144 <code><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_handle_error" onclick="show_private();">_handle_error</a></code>,
145 <code><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read" onclick="show_private();">_handle_read</a></code>
146 </p></div>
147 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient.EngineClient</a></code></b>:
148 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno">error_fileno</a></code>,
149 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno">reader_fileno</a></code>,
150 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno">writer_fileno</a></code>
151 </p>
152 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient.EngineClient</a></code></b> (private):
153 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer" onclick="show_private();">_close_writer</a></code>,
154 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock" onclick="show_private();">_exec_nonblock</a></code>,
155 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire" onclick="show_private();">_fire</a></code>,
156 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write" onclick="show_private();">_handle_write</a></code>,
157 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_read" onclick="show_private();">_read</a></code>,
158 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr" onclick="show_private();">_readerr</a></code>,
159 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines" onclick="show_private();">_readerrlines</a></code>,
160 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines" onclick="show_private();">_readlines</a></code>,
161 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading" onclick="show_private();">_set_reading</a></code>,
162 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error" onclick="show_private();">_set_reading_error</a></code>,
163 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof" onclick="show_private();">_set_write_eof</a></code>,
164 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing" onclick="show_private();">_set_writing</a></code>,
165 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_write" onclick="show_private();">_write</a></code>
166 </p></div>
167 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b>:
168 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a></code>,
169 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a></code>,
170 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a></code>
171 </p>
172 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b> (private):
173 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine" onclick="show_private();">_set_engine</a></code>
174 </p></div>
175 </td>
176 </tr>
177 </table>
178 <!-- ==================== METHOD DETAILS ==================== -->
179 <a name="section-MethodDetails"></a>
180 <table class="details" border="1" cellpadding="3"
181 cellspacing="0" width="100%" bgcolor="white">
182 <tr bgcolor="#70b0f0" class="table-header">
183 <td colspan="2" class="table-header">
184 <table border="0" cellpadding="0" cellspacing="0" width="100%">
185 <tr valign="top">
186 <td align="left"><span class="table-header">Method Details</span></td>
187 <td align="right" valign="top"
188 ><span class="options">[<a href="#section-MethodDetails"
189 class="privatelink" onclick="toggle_private();"
190 >hide private</a>]</span></td>
191 </tr>
192 </table>
193 </td>
194 </tr>
195 </table>
196 <a name="__init__"></a>
197 <div>
198 <table class="details" border="1" cellpadding="3"
199 cellspacing="0" width="100%" bgcolor="white">
200 <tr><td>
201 <table width="100%" cellpadding="0" cellspacing="0" border="0">
202 <tr valign="top"><td>
203 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
204 <span class="sig-arg">node</span>,
205 <span class="sig-arg">source</span>,
206 <span class="sig-arg">dest</span>,
207 <span class="sig-arg">worker</span>,
208 <span class="sig-arg">stderr</span>,
209 <span class="sig-arg">timeout</span>,
210 <span class="sig-arg">preserve</span>)</span>
211 <br /><em class="fname">(Constructor)</em>
212 </h3>
213 </td><td align="right" valign="top"
214 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Scp.__init__">source&nbsp;code</a></span>&nbsp;
215 </td>
216 </tr></table>
217
218 <p>Initialize Scp instance.</p>
219 <dl class="fields">
220 <dt>Overrides:
221 <a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__">Engine.Engine.EngineBaseTimer.__init__</a>
222 </dt>
223 </dl>
224 </td></tr></table>
225 </div>
226 <a name="_start"></a>
227 <div class="private">
228 <table class="details" border="1" cellpadding="3"
229 cellspacing="0" width="100%" bgcolor="white">
230 <tr><td>
231 <table width="100%" cellpadding="0" cellspacing="0" border="0">
232 <tr valign="top"><td>
233 <h3 class="epydoc"><span class="sig"><span class="sig-name">_start</span>(<span class="sig-arg">self</span>)</span>
234 </h3>
235 </td><td align="right" valign="top"
236 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Scp._start">source&nbsp;code</a></span>&nbsp;
237 </td>
238 </tr></table>
239
240 <p>Start client, initialize buffers, prepare command.</p>
241 <dl class="fields">
242 <dt>Overrides:
243 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start" onclick="show_private();">EngineClient.EngineClient._start</a>
244 </dt>
245 </dl>
246 </td></tr></table>
247 </div>
248 <br />
249 <!-- ==================== NAVIGATION BAR ==================== -->
250 <table class="navbar" border="0" width="100%" cellpadding="0"
251 bgcolor="#a0c0ff" cellspacing="0">
252 <tr valign="middle">
253
254 <!-- Tree link -->
255 <th>&nbsp;&nbsp;&nbsp;<a
256 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
257
258 <!-- Index link -->
259 <th>&nbsp;&nbsp;&nbsp;<a
260 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
261
262 <!-- Help link -->
263 <th>&nbsp;&nbsp;&nbsp;<a
264 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
265
266 <!-- Project homepage -->
267 <th class="navbar" align="right" width="100%">
268 <table border="0" cellpadding="0" cellspacing="0">
269 <tr><th class="navbar" align="center"
270 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
271 </tr></table></th>
272 </tr>
273 </table>
274 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
275 <tr>
276 <td align="left" class="footer">
277 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
278 </td>
279 <td align="right" class="footer">
280 <a target="mainFrame" href="http://epydoc.sourceforge.net"
281 >http://epydoc.sourceforge.net</a>
282 </td>
283 </tr>
284 </table>
285
286 <script type="text/javascript">
287 <!--
288 // Private objects are initially displayed (because if
289 // javascript is turned off then we want them to be
290 // visible); but by default, we want to hide them. So hide
291 // them unless we have a cookie that says to show them.
292 checkCookie();
293 // -->
294 </script>
295 </body>
296 </html>
+0
-414
doc/epydoc/html/ClusterShell.Worker.Ssh.Ssh-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Ssh.Ssh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Ssh-module.html">Module&nbsp;Ssh</a> ::
44 Class&nbsp;Ssh
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Ssh.Ssh-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class Ssh</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_56" name="uml_class_diagram_for_clusters_56">
64 <area shape="rect" id="node216" href="ClusterShell.Worker.Ssh.Ssh-class.html#__init__" title="Initialize Ssh EngineClient instance." alt="" coords="17,268,443,287"/>
65 <area shape="rect" id="node1" href="ClusterShell.Worker.Ssh.Ssh-class.html" title="Ssh EngineClient." alt="" coords="5,235,453,293"/>
66 <area shape="rect" id="node3" href="ClusterShell.Worker.Ssh.Scp-class.html" title="Scp EngineClient." alt="" coords="201,313,260,351"/>
67 <area shape="rect" id="node217" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno" title="Return the standard error reader file descriptor as an integer." alt="" coords="153,153,308,172"/>
68 <area shape="rect" id="node217" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno" title="Return the reader file descriptor as an integer." alt="" coords="153,172,308,191"/>
69 <area shape="rect" id="node217" href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno" title="Return the writer file descriptor as an integer." alt="" coords="153,191,308,209"/>
70 <area shape="rect" id="node2" href="ClusterShell.Worker.EngineClient.EngineClient-class.html" title="Abstract class EngineClient." alt="" coords="141,121,320,215"/>
71 <area shape="rect" id="node218" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="112,39,349,57"/>
72 <area shape="rect" id="node218" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="112,57,349,76"/>
73 <area shape="rect" id="node218" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="112,76,349,95"/>
74 <area shape="rect" id="node4" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="100,6,361,101"/>
75 </map>
76 <img src="uml_class_diagram_for_clusters_56.png" alt='' usemap="#uml_class_diagram_for_clusters_56" ismap="ismap" class="graph-without-title" />
77 </center>
78 </center>
79 <hr />
80 <p>Ssh EngineClient.</p>
81
82 <!-- ==================== INSTANCE METHODS ==================== -->
83 <a name="section-InstanceMethods"></a>
84 <table class="summary" border="1" cellpadding="3"
85 cellspacing="0" width="100%" bgcolor="white">
86 <tr bgcolor="#70b0f0" class="table-header">
87 <td colspan="2" class="table-header">
88 <table border="0" cellpadding="0" cellspacing="0" width="100%">
89 <tr valign="top">
90 <td align="left"><span class="table-header">Instance Methods</span></td>
91 <td align="right" valign="top"
92 ><span class="options">[<a href="#section-InstanceMethods"
93 class="privatelink" onclick="toggle_private();"
94 >hide private</a>]</span></td>
95 </tr>
96 </table>
97 </td>
98 </tr>
99 <tr>
100 <td width="15%" align="right" valign="top" class="summary">
101 <span class="summary-type">&nbsp;</span>
102 </td><td class="summary">
103 <table width="100%" cellpadding="0" cellspacing="0" border="0">
104 <tr>
105 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
106 <span class="summary-sig-arg">node</span>,
107 <span class="summary-sig-arg">command</span>,
108 <span class="summary-sig-arg">worker</span>,
109 <span class="summary-sig-arg">stderr</span>,
110 <span class="summary-sig-arg">timeout</span>,
111 <span class="summary-sig-arg">autoclose</span>=<span class="summary-sig-default">False</span>)</span><br />
112 Initialize Ssh EngineClient instance.</td>
113 <td align="right" valign="top">
114 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh.__init__">source&nbsp;code</a></span>
115
116 </td>
117 </tr>
118 </table>
119
120 </td>
121 </tr>
122 <tr class="private">
123 <td width="15%" align="right" valign="top" class="summary">
124 <span class="summary-type">&nbsp;</span>
125 </td><td class="summary">
126 <table width="100%" cellpadding="0" cellspacing="0" border="0">
127 <tr>
128 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_start" class="summary-sig-name" onclick="show_private();">_start</a>(<span class="summary-sig-arg">self</span>)</span><br />
129 Start worker, initialize buffers, prepare command.</td>
130 <td align="right" valign="top">
131 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh._start">source&nbsp;code</a></span>
132
133 </td>
134 </tr>
135 </table>
136
137 </td>
138 </tr>
139 <tr class="private">
140 <td width="15%" align="right" valign="top" class="summary">
141 <span class="summary-type">&nbsp;</span>
142 </td><td class="summary">
143 <table width="100%" cellpadding="0" cellspacing="0" border="0">
144 <tr>
145 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_close" class="summary-sig-name" onclick="show_private();">_close</a>(<span class="summary-sig-arg">self</span>,
146 <span class="summary-sig-arg">force</span>,
147 <span class="summary-sig-arg">timeout</span>)</span><br />
148 Close client.</td>
149 <td align="right" valign="top">
150 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh._close">source&nbsp;code</a></span>
151
152 </td>
153 </tr>
154 </table>
155
156 </td>
157 </tr>
158 <tr class="private">
159 <td width="15%" align="right" valign="top" class="summary">
160 <span class="summary-type">&nbsp;</span>
161 </td><td class="summary">
162 <table width="100%" cellpadding="0" cellspacing="0" border="0">
163 <tr>
164 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read" class="summary-sig-name" onclick="show_private();">_handle_read</a>(<span class="summary-sig-arg">self</span>)</span><br />
165 Handle a read notification.</td>
166 <td align="right" valign="top">
167 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh._handle_read">source&nbsp;code</a></span>
168
169 </td>
170 </tr>
171 </table>
172
173 </td>
174 </tr>
175 <tr class="private">
176 <td width="15%" align="right" valign="top" class="summary">
177 <span class="summary-type">&nbsp;</span>
178 </td><td class="summary">
179 <table width="100%" cellpadding="0" cellspacing="0" border="0">
180 <tr>
181 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_handle_error" class="summary-sig-name" onclick="show_private();">_handle_error</a>(<span class="summary-sig-arg">self</span>)</span><br />
182 Handle a read error (stderr) notification.</td>
183 <td align="right" valign="top">
184 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh._handle_error">source&nbsp;code</a></span>
185
186 </td>
187 </tr>
188 </table>
189
190 </td>
191 </tr>
192 <tr>
193 <td colspan="2" class="summary">
194 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient.EngineClient</a></code></b>:
195 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno">error_fileno</a></code>,
196 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno">reader_fileno</a></code>,
197 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno">writer_fileno</a></code>
198 </p>
199 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient.EngineClient</a></code></b> (private):
200 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer" onclick="show_private();">_close_writer</a></code>,
201 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock" onclick="show_private();">_exec_nonblock</a></code>,
202 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire" onclick="show_private();">_fire</a></code>,
203 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write" onclick="show_private();">_handle_write</a></code>,
204 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_read" onclick="show_private();">_read</a></code>,
205 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr" onclick="show_private();">_readerr</a></code>,
206 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines" onclick="show_private();">_readerrlines</a></code>,
207 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines" onclick="show_private();">_readlines</a></code>,
208 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading" onclick="show_private();">_set_reading</a></code>,
209 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error" onclick="show_private();">_set_reading_error</a></code>,
210 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof" onclick="show_private();">_set_write_eof</a></code>,
211 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing" onclick="show_private();">_set_writing</a></code>,
212 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_write" onclick="show_private();">_write</a></code>
213 </p></div>
214 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b>:
215 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a></code>,
216 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a></code>,
217 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a></code>
218 </p>
219 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b> (private):
220 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine" onclick="show_private();">_set_engine</a></code>
221 </p></div>
222 </td>
223 </tr>
224 </table>
225 <!-- ==================== METHOD DETAILS ==================== -->
226 <a name="section-MethodDetails"></a>
227 <table class="details" border="1" cellpadding="3"
228 cellspacing="0" width="100%" bgcolor="white">
229 <tr bgcolor="#70b0f0" class="table-header">
230 <td colspan="2" class="table-header">
231 <table border="0" cellpadding="0" cellspacing="0" width="100%">
232 <tr valign="top">
233 <td align="left"><span class="table-header">Method Details</span></td>
234 <td align="right" valign="top"
235 ><span class="options">[<a href="#section-MethodDetails"
236 class="privatelink" onclick="toggle_private();"
237 >hide private</a>]</span></td>
238 </tr>
239 </table>
240 </td>
241 </tr>
242 </table>
243 <a name="__init__"></a>
244 <div>
245 <table class="details" border="1" cellpadding="3"
246 cellspacing="0" width="100%" bgcolor="white">
247 <tr><td>
248 <table width="100%" cellpadding="0" cellspacing="0" border="0">
249 <tr valign="top"><td>
250 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
251 <span class="sig-arg">node</span>,
252 <span class="sig-arg">command</span>,
253 <span class="sig-arg">worker</span>,
254 <span class="sig-arg">stderr</span>,
255 <span class="sig-arg">timeout</span>,
256 <span class="sig-arg">autoclose</span>=<span class="sig-default">False</span>)</span>
257 <br /><em class="fname">(Constructor)</em>
258 </h3>
259 </td><td align="right" valign="top"
260 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh.__init__">source&nbsp;code</a></span>&nbsp;
261 </td>
262 </tr></table>
263
264 <p>Initialize Ssh EngineClient instance.</p>
265 <dl class="fields">
266 <dt>Overrides:
267 <a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__">Engine.Engine.EngineBaseTimer.__init__</a>
268 </dt>
269 </dl>
270 </td></tr></table>
271 </div>
272 <a name="_start"></a>
273 <div class="private">
274 <table class="details" border="1" cellpadding="3"
275 cellspacing="0" width="100%" bgcolor="white">
276 <tr><td>
277 <table width="100%" cellpadding="0" cellspacing="0" border="0">
278 <tr valign="top"><td>
279 <h3 class="epydoc"><span class="sig"><span class="sig-name">_start</span>(<span class="sig-arg">self</span>)</span>
280 </h3>
281 </td><td align="right" valign="top"
282 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh._start">source&nbsp;code</a></span>&nbsp;
283 </td>
284 </tr></table>
285
286 <p>Start worker, initialize buffers, prepare command.</p>
287 <dl class="fields">
288 <dt>Overrides:
289 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start" onclick="show_private();">EngineClient.EngineClient._start</a>
290 </dt>
291 </dl>
292 </td></tr></table>
293 </div>
294 <a name="_close"></a>
295 <div class="private">
296 <table class="details" border="1" cellpadding="3"
297 cellspacing="0" width="100%" bgcolor="white">
298 <tr><td>
299 <table width="100%" cellpadding="0" cellspacing="0" border="0">
300 <tr valign="top"><td>
301 <h3 class="epydoc"><span class="sig"><span class="sig-name">_close</span>(<span class="sig-arg">self</span>,
302 <span class="sig-arg">force</span>,
303 <span class="sig-arg">timeout</span>)</span>
304 </h3>
305 </td><td align="right" valign="top"
306 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh._close">source&nbsp;code</a></span>&nbsp;
307 </td>
308 </tr></table>
309
310 <p>Close client. Called by engine after the client has been unregistered.
311 This method should handle all termination types (normal, forced or on
312 timeout).</p>
313 <dl class="fields">
314 <dt>Overrides:
315 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close" onclick="show_private();">EngineClient.EngineClient._close</a>
316 </dt>
317 </dl>
318 </td></tr></table>
319 </div>
320 <a name="_handle_read"></a>
321 <div class="private">
322 <table class="details" border="1" cellpadding="3"
323 cellspacing="0" width="100%" bgcolor="white">
324 <tr><td>
325 <table width="100%" cellpadding="0" cellspacing="0" border="0">
326 <tr valign="top"><td>
327 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_read</span>(<span class="sig-arg">self</span>)</span>
328 </h3>
329 </td><td align="right" valign="top"
330 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh._handle_read">source&nbsp;code</a></span>&nbsp;
331 </td>
332 </tr></table>
333
334 <p>Handle a read notification. Called by the engine as the result of an
335 event indicating that a read is available.</p>
336 <dl class="fields">
337 <dt>Overrides:
338 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read" onclick="show_private();">EngineClient.EngineClient._handle_read</a>
339 </dt>
340 </dl>
341 </td></tr></table>
342 </div>
343 <a name="_handle_error"></a>
344 <div class="private">
345 <table class="details" border="1" cellpadding="3"
346 cellspacing="0" width="100%" bgcolor="white">
347 <tr><td>
348 <table width="100%" cellpadding="0" cellspacing="0" border="0">
349 <tr valign="top"><td>
350 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_error</span>(<span class="sig-arg">self</span>)</span>
351 </h3>
352 </td><td align="right" valign="top"
353 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#Ssh._handle_error">source&nbsp;code</a></span>&nbsp;
354 </td>
355 </tr></table>
356
357 <p>Handle a read error (stderr) notification.</p>
358 <dl class="fields">
359 <dt>Overrides:
360 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error" onclick="show_private();">EngineClient.EngineClient._handle_error</a>
361 </dt>
362 </dl>
363 </td></tr></table>
364 </div>
365 <br />
366 <!-- ==================== NAVIGATION BAR ==================== -->
367 <table class="navbar" border="0" width="100%" cellpadding="0"
368 bgcolor="#a0c0ff" cellspacing="0">
369 <tr valign="middle">
370
371 <!-- Tree link -->
372 <th>&nbsp;&nbsp;&nbsp;<a
373 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
374
375 <!-- Index link -->
376 <th>&nbsp;&nbsp;&nbsp;<a
377 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
378
379 <!-- Help link -->
380 <th>&nbsp;&nbsp;&nbsp;<a
381 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
382
383 <!-- Project homepage -->
384 <th class="navbar" align="right" width="100%">
385 <table border="0" cellpadding="0" cellspacing="0">
386 <tr><th class="navbar" align="center"
387 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
388 </tr></table></th>
389 </tr>
390 </table>
391 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
392 <tr>
393 <td align="left" class="footer">
394 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
395 </td>
396 <td align="right" class="footer">
397 <a target="mainFrame" href="http://epydoc.sourceforge.net"
398 >http://epydoc.sourceforge.net</a>
399 </td>
400 </tr>
401 </table>
402
403 <script type="text/javascript">
404 <!--
405 // Private objects are initially displayed (because if
406 // javascript is turned off then we want them to be
407 // visible); but by default, we want to hide them. So hide
408 // them unless we have a cookie that says to show them.
409 checkCookie();
410 // -->
411 </script>
412 </body>
413 </html>
+0
-513
doc/epydoc/html/ClusterShell.Worker.Ssh.WorkerSsh-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Ssh.WorkerSsh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Ssh-module.html">Module&nbsp;Ssh</a> ::
44 Class&nbsp;WorkerSsh
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class WorkerSsh</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_57" name="uml_class_diagram_for_clusters_57">
64 <area shape="rect" id="node220" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__" title="Initialize Ssh worker instance." alt="" coords="17,492,303,511"/>
65 <area shape="rect" id="node220" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#write" title="Write to worker clients." alt="" coords="17,511,303,529"/>
66 <area shape="rect" id="node220" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#set_write_eof" title="Tell worker to close its writer file descriptor once flushed." alt="" coords="17,529,303,548"/>
67 <area shape="rect" id="node1" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html" title="ClusterShell ssh&#45;based worker Class." alt="" coords="5,459,315,554"/>
68 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_node" title="Get last node, useful to get the node in an EventHandler callback like &#160;ev_timeout()." alt="" coords="32,153,287,172"/>
69 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_read" title="Get last (node, buffer), useful in an EventHandler.ev_read()" alt="" coords="32,172,287,191"/>
70 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_error" title="Get last (node, error_buffer), useful in an EventHandler.ev_error()" alt="" coords="32,191,287,209"/>
71 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode" title="Get last (node, rc), useful in an EventHandler.ev_hup()" alt="" coords="32,209,287,228"/>
72 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer" title="Get specific node buffer." alt="" coords="32,228,287,247"/>
73 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error" title="Get specific node error buffer." alt="" coords="32,247,287,265"/>
74 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error_buffer" title="Get specific node error buffer." alt="" coords="32,265,287,284"/>
75 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode" title="Get specific node return code." alt="" coords="32,284,287,303"/>
76 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc" title="Get specific node return code." alt="" coords="32,303,287,321"/>
77 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers" title="Returns an iterator over available buffers and associated NodeSet." alt="" coords="32,321,287,340"/>
78 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors" title="Returns an iterator over available error buffers and associated NodeSet." alt="" coords="32,340,287,359"/>
79 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers" title="Returns an iterator over each node and associated buffer." alt="" coords="32,359,287,377"/>
80 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors" title="Returns an iterator over each node and associated error buffer." alt="" coords="32,377,287,396"/>
81 <area shape="rect" id="node221" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout" title="Iterate over timed out keys (ie." alt="" coords="32,415,287,433"/>
82 <area shape="rect" id="node2" href="ClusterShell.Worker.Worker.DistantWorker-class.html" title="Base class DistantWorker, which provides a useful set of setters/getters to use with distant workers like ssh or pdsh." alt="" coords="20,121,297,439"/>
83 <area shape="rect" id="node222" href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout" title="Return True if this worker aborted due to timeout." alt="" coords="104,39,216,57"/>
84 <area shape="rect" id="node222" href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers" title="Flush any messages associated to this worker." alt="" coords="104,57,216,76"/>
85 <area shape="rect" id="node222" href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors" title="Flush any error messages associated to this worker." alt="" coords="104,76,216,95"/>
86 <area shape="rect" id="node3" href="ClusterShell.Worker.Worker.Worker-class.html" title="Base class Worker." alt="" coords="92,6,228,101"/>
87 </map>
88 <img src="uml_class_diagram_for_clusters_57.png" alt='' usemap="#uml_class_diagram_for_clusters_57" ismap="ismap" class="graph-without-title" />
89 </center>
90 </center>
91 <hr />
92 <p>ClusterShell ssh-based worker Class.</p>
93 <p>Remote Shell (ssh) usage example:</p>
94 <pre class="py-doctest">
95 <span class="py-prompt">&gt;&gt;&gt; </span>worker = WorkerSsh(nodeset, handler=MyEventHandler(),
96 <span class="py-more">... </span> timeout=30, command=<span class="py-string">&quot;/bin/hostname&quot;</span>)
97 <span class="py-prompt">&gt;&gt;&gt; </span>task.schedule(worker) <span class="py-comment"># schedule worker for execution</span>
98 <span class="py-prompt">&gt;&gt;&gt; </span>task.resume() <span class="py-comment"># run</span></pre>
99 <p>Remote Copy (scp) usage example:</p>
100 <pre class="py-doctest">
101 <span class="py-prompt">&gt;&gt;&gt; </span>worker = WorkerSsh(nodeset, handler=MyEventHandler(),
102 <span class="py-more">... </span> timeout=30, source=<span class="py-string">&quot;/etc/my.conf&quot;</span>,
103 <span class="py-more">... </span> dest=<span class="py-string">&quot;/etc/my.conf&quot;</span>)
104 <span class="py-prompt">&gt;&gt;&gt; </span>task.schedule(worker) <span class="py-comment"># schedule worker for execution</span>
105 <span class="py-prompt">&gt;&gt;&gt; </span>task.resume() <span class="py-comment"># run</span></pre>
106
107 <!-- ==================== INSTANCE METHODS ==================== -->
108 <a name="section-InstanceMethods"></a>
109 <table class="summary" border="1" cellpadding="3"
110 cellspacing="0" width="100%" bgcolor="white">
111 <tr bgcolor="#70b0f0" class="table-header">
112 <td colspan="2" class="table-header">
113 <table border="0" cellpadding="0" cellspacing="0" width="100%">
114 <tr valign="top">
115 <td align="left"><span class="table-header">Instance Methods</span></td>
116 <td align="right" valign="top"
117 ><span class="options">[<a href="#section-InstanceMethods"
118 class="privatelink" onclick="toggle_private();"
119 >hide private</a>]</span></td>
120 </tr>
121 </table>
122 </td>
123 </tr>
124 <tr>
125 <td width="15%" align="right" valign="top" class="summary">
126 <span class="summary-type">&nbsp;</span>
127 </td><td class="summary">
128 <table width="100%" cellpadding="0" cellspacing="0" border="0">
129 <tr>
130 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
131 <span class="summary-sig-arg">nodes</span>,
132 <span class="summary-sig-arg">handler</span>,
133 <span class="summary-sig-arg">timeout</span>,
134 <span class="summary-sig-arg">**kwargs</span>)</span><br />
135 Initialize Ssh worker instance.</td>
136 <td align="right" valign="top">
137 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh.__init__">source&nbsp;code</a></span>
138
139 </td>
140 </tr>
141 </table>
142
143 </td>
144 </tr>
145 <tr class="private">
146 <td width="15%" align="right" valign="top" class="summary">
147 <span class="summary-type">&nbsp;</span>
148 </td><td class="summary">
149 <table width="100%" cellpadding="0" cellspacing="0" border="0">
150 <tr>
151 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_engine_clients" class="summary-sig-name" onclick="show_private();">_engine_clients</a>(<span class="summary-sig-arg">self</span>)</span><br />
152 Access underlying engine clients.</td>
153 <td align="right" valign="top">
154 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh._engine_clients">source&nbsp;code</a></span>
155
156 </td>
157 </tr>
158 </table>
159
160 </td>
161 </tr>
162 <tr class="private">
163 <td width="15%" align="right" valign="top" class="summary">
164 <span class="summary-type">&nbsp;</span>
165 </td><td class="summary">
166 <table width="100%" cellpadding="0" cellspacing="0" border="0">
167 <tr>
168 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_rc" class="summary-sig-name" onclick="show_private();">_on_node_rc</a>(<span class="summary-sig-arg">self</span>,
169 <span class="summary-sig-arg">node</span>,
170 <span class="summary-sig-arg">rc</span>)</span><br />
171 Return code received from a node, update last* stuffs.</td>
172 <td align="right" valign="top">
173 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh._on_node_rc">source&nbsp;code</a></span>
174
175 </td>
176 </tr>
177 </table>
178
179 </td>
180 </tr>
181 <tr class="private">
182 <td width="15%" align="right" valign="top" class="summary">
183 <span class="summary-type">&nbsp;</span>
184 </td><td class="summary">
185 <table width="100%" cellpadding="0" cellspacing="0" border="0">
186 <tr>
187 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_timeout" class="summary-sig-name" onclick="show_private();">_on_node_timeout</a>(<span class="summary-sig-arg">self</span>,
188 <span class="summary-sig-arg">node</span>)</span><br />
189 Update on node timeout.</td>
190 <td align="right" valign="top">
191 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh._on_node_timeout">source&nbsp;code</a></span>
192
193 </td>
194 </tr>
195 </table>
196
197 </td>
198 </tr>
199 <tr class="private">
200 <td width="15%" align="right" valign="top" class="summary">
201 <span class="summary-type">&nbsp;</span>
202 </td><td class="summary">
203 <table width="100%" cellpadding="0" cellspacing="0" border="0">
204 <tr>
205 <td><span class="summary-sig"><a name="_check_fini"></a><span class="summary-sig-name">_check_fini</span>(<span class="summary-sig-arg">self</span>)</span></td>
206 <td align="right" valign="top">
207 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh._check_fini">source&nbsp;code</a></span>
208
209 </td>
210 </tr>
211 </table>
212
213 </td>
214 </tr>
215 <tr>
216 <td width="15%" align="right" valign="top" class="summary">
217 <span class="summary-type">&nbsp;</span>
218 </td><td class="summary">
219 <table width="100%" cellpadding="0" cellspacing="0" border="0">
220 <tr>
221 <td><span class="summary-sig"><a name="write"></a><span class="summary-sig-name">write</span>(<span class="summary-sig-arg">self</span>,
222 <span class="summary-sig-arg">buf</span>)</span><br />
223 Write to worker clients.</td>
224 <td align="right" valign="top">
225 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh.write">source&nbsp;code</a></span>
226
227 </td>
228 </tr>
229 </table>
230
231 </td>
232 </tr>
233 <tr>
234 <td width="15%" align="right" valign="top" class="summary">
235 <span class="summary-type">&nbsp;</span>
236 </td><td class="summary">
237 <table width="100%" cellpadding="0" cellspacing="0" border="0">
238 <tr>
239 <td><span class="summary-sig"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#set_write_eof" class="summary-sig-name">set_write_eof</a>(<span class="summary-sig-arg">self</span>)</span><br />
240 Tell worker to close its writer file descriptor once flushed.</td>
241 <td align="right" valign="top">
242 <span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh.set_write_eof">source&nbsp;code</a></span>
243
244 </td>
245 </tr>
246 </table>
247
248 </td>
249 </tr>
250 <tr>
251 <td colspan="2" class="summary">
252 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html">Worker.DistantWorker</a></code></b>:
253 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers">iter_buffers</a></code>,
254 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors">iter_errors</a></code>,
255 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout">iter_keys_timeout</a></code>,
256 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers">iter_node_buffers</a></code>,
257 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors">iter_node_errors</a></code>,
258 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_retcodes">iter_node_retcodes</a></code>,
259 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes">iter_retcodes</a></code>,
260 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_error">last_error</a></code>,
261 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_node">last_node</a></code>,
262 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_read">last_read</a></code>,
263 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode">last_retcode</a></code>,
264 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer">node_buffer</a></code>,
265 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error">node_error</a></code>,
266 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error_buffer">node_error_buffer</a></code>,
267 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc">node_rc</a></code>,
268 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode">node_retcode</a></code>,
269 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout">num_timeout</a></code>
270 </p>
271 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html">Worker.DistantWorker</a></code></b> (private):
272 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline" onclick="show_private();">_on_node_errline</a></code>,
273 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline" onclick="show_private();">_on_node_msgline</a></code>,
274 <code><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start" onclick="show_private();">_on_start</a></code>
275 </p></div>
276 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker.Worker</a></code></b>:
277 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout">did_timeout</a></code>,
278 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers">flush_buffers</a></code>,
279 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors">flush_errors</a></code>
280 </p>
281 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker.Worker</a></code></b> (private):
282 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_invoke" onclick="show_private();">_invoke</a></code>,
283 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_set_task" onclick="show_private();">_set_task</a></code>,
284 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check" onclick="show_private();">_task_bound_check</a></code>
285 </p></div>
286 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
287 <code>__delattr__</code>,
288 <code>__format__</code>,
289 <code>__getattribute__</code>,
290 <code>__hash__</code>,
291 <code>__new__</code>,
292 <code>__reduce__</code>,
293 <code>__reduce_ex__</code>,
294 <code>__repr__</code>,
295 <code>__setattr__</code>,
296 <code>__sizeof__</code>,
297 <code>__str__</code>,
298 <code>__subclasshook__</code>
299 </p>
300 </td>
301 </tr>
302 </table>
303 <!-- ==================== PROPERTIES ==================== -->
304 <a name="section-Properties"></a>
305 <table class="summary" border="1" cellpadding="3"
306 cellspacing="0" width="100%" bgcolor="white">
307 <tr bgcolor="#70b0f0" class="table-header">
308 <td colspan="2" class="table-header">
309 <table border="0" cellpadding="0" cellspacing="0" width="100%">
310 <tr valign="top">
311 <td align="left"><span class="table-header">Properties</span></td>
312 <td align="right" valign="top"
313 ><span class="options">[<a href="#section-Properties"
314 class="privatelink" onclick="toggle_private();"
315 >hide private</a>]</span></td>
316 </tr>
317 </table>
318 </td>
319 </tr>
320 <tr>
321 <td colspan="2" class="summary">
322 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
323 <code>__class__</code>
324 </p>
325 </td>
326 </tr>
327 </table>
328 <!-- ==================== METHOD DETAILS ==================== -->
329 <a name="section-MethodDetails"></a>
330 <table class="details" border="1" cellpadding="3"
331 cellspacing="0" width="100%" bgcolor="white">
332 <tr bgcolor="#70b0f0" class="table-header">
333 <td colspan="2" class="table-header">
334 <table border="0" cellpadding="0" cellspacing="0" width="100%">
335 <tr valign="top">
336 <td align="left"><span class="table-header">Method Details</span></td>
337 <td align="right" valign="top"
338 ><span class="options">[<a href="#section-MethodDetails"
339 class="privatelink" onclick="toggle_private();"
340 >hide private</a>]</span></td>
341 </tr>
342 </table>
343 </td>
344 </tr>
345 </table>
346 <a name="__init__"></a>
347 <div>
348 <table class="details" border="1" cellpadding="3"
349 cellspacing="0" width="100%" bgcolor="white">
350 <tr><td>
351 <table width="100%" cellpadding="0" cellspacing="0" border="0">
352 <tr valign="top"><td>
353 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
354 <span class="sig-arg">nodes</span>,
355 <span class="sig-arg">handler</span>,
356 <span class="sig-arg">timeout</span>,
357 <span class="sig-arg">**kwargs</span>)</span>
358 <br /><em class="fname">(Constructor)</em>
359 </h3>
360 </td><td align="right" valign="top"
361 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh.__init__">source&nbsp;code</a></span>&nbsp;
362 </td>
363 </tr></table>
364
365 <p>Initialize Ssh worker instance.</p>
366 <dl class="fields">
367 <dt>Overrides:
368 object.__init__
369 </dt>
370 </dl>
371 </td></tr></table>
372 </div>
373 <a name="_engine_clients"></a>
374 <div class="private">
375 <table class="details" border="1" cellpadding="3"
376 cellspacing="0" width="100%" bgcolor="white">
377 <tr><td>
378 <table width="100%" cellpadding="0" cellspacing="0" border="0">
379 <tr valign="top"><td>
380 <h3 class="epydoc"><span class="sig"><span class="sig-name">_engine_clients</span>(<span class="sig-arg">self</span>)</span>
381 </h3>
382 </td><td align="right" valign="top"
383 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh._engine_clients">source&nbsp;code</a></span>&nbsp;
384 </td>
385 </tr></table>
386
387 <p>Access underlying engine clients.</p>
388 <dl class="fields">
389 <dt>Overrides:
390 <a href="ClusterShell.Worker.Worker.Worker-class.html#_engine_clients" onclick="show_private();">Worker.Worker._engine_clients</a>
391 </dt>
392 </dl>
393 </td></tr></table>
394 </div>
395 <a name="_on_node_rc"></a>
396 <div class="private">
397 <table class="details" border="1" cellpadding="3"
398 cellspacing="0" width="100%" bgcolor="white">
399 <tr><td>
400 <table width="100%" cellpadding="0" cellspacing="0" border="0">
401 <tr valign="top"><td>
402 <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_node_rc</span>(<span class="sig-arg">self</span>,
403 <span class="sig-arg">node</span>,
404 <span class="sig-arg">rc</span>)</span>
405 </h3>
406 </td><td align="right" valign="top"
407 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh._on_node_rc">source&nbsp;code</a></span>&nbsp;
408 </td>
409 </tr></table>
410
411 <p>Return code received from a node, update last* stuffs.</p>
412 <dl class="fields">
413 <dt>Overrides:
414 <a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_rc" onclick="show_private();">Worker.DistantWorker._on_node_rc</a>
415 <dd><em class="note">(inherited documentation)</em></dd>
416 </dt>
417 </dl>
418 </td></tr></table>
419 </div>
420 <a name="_on_node_timeout"></a>
421 <div class="private">
422 <table class="details" border="1" cellpadding="3"
423 cellspacing="0" width="100%" bgcolor="white">
424 <tr><td>
425 <table width="100%" cellpadding="0" cellspacing="0" border="0">
426 <tr valign="top"><td>
427 <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_node_timeout</span>(<span class="sig-arg">self</span>,
428 <span class="sig-arg">node</span>)</span>
429 </h3>
430 </td><td align="right" valign="top"
431 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh._on_node_timeout">source&nbsp;code</a></span>&nbsp;
432 </td>
433 </tr></table>
434
435 <p>Update on node timeout.</p>
436 <dl class="fields">
437 <dt>Overrides:
438 <a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_timeout" onclick="show_private();">Worker.DistantWorker._on_node_timeout</a>
439 <dd><em class="note">(inherited documentation)</em></dd>
440 </dt>
441 </dl>
442 </td></tr></table>
443 </div>
444 <a name="set_write_eof"></a>
445 <div>
446 <table class="details" border="1" cellpadding="3"
447 cellspacing="0" width="100%" bgcolor="white">
448 <tr><td>
449 <table width="100%" cellpadding="0" cellspacing="0" border="0">
450 <tr valign="top"><td>
451 <h3 class="epydoc"><span class="sig"><span class="sig-name">set_write_eof</span>(<span class="sig-arg">self</span>)</span>
452 </h3>
453 </td><td align="right" valign="top"
454 ><span class="codelink"><a href="ClusterShell.Worker.Ssh-pysrc.html#WorkerSsh.set_write_eof">source&nbsp;code</a></span>&nbsp;
455 </td>
456 </tr></table>
457
458 <p>Tell worker to close its writer file descriptor once flushed. Do not
459 perform writes after this call.</p>
460 <dl class="fields">
461 </dl>
462 </td></tr></table>
463 </div>
464 <br />
465 <!-- ==================== NAVIGATION BAR ==================== -->
466 <table class="navbar" border="0" width="100%" cellpadding="0"
467 bgcolor="#a0c0ff" cellspacing="0">
468 <tr valign="middle">
469
470 <!-- Tree link -->
471 <th>&nbsp;&nbsp;&nbsp;<a
472 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
473
474 <!-- Index link -->
475 <th>&nbsp;&nbsp;&nbsp;<a
476 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
477
478 <!-- Help link -->
479 <th>&nbsp;&nbsp;&nbsp;<a
480 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
481
482 <!-- Project homepage -->
483 <th class="navbar" align="right" width="100%">
484 <table border="0" cellpadding="0" cellspacing="0">
485 <tr><th class="navbar" align="center"
486 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
487 </tr></table></th>
488 </tr>
489 </table>
490 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
491 <tr>
492 <td align="left" class="footer">
493 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
494 </td>
495 <td align="right" class="footer">
496 <a target="mainFrame" href="http://epydoc.sourceforge.net"
497 >http://epydoc.sourceforge.net</a>
498 </td>
499 </tr>
500 </table>
501
502 <script type="text/javascript">
503 <!--
504 // Private objects are initially displayed (because if
505 // javascript is turned off then we want them to be
506 // visible); but by default, we want to hide them. So hide
507 // them unless we have a cookie that says to show them.
508 checkCookie();
509 // -->
510 </script>
511 </body>
512 </html>
+0
-205
doc/epydoc/html/ClusterShell.Worker.Worker-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Worker</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;Worker
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Worker-module.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <!-- ==================== MODULE DESCRIPTION ==================== -->
60 <h1 class="epydoc">Module Worker</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html">source&nbsp;code</a></span></p>
61 <p>ClusterShell worker interface.</p>
62 <p>A worker is a generic object which provides &quot;grouped&quot; work
63 in a specific task.</p>
64
65 <!-- ==================== CLASSES ==================== -->
66 <a name="section-Classes"></a>
67 <table class="summary" border="1" cellpadding="3"
68 cellspacing="0" width="100%" bgcolor="white">
69 <tr bgcolor="#70b0f0" class="table-header">
70 <td colspan="2" class="table-header">
71 <table border="0" cellpadding="0" cellspacing="0" width="100%">
72 <tr valign="top">
73 <td align="left"><span class="table-header">Classes</span></td>
74 <td align="right" valign="top"
75 ><span class="options">[<a href="#section-Classes"
76 class="privatelink" onclick="toggle_private();"
77 >hide private</a>]</span></td>
78 </tr>
79 </table>
80 </td>
81 </tr>
82 <tr>
83 <td width="15%" align="right" valign="top" class="summary">
84 <span class="summary-type">&nbsp;</span>
85 </td><td class="summary">
86 <a href="ClusterShell.Worker.Worker.WorkerException-class.html" class="summary-name">WorkerException</a><br />
87 Generic worker exception.
88 </td>
89 </tr>
90 <tr>
91 <td width="15%" align="right" valign="top" class="summary">
92 <span class="summary-type">&nbsp;</span>
93 </td><td class="summary">
94 <a href="ClusterShell.Worker.Worker.WorkerError-class.html" class="summary-name">WorkerError</a><br />
95 Generic worker error.
96 </td>
97 </tr>
98 <tr>
99 <td width="15%" align="right" valign="top" class="summary">
100 <span class="summary-type">&nbsp;</span>
101 </td><td class="summary">
102 <a href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html" class="summary-name">WorkerBadArgumentError</a><br />
103 Bad argument in worker error.
104 </td>
105 </tr>
106 <tr>
107 <td width="15%" align="right" valign="top" class="summary">
108 <span class="summary-type">&nbsp;</span>
109 </td><td class="summary">
110 <a href="ClusterShell.Worker.Worker.Worker-class.html" class="summary-name">Worker</a><br />
111 Base class Worker.
112 </td>
113 </tr>
114 <tr>
115 <td width="15%" align="right" valign="top" class="summary">
116 <span class="summary-type">&nbsp;</span>
117 </td><td class="summary">
118 <a href="ClusterShell.Worker.Worker.DistantWorker-class.html" class="summary-name">DistantWorker</a><br />
119 Base class DistantWorker, which provides a useful set of
120 setters/getters to use with distant workers like ssh or pdsh.
121 </td>
122 </tr>
123 <tr>
124 <td width="15%" align="right" valign="top" class="summary">
125 <span class="summary-type">&nbsp;</span>
126 </td><td class="summary">
127 <a href="ClusterShell.Worker.Worker.WorkerSimple-class.html" class="summary-name">WorkerSimple</a><br />
128 Implements a simple Worker being itself an EngineClient.
129 </td>
130 </tr>
131 </table>
132 <!-- ==================== VARIABLES ==================== -->
133 <a name="section-Variables"></a>
134 <table class="summary" border="1" cellpadding="3"
135 cellspacing="0" width="100%" bgcolor="white">
136 <tr bgcolor="#70b0f0" class="table-header">
137 <td colspan="2" class="table-header">
138 <table border="0" cellpadding="0" cellspacing="0" width="100%">
139 <tr valign="top">
140 <td align="left"><span class="table-header">Variables</span></td>
141 <td align="right" valign="top"
142 ><span class="options">[<a href="#section-Variables"
143 class="privatelink" onclick="toggle_private();"
144 >hide private</a>]</span></td>
145 </tr>
146 </table>
147 </td>
148 </tr>
149 <tr>
150 <td width="15%" align="right" valign="top" class="summary">
151 <span class="summary-type">&nbsp;</span>
152 </td><td class="summary">
153 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'ClusterShell.Worker'"><code class="variable-quote">'</code><code class="variable-string">ClusterShell.Worker</code><code class="variable-quote">'</code></code>
154 </td>
155 </tr>
156 </table>
157 <!-- ==================== NAVIGATION BAR ==================== -->
158 <table class="navbar" border="0" width="100%" cellpadding="0"
159 bgcolor="#a0c0ff" cellspacing="0">
160 <tr valign="middle">
161
162 <!-- Tree link -->
163 <th>&nbsp;&nbsp;&nbsp;<a
164 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
165
166 <!-- Index link -->
167 <th>&nbsp;&nbsp;&nbsp;<a
168 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
169
170 <!-- Help link -->
171 <th>&nbsp;&nbsp;&nbsp;<a
172 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
173
174 <!-- Project homepage -->
175 <th class="navbar" align="right" width="100%">
176 <table border="0" cellpadding="0" cellspacing="0">
177 <tr><th class="navbar" align="center"
178 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
179 </tr></table></th>
180 </tr>
181 </table>
182 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
183 <tr>
184 <td align="left" class="footer">
185 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
186 </td>
187 <td align="right" class="footer">
188 <a target="mainFrame" href="http://epydoc.sourceforge.net"
189 >http://epydoc.sourceforge.net</a>
190 </td>
191 </tr>
192 </table>
193
194 <script type="text/javascript">
195 <!--
196 // Private objects are initially displayed (because if
197 // javascript is turned off then we want them to be
198 // visible); but by default, we want to hide them. So hide
199 // them unless we have a cookie that says to show them.
200 checkCookie();
201 // -->
202 </script>
203 </body>
204 </html>
+0
-798
doc/epydoc/html/ClusterShell.Worker.Worker-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Worker</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 Module&nbsp;Worker
44 </span>
45 </td>
46 <td>
47 <table cellpadding="0" cellspacing="0">
48 <!-- hide/show private -->
49 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
50 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
51 <tr><td align="right"><span class="options"
52 >[<a href="frames.html" target="_top">frames</a
53 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Worker-pysrc.html"
54 target="_top">no&nbsp;frames</a>]</span></td></tr>
55 </table>
56 </td>
57 </tr>
58 </table>
59 <h1 class="epydoc">Source Code for <a href="ClusterShell.Worker.Worker-module.html">Module ClusterShell.Worker.Worker</a></h1>
60 <pre class="py-src">
61 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
62 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009)</tt> </tt>
63 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
64 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
65 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
66 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
67 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
68 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
69 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
70 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
71 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
72 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
73 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
74 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
75 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
76 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
77 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
78 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
79 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
80 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
81 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
82 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
83 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
84 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
85 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
86 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
87 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
88 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
89 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
90 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
91 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
92 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
93 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># $Id: Worker.py 289 2010-07-12 21:30:00Z st-cea $</tt> </tt>
94 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
95 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
96 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">ClusterShell worker interface.</tt> </tt>
97 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">A worker is a generic object which provides "grouped" work in a specific task.</tt> </tt>
99 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
100 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> </tt>
101 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package ClusterShell.Worker=ClusterShell.Worker-module.html,Module ClusterShell.Worker.Worker=ClusterShell.Worker.Worker-module.html,Class ClusterShell.Worker.Worker.Worker=ClusterShell.Worker.Worker.Worker-class.html"><a title="ClusterShell.Worker
102 ClusterShell.Worker.Worker
103 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-1', 'Worker', 'link-1');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Module ClusterShell.Worker.EngineClient=ClusterShell.Worker.EngineClient-module.html,Class ClusterShell.Worker.EngineClient.EngineClient=ClusterShell.Worker.EngineClient.EngineClient-class.html"><a title="ClusterShell.Worker.EngineClient
104 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-2', 'EngineClient', 'link-2');">EngineClient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name"><a title="ClusterShell.Worker.EngineClient
105 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-3', 'EngineClient', 'link-2');">EngineClient</a></tt> </tt>
106 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-4', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name" targets="Module ClusterShell.NodeSet=ClusterShell.NodeSet-module.html,Class ClusterShell.NodeSet.NodeSet=ClusterShell.NodeSet.NodeSet-class.html"><a title="ClusterShell.NodeSet
107 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-5', 'NodeSet', 'link-5');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name"><a title="ClusterShell.NodeSet
108 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-6', 'NodeSet', 'link-5');">NodeSet</a></tt> </tt>
109 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> </tt>
110 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> </tt>
111 <a name="WorkerException"></a><div id="WorkerException-def"><a name="L45"></a><tt class="py-lineno"> 45</tt> <a class="py-toggle" href="#" id="WorkerException-toggle" onclick="return toggle('WorkerException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerException-class.html">WorkerException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
112 </div><div id="WorkerException-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="WorkerException-expanded"><a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-docstring">"""Generic worker exception."""</tt> </tt>
113 </div><a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> </tt>
114 <a name="WorkerError"></a><div id="WorkerError-def"><a name="L48"></a><tt class="py-lineno"> 48</tt> <a class="py-toggle" href="#" id="WorkerError-toggle" onclick="return toggle('WorkerError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerError-class.html">WorkerError</a><tt class="py-op">(</tt><tt class="py-base-class">WorkerException</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
115 </div><div id="WorkerError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="WorkerError-expanded"><a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-docstring">"""Generic worker error."""</tt> </tt>
116 </div><a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> </tt>
117 <a name="WorkerBadArgumentError"></a><div id="WorkerBadArgumentError-def"><a name="L51"></a><tt class="py-lineno"> 51</tt> <a class="py-toggle" href="#" id="WorkerBadArgumentError-toggle" onclick="return toggle('WorkerBadArgumentError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html">WorkerBadArgumentError</a><tt class="py-op">(</tt><tt class="py-base-class">WorkerError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
118 </div><div id="WorkerBadArgumentError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="WorkerBadArgumentError-expanded"><a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-docstring">"""Bad argument in worker error."""</tt> </tt>
119 </div><a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt>
120 <a name="Worker"></a><div id="Worker-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="Worker-toggle" onclick="return toggle('Worker');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
121 </div><div id="Worker-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Worker-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
122 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> Base class Worker.</tt> </tt>
123 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
124 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> </tt>
125 <a name="Worker.__init__"></a><div id="Worker.__init__-def"><a name="L59"></a><tt class="py-lineno"> 59</tt> <a class="py-toggle" href="#" id="Worker.__init__-toggle" onclick="return toggle('Worker.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-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">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
126 </div><div id="Worker.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker.__init__-expanded"><a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
127 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"> Initializer. Should be called from derived classes.</tt> </tt>
128 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
129 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt> <tt class="py-op">=</tt> <tt class="py-name">handler</tt> <tt class="py-comment"># associated EventHandler</tt> </tt>
130 <a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
131 </div><a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> </tt>
132 <a name="Worker._set_task"></a><div id="Worker._set_task-def"><a name="L66"></a><tt class="py-lineno"> 66</tt> <a class="py-toggle" href="#" id="Worker._set_task-toggle" onclick="return toggle('Worker._set_task');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#_set_task">_set_task</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">task</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
133 </div><div id="Worker._set_task-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker._set_task-expanded"><a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
134 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> Bind worker to task. Called by task.schedule()</tt> </tt>
135 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
136 <a name="L70"></a><tt class="py-lineno"> 70</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">task</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>
137 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-comment"># one-shot-only schedule supported for now</tt> </tt>
138 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-7" class="py-name" targets="Class ClusterShell.Worker.Worker.WorkerError=ClusterShell.Worker.Worker.WorkerError-class.html"><a title="ClusterShell.Worker.Worker.WorkerError" class="py-name" href="#" onclick="return doclink('link-7', 'WorkerError', 'link-7');">WorkerError</a></tt><tt class="py-op">(</tt><tt class="py-string">"worker has already been scheduled"</tt><tt class="py-op">)</tt> </tt>
139 <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">task</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt> </tt>
140 </div><a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
141 <a name="Worker._task_bound_check"></a><div id="Worker._task_bound_check-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="Worker._task_bound_check-toggle" onclick="return toggle('Worker._task_bound_check');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check">_task_bound_check</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
142 </div><div id="Worker._task_bound_check-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker._task_bound_check-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">:</tt> </tt>
143 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-8" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerError" class="py-name" href="#" onclick="return doclink('link-8', 'WorkerError', 'link-7');">WorkerError</a></tt><tt class="py-op">(</tt><tt class="py-string">"worker is not task bound"</tt><tt class="py-op">)</tt> </tt>
144 </div><a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> </tt>
145 <a name="Worker._engine_clients"></a><div id="Worker._engine_clients-def"><a name="L79"></a><tt class="py-lineno"> 79</tt> <a class="py-toggle" href="#" id="Worker._engine_clients-toggle" onclick="return toggle('Worker._engine_clients');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#_engine_clients">_engine_clients</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
146 </div><div id="Worker._engine_clients-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker._engine_clients-expanded"><a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
147 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"> Return a list of underlying engine clients.</tt> </tt>
148 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
149 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
150 </div><a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
151 <a name="Worker._invoke"></a><div id="Worker._invoke-def"><a name="L85"></a><tt class="py-lineno"> 85</tt> <a class="py-toggle" href="#" id="Worker._invoke-toggle" onclick="return toggle('Worker._invoke');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#_invoke">_invoke</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">ev_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
152 </div><div id="Worker._invoke-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker._invoke-expanded"><a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
153 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt class="py-docstring"> Invoke user EventHandler method if needed.</tt> </tt>
154 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
155 <a name="L89"></a><tt class="py-lineno"> 89</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">eh</tt><tt class="py-op">:</tt> </tt>
156 <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">eh</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Method ClusterShell.Event.EventHandler._invoke()=ClusterShell.Event.EventHandler-class.html#_invoke,Method ClusterShell.Worker.Worker.Worker._invoke()=ClusterShell.Worker.Worker.Worker-class.html#_invoke"><a title="ClusterShell.Event.EventHandler._invoke
157 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-9', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-name">ev_type</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
158 </div><a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> </tt>
159 <a name="Worker.last_read"></a><div id="Worker.last_read-def"><a name="L92"></a><tt class="py-lineno"> 92</tt> <a class="py-toggle" href="#" id="Worker.last_read-toggle" onclick="return toggle('Worker.last_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#last_read">last_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
160 </div><div id="Worker.last_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker.last_read-expanded"><a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
161 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt class="py-docstring"> Get last read message from event handler.</tt> </tt>
162 <a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
163 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
164 </div><a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> </tt>
165 <a name="Worker.last_error"></a><div id="Worker.last_error-def"><a name="L98"></a><tt class="py-lineno"> 98</tt> <a class="py-toggle" href="#" id="Worker.last_error-toggle" onclick="return toggle('Worker.last_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#last_error">last_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
166 </div><div id="Worker.last_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker.last_error-expanded"><a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
167 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt class="py-docstring"> Get last error message from event handler.</tt> </tt>
168 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
169 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">"Derived classes must implement."</tt><tt class="py-op">)</tt> </tt>
170 </div><a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> </tt>
171 <a name="Worker.did_timeout"></a><div id="Worker.did_timeout-def"><a name="L104"></a><tt class="py-lineno">104</tt> <a class="py-toggle" href="#" id="Worker.did_timeout-toggle" onclick="return toggle('Worker.did_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout">did_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
172 </div><div id="Worker.did_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker.did_timeout-expanded"><a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
173 <a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"><tt class="py-docstring"> Return True if this worker aborted due to timeout.</tt> </tt>
174 <a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
175 <a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method ClusterShell.Worker.Worker.Worker._task_bound_check()=ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-10', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
176 <a name="L109"></a><tt class="py-lineno">109</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">task</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method ClusterShell.Task.Task._num_timeout_by_worker()=ClusterShell.Task.Task-class.html#_num_timeout_by_worker"><a title="ClusterShell.Task.Task._num_timeout_by_worker" class="py-name" href="#" onclick="return doclink('link-11', '_num_timeout_by_worker', 'link-11');">_num_timeout_by_worker</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> </tt>
177 </div><a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> </tt>
178 <a name="Worker.flush_buffers"></a><div id="Worker.flush_buffers-def"><a name="L111"></a><tt class="py-lineno">111</tt> <a class="py-toggle" href="#" id="Worker.flush_buffers-toggle" onclick="return toggle('Worker.flush_buffers');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers">flush_buffers</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
179 </div><div id="Worker.flush_buffers-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker.flush_buffers-expanded"><a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
180 <a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"><tt class="py-docstring"> Flush any messages associated to this worker.</tt> </tt>
181 <a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
182 <a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-12', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
183 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method ClusterShell.Task.Task._flush_buffers_by_worker()=ClusterShell.Task.Task-class.html#_flush_buffers_by_worker"><a title="ClusterShell.Task.Task._flush_buffers_by_worker" class="py-name" href="#" onclick="return doclink('link-13', '_flush_buffers_by_worker', 'link-13');">_flush_buffers_by_worker</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
184 </div><a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> </tt>
185 <a name="Worker.flush_errors"></a><div id="Worker.flush_errors-def"><a name="L118"></a><tt class="py-lineno">118</tt> <a class="py-toggle" href="#" id="Worker.flush_errors-toggle" onclick="return toggle('Worker.flush_errors');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors">flush_errors</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
186 </div><div id="Worker.flush_errors-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Worker.flush_errors-expanded"><a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
187 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> Flush any error messages associated to this worker.</tt> </tt>
188 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
189 <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 id="link-14" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-14', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
190 <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">task</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Method ClusterShell.Task.Task._flush_errors_by_worker()=ClusterShell.Task.Task-class.html#_flush_errors_by_worker"><a title="ClusterShell.Task.Task._flush_errors_by_worker" class="py-name" href="#" onclick="return doclink('link-15', '_flush_errors_by_worker', 'link-15');">_flush_errors_by_worker</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
191 </div></div><a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> </tt>
192 <a name="DistantWorker"></a><div id="DistantWorker-def"><a name="L125"></a><tt class="py-lineno">125</tt> <a class="py-toggle" href="#" id="DistantWorker-toggle" onclick="return toggle('DistantWorker');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a><tt class="py-op">(</tt><tt class="py-base-class">Worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
193 </div><div id="DistantWorker-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="DistantWorker-expanded"><a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
194 <a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"><tt class="py-docstring"> Base class DistantWorker, which provides a useful set of setters/getters</tt> </tt>
195 <a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"><tt class="py-docstring"> to use with distant workers like ssh or pdsh.</tt> </tt>
196 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
197 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> </tt>
198 <a name="DistantWorker.__init__"></a><div id="DistantWorker.__init__-def"><a name="L131"></a><tt class="py-lineno">131</tt> <a class="py-toggle" href="#" id="DistantWorker.__init__-toggle" onclick="return toggle('DistantWorker.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-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">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
199 </div><div id="DistantWorker.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.__init__-expanded"><a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt id="link-16" class="py-name"><a title="ClusterShell.Worker
200 ClusterShell.Worker.Worker
201 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-16', 'Worker', 'link-1');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
202 ClusterShell.Engine.Engine.Engine.__init__
203 ClusterShell.Engine.Engine.EngineAbortException.__init__
204 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
205 ClusterShell.Engine.Engine.EngineTimer.__init__
206 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
207 ClusterShell.Engine.Engine._EngineTimerQ.__init__
208 ClusterShell.Engine.Poll.EnginePoll.__init__
209 ClusterShell.MsgTree.MsgTree.__init__
210 ClusterShell.MsgTree.MsgTreeElem.__init__
211 ClusterShell.NodeSet.NodeSet.__init__
212 ClusterShell.NodeSet.NodeSetBase.__init__
213 ClusterShell.NodeSet.NodeSetParseError.__init__
214 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
215 ClusterShell.NodeSet.ParsingEngine.__init__
216 ClusterShell.NodeSet.RangeSet.__init__
217 ClusterShell.NodeSet.RangeSetPaddingError.__init__
218 ClusterShell.NodeSet.RangeSetParseError.__init__
219 ClusterShell.NodeUtils.GroupResolver.__init__
220 ClusterShell.NodeUtils.GroupResolverConfig.__init__
221 ClusterShell.NodeUtils.GroupSource.__init__
222 ClusterShell.NodeUtils.GroupSourceException.__init__
223 ClusterShell.Task.Task._SuspendCondition.__init__
224 ClusterShell.Task.Task.__init__
225 ClusterShell.Task._TaskMsgTree.__init__
226 ClusterShell.Worker.EngineClient.EngineClient.__init__
227 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
228 ClusterShell.Worker.EngineClient.EnginePort.__init__
229 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
230 ClusterShell.Worker.Popen.WorkerPopen.__init__
231 ClusterShell.Worker.Ssh.Scp.__init__
232 ClusterShell.Worker.Ssh.Ssh.__init__
233 ClusterShell.Worker.Ssh.WorkerSsh.__init__
234 ClusterShell.Worker.Worker.DistantWorker.__init__
235 ClusterShell.Worker.Worker.Worker.__init__
236 ClusterShell.Worker.Worker.WorkerSimple.__init__
237 clubak.Display.__init__
238 clush.ClushConfig.__init__
239 clush.ClushConfigError.__init__
240 clush.DirectOutputHandler.__init__
241 clush.Display.__init__
242 clush.GatherOutputHandler.__init__
243 clush.RunTimer.__init__
244 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-17', '__init__', 'link-17');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
245 <a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt>
246 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_node</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
247 <a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
248 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_rc</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
249 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">started</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
250 </div><a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> </tt>
251 <a name="DistantWorker._on_start"></a><div id="DistantWorker._on_start-def"><a name="L139"></a><tt class="py-lineno">139</tt> <a class="py-toggle" href="#" id="DistantWorker._on_start-toggle" onclick="return toggle('DistantWorker._on_start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start">_on_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
252 </div><div id="DistantWorker._on_start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker._on_start-expanded"><a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
253 <a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"><tt class="py-docstring"> Starting</tt> </tt>
254 <a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
255 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">started</tt><tt class="py-op">:</tt> </tt>
256 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">started</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
257 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
258 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-18', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_start"</tt><tt class="py-op">)</tt> </tt>
259 </div><a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> </tt>
260 <a name="DistantWorker._on_node_msgline"></a><div id="DistantWorker._on_node_msgline-def"><a name="L147"></a><tt class="py-lineno">147</tt> <a class="py-toggle" href="#" id="DistantWorker._on_node_msgline-toggle" onclick="return toggle('DistantWorker._on_node_msgline');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline">_on_node_msgline</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
261 </div><div id="DistantWorker._on_node_msgline-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker._on_node_msgline-expanded"><a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
262 <a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"><tt class="py-docstring"> Message received from node, update last* stuffs.</tt> </tt>
263 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
264 <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">_last_node</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt> </tt>
265 <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">_last_msg</tt> <tt class="py-op">=</tt> <tt id="link-19" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-19', 'msg', 'link-19');">msg</a></tt> </tt>
266 <a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> </tt>
267 <a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Method ClusterShell.Task.Task._msg_add()=ClusterShell.Task.Task-class.html#_msg_add"><a title="ClusterShell.Task.Task._msg_add" class="py-name" href="#" onclick="return doclink('link-20', '_msg_add', 'link-20');">_msg_add</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-21" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-21', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
268 <a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> </tt>
269 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
270 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-22', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_read"</tt><tt class="py-op">)</tt> </tt>
271 </div><a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> </tt>
272 <a name="DistantWorker._on_node_errline"></a><div id="DistantWorker._on_node_errline-def"><a name="L158"></a><tt class="py-lineno">158</tt> <a class="py-toggle" href="#" id="DistantWorker._on_node_errline-toggle" onclick="return toggle('DistantWorker._on_node_errline');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline">_on_node_errline</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
273 </div><div id="DistantWorker._on_node_errline-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker._on_node_errline-expanded"><a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
274 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"><tt class="py-docstring"> Error message received from node, update last* stuffs.</tt> </tt>
275 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
276 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_node</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt> </tt>
277 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_errmsg</tt> <tt class="py-op">=</tt> <tt id="link-23" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-23', 'msg', 'link-19');">msg</a></tt> </tt>
278 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> </tt>
279 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Method ClusterShell.Task.Task._errmsg_add()=ClusterShell.Task.Task-class.html#_errmsg_add"><a title="ClusterShell.Task.Task._errmsg_add" class="py-name" href="#" onclick="return doclink('link-24', '_errmsg_add', 'link-24');">_errmsg_add</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-25" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-25', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
280 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> </tt>
281 <a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
282 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-26', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_error"</tt><tt class="py-op">)</tt> </tt>
283 </div><a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> </tt>
284 <a name="DistantWorker._on_node_rc"></a><div id="DistantWorker._on_node_rc-def"><a name="L169"></a><tt class="py-lineno">169</tt> <a class="py-toggle" href="#" id="DistantWorker._on_node_rc-toggle" onclick="return toggle('DistantWorker._on_node_rc');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_rc">_on_node_rc</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">rc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
285 </div><div id="DistantWorker._on_node_rc-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker._on_node_rc-expanded"><a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
286 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"><tt class="py-docstring"> Return code received from a node, update last* stuffs.</tt> </tt>
287 <a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
288 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_node</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt> </tt>
289 <a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_rc</tt> <tt class="py-op">=</tt> <tt class="py-name">rc</tt> </tt>
290 <a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> </tt>
291 <a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Method ClusterShell.Task.Task._rc_set()=ClusterShell.Task.Task-class.html#_rc_set"><a title="ClusterShell.Task.Task._rc_set" class="py-name" href="#" onclick="return doclink('link-27', '_rc_set', 'link-27');">_rc_set</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
292 <a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> </tt>
293 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
294 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-28', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_hup"</tt><tt class="py-op">)</tt> </tt>
295 </div><a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> </tt>
296 <a name="DistantWorker._on_node_timeout"></a><div id="DistantWorker._on_node_timeout-def"><a name="L180"></a><tt class="py-lineno">180</tt> <a class="py-toggle" href="#" id="DistantWorker._on_node_timeout-toggle" onclick="return toggle('DistantWorker._on_node_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_timeout">_on_node_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
297 </div><div id="DistantWorker._on_node_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker._on_node_timeout-expanded"><a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
298 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"><tt class="py-docstring"> Update on node timeout.</tt> </tt>
299 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
300 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-comment"># Update _last_node to allow node resolution after ev_timeout.</tt> </tt>
301 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_node</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt> </tt>
302 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> </tt>
303 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method ClusterShell.Task.Task._timeout_add()=ClusterShell.Task.Task-class.html#_timeout_add"><a title="ClusterShell.Task.Task._timeout_add" class="py-name" href="#" onclick="return doclink('link-29', '_timeout_add', 'link-29');">_timeout_add</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
304 </div><a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> </tt>
305 <a name="DistantWorker.last_node"></a><div id="DistantWorker.last_node-def"><a name="L189"></a><tt class="py-lineno">189</tt> <a class="py-toggle" href="#" id="DistantWorker.last_node-toggle" onclick="return toggle('DistantWorker.last_node');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_node">last_node</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
306 </div><div id="DistantWorker.last_node-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.last_node-expanded"><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
307 <a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"><tt class="py-docstring"> Get last node, useful to get the node in an EventHandler</tt> </tt>
308 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-docstring"> callback like ev_timeout().</tt> </tt>
309 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
310 <a name="L194"></a><tt class="py-lineno">194</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">_last_node</tt> </tt>
311 </div><a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> </tt>
312 <a name="DistantWorker.last_read"></a><div id="DistantWorker.last_read-def"><a name="L196"></a><tt class="py-lineno">196</tt> <a class="py-toggle" href="#" id="DistantWorker.last_read-toggle" onclick="return toggle('DistantWorker.last_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_read">last_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
313 </div><div id="DistantWorker.last_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.last_read-expanded"><a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
314 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"><tt class="py-docstring"> Get last (node, buffer), useful in an EventHandler.ev_read()</tt> </tt>
315 <a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
316 <a name="L200"></a><tt class="py-lineno">200</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">_last_node</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_msg</tt> </tt>
317 </div><a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> </tt>
318 <a name="DistantWorker.last_error"></a><div id="DistantWorker.last_error-def"><a name="L202"></a><tt class="py-lineno">202</tt> <a class="py-toggle" href="#" id="DistantWorker.last_error-toggle" onclick="return toggle('DistantWorker.last_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_error">last_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
319 </div><div id="DistantWorker.last_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.last_error-expanded"><a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
320 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"><tt class="py-docstring"> Get last (node, error_buffer), useful in an EventHandler.ev_error()</tt> </tt>
321 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
322 <a name="L206"></a><tt class="py-lineno">206</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">_last_node</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_errmsg</tt> </tt>
323 </div><a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> </tt>
324 <a name="DistantWorker.last_retcode"></a><div id="DistantWorker.last_retcode-def"><a name="L208"></a><tt class="py-lineno">208</tt> <a class="py-toggle" href="#" id="DistantWorker.last_retcode-toggle" onclick="return toggle('DistantWorker.last_retcode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode">last_retcode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
325 </div><div id="DistantWorker.last_retcode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.last_retcode-expanded"><a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
326 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"><tt class="py-docstring"> Get last (node, rc), useful in an EventHandler.ev_hup()</tt> </tt>
327 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
328 <a name="L212"></a><tt class="py-lineno">212</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">_last_node</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_rc</tt> </tt>
329 </div><a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> </tt>
330 <a name="DistantWorker.node_buffer"></a><div id="DistantWorker.node_buffer-def"><a name="L214"></a><tt class="py-lineno">214</tt> <a class="py-toggle" href="#" id="DistantWorker.node_buffer-toggle" onclick="return toggle('DistantWorker.node_buffer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer">node_buffer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
331 </div><div id="DistantWorker.node_buffer-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.node_buffer-expanded"><a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
332 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"><tt class="py-docstring"> Get specific node buffer.</tt> </tt>
333 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
334 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-30', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
335 <a name="L219"></a><tt class="py-lineno">219</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">task</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method ClusterShell.Task.Task._msg_by_source()=ClusterShell.Task.Task-class.html#_msg_by_source"><a title="ClusterShell.Task.Task._msg_by_source" class="py-name" href="#" onclick="return doclink('link-31', '_msg_by_source', 'link-31');">_msg_by_source</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
336 </div><a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> </tt>
337 <a name="DistantWorker.node_error"></a><div id="DistantWorker.node_error-def"><a name="L221"></a><tt class="py-lineno">221</tt> <a class="py-toggle" href="#" id="DistantWorker.node_error-toggle" onclick="return toggle('DistantWorker.node_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error">node_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
338 </div><div id="DistantWorker.node_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.node_error-expanded"><a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
339 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"><tt class="py-docstring"> Get specific node error buffer.</tt> </tt>
340 <a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
341 <a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-32', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
342 <a name="L226"></a><tt class="py-lineno">226</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">task</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Method ClusterShell.Task.Task._errmsg_by_source()=ClusterShell.Task.Task-class.html#_errmsg_by_source"><a title="ClusterShell.Task.Task._errmsg_by_source" class="py-name" href="#" onclick="return doclink('link-33', '_errmsg_by_source', 'link-33');">_errmsg_by_source</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
343 </div><a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> </tt>
344 <a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-name">node_error_buffer</tt> <tt class="py-op">=</tt> <tt id="link-34" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.node_error()=ClusterShell.Worker.Worker.DistantWorker-class.html#node_error"><a title="ClusterShell.Worker.Worker.DistantWorker.node_error" class="py-name" href="#" onclick="return doclink('link-34', 'node_error', 'link-34');">node_error</a></tt> </tt>
345 <a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> </tt>
346 <a name="DistantWorker.node_retcode"></a><div id="DistantWorker.node_retcode-def"><a name="L230"></a><tt class="py-lineno">230</tt> <a class="py-toggle" href="#" id="DistantWorker.node_retcode-toggle" onclick="return toggle('DistantWorker.node_retcode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode">node_retcode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
347 </div><div id="DistantWorker.node_retcode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.node_retcode-expanded"><a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
348 <a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"><tt class="py-docstring"> Get specific node return code. Raises a KeyError if command on</tt> </tt>
349 <a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"><tt class="py-docstring"> node has not yet finished (no return code available), or is</tt> </tt>
350 <a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"><tt class="py-docstring"> node is not known by this worker.</tt> </tt>
351 <a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
352 <a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-35', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
353 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
354 <a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method ClusterShell.Task.Task._rc_by_source()=ClusterShell.Task.Task-class.html#_rc_by_source"><a title="ClusterShell.Task.Task._rc_by_source" class="py-name" href="#" onclick="return doclink('link-36', '_rc_by_source', 'link-36');">_rc_by_source</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
355 <a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyError</tt><tt class="py-op">:</tt> </tt>
356 <a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">KeyError</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
357 <a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">rc</tt> </tt>
358 </div><a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> </tt>
359 <a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-name">node_rc</tt> <tt class="py-op">=</tt> <tt id="link-37" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.node_retcode()=ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode"><a title="ClusterShell.Worker.Worker.DistantWorker.node_retcode" class="py-name" href="#" onclick="return doclink('link-37', 'node_retcode', 'link-37');">node_retcode</a></tt> </tt>
360 <a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> </tt>
361 <a name="DistantWorker.iter_buffers"></a><div id="DistantWorker.iter_buffers-def"><a name="L245"></a><tt class="py-lineno">245</tt> <a class="py-toggle" href="#" id="DistantWorker.iter_buffers-toggle" onclick="return toggle('DistantWorker.iter_buffers');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers">iter_buffers</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
362 </div><div id="DistantWorker.iter_buffers-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.iter_buffers-expanded"><a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
363 <a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"><tt class="py-docstring"> Returns an iterator over available buffers and associated</tt> </tt>
364 <a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet. If the optional parameter match_keys is defined, only</tt> </tt>
365 <a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"><tt class="py-docstring"> keys found in match_keys are returned.</tt> </tt>
366 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
367 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-38', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
368 <a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-39" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-39', 'msg', 'link-19');">msg</a></tt><tt class="py-op">,</tt> <tt id="link-40" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.keys()=ClusterShell.MsgTree.MsgTree-class.html#keys"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-40', 'keys', 'link-40');">keys</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method ClusterShell.Task.Task._call_tree_matcher()=ClusterShell.Task.Task-class.html#_call_tree_matcher"><a title="ClusterShell.Task.Task._call_tree_matcher" class="py-name" href="#" onclick="return doclink('link-41', '_call_tree_matcher', 'link-41');">_call_tree_matcher</a></tt><tt class="py-op">(</tt> \ </tt>
369 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.walk()=ClusterShell.MsgTree.MsgTree-class.html#walk"><a title="ClusterShell.MsgTree.MsgTree.walk" class="py-name" href="#" onclick="return doclink('link-42', 'walk', 'link-42');">walk</a></tt><tt class="py-op">,</tt> <tt class="py-name">match_keys</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
370 <a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt id="link-43" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-43', 'msg', 'link-19');">msg</a></tt><tt class="py-op">,</tt> <tt id="link-44" class="py-name"><a title="ClusterShell.NodeSet
371 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-44', 'NodeSet', 'link-5');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-45" class="py-name" targets="Class Method ClusterShell.NodeSet.NodeSet.fromlist()=ClusterShell.NodeSet.NodeSet-class.html#fromlist,Class Method ClusterShell.NodeSet.RangeSet.fromlist()=ClusterShell.NodeSet.RangeSet-class.html#fromlist"><a title="ClusterShell.NodeSet.NodeSet.fromlist
372 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-45', 'fromlist', 'link-45');">fromlist</a></tt><tt class="py-op">(</tt><tt id="link-46" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-46', 'keys', 'link-40');">keys</a></tt><tt class="py-op">)</tt> </tt>
373 </div><a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> </tt>
374 <a name="DistantWorker.iter_errors"></a><div id="DistantWorker.iter_errors-def"><a name="L256"></a><tt class="py-lineno">256</tt> <a class="py-toggle" href="#" id="DistantWorker.iter_errors-toggle" onclick="return toggle('DistantWorker.iter_errors');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors">iter_errors</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
375 </div><div id="DistantWorker.iter_errors-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.iter_errors-expanded"><a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
376 <a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"><tt class="py-docstring"> Returns an iterator over available error buffers and associated</tt> </tt>
377 <a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"><tt class="py-docstring"> NodeSet. If the optional parameter match_keys is defined, only</tt> </tt>
378 <a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"><tt class="py-docstring"> keys found in match_keys are returned.</tt> </tt>
379 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
380 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-47', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
381 <a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-48" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-48', 'msg', 'link-19');">msg</a></tt><tt class="py-op">,</tt> <tt id="link-49" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-49', 'keys', 'link-40');">keys</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="ClusterShell.Task.Task._call_tree_matcher" class="py-name" href="#" onclick="return doclink('link-50', '_call_tree_matcher', 'link-41');">_call_tree_matcher</a></tt><tt class="py-op">(</tt> \ </tt>
382 <a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.walk" class="py-name" href="#" onclick="return doclink('link-51', 'walk', 'link-42');">walk</a></tt><tt class="py-op">,</tt> <tt class="py-name">match_keys</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
383 <a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt id="link-52" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-52', 'msg', 'link-19');">msg</a></tt><tt class="py-op">,</tt> <tt id="link-53" class="py-name"><a title="ClusterShell.NodeSet
384 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-53', 'NodeSet', 'link-5');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
385 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-54', 'fromlist', 'link-45');">fromlist</a></tt><tt class="py-op">(</tt><tt id="link-55" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-55', 'keys', 'link-40');">keys</a></tt><tt class="py-op">)</tt> </tt>
386 </div><a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> </tt>
387 <a name="DistantWorker.iter_node_buffers"></a><div id="DistantWorker.iter_node_buffers-def"><a name="L267"></a><tt class="py-lineno">267</tt> <a class="py-toggle" href="#" id="DistantWorker.iter_node_buffers-toggle" onclick="return toggle('DistantWorker.iter_node_buffers');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers">iter_node_buffers</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
388 </div><div id="DistantWorker.iter_node_buffers-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.iter_node_buffers-expanded"><a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
389 <a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"><tt class="py-docstring"> Returns an iterator over each node and associated buffer.</tt> </tt>
390 <a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
391 <a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-56', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
392 <a name="L272"></a><tt class="py-lineno">272</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">task</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="ClusterShell.Task.Task._call_tree_matcher" class="py-name" href="#" onclick="return doclink('link-57', '_call_tree_matcher', 'link-41');">_call_tree_matcher</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.items()=ClusterShell.MsgTree.MsgTree-class.html#items"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-58', 'items', 'link-58');">items</a></tt><tt class="py-op">,</tt> </tt>
393 <a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-name">match_keys</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
394 </div><a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> </tt>
395 <a name="DistantWorker.iter_node_errors"></a><div id="DistantWorker.iter_node_errors-def"><a name="L275"></a><tt class="py-lineno">275</tt> <a class="py-toggle" href="#" id="DistantWorker.iter_node_errors-toggle" onclick="return toggle('DistantWorker.iter_node_errors');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors">iter_node_errors</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
396 </div><div id="DistantWorker.iter_node_errors-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.iter_node_errors-expanded"><a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
397 <a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"><tt class="py-docstring"> Returns an iterator over each node and associated error buffer.</tt> </tt>
398 <a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
399 <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 id="link-59" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-59', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
400 <a name="L280"></a><tt class="py-lineno">280</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">task</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="ClusterShell.Task.Task._call_tree_matcher" class="py-name" href="#" onclick="return doclink('link-60', '_call_tree_matcher', 'link-41');">_call_tree_matcher</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-61', 'items', 'link-58');">items</a></tt><tt class="py-op">,</tt> </tt>
401 <a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-name">match_keys</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
402 </div><a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> </tt>
403 <a name="DistantWorker.iter_retcodes"></a><div id="DistantWorker.iter_retcodes-def"><a name="L283"></a><tt class="py-lineno">283</tt> <a class="py-toggle" href="#" id="DistantWorker.iter_retcodes-toggle" onclick="return toggle('DistantWorker.iter_retcodes');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes">iter_retcodes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">match_keys</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
404 </div><div id="DistantWorker.iter_retcodes-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.iter_retcodes-expanded"><a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
405 <a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"><tt class="py-docstring"> Returns an iterator over return codes and associated NodeSet.</tt> </tt>
406 <a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"><tt class="py-docstring"> If the optional parameter match_keys is defined, only keys</tt> </tt>
407 <a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"><tt class="py-docstring"> found in match_keys are returned.</tt> </tt>
408 <a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
409 <a name="L289"></a><tt class="py-lineno">289</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="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-62', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
410 <a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt id="link-63" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-63', 'keys', 'link-40');">keys</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name" targets="Method ClusterShell.Task.Task._rc_iter_by_worker()=ClusterShell.Task.Task-class.html#_rc_iter_by_worker"><a title="ClusterShell.Task.Task._rc_iter_by_worker" class="py-name" href="#" onclick="return doclink('link-64', '_rc_iter_by_worker', 'link-64');">_rc_iter_by_worker</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">match_keys</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
411 <a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt id="link-65" class="py-name"><a title="ClusterShell.NodeSet
412 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-65', 'NodeSet', 'link-5');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
413 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-66', 'fromlist', 'link-45');">fromlist</a></tt><tt class="py-op">(</tt><tt id="link-67" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-67', 'keys', 'link-40');">keys</a></tt><tt class="py-op">)</tt> </tt>
414 </div><a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> </tt>
415 <a name="DistantWorker.iter_node_retcodes"></a><div id="DistantWorker.iter_node_retcodes-def"><a name="L293"></a><tt class="py-lineno">293</tt> <a class="py-toggle" href="#" id="DistantWorker.iter_node_retcodes-toggle" onclick="return toggle('DistantWorker.iter_node_retcodes');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_retcodes">iter_node_retcodes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
416 </div><div id="DistantWorker.iter_node_retcodes-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.iter_node_retcodes-expanded"><a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
417 <a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"><tt class="py-docstring"> Returns an iterator over each node and associated return code.</tt> </tt>
418 <a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
419 <a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-68', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
420 <a name="L298"></a><tt class="py-lineno">298</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">task</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name" targets="Method ClusterShell.Task.Task._krc_iter_by_worker()=ClusterShell.Task.Task-class.html#_krc_iter_by_worker"><a title="ClusterShell.Task.Task._krc_iter_by_worker" class="py-name" href="#" onclick="return doclink('link-69', '_krc_iter_by_worker', 'link-69');">_krc_iter_by_worker</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
421 </div><a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> </tt>
422 <a name="DistantWorker.num_timeout"></a><div id="DistantWorker.num_timeout-def"><a name="L300"></a><tt class="py-lineno">300</tt> <a class="py-toggle" href="#" id="DistantWorker.num_timeout-toggle" onclick="return toggle('DistantWorker.num_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout">num_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
423 </div><div id="DistantWorker.num_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.num_timeout-expanded"><a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
424 <a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"><tt class="py-docstring"> Return the number of timed out "keys" (ie. nodes) for this worker.</tt> </tt>
425 <a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
426 <a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-70', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
427 <a name="L305"></a><tt class="py-lineno">305</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">task</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="ClusterShell.Task.Task._num_timeout_by_worker" class="py-name" href="#" onclick="return doclink('link-71', '_num_timeout_by_worker', 'link-11');">_num_timeout_by_worker</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
428 </div><a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> </tt>
429 <a name="DistantWorker.iter_keys_timeout"></a><div id="DistantWorker.iter_keys_timeout-def"><a name="L307"></a><tt class="py-lineno">307</tt> <a class="py-toggle" href="#" id="DistantWorker.iter_keys_timeout-toggle" onclick="return toggle('DistantWorker.iter_keys_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout">iter_keys_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
430 </div><div id="DistantWorker.iter_keys_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DistantWorker.iter_keys_timeout-expanded"><a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
431 <a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over timed out keys (ie. nodes) for a specific worker.</tt> </tt>
432 <a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
433 <a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-72', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
434 <a name="L312"></a><tt class="py-lineno">312</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">task</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name" targets="Method ClusterShell.Task.Task._iter_keys_timeout_by_worker()=ClusterShell.Task.Task-class.html#_iter_keys_timeout_by_worker"><a title="ClusterShell.Task.Task._iter_keys_timeout_by_worker" class="py-name" href="#" onclick="return doclink('link-73', '_iter_keys_timeout_by_worker', 'link-73');">_iter_keys_timeout_by_worker</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
435 </div></div><a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> </tt>
436 <a name="WorkerSimple"></a><div id="WorkerSimple-def"><a name="L314"></a><tt class="py-lineno">314</tt> <a class="py-toggle" href="#" id="WorkerSimple-toggle" onclick="return toggle('WorkerSimple');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a><tt class="py-op">(</tt><tt class="py-base-class">EngineClient</tt><tt class="py-op">,</tt> <tt class="py-base-class">Worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
437 </div><div id="WorkerSimple-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="WorkerSimple-expanded"><a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
438 <a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"><tt class="py-docstring"> Implements a simple Worker being itself an EngineClient.</tt> </tt>
439 <a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
440 <a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> </tt>
441 <a name="WorkerSimple.__init__"></a><div id="WorkerSimple.__init__-def"><a name="L319"></a><tt class="py-lineno">319</tt> <a class="py-toggle" href="#" id="WorkerSimple.__init__-toggle" onclick="return toggle('WorkerSimple.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-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">file_reader</tt><tt class="py-op">,</tt> <tt class="py-param">file_writer</tt><tt class="py-op">,</tt> <tt class="py-param">file_error</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">,</tt> </tt>
442 <a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-param">stderr</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
443 </div><div id="WorkerSimple.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.__init__-expanded"><a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
444 <a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"><tt class="py-docstring"> Initialize worker.</tt> </tt>
445 <a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
446 <a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt id="link-74" class="py-name"><a title="ClusterShell.Worker
447 ClusterShell.Worker.Worker
448 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-74', 'Worker', 'link-1');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
449 ClusterShell.Engine.Engine.Engine.__init__
450 ClusterShell.Engine.Engine.EngineAbortException.__init__
451 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
452 ClusterShell.Engine.Engine.EngineTimer.__init__
453 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
454 ClusterShell.Engine.Engine._EngineTimerQ.__init__
455 ClusterShell.Engine.Poll.EnginePoll.__init__
456 ClusterShell.MsgTree.MsgTree.__init__
457 ClusterShell.MsgTree.MsgTreeElem.__init__
458 ClusterShell.NodeSet.NodeSet.__init__
459 ClusterShell.NodeSet.NodeSetBase.__init__
460 ClusterShell.NodeSet.NodeSetParseError.__init__
461 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
462 ClusterShell.NodeSet.ParsingEngine.__init__
463 ClusterShell.NodeSet.RangeSet.__init__
464 ClusterShell.NodeSet.RangeSetPaddingError.__init__
465 ClusterShell.NodeSet.RangeSetParseError.__init__
466 ClusterShell.NodeUtils.GroupResolver.__init__
467 ClusterShell.NodeUtils.GroupResolverConfig.__init__
468 ClusterShell.NodeUtils.GroupSource.__init__
469 ClusterShell.NodeUtils.GroupSourceException.__init__
470 ClusterShell.Task.Task._SuspendCondition.__init__
471 ClusterShell.Task.Task.__init__
472 ClusterShell.Task._TaskMsgTree.__init__
473 ClusterShell.Worker.EngineClient.EngineClient.__init__
474 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
475 ClusterShell.Worker.EngineClient.EnginePort.__init__
476 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
477 ClusterShell.Worker.Popen.WorkerPopen.__init__
478 ClusterShell.Worker.Ssh.Scp.__init__
479 ClusterShell.Worker.Ssh.Ssh.__init__
480 ClusterShell.Worker.Ssh.WorkerSsh.__init__
481 ClusterShell.Worker.Worker.DistantWorker.__init__
482 ClusterShell.Worker.Worker.Worker.__init__
483 ClusterShell.Worker.Worker.WorkerSimple.__init__
484 clubak.Display.__init__
485 clush.ClushConfig.__init__
486 clush.ClushConfigError.__init__
487 clush.DirectOutputHandler.__init__
488 clush.Display.__init__
489 clush.GatherOutputHandler.__init__
490 clush.RunTimer.__init__
491 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-75', '__init__', 'link-17');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
492 <a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt id="link-76" class="py-name"><a title="ClusterShell.Worker.EngineClient
493 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-76', 'EngineClient', 'link-2');">EngineClient</a></tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
494 ClusterShell.Engine.Engine.Engine.__init__
495 ClusterShell.Engine.Engine.EngineAbortException.__init__
496 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
497 ClusterShell.Engine.Engine.EngineTimer.__init__
498 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
499 ClusterShell.Engine.Engine._EngineTimerQ.__init__
500 ClusterShell.Engine.Poll.EnginePoll.__init__
501 ClusterShell.MsgTree.MsgTree.__init__
502 ClusterShell.MsgTree.MsgTreeElem.__init__
503 ClusterShell.NodeSet.NodeSet.__init__
504 ClusterShell.NodeSet.NodeSetBase.__init__
505 ClusterShell.NodeSet.NodeSetParseError.__init__
506 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
507 ClusterShell.NodeSet.ParsingEngine.__init__
508 ClusterShell.NodeSet.RangeSet.__init__
509 ClusterShell.NodeSet.RangeSetPaddingError.__init__
510 ClusterShell.NodeSet.RangeSetParseError.__init__
511 ClusterShell.NodeUtils.GroupResolver.__init__
512 ClusterShell.NodeUtils.GroupResolverConfig.__init__
513 ClusterShell.NodeUtils.GroupSource.__init__
514 ClusterShell.NodeUtils.GroupSourceException.__init__
515 ClusterShell.Task.Task._SuspendCondition.__init__
516 ClusterShell.Task.Task.__init__
517 ClusterShell.Task._TaskMsgTree.__init__
518 ClusterShell.Worker.EngineClient.EngineClient.__init__
519 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
520 ClusterShell.Worker.EngineClient.EnginePort.__init__
521 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
522 ClusterShell.Worker.Popen.WorkerPopen.__init__
523 ClusterShell.Worker.Ssh.Scp.__init__
524 ClusterShell.Worker.Ssh.Ssh.__init__
525 ClusterShell.Worker.Ssh.WorkerSsh.__init__
526 ClusterShell.Worker.Worker.DistantWorker.__init__
527 ClusterShell.Worker.Worker.Worker.__init__
528 ClusterShell.Worker.Worker.WorkerSimple.__init__
529 clubak.Display.__init__
530 clush.ClushConfig.__init__
531 clush.ClushConfigError.__init__
532 clush.DirectOutputHandler.__init__
533 clush.Display.__init__
534 clush.GatherOutputHandler.__init__
535 clush.RunTimer.__init__
536 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-77', '__init__', 'link-17');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</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">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">)</tt> </tt>
537 <a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> </tt>
538 <a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
539 <a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> <tt class="py-comment"># allow key=0</tt> </tt>
540 <a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
541 <a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
542 <a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt class="py-name">key</tt> </tt>
543 <a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt> <tt class="py-op">=</tt> <tt class="py-name">file_reader</tt> </tt>
544 <a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt> <tt class="py-op">=</tt> <tt class="py-name">file_writer</tt> </tt>
545 <a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt> <tt class="py-op">=</tt> <tt class="py-name">file_error</tt> </tt>
546 </div><a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> </tt>
547 <a name="WorkerSimple._engine_clients"></a><div id="WorkerSimple._engine_clients-def"><a name="L336"></a><tt class="py-lineno">336</tt> <a class="py-toggle" href="#" id="WorkerSimple._engine_clients-toggle" onclick="return toggle('WorkerSimple._engine_clients');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_engine_clients">_engine_clients</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
548 </div><div id="WorkerSimple._engine_clients-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._engine_clients-expanded"><a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
549 <a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"><tt class="py-docstring"> Return a list of underlying engine clients.</tt> </tt>
550 <a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
551 <a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">]</tt> </tt>
552 </div><a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> </tt>
553 <a name="WorkerSimple.set_key"></a><div id="WorkerSimple.set_key-def"><a name="L342"></a><tt class="py-lineno">342</tt> <a class="py-toggle" href="#" id="WorkerSimple.set_key-toggle" onclick="return toggle('WorkerSimple.set_key');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_key">set_key</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
554 </div><div id="WorkerSimple.set_key-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.set_key-expanded"><a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
555 <a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"><tt class="py-docstring"> Source key for this worker is free for use. Use this method to</tt> </tt>
556 <a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"><tt class="py-docstring"> set the custom source key for this worker.</tt> </tt>
557 <a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
558 <a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt class="py-name">key</tt> </tt>
559 </div><a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> </tt>
560 <a name="WorkerSimple._start"></a><div id="WorkerSimple._start-def"><a name="L349"></a><tt class="py-lineno">349</tt> <a class="py-toggle" href="#" id="WorkerSimple._start-toggle" onclick="return toggle('WorkerSimple._start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_start">_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
561 </div><div id="WorkerSimple._start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._start-expanded"><a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
562 <a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"><tt class="py-docstring"> Start worker.</tt> </tt>
563 <a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
564 <a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
565 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-78', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_start"</tt><tt class="py-op">)</tt> </tt>
566 <a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> </tt>
567 <a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
568 </div><a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> </tt>
569 <a name="WorkerSimple.error_fileno"></a><div id="WorkerSimple.error_fileno-def"><a name="L357"></a><tt class="py-lineno">357</tt> <a class="py-toggle" href="#" id="WorkerSimple.error_fileno-toggle" onclick="return toggle('WorkerSimple.error_fileno');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno">error_fileno</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
570 </div><div id="WorkerSimple.error_fileno-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.error_fileno-expanded"><a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
571 <a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"><tt class="py-docstring"> Returns the standard error reader file descriptor as an integer.</tt> </tt>
572 <a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
573 <a name="L361"></a><tt class="py-lineno">361</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">file_error</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt><tt class="py-op">.</tt><tt class="py-name">closed</tt><tt class="py-op">:</tt> </tt>
574 <a name="L362"></a><tt class="py-lineno">362</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">file_error</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
575 <a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> </tt>
576 <a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
577 </div><a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> </tt>
578 <a name="WorkerSimple.reader_fileno"></a><div id="WorkerSimple.reader_fileno-def"><a name="L366"></a><tt class="py-lineno">366</tt> <a class="py-toggle" href="#" id="WorkerSimple.reader_fileno-toggle" onclick="return toggle('WorkerSimple.reader_fileno');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno">reader_fileno</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
579 </div><div id="WorkerSimple.reader_fileno-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.reader_fileno-expanded"><a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
580 <a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"><tt class="py-docstring"> Returns the reader file descriptor as an integer.</tt> </tt>
581 <a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
582 <a name="L370"></a><tt class="py-lineno">370</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">file_reader</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt><tt class="py-op">.</tt><tt class="py-name">closed</tt><tt class="py-op">:</tt> </tt>
583 <a name="L371"></a><tt class="py-lineno">371</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">file_reader</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
584 <a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> </tt>
585 <a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
586 </div><a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> </tt>
587 <a name="WorkerSimple.writer_fileno"></a><div id="WorkerSimple.writer_fileno-def"><a name="L375"></a><tt class="py-lineno">375</tt> <a class="py-toggle" href="#" id="WorkerSimple.writer_fileno-toggle" onclick="return toggle('WorkerSimple.writer_fileno');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno">writer_fileno</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
588 </div><div id="WorkerSimple.writer_fileno-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.writer_fileno-expanded"><a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
589 <a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"><tt class="py-docstring"> Returns the writer file descriptor as an integer.</tt> </tt>
590 <a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
591 <a name="L379"></a><tt class="py-lineno">379</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">file_writer</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">closed</tt><tt class="py-op">:</tt> </tt>
592 <a name="L380"></a><tt class="py-lineno">380</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">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
593 <a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> </tt>
594 <a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
595 </div><a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"> </tt>
596 <a name="WorkerSimple._read"></a><div id="WorkerSimple._read-def"><a name="L384"></a><tt class="py-lineno">384</tt> <a class="py-toggle" href="#" id="WorkerSimple._read-toggle" onclick="return toggle('WorkerSimple._read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_read">_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">size</tt><tt class="py-op">=</tt><tt class="py-number">4096</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
597 </div><div id="WorkerSimple._read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._read-expanded"><a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
598 <a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"><tt class="py-docstring"> Read data from process.</tt> </tt>
599 <a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
600 <a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-79" class="py-name"><a title="ClusterShell.Worker.EngineClient
601 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-79', 'EngineClient', 'link-2');">EngineClient</a></tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._read()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_read,Method ClusterShell.Worker.EngineClient.EnginePort._read()=ClusterShell.Worker.EngineClient.EnginePort-class.html#_read,Method ClusterShell.Worker.Worker.WorkerSimple._read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_read"><a title="ClusterShell.Worker.EngineClient.EngineClient._read
602 ClusterShell.Worker.EngineClient.EnginePort._read
603 ClusterShell.Worker.Worker.WorkerSimple._read" class="py-name" href="#" onclick="return doclink('link-80', '_read', 'link-80');">_read</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">size</tt><tt class="py-op">)</tt> </tt>
604 </div><a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> </tt>
605 <a name="WorkerSimple._readerr"></a><div id="WorkerSimple._readerr-def"><a name="L390"></a><tt class="py-lineno">390</tt> <a class="py-toggle" href="#" id="WorkerSimple._readerr-toggle" onclick="return toggle('WorkerSimple._readerr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_readerr">_readerr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">size</tt><tt class="py-op">=</tt><tt class="py-number">4096</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
606 </div><div id="WorkerSimple._readerr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._readerr-expanded"><a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
607 <a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"><tt class="py-docstring"> Read error data from process.</tt> </tt>
608 <a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
609 <a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-81" class="py-name"><a title="ClusterShell.Worker.EngineClient
610 ClusterShell.Worker.EngineClient.EngineClient" class="py-name" href="#" onclick="return doclink('link-81', 'EngineClient', 'link-2');">EngineClient</a></tt><tt class="py-op">.</tt><tt id="link-82" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._readerr()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr,Method ClusterShell.Worker.Worker.WorkerSimple._readerr()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_readerr"><a title="ClusterShell.Worker.EngineClient.EngineClient._readerr
611 ClusterShell.Worker.Worker.WorkerSimple._readerr" class="py-name" href="#" onclick="return doclink('link-82', '_readerr', 'link-82');">_readerr</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">size</tt><tt class="py-op">)</tt> </tt>
612 </div><a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> </tt>
613 <a name="WorkerSimple._close"></a><div id="WorkerSimple._close-def"><a name="L396"></a><tt class="py-lineno">396</tt> <a class="py-toggle" href="#" id="WorkerSimple._close-toggle" onclick="return toggle('WorkerSimple._close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_close">_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
614 </div><div id="WorkerSimple._close-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._close-expanded"><a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
615 <a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"><tt class="py-docstring"> Close worker. Called by engine after worker has been</tt> </tt>
616 <a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"><tt class="py-docstring"> unregistered. This method should handle all termination types</tt> </tt>
617 <a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"><tt class="py-docstring"> (normal, forced or on timeout).</tt> </tt>
618 <a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
619 <a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">force</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt><tt class="py-op">:</tt> </tt>
620 <a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-comment"># We still have some read data available in buffer, but no</tt> </tt>
621 <a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-comment"># EOL. Generate a final message before closing.</tt> </tt>
622 <a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple._on_msgline()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_msgline"><a title="ClusterShell.Worker.Worker.WorkerSimple._on_msgline" class="py-name" href="#" onclick="return doclink('link-83', '_on_msgline', 'link-83');">_on_msgline</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rbuf</tt><tt class="py-op">)</tt> </tt>
623 <a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> </tt>
624 <a name="L407"></a><tt class="py-lineno">407</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">file_reader</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
625 <a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_reader</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
626 <a name="L409"></a><tt class="py-lineno">409</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">file_writer</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
627 <a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_writer</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
628 <a name="L411"></a><tt class="py-lineno">411</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">file_error</tt> <tt class="py-op">!=</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
629 <a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_error</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
630 <a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> </tt>
631 <a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
632 <a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple._on_timeout()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_timeout"><a title="ClusterShell.Worker.Worker.WorkerSimple._on_timeout" class="py-name" href="#" onclick="return doclink('link-84', '_on_timeout', 'link-84');">_on_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
633 <a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> </tt>
634 <a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
635 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-85', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_close"</tt><tt class="py-op">)</tt> </tt>
636 </div><a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"> </tt>
637 <a name="WorkerSimple._handle_read"></a><div id="WorkerSimple._handle_read-def"><a name="L419"></a><tt class="py-lineno">419</tt> <a class="py-toggle" href="#" id="WorkerSimple._handle_read-toggle" onclick="return toggle('WorkerSimple._handle_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read">_handle_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
638 </div><div id="WorkerSimple._handle_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._handle_read-expanded"><a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
639 <a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"><tt class="py-docstring"> Engine is telling us there is data available for reading.</tt> </tt>
640 <a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
641 <a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-name">debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-86', 'info', 'link-86');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
642 <a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
643 <a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-87', 'info', 'link-86');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt> </tt>
644 <a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> </tt>
645 <a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-88" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-88', 'msg', 'link-19');">msg</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._readlines()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines"><a title="ClusterShell.Worker.EngineClient.EngineClient._readlines" class="py-name" href="#" onclick="return doclink('link-89', '_readlines', 'link-89');">_readlines</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
646 <a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
647 <a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"LINE %s"</tt> <tt class="py-op">%</tt> <tt id="link-90" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-90', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
648 <a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerSimple._on_msgline" class="py-name" href="#" onclick="return doclink('link-91', '_on_msgline', 'link-83');">_on_msgline</a></tt><tt class="py-op">(</tt><tt id="link-92" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-92', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
649 </div><a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> </tt>
650 <a name="WorkerSimple._handle_error"></a><div id="WorkerSimple._handle_error-def"><a name="L432"></a><tt class="py-lineno">432</tt> <a class="py-toggle" href="#" id="WorkerSimple._handle_error-toggle" onclick="return toggle('WorkerSimple._handle_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_error">_handle_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
651 </div><div id="WorkerSimple._handle_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._handle_error-expanded"><a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
652 <a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"><tt class="py-docstring"> Engine is telling us there is error available for reading.</tt> </tt>
653 <a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
654 <a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> <tt class="py-name">debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-93', 'info', 'link-86');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
655 <a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
656 <a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-94', 'info', 'link-86');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"print_debug"</tt><tt class="py-op">)</tt> </tt>
657 <a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> </tt>
658 <a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-95" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-95', 'msg', 'link-19');">msg</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._readerrlines()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines"><a title="ClusterShell.Worker.EngineClient.EngineClient._readerrlines" class="py-name" href="#" onclick="return doclink('link-96', '_readerrlines', 'link-96');">_readerrlines</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
659 <a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
660 <a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-name">print_debug</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">"LINE@STDERR %s"</tt> <tt class="py-op">%</tt> <tt id="link-97" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-97', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
661 <a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple._on_errmsgline()=ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_errmsgline"><a title="ClusterShell.Worker.Worker.WorkerSimple._on_errmsgline" class="py-name" href="#" onclick="return doclink('link-98', '_on_errmsgline', 'link-98');">_on_errmsgline</a></tt><tt class="py-op">(</tt><tt id="link-99" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-99', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
662 </div><a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> </tt>
663 <a name="WorkerSimple.last_read"></a><div id="WorkerSimple.last_read-def"><a name="L445"></a><tt class="py-lineno">445</tt> <a class="py-toggle" href="#" id="WorkerSimple.last_read-toggle" onclick="return toggle('WorkerSimple.last_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read">last_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
664 </div><div id="WorkerSimple.last_read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.last_read-expanded"><a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
665 <a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"><tt class="py-docstring"> Read last msg, useful in an EventHandler.</tt> </tt>
666 <a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
667 <a name="L449"></a><tt class="py-lineno">449</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">last_msg</tt> </tt>
668 </div><a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> </tt>
669 <a name="WorkerSimple.last_error"></a><div id="WorkerSimple.last_error-def"><a name="L451"></a><tt class="py-lineno">451</tt> <a class="py-toggle" href="#" id="WorkerSimple.last_error-toggle" onclick="return toggle('WorkerSimple.last_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error">last_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
670 </div><div id="WorkerSimple.last_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.last_error-expanded"><a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
671 <a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"><tt class="py-docstring"> Get last error message from event handler.</tt> </tt>
672 <a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
673 <a name="L455"></a><tt class="py-lineno">455</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">last_errmsg</tt> </tt>
674 </div><a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> </tt>
675 <a name="WorkerSimple._on_msgline"></a><div id="WorkerSimple._on_msgline-def"><a name="L457"></a><tt class="py-lineno">457</tt> <a class="py-toggle" href="#" id="WorkerSimple._on_msgline-toggle" onclick="return toggle('WorkerSimple._on_msgline');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_msgline">_on_msgline</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
676 </div><div id="WorkerSimple._on_msgline-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._on_msgline-expanded"><a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
677 <a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"><tt class="py-docstring"> Add a message.</tt> </tt>
678 <a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
679 <a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-comment"># add last msg to local buffer</tt> </tt>
680 <a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_msg</tt> <tt class="py-op">=</tt> <tt id="link-100" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-100', 'msg', 'link-19');">msg</a></tt> </tt>
681 <a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> </tt>
682 <a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> <tt class="py-comment"># update task</tt> </tt>
683 <a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="ClusterShell.Task.Task._msg_add" class="py-name" href="#" onclick="return doclink('link-101', '_msg_add', 'link-20');">_msg_add</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-102" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-102', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
684 <a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> </tt>
685 <a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
686 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-103', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_read"</tt><tt class="py-op">)</tt> </tt>
687 </div><a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> </tt>
688 <a name="WorkerSimple._on_errmsgline"></a><div id="WorkerSimple._on_errmsgline-def"><a name="L469"></a><tt class="py-lineno">469</tt> <a class="py-toggle" href="#" id="WorkerSimple._on_errmsgline-toggle" onclick="return toggle('WorkerSimple._on_errmsgline');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_errmsgline">_on_errmsgline</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
689 </div><div id="WorkerSimple._on_errmsgline-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._on_errmsgline-expanded"><a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
690 <a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"><tt class="py-docstring"> Add a message.</tt> </tt>
691 <a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
692 <a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-comment"># add last msg to local buffer</tt> </tt>
693 <a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_errmsg</tt> <tt class="py-op">=</tt> <tt id="link-104" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-104', 'msg', 'link-19');">msg</a></tt> </tt>
694 <a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> </tt>
695 <a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> <tt class="py-comment"># update task</tt> </tt>
696 <a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="ClusterShell.Task.Task._errmsg_add" class="py-name" href="#" onclick="return doclink('link-105', '_errmsg_add', 'link-24');">_errmsg_add</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-106" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-106', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
697 <a name="L478"></a><tt class="py-lineno">478</tt> <tt class="py-line"> </tt>
698 <a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
699 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-107', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_error"</tt><tt class="py-op">)</tt> </tt>
700 </div><a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> </tt>
701 <a name="WorkerSimple._on_timeout"></a><div id="WorkerSimple._on_timeout-def"><a name="L481"></a><tt class="py-lineno">481</tt> <a class="py-toggle" href="#" id="WorkerSimple._on_timeout-toggle" onclick="return toggle('WorkerSimple._on_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_timeout">_on_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
702 </div><div id="WorkerSimple._on_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple._on_timeout-expanded"><a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
703 <a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"><tt class="py-docstring"> Update on timeout.</tt> </tt>
704 <a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
705 <a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="ClusterShell.Task.Task._timeout_add" class="py-name" href="#" onclick="return doclink('link-108', '_timeout_add', 'link-29');">_timeout_add</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
706 <a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> </tt>
707 <a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> <tt class="py-comment"># trigger timeout event</tt> </tt>
708 <a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name"><a title="ClusterShell.Event.EventHandler._invoke
709 ClusterShell.Worker.Worker.Worker._invoke" class="py-name" href="#" onclick="return doclink('link-109', '_invoke', 'link-9');">_invoke</a></tt><tt class="py-op">(</tt><tt class="py-string">"ev_timeout"</tt><tt class="py-op">)</tt> </tt>
710 </div><a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"> </tt>
711 <a name="WorkerSimple.read"></a><div id="WorkerSimple.read-def"><a name="L490"></a><tt class="py-lineno">490</tt> <a class="py-toggle" href="#" id="WorkerSimple.read-toggle" onclick="return toggle('WorkerSimple.read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#read">read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
712 </div><div id="WorkerSimple.read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.read-expanded"><a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
713 <a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"><tt class="py-docstring"> Read worker buffer.</tt> </tt>
714 <a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
715 <a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-110', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
716 <a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-111" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-111', 'msg', 'link-19');">msg</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="ClusterShell.Task.Task._call_tree_matcher" class="py-name" href="#" onclick="return doclink('link-112', '_call_tree_matcher', 'link-41');">_call_tree_matcher</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_msgtree</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-113', 'items', 'link-58');">items</a></tt><tt class="py-op">,</tt> </tt>
717 <a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
718 <a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">key</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt> </tt>
719 <a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-114" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-114', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
720 </div><a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> </tt>
721 <a name="WorkerSimple.error"></a><div id="WorkerSimple.error-def"><a name="L500"></a><tt class="py-lineno">500</tt> <a class="py-toggle" href="#" id="WorkerSimple.error-toggle" onclick="return toggle('WorkerSimple.error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error">error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
722 </div><div id="WorkerSimple.error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.error-expanded"><a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
723 <a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"><tt class="py-docstring"> Read worker error buffer.</tt> </tt>
724 <a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
725 <a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="ClusterShell.Worker.Worker.Worker._task_bound_check" class="py-name" href="#" onclick="return doclink('link-115', '_task_bound_check', 'link-10');">_task_bound_check</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
726 <a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-116" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-116', 'msg', 'link-19');">msg</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="ClusterShell.Task.Task._call_tree_matcher" class="py-name" href="#" onclick="return doclink('link-117', '_call_tree_matcher', 'link-41');">_call_tree_matcher</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_errtree</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="ClusterShell.MsgTree.MsgTree.items" class="py-name" href="#" onclick="return doclink('link-118', 'items', 'link-58');">items</a></tt><tt class="py-op">,</tt> </tt>
727 <a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
728 <a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">key</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key</tt> </tt>
729 <a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-119" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-119', 'msg', 'link-19');">msg</a></tt><tt class="py-op">)</tt> </tt>
730 </div><a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> </tt>
731 <a name="WorkerSimple.write"></a><div id="WorkerSimple.write-def"><a name="L510"></a><tt class="py-lineno">510</tt> <a class="py-toggle" href="#" id="WorkerSimple.write-toggle" onclick="return toggle('WorkerSimple.write');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#write">write</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">buf</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
732 </div><div id="WorkerSimple.write-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.write-expanded"><a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
733 <a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"><tt class="py-docstring"> Write to worker.</tt> </tt>
734 <a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
735 <a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._write()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_write"><a title="ClusterShell.Worker.EngineClient.EngineClient._write" class="py-name" href="#" onclick="return doclink('link-120', '_write', 'link-120');">_write</a></tt><tt class="py-op">(</tt><tt class="py-name">buf</tt><tt class="py-op">)</tt> </tt>
736 </div><a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"> </tt>
737 <a name="WorkerSimple.set_write_eof"></a><div id="WorkerSimple.set_write_eof-def"><a name="L516"></a><tt class="py-lineno">516</tt> <a class="py-toggle" href="#" id="WorkerSimple.set_write_eof-toggle" onclick="return toggle('WorkerSimple.set_write_eof');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof">set_write_eof</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
738 </div><div id="WorkerSimple.set_write_eof-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="WorkerSimple.set_write_eof-expanded"><a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
739 <a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"><tt class="py-docstring"> Tell worker to close its writer file descriptor once flushed. Do not</tt> </tt>
740 <a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"><tt class="py-docstring"> perform writes after this call.</tt> </tt>
741 <a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
742 <a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EngineClient._set_write_eof()=ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof"><a title="ClusterShell.Worker.EngineClient.EngineClient._set_write_eof" class="py-name" href="#" onclick="return doclink('link-121', '_set_write_eof', 'link-121');">_set_write_eof</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
743 </div></div><a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"> </tt><script type="text/javascript">
744 <!--
745 expandto(location.href);
746 // -->
747 </script>
748 </pre>
749 <br />
750 <!-- ==================== NAVIGATION BAR ==================== -->
751 <table class="navbar" border="0" width="100%" cellpadding="0"
752 bgcolor="#a0c0ff" cellspacing="0">
753 <tr valign="middle">
754
755 <!-- Tree link -->
756 <th>&nbsp;&nbsp;&nbsp;<a
757 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
758
759 <!-- Index link -->
760 <th>&nbsp;&nbsp;&nbsp;<a
761 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
762
763 <!-- Help link -->
764 <th>&nbsp;&nbsp;&nbsp;<a
765 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
766
767 <!-- Project homepage -->
768 <th class="navbar" align="right" width="100%">
769 <table border="0" cellpadding="0" cellspacing="0">
770 <tr><th class="navbar" align="center"
771 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
772 </tr></table></th>
773 </tr>
774 </table>
775 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
776 <tr>
777 <td align="left" class="footer">
778 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
779 </td>
780 <td align="right" class="footer">
781 <a target="mainFrame" href="http://epydoc.sourceforge.net"
782 >http://epydoc.sourceforge.net</a>
783 </td>
784 </tr>
785 </table>
786
787 <script type="text/javascript">
788 <!--
789 // Private objects are initially displayed (because if
790 // javascript is turned off then we want them to be
791 // visible); but by default, we want to hide them. So hide
792 // them unless we have a cookie that says to show them.
793 checkCookie();
794 // -->
795 </script>
796 </body>
797 </html>
+0
-862
doc/epydoc/html/ClusterShell.Worker.Worker.DistantWorker-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Worker.DistantWorker</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Worker-module.html">Module&nbsp;Worker</a> ::
44 Class&nbsp;DistantWorker
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class DistantWorker</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_58" name="uml_class_diagram_for_clusters_58">
64 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#__init__" title="Initializer." alt="" coords="23,153,277,172"/>
65 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_node" title="Get last node, useful to get the node in an EventHandler callback like &#160;ev_timeout()." alt="" coords="23,172,277,191"/>
66 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_read" title="Get last (node, buffer), useful in an EventHandler.ev_read()" alt="" coords="23,191,277,209"/>
67 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_error" title="Get last (node, error_buffer), useful in an EventHandler.ev_error()" alt="" coords="23,209,277,228"/>
68 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode" title="Get last (node, rc), useful in an EventHandler.ev_hup()" alt="" coords="23,228,277,247"/>
69 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer" title="Get specific node buffer." alt="" coords="23,247,277,265"/>
70 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error" title="Get specific node error buffer." alt="" coords="23,265,277,284"/>
71 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error_buffer" title="Get specific node error buffer." alt="" coords="23,284,277,303"/>
72 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode" title="Get specific node return code." alt="" coords="23,303,277,321"/>
73 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc" title="Get specific node return code." alt="" coords="23,321,277,340"/>
74 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers" title="Returns an iterator over available buffers and associated NodeSet." alt="" coords="23,340,277,359"/>
75 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors" title="Returns an iterator over available error buffers and associated NodeSet." alt="" coords="23,359,277,377"/>
76 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers" title="Returns an iterator over each node and associated buffer." alt="" coords="23,377,277,396"/>
77 <area shape="rect" id="node223" href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout" title="Iterate over timed out keys (ie." alt="" coords="23,415,277,433"/>
78 <area shape="rect" id="node1" href="ClusterShell.Worker.Worker.DistantWorker-class.html" title="Base class DistantWorker, which provides a useful set of setters/getters to use with distant workers like ssh or pdsh." alt="" coords="11,121,288,439"/>
79 <area shape="rect" id="node3" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html" title="ClusterShell ssh&#45;based worker Class." alt="" coords="5,459,133,498"/>
80 <area shape="rect" id="node4" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html" title="ClusterShell pdsh&#45;based worker Class." alt="" coords="163,459,304,498"/>
81 <area shape="rect" id="node224" href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout" title="Return True if this worker aborted due to timeout." alt="" coords="95,39,207,57"/>
82 <area shape="rect" id="node224" href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers" title="Flush any messages associated to this worker." alt="" coords="95,57,207,76"/>
83 <area shape="rect" id="node224" href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors" title="Flush any error messages associated to this worker." alt="" coords="95,76,207,95"/>
84 <area shape="rect" id="node2" href="ClusterShell.Worker.Worker.Worker-class.html" title="Base class Worker." alt="" coords="83,6,219,101"/>
85 </map>
86 <img src="uml_class_diagram_for_clusters_58.png" alt='' usemap="#uml_class_diagram_for_clusters_58" ismap="ismap" class="graph-without-title" />
87 </center>
88 </center>
89 <hr />
90 <p>Base class DistantWorker, which provides a useful set of
91 setters/getters to use with distant workers like ssh or pdsh.</p>
92
93 <!-- ==================== INSTANCE METHODS ==================== -->
94 <a name="section-InstanceMethods"></a>
95 <table class="summary" border="1" cellpadding="3"
96 cellspacing="0" width="100%" bgcolor="white">
97 <tr bgcolor="#70b0f0" class="table-header">
98 <td colspan="2" class="table-header">
99 <table border="0" cellpadding="0" cellspacing="0" width="100%">
100 <tr valign="top">
101 <td align="left"><span class="table-header">Instance Methods</span></td>
102 <td align="right" valign="top"
103 ><span class="options">[<a href="#section-InstanceMethods"
104 class="privatelink" onclick="toggle_private();"
105 >hide private</a>]</span></td>
106 </tr>
107 </table>
108 </td>
109 </tr>
110 <tr>
111 <td width="15%" align="right" valign="top" class="summary">
112 <span class="summary-type">&nbsp;</span>
113 </td><td class="summary">
114 <table width="100%" cellpadding="0" cellspacing="0" border="0">
115 <tr>
116 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
117 <span class="summary-sig-arg">handler</span>)</span><br />
118 Initializer.</td>
119 <td align="right" valign="top">
120 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.__init__">source&nbsp;code</a></span>
121
122 </td>
123 </tr>
124 </table>
125
126 </td>
127 </tr>
128 <tr class="private">
129 <td width="15%" align="right" valign="top" class="summary">
130 <span class="summary-type">&nbsp;</span>
131 </td><td class="summary">
132 <table width="100%" cellpadding="0" cellspacing="0" border="0">
133 <tr>
134 <td><span class="summary-sig"><a name="_on_start"></a><span class="summary-sig-name">_on_start</span>(<span class="summary-sig-arg">self</span>)</span><br />
135 Starting</td>
136 <td align="right" valign="top">
137 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker._on_start">source&nbsp;code</a></span>
138
139 </td>
140 </tr>
141 </table>
142
143 </td>
144 </tr>
145 <tr class="private">
146 <td width="15%" align="right" valign="top" class="summary">
147 <span class="summary-type">&nbsp;</span>
148 </td><td class="summary">
149 <table width="100%" cellpadding="0" cellspacing="0" border="0">
150 <tr>
151 <td><span class="summary-sig"><a name="_on_node_msgline"></a><span class="summary-sig-name">_on_node_msgline</span>(<span class="summary-sig-arg">self</span>,
152 <span class="summary-sig-arg">node</span>,
153 <span class="summary-sig-arg">msg</span>)</span><br />
154 Message received from node, update last* stuffs.</td>
155 <td align="right" valign="top">
156 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker._on_node_msgline">source&nbsp;code</a></span>
157
158 </td>
159 </tr>
160 </table>
161
162 </td>
163 </tr>
164 <tr class="private">
165 <td width="15%" align="right" valign="top" class="summary">
166 <span class="summary-type">&nbsp;</span>
167 </td><td class="summary">
168 <table width="100%" cellpadding="0" cellspacing="0" border="0">
169 <tr>
170 <td><span class="summary-sig"><a name="_on_node_errline"></a><span class="summary-sig-name">_on_node_errline</span>(<span class="summary-sig-arg">self</span>,
171 <span class="summary-sig-arg">node</span>,
172 <span class="summary-sig-arg">msg</span>)</span><br />
173 Error message received from node, update last* stuffs.</td>
174 <td align="right" valign="top">
175 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker._on_node_errline">source&nbsp;code</a></span>
176
177 </td>
178 </tr>
179 </table>
180
181 </td>
182 </tr>
183 <tr class="private">
184 <td width="15%" align="right" valign="top" class="summary">
185 <span class="summary-type">&nbsp;</span>
186 </td><td class="summary">
187 <table width="100%" cellpadding="0" cellspacing="0" border="0">
188 <tr>
189 <td><span class="summary-sig"><a name="_on_node_rc"></a><span class="summary-sig-name">_on_node_rc</span>(<span class="summary-sig-arg">self</span>,
190 <span class="summary-sig-arg">node</span>,
191 <span class="summary-sig-arg">rc</span>)</span><br />
192 Return code received from a node, update last* stuffs.</td>
193 <td align="right" valign="top">
194 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker._on_node_rc">source&nbsp;code</a></span>
195
196 </td>
197 </tr>
198 </table>
199
200 </td>
201 </tr>
202 <tr class="private">
203 <td width="15%" align="right" valign="top" class="summary">
204 <span class="summary-type">&nbsp;</span>
205 </td><td class="summary">
206 <table width="100%" cellpadding="0" cellspacing="0" border="0">
207 <tr>
208 <td><span class="summary-sig"><a name="_on_node_timeout"></a><span class="summary-sig-name">_on_node_timeout</span>(<span class="summary-sig-arg">self</span>,
209 <span class="summary-sig-arg">node</span>)</span><br />
210 Update on node timeout.</td>
211 <td align="right" valign="top">
212 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker._on_node_timeout">source&nbsp;code</a></span>
213
214 </td>
215 </tr>
216 </table>
217
218 </td>
219 </tr>
220 <tr>
221 <td width="15%" align="right" valign="top" class="summary">
222 <span class="summary-type">&nbsp;</span>
223 </td><td class="summary">
224 <table width="100%" cellpadding="0" cellspacing="0" border="0">
225 <tr>
226 <td><span class="summary-sig"><a name="last_node"></a><span class="summary-sig-name">last_node</span>(<span class="summary-sig-arg">self</span>)</span><br />
227 Get last node, useful to get the node in an EventHandler callback
228 like ev_timeout().</td>
229 <td align="right" valign="top">
230 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.last_node">source&nbsp;code</a></span>
231
232 </td>
233 </tr>
234 </table>
235
236 </td>
237 </tr>
238 <tr>
239 <td width="15%" align="right" valign="top" class="summary">
240 <span class="summary-type">&nbsp;</span>
241 </td><td class="summary">
242 <table width="100%" cellpadding="0" cellspacing="0" border="0">
243 <tr>
244 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_read" class="summary-sig-name">last_read</a>(<span class="summary-sig-arg">self</span>)</span><br />
245 Get last (node, buffer), useful in an EventHandler.ev_read()</td>
246 <td align="right" valign="top">
247 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.last_read">source&nbsp;code</a></span>
248
249 </td>
250 </tr>
251 </table>
252
253 </td>
254 </tr>
255 <tr>
256 <td width="15%" align="right" valign="top" class="summary">
257 <span class="summary-type">&nbsp;</span>
258 </td><td class="summary">
259 <table width="100%" cellpadding="0" cellspacing="0" border="0">
260 <tr>
261 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_error" class="summary-sig-name">last_error</a>(<span class="summary-sig-arg">self</span>)</span><br />
262 Get last (node, error_buffer), useful in an EventHandler.ev_error()</td>
263 <td align="right" valign="top">
264 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.last_error">source&nbsp;code</a></span>
265
266 </td>
267 </tr>
268 </table>
269
270 </td>
271 </tr>
272 <tr>
273 <td width="15%" align="right" valign="top" class="summary">
274 <span class="summary-type">&nbsp;</span>
275 </td><td class="summary">
276 <table width="100%" cellpadding="0" cellspacing="0" border="0">
277 <tr>
278 <td><span class="summary-sig"><a name="last_retcode"></a><span class="summary-sig-name">last_retcode</span>(<span class="summary-sig-arg">self</span>)</span><br />
279 Get last (node, rc), useful in an EventHandler.ev_hup()</td>
280 <td align="right" valign="top">
281 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.last_retcode">source&nbsp;code</a></span>
282
283 </td>
284 </tr>
285 </table>
286
287 </td>
288 </tr>
289 <tr>
290 <td width="15%" align="right" valign="top" class="summary">
291 <span class="summary-type">&nbsp;</span>
292 </td><td class="summary">
293 <table width="100%" cellpadding="0" cellspacing="0" border="0">
294 <tr>
295 <td><span class="summary-sig"><a name="node_buffer"></a><span class="summary-sig-name">node_buffer</span>(<span class="summary-sig-arg">self</span>,
296 <span class="summary-sig-arg">node</span>)</span><br />
297 Get specific node buffer.</td>
298 <td align="right" valign="top">
299 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.node_buffer">source&nbsp;code</a></span>
300
301 </td>
302 </tr>
303 </table>
304
305 </td>
306 </tr>
307 <tr>
308 <td width="15%" align="right" valign="top" class="summary">
309 <span class="summary-type">&nbsp;</span>
310 </td><td class="summary">
311 <table width="100%" cellpadding="0" cellspacing="0" border="0">
312 <tr>
313 <td><span class="summary-sig"><a name="node_error"></a><span class="summary-sig-name">node_error</span>(<span class="summary-sig-arg">self</span>,
314 <span class="summary-sig-arg">node</span>)</span><br />
315 Get specific node error buffer.</td>
316 <td align="right" valign="top">
317 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.node_error">source&nbsp;code</a></span>
318
319 </td>
320 </tr>
321 </table>
322
323 </td>
324 </tr>
325 <tr>
326 <td width="15%" align="right" valign="top" class="summary">
327 <span class="summary-type">&nbsp;</span>
328 </td><td class="summary">
329 <table width="100%" cellpadding="0" cellspacing="0" border="0">
330 <tr>
331 <td><span class="summary-sig"><a name="node_error_buffer"></a><span class="summary-sig-name">node_error_buffer</span>(<span class="summary-sig-arg">self</span>,
332 <span class="summary-sig-arg">node</span>)</span><br />
333 Get specific node error buffer.</td>
334 <td align="right" valign="top">
335 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.node_error">source&nbsp;code</a></span>
336
337 </td>
338 </tr>
339 </table>
340
341 </td>
342 </tr>
343 <tr>
344 <td width="15%" align="right" valign="top" class="summary">
345 <span class="summary-type">&nbsp;</span>
346 </td><td class="summary">
347 <table width="100%" cellpadding="0" cellspacing="0" border="0">
348 <tr>
349 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode" class="summary-sig-name">node_retcode</a>(<span class="summary-sig-arg">self</span>,
350 <span class="summary-sig-arg">node</span>)</span><br />
351 Get specific node return code.</td>
352 <td align="right" valign="top">
353 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.node_retcode">source&nbsp;code</a></span>
354
355 </td>
356 </tr>
357 </table>
358
359 </td>
360 </tr>
361 <tr>
362 <td width="15%" align="right" valign="top" class="summary">
363 <span class="summary-type">&nbsp;</span>
364 </td><td class="summary">
365 <table width="100%" cellpadding="0" cellspacing="0" border="0">
366 <tr>
367 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc" class="summary-sig-name">node_rc</a>(<span class="summary-sig-arg">self</span>,
368 <span class="summary-sig-arg">node</span>)</span><br />
369 Get specific node return code.</td>
370 <td align="right" valign="top">
371 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.node_retcode">source&nbsp;code</a></span>
372
373 </td>
374 </tr>
375 </table>
376
377 </td>
378 </tr>
379 <tr>
380 <td width="15%" align="right" valign="top" class="summary">
381 <span class="summary-type">&nbsp;</span>
382 </td><td class="summary">
383 <table width="100%" cellpadding="0" cellspacing="0" border="0">
384 <tr>
385 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers" class="summary-sig-name">iter_buffers</a>(<span class="summary-sig-arg">self</span>,
386 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
387 Returns an iterator over available buffers and associated NodeSet.</td>
388 <td align="right" valign="top">
389 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_buffers">source&nbsp;code</a></span>
390
391 </td>
392 </tr>
393 </table>
394
395 </td>
396 </tr>
397 <tr>
398 <td width="15%" align="right" valign="top" class="summary">
399 <span class="summary-type">&nbsp;</span>
400 </td><td class="summary">
401 <table width="100%" cellpadding="0" cellspacing="0" border="0">
402 <tr>
403 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors" class="summary-sig-name">iter_errors</a>(<span class="summary-sig-arg">self</span>,
404 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
405 Returns an iterator over available error buffers and associated
406 NodeSet.</td>
407 <td align="right" valign="top">
408 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_errors">source&nbsp;code</a></span>
409
410 </td>
411 </tr>
412 </table>
413
414 </td>
415 </tr>
416 <tr>
417 <td width="15%" align="right" valign="top" class="summary">
418 <span class="summary-type">&nbsp;</span>
419 </td><td class="summary">
420 <table width="100%" cellpadding="0" cellspacing="0" border="0">
421 <tr>
422 <td><span class="summary-sig"><a name="iter_node_buffers"></a><span class="summary-sig-name">iter_node_buffers</span>(<span class="summary-sig-arg">self</span>,
423 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
424 Returns an iterator over each node and associated buffer.</td>
425 <td align="right" valign="top">
426 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_node_buffers">source&nbsp;code</a></span>
427
428 </td>
429 </tr>
430 </table>
431
432 </td>
433 </tr>
434 <tr>
435 <td width="15%" align="right" valign="top" class="summary">
436 <span class="summary-type">&nbsp;</span>
437 </td><td class="summary">
438 <table width="100%" cellpadding="0" cellspacing="0" border="0">
439 <tr>
440 <td><span class="summary-sig"><a name="iter_node_errors"></a><span class="summary-sig-name">iter_node_errors</span>(<span class="summary-sig-arg">self</span>,
441 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
442 Returns an iterator over each node and associated error buffer.</td>
443 <td align="right" valign="top">
444 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_node_errors">source&nbsp;code</a></span>
445
446 </td>
447 </tr>
448 </table>
449
450 </td>
451 </tr>
452 <tr>
453 <td width="15%" align="right" valign="top" class="summary">
454 <span class="summary-type">&nbsp;</span>
455 </td><td class="summary">
456 <table width="100%" cellpadding="0" cellspacing="0" border="0">
457 <tr>
458 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes" class="summary-sig-name">iter_retcodes</a>(<span class="summary-sig-arg">self</span>,
459 <span class="summary-sig-arg">match_keys</span>=<span class="summary-sig-default">None</span>)</span><br />
460 Returns an iterator over return codes and associated NodeSet.</td>
461 <td align="right" valign="top">
462 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_retcodes">source&nbsp;code</a></span>
463
464 </td>
465 </tr>
466 </table>
467
468 </td>
469 </tr>
470 <tr>
471 <td width="15%" align="right" valign="top" class="summary">
472 <span class="summary-type">&nbsp;</span>
473 </td><td class="summary">
474 <table width="100%" cellpadding="0" cellspacing="0" border="0">
475 <tr>
476 <td><span class="summary-sig"><a name="iter_node_retcodes"></a><span class="summary-sig-name">iter_node_retcodes</span>(<span class="summary-sig-arg">self</span>)</span><br />
477 Returns an iterator over each node and associated return code.</td>
478 <td align="right" valign="top">
479 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_node_retcodes">source&nbsp;code</a></span>
480
481 </td>
482 </tr>
483 </table>
484
485 </td>
486 </tr>
487 <tr>
488 <td width="15%" align="right" valign="top" class="summary">
489 <span class="summary-type">&nbsp;</span>
490 </td><td class="summary">
491 <table width="100%" cellpadding="0" cellspacing="0" border="0">
492 <tr>
493 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout" class="summary-sig-name">num_timeout</a>(<span class="summary-sig-arg">self</span>)</span><br />
494 Return the number of timed out &quot;keys&quot; (ie.</td>
495 <td align="right" valign="top">
496 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.num_timeout">source&nbsp;code</a></span>
497
498 </td>
499 </tr>
500 </table>
501
502 </td>
503 </tr>
504 <tr>
505 <td width="15%" align="right" valign="top" class="summary">
506 <span class="summary-type">&nbsp;</span>
507 </td><td class="summary">
508 <table width="100%" cellpadding="0" cellspacing="0" border="0">
509 <tr>
510 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout" class="summary-sig-name">iter_keys_timeout</a>(<span class="summary-sig-arg">self</span>)</span><br />
511 Iterate over timed out keys (ie.</td>
512 <td align="right" valign="top">
513 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_keys_timeout">source&nbsp;code</a></span>
514
515 </td>
516 </tr>
517 </table>
518
519 </td>
520 </tr>
521 <tr>
522 <td colspan="2" class="summary">
523 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a></code></b>:
524 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout">did_timeout</a></code>,
525 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers">flush_buffers</a></code>,
526 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors">flush_errors</a></code>
527 </p>
528 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a></code></b> (private):
529 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_engine_clients" onclick="show_private();">_engine_clients</a></code>,
530 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_invoke" onclick="show_private();">_invoke</a></code>,
531 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_set_task" onclick="show_private();">_set_task</a></code>,
532 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check" onclick="show_private();">_task_bound_check</a></code>
533 </p></div>
534 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
535 <code>__delattr__</code>,
536 <code>__format__</code>,
537 <code>__getattribute__</code>,
538 <code>__hash__</code>,
539 <code>__new__</code>,
540 <code>__reduce__</code>,
541 <code>__reduce_ex__</code>,
542 <code>__repr__</code>,
543 <code>__setattr__</code>,
544 <code>__sizeof__</code>,
545 <code>__str__</code>,
546 <code>__subclasshook__</code>
547 </p>
548 </td>
549 </tr>
550 </table>
551 <!-- ==================== PROPERTIES ==================== -->
552 <a name="section-Properties"></a>
553 <table class="summary" border="1" cellpadding="3"
554 cellspacing="0" width="100%" bgcolor="white">
555 <tr bgcolor="#70b0f0" class="table-header">
556 <td colspan="2" class="table-header">
557 <table border="0" cellpadding="0" cellspacing="0" width="100%">
558 <tr valign="top">
559 <td align="left"><span class="table-header">Properties</span></td>
560 <td align="right" valign="top"
561 ><span class="options">[<a href="#section-Properties"
562 class="privatelink" onclick="toggle_private();"
563 >hide private</a>]</span></td>
564 </tr>
565 </table>
566 </td>
567 </tr>
568 <tr>
569 <td colspan="2" class="summary">
570 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
571 <code>__class__</code>
572 </p>
573 </td>
574 </tr>
575 </table>
576 <!-- ==================== METHOD DETAILS ==================== -->
577 <a name="section-MethodDetails"></a>
578 <table class="details" border="1" cellpadding="3"
579 cellspacing="0" width="100%" bgcolor="white">
580 <tr bgcolor="#70b0f0" class="table-header">
581 <td colspan="2" class="table-header">
582 <table border="0" cellpadding="0" cellspacing="0" width="100%">
583 <tr valign="top">
584 <td align="left"><span class="table-header">Method Details</span></td>
585 <td align="right" valign="top"
586 ><span class="options">[<a href="#section-MethodDetails"
587 class="privatelink" onclick="toggle_private();"
588 >hide private</a>]</span></td>
589 </tr>
590 </table>
591 </td>
592 </tr>
593 </table>
594 <a name="__init__"></a>
595 <div>
596 <table class="details" border="1" cellpadding="3"
597 cellspacing="0" width="100%" bgcolor="white">
598 <tr><td>
599 <table width="100%" cellpadding="0" cellspacing="0" border="0">
600 <tr valign="top"><td>
601 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
602 <span class="sig-arg">handler</span>)</span>
603 <br /><em class="fname">(Constructor)</em>
604 </h3>
605 </td><td align="right" valign="top"
606 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.__init__">source&nbsp;code</a></span>&nbsp;
607 </td>
608 </tr></table>
609
610 <p>Initializer. Should be called from derived classes.</p>
611 <dl class="fields">
612 <dt>Overrides:
613 object.__init__
614 <dd><em class="note">(inherited documentation)</em></dd>
615 </dt>
616 </dl>
617 </td></tr></table>
618 </div>
619 <a name="last_read"></a>
620 <div>
621 <table class="details" border="1" cellpadding="3"
622 cellspacing="0" width="100%" bgcolor="white">
623 <tr><td>
624 <table width="100%" cellpadding="0" cellspacing="0" border="0">
625 <tr valign="top"><td>
626 <h3 class="epydoc"><span class="sig"><span class="sig-name">last_read</span>(<span class="sig-arg">self</span>)</span>
627 </h3>
628 </td><td align="right" valign="top"
629 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.last_read">source&nbsp;code</a></span>&nbsp;
630 </td>
631 </tr></table>
632
633 <p>Get last (node, buffer), useful in an EventHandler.ev_read()</p>
634 <dl class="fields">
635 <dt>Overrides:
636 <a href="ClusterShell.Worker.Worker.Worker-class.html#last_read">Worker.last_read</a>
637 </dt>
638 </dl>
639 </td></tr></table>
640 </div>
641 <a name="last_error"></a>
642 <div>
643 <table class="details" border="1" cellpadding="3"
644 cellspacing="0" width="100%" bgcolor="white">
645 <tr><td>
646 <table width="100%" cellpadding="0" cellspacing="0" border="0">
647 <tr valign="top"><td>
648 <h3 class="epydoc"><span class="sig"><span class="sig-name">last_error</span>(<span class="sig-arg">self</span>)</span>
649 </h3>
650 </td><td align="right" valign="top"
651 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.last_error">source&nbsp;code</a></span>&nbsp;
652 </td>
653 </tr></table>
654
655 <p>Get last (node, error_buffer), useful in an
656 EventHandler.ev_error()</p>
657 <dl class="fields">
658 <dt>Overrides:
659 <a href="ClusterShell.Worker.Worker.Worker-class.html#last_error">Worker.last_error</a>
660 </dt>
661 </dl>
662 </td></tr></table>
663 </div>
664 <a name="node_retcode"></a>
665 <div>
666 <table class="details" border="1" cellpadding="3"
667 cellspacing="0" width="100%" bgcolor="white">
668 <tr><td>
669 <table width="100%" cellpadding="0" cellspacing="0" border="0">
670 <tr valign="top"><td>
671 <h3 class="epydoc"><span class="sig"><span class="sig-name">node_retcode</span>(<span class="sig-arg">self</span>,
672 <span class="sig-arg">node</span>)</span>
673 </h3>
674 </td><td align="right" valign="top"
675 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.node_retcode">source&nbsp;code</a></span>&nbsp;
676 </td>
677 </tr></table>
678
679 <p>Get specific node return code. Raises a KeyError if command on node
680 has not yet finished (no return code available), or is node is not known
681 by this worker.</p>
682 <dl class="fields">
683 </dl>
684 </td></tr></table>
685 </div>
686 <a name="node_rc"></a>
687 <div>
688 <table class="details" border="1" cellpadding="3"
689 cellspacing="0" width="100%" bgcolor="white">
690 <tr><td>
691 <table width="100%" cellpadding="0" cellspacing="0" border="0">
692 <tr valign="top"><td>
693 <h3 class="epydoc"><span class="sig"><span class="sig-name">node_rc</span>(<span class="sig-arg">self</span>,
694 <span class="sig-arg">node</span>)</span>
695 </h3>
696 </td><td align="right" valign="top"
697 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.node_retcode">source&nbsp;code</a></span>&nbsp;
698 </td>
699 </tr></table>
700
701 <p>Get specific node return code. Raises a KeyError if command on node
702 has not yet finished (no return code available), or is node is not known
703 by this worker.</p>
704 <dl class="fields">
705 </dl>
706 </td></tr></table>
707 </div>
708 <a name="iter_buffers"></a>
709 <div>
710 <table class="details" border="1" cellpadding="3"
711 cellspacing="0" width="100%" bgcolor="white">
712 <tr><td>
713 <table width="100%" cellpadding="0" cellspacing="0" border="0">
714 <tr valign="top"><td>
715 <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_buffers</span>(<span class="sig-arg">self</span>,
716 <span class="sig-arg">match_keys</span>=<span class="sig-default">None</span>)</span>
717 </h3>
718 </td><td align="right" valign="top"
719 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_buffers">source&nbsp;code</a></span>&nbsp;
720 </td>
721 </tr></table>
722
723 <p>Returns an iterator over available buffers and associated NodeSet. If
724 the optional parameter match_keys is defined, only keys found in
725 match_keys are returned.</p>
726 <dl class="fields">
727 </dl>
728 </td></tr></table>
729 </div>
730 <a name="iter_errors"></a>
731 <div>
732 <table class="details" border="1" cellpadding="3"
733 cellspacing="0" width="100%" bgcolor="white">
734 <tr><td>
735 <table width="100%" cellpadding="0" cellspacing="0" border="0">
736 <tr valign="top"><td>
737 <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_errors</span>(<span class="sig-arg">self</span>,
738 <span class="sig-arg">match_keys</span>=<span class="sig-default">None</span>)</span>
739 </h3>
740 </td><td align="right" valign="top"
741 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_errors">source&nbsp;code</a></span>&nbsp;
742 </td>
743 </tr></table>
744
745 <p>Returns an iterator over available error buffers and associated
746 NodeSet. If the optional parameter match_keys is defined, only keys found
747 in match_keys are returned.</p>
748 <dl class="fields">
749 </dl>
750 </td></tr></table>
751 </div>
752 <a name="iter_retcodes"></a>
753 <div>
754 <table class="details" border="1" cellpadding="3"
755 cellspacing="0" width="100%" bgcolor="white">
756 <tr><td>
757 <table width="100%" cellpadding="0" cellspacing="0" border="0">
758 <tr valign="top"><td>
759 <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_retcodes</span>(<span class="sig-arg">self</span>,
760 <span class="sig-arg">match_keys</span>=<span class="sig-default">None</span>)</span>
761 </h3>
762 </td><td align="right" valign="top"
763 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_retcodes">source&nbsp;code</a></span>&nbsp;
764 </td>
765 </tr></table>
766
767 <p>Returns an iterator over return codes and associated NodeSet. If the
768 optional parameter match_keys is defined, only keys found in match_keys
769 are returned.</p>
770 <dl class="fields">
771 </dl>
772 </td></tr></table>
773 </div>
774 <a name="num_timeout"></a>
775 <div>
776 <table class="details" border="1" cellpadding="3"
777 cellspacing="0" width="100%" bgcolor="white">
778 <tr><td>
779 <table width="100%" cellpadding="0" cellspacing="0" border="0">
780 <tr valign="top"><td>
781 <h3 class="epydoc"><span class="sig"><span class="sig-name">num_timeout</span>(<span class="sig-arg">self</span>)</span>
782 </h3>
783 </td><td align="right" valign="top"
784 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.num_timeout">source&nbsp;code</a></span>&nbsp;
785 </td>
786 </tr></table>
787
788 <p>Return the number of timed out &quot;keys&quot; (ie. nodes) for this
789 worker.</p>
790 <dl class="fields">
791 </dl>
792 </td></tr></table>
793 </div>
794 <a name="iter_keys_timeout"></a>
795 <div>
796 <table class="details" border="1" cellpadding="3"
797 cellspacing="0" width="100%" bgcolor="white">
798 <tr><td>
799 <table width="100%" cellpadding="0" cellspacing="0" border="0">
800 <tr valign="top"><td>
801 <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_keys_timeout</span>(<span class="sig-arg">self</span>)</span>
802 </h3>
803 </td><td align="right" valign="top"
804 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#DistantWorker.iter_keys_timeout">source&nbsp;code</a></span>&nbsp;
805 </td>
806 </tr></table>
807
808 <p>Iterate over timed out keys (ie. nodes) for a specific worker.</p>
809 <dl class="fields">
810 </dl>
811 </td></tr></table>
812 </div>
813 <br />
814 <!-- ==================== NAVIGATION BAR ==================== -->
815 <table class="navbar" border="0" width="100%" cellpadding="0"
816 bgcolor="#a0c0ff" cellspacing="0">
817 <tr valign="middle">
818
819 <!-- Tree link -->
820 <th>&nbsp;&nbsp;&nbsp;<a
821 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
822
823 <!-- Index link -->
824 <th>&nbsp;&nbsp;&nbsp;<a
825 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
826
827 <!-- Help link -->
828 <th>&nbsp;&nbsp;&nbsp;<a
829 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
830
831 <!-- Project homepage -->
832 <th class="navbar" align="right" width="100%">
833 <table border="0" cellpadding="0" cellspacing="0">
834 <tr><th class="navbar" align="center"
835 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
836 </tr></table></th>
837 </tr>
838 </table>
839 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
840 <tr>
841 <td align="left" class="footer">
842 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
843 </td>
844 <td align="right" class="footer">
845 <a target="mainFrame" href="http://epydoc.sourceforge.net"
846 >http://epydoc.sourceforge.net</a>
847 </td>
848 </tr>
849 </table>
850
851 <script type="text/javascript">
852 <!--
853 // Private objects are initially displayed (because if
854 // javascript is turned off then we want them to be
855 // visible); but by default, we want to hide them. So hide
856 // them unless we have a cookie that says to show them.
857 checkCookie();
858 // -->
859 </script>
860 </body>
861 </html>
+0
-427
doc/epydoc/html/ClusterShell.Worker.Worker.Worker-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Worker.Worker</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Worker-module.html">Module&nbsp;Worker</a> ::
44 Class&nbsp;Worker
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class Worker</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_59" name="uml_class_diagram_for_clusters_59">
64 <area shape="rect" id="node1" href="ClusterShell.Worker.Worker.DistantWorker-class.html" title="Base class DistantWorker, which provides a useful set of setters/getters to use with distant workers like ssh or pdsh." alt="" coords="180,177,300,215"/>
65 <area shape="rect" id="node2" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html" title="ClusterShell pdsh&#45;based worker Class." alt="" coords="5,235,147,274"/>
66 <area shape="rect" id="node4" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html" title="ClusterShell ssh&#45;based worker Class." alt="" coords="176,235,304,274"/>
67 <area shape="rect" id="node3" href="ClusterShell.Worker.Worker.WorkerSimple-class.html" title="Implements a simple Worker being itself an EngineClient." alt="" coords="341,177,459,215"/>
68 <area shape="rect" id="node6" href="ClusterShell.Worker.Popen.WorkerPopen-class.html" title="Implements the Popen Worker." alt="" coords="333,235,491,274"/>
69 <area shape="rect" id="node227" href="ClusterShell.Worker.Worker.Worker-class.html#__init__" title="Initializer." alt="" coords="253,39,385,57"/>
70 <area shape="rect" id="node227" href="ClusterShell.Worker.Worker.Worker-class.html#last_read" title="Get last read message from event handler." alt="" coords="253,57,385,76"/>
71 <area shape="rect" id="node227" href="ClusterShell.Worker.Worker.Worker-class.html#last_error" title="Get last error message from event handler." alt="" coords="253,76,385,95"/>
72 <area shape="rect" id="node227" href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout" title="Return True if this worker aborted due to timeout." alt="" coords="253,95,385,113"/>
73 <area shape="rect" id="node227" href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers" title="Flush any messages associated to this worker." alt="" coords="253,113,385,132"/>
74 <area shape="rect" id="node227" href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors" title="Flush any error messages associated to this worker." alt="" coords="253,132,385,151"/>
75 <area shape="rect" id="node5" href="ClusterShell.Worker.Worker.Worker-class.html" title="Base class Worker." alt="" coords="241,6,396,157"/>
76 </map>
77 <img src="uml_class_diagram_for_clusters_59.png" alt='' usemap="#uml_class_diagram_for_clusters_59" ismap="ismap" class="graph-without-title" />
78 </center>
79 </center>
80 <hr />
81 <p>Base class Worker.</p>
82
83 <!-- ==================== INSTANCE METHODS ==================== -->
84 <a name="section-InstanceMethods"></a>
85 <table class="summary" border="1" cellpadding="3"
86 cellspacing="0" width="100%" bgcolor="white">
87 <tr bgcolor="#70b0f0" class="table-header">
88 <td colspan="2" class="table-header">
89 <table border="0" cellpadding="0" cellspacing="0" width="100%">
90 <tr valign="top">
91 <td align="left"><span class="table-header">Instance Methods</span></td>
92 <td align="right" valign="top"
93 ><span class="options">[<a href="#section-InstanceMethods"
94 class="privatelink" onclick="toggle_private();"
95 >hide private</a>]</span></td>
96 </tr>
97 </table>
98 </td>
99 </tr>
100 <tr>
101 <td width="15%" align="right" valign="top" class="summary">
102 <span class="summary-type">&nbsp;</span>
103 </td><td class="summary">
104 <table width="100%" cellpadding="0" cellspacing="0" border="0">
105 <tr>
106 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.Worker-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
107 <span class="summary-sig-arg">handler</span>)</span><br />
108 Initializer.</td>
109 <td align="right" valign="top">
110 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker.__init__">source&nbsp;code</a></span>
111
112 </td>
113 </tr>
114 </table>
115
116 </td>
117 </tr>
118 <tr class="private">
119 <td width="15%" align="right" valign="top" class="summary">
120 <span class="summary-type">&nbsp;</span>
121 </td><td class="summary">
122 <table width="100%" cellpadding="0" cellspacing="0" border="0">
123 <tr>
124 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.Worker-class.html#_set_task" class="summary-sig-name" onclick="show_private();">_set_task</a>(<span class="summary-sig-arg">self</span>,
125 <span class="summary-sig-arg">task</span>)</span><br />
126 Bind worker to task.</td>
127 <td align="right" valign="top">
128 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker._set_task">source&nbsp;code</a></span>
129
130 </td>
131 </tr>
132 </table>
133
134 </td>
135 </tr>
136 <tr class="private">
137 <td width="15%" align="right" valign="top" class="summary">
138 <span class="summary-type">&nbsp;</span>
139 </td><td class="summary">
140 <table width="100%" cellpadding="0" cellspacing="0" border="0">
141 <tr>
142 <td><span class="summary-sig"><a name="_task_bound_check"></a><span class="summary-sig-name">_task_bound_check</span>(<span class="summary-sig-arg">self</span>)</span></td>
143 <td align="right" valign="top">
144 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker._task_bound_check">source&nbsp;code</a></span>
145
146 </td>
147 </tr>
148 </table>
149
150 </td>
151 </tr>
152 <tr class="private">
153 <td width="15%" align="right" valign="top" class="summary">
154 <span class="summary-type">&nbsp;</span>
155 </td><td class="summary">
156 <table width="100%" cellpadding="0" cellspacing="0" border="0">
157 <tr>
158 <td><span class="summary-sig"><a name="_engine_clients"></a><span class="summary-sig-name">_engine_clients</span>(<span class="summary-sig-arg">self</span>)</span><br />
159 Return a list of underlying engine clients.</td>
160 <td align="right" valign="top">
161 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker._engine_clients">source&nbsp;code</a></span>
162
163 </td>
164 </tr>
165 </table>
166
167 </td>
168 </tr>
169 <tr class="private">
170 <td width="15%" align="right" valign="top" class="summary">
171 <span class="summary-type">&nbsp;</span>
172 </td><td class="summary">
173 <table width="100%" cellpadding="0" cellspacing="0" border="0">
174 <tr>
175 <td><span class="summary-sig"><a name="_invoke"></a><span class="summary-sig-name">_invoke</span>(<span class="summary-sig-arg">self</span>,
176 <span class="summary-sig-arg">ev_type</span>)</span><br />
177 Invoke user EventHandler method if needed.</td>
178 <td align="right" valign="top">
179 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker._invoke">source&nbsp;code</a></span>
180
181 </td>
182 </tr>
183 </table>
184
185 </td>
186 </tr>
187 <tr>
188 <td width="15%" align="right" valign="top" class="summary">
189 <span class="summary-type">&nbsp;</span>
190 </td><td class="summary">
191 <table width="100%" cellpadding="0" cellspacing="0" border="0">
192 <tr>
193 <td><span class="summary-sig"><a name="last_read"></a><span class="summary-sig-name">last_read</span>(<span class="summary-sig-arg">self</span>)</span><br />
194 Get last read message from event handler.</td>
195 <td align="right" valign="top">
196 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker.last_read">source&nbsp;code</a></span>
197
198 </td>
199 </tr>
200 </table>
201
202 </td>
203 </tr>
204 <tr>
205 <td width="15%" align="right" valign="top" class="summary">
206 <span class="summary-type">&nbsp;</span>
207 </td><td class="summary">
208 <table width="100%" cellpadding="0" cellspacing="0" border="0">
209 <tr>
210 <td><span class="summary-sig"><a name="last_error"></a><span class="summary-sig-name">last_error</span>(<span class="summary-sig-arg">self</span>)</span><br />
211 Get last error message from event handler.</td>
212 <td align="right" valign="top">
213 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker.last_error">source&nbsp;code</a></span>
214
215 </td>
216 </tr>
217 </table>
218
219 </td>
220 </tr>
221 <tr>
222 <td width="15%" align="right" valign="top" class="summary">
223 <span class="summary-type">&nbsp;</span>
224 </td><td class="summary">
225 <table width="100%" cellpadding="0" cellspacing="0" border="0">
226 <tr>
227 <td><span class="summary-sig"><a name="did_timeout"></a><span class="summary-sig-name">did_timeout</span>(<span class="summary-sig-arg">self</span>)</span><br />
228 Return True if this worker aborted due to timeout.</td>
229 <td align="right" valign="top">
230 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker.did_timeout">source&nbsp;code</a></span>
231
232 </td>
233 </tr>
234 </table>
235
236 </td>
237 </tr>
238 <tr>
239 <td width="15%" align="right" valign="top" class="summary">
240 <span class="summary-type">&nbsp;</span>
241 </td><td class="summary">
242 <table width="100%" cellpadding="0" cellspacing="0" border="0">
243 <tr>
244 <td><span class="summary-sig"><a name="flush_buffers"></a><span class="summary-sig-name">flush_buffers</span>(<span class="summary-sig-arg">self</span>)</span><br />
245 Flush any messages associated to this worker.</td>
246 <td align="right" valign="top">
247 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker.flush_buffers">source&nbsp;code</a></span>
248
249 </td>
250 </tr>
251 </table>
252
253 </td>
254 </tr>
255 <tr>
256 <td width="15%" align="right" valign="top" class="summary">
257 <span class="summary-type">&nbsp;</span>
258 </td><td class="summary">
259 <table width="100%" cellpadding="0" cellspacing="0" border="0">
260 <tr>
261 <td><span class="summary-sig"><a name="flush_errors"></a><span class="summary-sig-name">flush_errors</span>(<span class="summary-sig-arg">self</span>)</span><br />
262 Flush any error messages associated to this worker.</td>
263 <td align="right" valign="top">
264 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker.flush_errors">source&nbsp;code</a></span>
265
266 </td>
267 </tr>
268 </table>
269
270 </td>
271 </tr>
272 <tr>
273 <td colspan="2" class="summary">
274 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
275 <code>__delattr__</code>,
276 <code>__format__</code>,
277 <code>__getattribute__</code>,
278 <code>__hash__</code>,
279 <code>__new__</code>,
280 <code>__reduce__</code>,
281 <code>__reduce_ex__</code>,
282 <code>__repr__</code>,
283 <code>__setattr__</code>,
284 <code>__sizeof__</code>,
285 <code>__str__</code>,
286 <code>__subclasshook__</code>
287 </p>
288 </td>
289 </tr>
290 </table>
291 <!-- ==================== PROPERTIES ==================== -->
292 <a name="section-Properties"></a>
293 <table class="summary" border="1" cellpadding="3"
294 cellspacing="0" width="100%" bgcolor="white">
295 <tr bgcolor="#70b0f0" class="table-header">
296 <td colspan="2" class="table-header">
297 <table border="0" cellpadding="0" cellspacing="0" width="100%">
298 <tr valign="top">
299 <td align="left"><span class="table-header">Properties</span></td>
300 <td align="right" valign="top"
301 ><span class="options">[<a href="#section-Properties"
302 class="privatelink" onclick="toggle_private();"
303 >hide private</a>]</span></td>
304 </tr>
305 </table>
306 </td>
307 </tr>
308 <tr>
309 <td colspan="2" class="summary">
310 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
311 <code>__class__</code>
312 </p>
313 </td>
314 </tr>
315 </table>
316 <!-- ==================== METHOD DETAILS ==================== -->
317 <a name="section-MethodDetails"></a>
318 <table class="details" border="1" cellpadding="3"
319 cellspacing="0" width="100%" bgcolor="white">
320 <tr bgcolor="#70b0f0" class="table-header">
321 <td colspan="2" class="table-header">
322 <table border="0" cellpadding="0" cellspacing="0" width="100%">
323 <tr valign="top">
324 <td align="left"><span class="table-header">Method Details</span></td>
325 <td align="right" valign="top"
326 ><span class="options">[<a href="#section-MethodDetails"
327 class="privatelink" onclick="toggle_private();"
328 >hide private</a>]</span></td>
329 </tr>
330 </table>
331 </td>
332 </tr>
333 </table>
334 <a name="__init__"></a>
335 <div>
336 <table class="details" border="1" cellpadding="3"
337 cellspacing="0" width="100%" bgcolor="white">
338 <tr><td>
339 <table width="100%" cellpadding="0" cellspacing="0" border="0">
340 <tr valign="top"><td>
341 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
342 <span class="sig-arg">handler</span>)</span>
343 <br /><em class="fname">(Constructor)</em>
344 </h3>
345 </td><td align="right" valign="top"
346 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker.__init__">source&nbsp;code</a></span>&nbsp;
347 </td>
348 </tr></table>
349
350 <p>Initializer. Should be called from derived classes.</p>
351 <dl class="fields">
352 <dt>Overrides:
353 object.__init__
354 </dt>
355 </dl>
356 </td></tr></table>
357 </div>
358 <a name="_set_task"></a>
359 <div class="private">
360 <table class="details" border="1" cellpadding="3"
361 cellspacing="0" width="100%" bgcolor="white">
362 <tr><td>
363 <table width="100%" cellpadding="0" cellspacing="0" border="0">
364 <tr valign="top"><td>
365 <h3 class="epydoc"><span class="sig"><span class="sig-name">_set_task</span>(<span class="sig-arg">self</span>,
366 <span class="sig-arg">task</span>)</span>
367 </h3>
368 </td><td align="right" valign="top"
369 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#Worker._set_task">source&nbsp;code</a></span>&nbsp;
370 </td>
371 </tr></table>
372
373 <p>Bind worker to task. Called by task.schedule()</p>
374 <dl class="fields">
375 </dl>
376 </td></tr></table>
377 </div>
378 <br />
379 <!-- ==================== NAVIGATION BAR ==================== -->
380 <table class="navbar" border="0" width="100%" cellpadding="0"
381 bgcolor="#a0c0ff" cellspacing="0">
382 <tr valign="middle">
383
384 <!-- Tree link -->
385 <th>&nbsp;&nbsp;&nbsp;<a
386 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
387
388 <!-- Index link -->
389 <th>&nbsp;&nbsp;&nbsp;<a
390 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
391
392 <!-- Help link -->
393 <th>&nbsp;&nbsp;&nbsp;<a
394 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
395
396 <!-- Project homepage -->
397 <th class="navbar" align="right" width="100%">
398 <table border="0" cellpadding="0" cellspacing="0">
399 <tr><th class="navbar" align="center"
400 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
401 </tr></table></th>
402 </tr>
403 </table>
404 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
405 <tr>
406 <td align="left" class="footer">
407 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
408 </td>
409 <td align="right" class="footer">
410 <a target="mainFrame" href="http://epydoc.sourceforge.net"
411 >http://epydoc.sourceforge.net</a>
412 </td>
413 </tr>
414 </table>
415
416 <script type="text/javascript">
417 <!--
418 // Private objects are initially displayed (because if
419 // javascript is turned off then we want them to be
420 // visible); but by default, we want to hide them. So hide
421 // them unless we have a cookie that says to show them.
422 checkCookie();
423 // -->
424 </script>
425 </body>
426 </html>
+0
-212
doc/epydoc/html/ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Worker.WorkerBadArgumentError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Worker-module.html">Module&nbsp;Worker</a> ::
44 Class&nbsp;WorkerBadArgumentError
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class WorkerBadArgumentError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerBadArgumentError">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_60" name="uml_class_diagram_for_clusters_60">
64 <area shape="rect" id="node1" href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html" title="Bad argument in worker error." alt="" coords="8,507,181,551"/>
65 <area shape="rect" id="node2" href="ClusterShell.Worker.Worker.WorkerError-class.html" title="Generic worker error." alt="" coords="48,443,144,487"/>
66 <area shape="rect" id="node236" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
67 <area shape="rect" id="node236" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
68 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
69 <area shape="rect" id="node4" href="ClusterShell.Worker.Worker.WorkerException-class.html" title="Generic worker exception." alt="" coords="32,379,157,423"/>
70 <area shape="rect" id="node237" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
71 <area shape="rect" id="node237" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
72 <area shape="rect" id="node237" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
73 <area shape="rect" id="node237" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
74 <area shape="rect" id="node237" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
75 <area shape="rect" id="node237" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
76 <area shape="rect" id="node237" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
77 <area shape="rect" id="node237" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
78 <area shape="rect" id="node237" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
79 <area shape="rect" id="node237" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
80 <area shape="rect" id="node237" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
81 <area shape="rect" id="node237" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
82 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
83 </map>
84 <img src="uml_class_diagram_for_clusters_60.png" alt='' usemap="#uml_class_diagram_for_clusters_60" ismap="ismap" class="graph-without-title" />
85 </center>
86 </center>
87 <hr />
88 <p>Bad argument in worker error.</p>
89
90 <!-- ==================== INSTANCE METHODS ==================== -->
91 <a name="section-InstanceMethods"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Instance Methods</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-InstanceMethods"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td colspan="2" class="summary">
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
110 <code>__init__</code>,
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-212
doc/epydoc/html/ClusterShell.Worker.Worker.WorkerError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Worker.WorkerError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Worker-module.html">Module&nbsp;Worker</a> ::
44 Class&nbsp;WorkerError
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Worker.WorkerError-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class WorkerError</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerError">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_61" name="uml_class_diagram_for_clusters_61">
64 <area shape="rect" id="node1" href="ClusterShell.Worker.Worker.WorkerError-class.html" title="Generic worker error." alt="" coords="49,443,145,487"/>
65 <area shape="rect" id="node3" href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html" title="Bad argument in worker error." alt="" coords="5,507,189,546"/>
66 <area shape="rect" id="node2" href="ClusterShell.Worker.Worker.WorkerException-class.html" title="Generic worker exception." alt="" coords="33,379,159,423"/>
67 <area shape="rect" id="node240" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="33,316,160,335"/>
68 <area shape="rect" id="node240" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,160,353"/>
69 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,171,359"/>
70 <area shape="rect" id="node241" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="19,31,176,49"/>
71 <area shape="rect" id="node241" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="19,49,176,68"/>
72 <area shape="rect" id="node241" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="19,71,176,89"/>
73 <area shape="rect" id="node241" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="19,89,176,108"/>
74 <area shape="rect" id="node241" href="javascript:void(0);" title="x[y]" alt="" coords="19,108,176,127"/>
75 <area shape="rect" id="node241" href="javascript:void(0);" title="x[i:j]" alt="" coords="19,127,176,145"/>
76 <area shape="rect" id="node241" href="javascript:void(0);" title="helper for pickle" alt="" coords="19,145,176,164"/>
77 <area shape="rect" id="node241" href="javascript:void(0);" title="repr(x)" alt="" coords="19,164,176,183"/>
78 <area shape="rect" id="node241" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="19,183,176,201"/>
79 <area shape="rect" id="node241" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="19,201,176,220"/>
80 <area shape="rect" id="node241" href="javascript:void(0);" title="str(x)" alt="" coords="19,220,176,239"/>
81 <area shape="rect" id="node241" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="19,239,176,257"/>
82 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="7,6,188,263"/>
83 </map>
84 <img src="uml_class_diagram_for_clusters_61.png" alt='' usemap="#uml_class_diagram_for_clusters_61" ismap="ismap" class="graph-without-title" />
85 </center>
86 </center>
87 <hr />
88 <p>Generic worker error.</p>
89
90 <!-- ==================== INSTANCE METHODS ==================== -->
91 <a name="section-InstanceMethods"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Instance Methods</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-InstanceMethods"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td colspan="2" class="summary">
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
110 <code>__init__</code>,
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:21 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-212
doc/epydoc/html/ClusterShell.Worker.Worker.WorkerException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Worker.WorkerException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Worker-module.html">Module&nbsp;Worker</a> ::
44 Class&nbsp;WorkerException
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Worker.WorkerException-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class WorkerException</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerException">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_62" name="uml_class_diagram_for_clusters_62">
64 <area shape="rect" id="node1" href="ClusterShell.Worker.Worker.WorkerException-class.html" title="Generic worker exception." alt="" coords="33,379,159,423"/>
65 <area shape="rect" id="node4" href="ClusterShell.Worker.Worker.WorkerError-class.html" title="Generic worker error." alt="" coords="44,443,151,482"/>
66 <area shape="rect" id="node244" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="33,316,160,335"/>
67 <area shape="rect" id="node244" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,160,353"/>
68 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,171,359"/>
69 <area shape="rect" id="node3" href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html" title="Bad argument in worker error." alt="" coords="5,502,189,541"/>
70 <area shape="rect" id="node245" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="19,31,176,49"/>
71 <area shape="rect" id="node245" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="19,49,176,68"/>
72 <area shape="rect" id="node245" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="19,71,176,89"/>
73 <area shape="rect" id="node245" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="19,89,176,108"/>
74 <area shape="rect" id="node245" href="javascript:void(0);" title="x[y]" alt="" coords="19,108,176,127"/>
75 <area shape="rect" id="node245" href="javascript:void(0);" title="x[i:j]" alt="" coords="19,127,176,145"/>
76 <area shape="rect" id="node245" href="javascript:void(0);" title="helper for pickle" alt="" coords="19,145,176,164"/>
77 <area shape="rect" id="node245" href="javascript:void(0);" title="repr(x)" alt="" coords="19,164,176,183"/>
78 <area shape="rect" id="node245" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="19,183,176,201"/>
79 <area shape="rect" id="node245" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="19,201,176,220"/>
80 <area shape="rect" id="node245" href="javascript:void(0);" title="str(x)" alt="" coords="19,220,176,239"/>
81 <area shape="rect" id="node245" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="19,239,176,257"/>
82 <area shape="rect" id="node5" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="7,6,188,263"/>
83 </map>
84 <img src="uml_class_diagram_for_clusters_62.png" alt='' usemap="#uml_class_diagram_for_clusters_62" ismap="ismap" class="graph-without-title" />
85 </center>
86 </center>
87 <hr />
88 <p>Generic worker exception.</p>
89
90 <!-- ==================== INSTANCE METHODS ==================== -->
91 <a name="section-InstanceMethods"></a>
92 <table class="summary" border="1" cellpadding="3"
93 cellspacing="0" width="100%" bgcolor="white">
94 <tr bgcolor="#70b0f0" class="table-header">
95 <td colspan="2" class="table-header">
96 <table border="0" cellpadding="0" cellspacing="0" width="100%">
97 <tr valign="top">
98 <td align="left"><span class="table-header">Instance Methods</span></td>
99 <td align="right" valign="top"
100 ><span class="options">[<a href="#section-InstanceMethods"
101 class="privatelink" onclick="toggle_private();"
102 >hide private</a>]</span></td>
103 </tr>
104 </table>
105 </td>
106 </tr>
107 <tr>
108 <td colspan="2" class="summary">
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
110 <code>__init__</code>,
111 <code>__new__</code>
112 </p>
113 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
114 <code>__delattr__</code>,
115 <code>__getattribute__</code>,
116 <code>__getitem__</code>,
117 <code>__getslice__</code>,
118 <code>__reduce__</code>,
119 <code>__repr__</code>,
120 <code>__setattr__</code>,
121 <code>__setstate__</code>,
122 <code>__str__</code>,
123 <code>__unicode__</code>
124 </p>
125 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
126 <code>__format__</code>,
127 <code>__hash__</code>,
128 <code>__reduce_ex__</code>,
129 <code>__sizeof__</code>,
130 <code>__subclasshook__</code>
131 </p>
132 </td>
133 </tr>
134 </table>
135 <!-- ==================== PROPERTIES ==================== -->
136 <a name="section-Properties"></a>
137 <table class="summary" border="1" cellpadding="3"
138 cellspacing="0" width="100%" bgcolor="white">
139 <tr bgcolor="#70b0f0" class="table-header">
140 <td colspan="2" class="table-header">
141 <table border="0" cellpadding="0" cellspacing="0" width="100%">
142 <tr valign="top">
143 <td align="left"><span class="table-header">Properties</span></td>
144 <td align="right" valign="top"
145 ><span class="options">[<a href="#section-Properties"
146 class="privatelink" onclick="toggle_private();"
147 >hide private</a>]</span></td>
148 </tr>
149 </table>
150 </td>
151 </tr>
152 <tr>
153 <td colspan="2" class="summary">
154 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
155 <code>args</code>,
156 <code>message</code>
157 </p>
158 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
159 <code>__class__</code>
160 </p>
161 </td>
162 </tr>
163 </table>
164 <!-- ==================== NAVIGATION BAR ==================== -->
165 <table class="navbar" border="0" width="100%" cellpadding="0"
166 bgcolor="#a0c0ff" cellspacing="0">
167 <tr valign="middle">
168
169 <!-- Tree link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Index link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Help link -->
178 <th>&nbsp;&nbsp;&nbsp;<a
179 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
180
181 <!-- Project homepage -->
182 <th class="navbar" align="right" width="100%">
183 <table border="0" cellpadding="0" cellspacing="0">
184 <tr><th class="navbar" align="center"
185 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
186 </tr></table></th>
187 </tr>
188 </table>
189 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
190 <tr>
191 <td align="left" class="footer">
192 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
193 </td>
194 <td align="right" class="footer">
195 <a target="mainFrame" href="http://epydoc.sourceforge.net"
196 >http://epydoc.sourceforge.net</a>
197 </td>
198 </tr>
199 </table>
200
201 <script type="text/javascript">
202 <!--
203 // Private objects are initially displayed (because if
204 // javascript is turned off then we want them to be
205 // visible); but by default, we want to hide them. So hide
206 // them unless we have a cookie that says to show them.
207 checkCookie();
208 // -->
209 </script>
210 </body>
211 </html>
+0
-967
doc/epydoc/html/ClusterShell.Worker.Worker.WorkerSimple-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell.Worker.Worker.WorkerSimple</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="ClusterShell-module.html">Package&nbsp;ClusterShell</a> ::
42 <a href="ClusterShell.Worker-module.html">Package&nbsp;Worker</a> ::
43 <a href="ClusterShell.Worker.Worker-module.html">Module&nbsp;Worker</a> ::
44 Class&nbsp;WorkerSimple
45 </span>
46 </td>
47 <td>
48 <table cellpadding="0" cellspacing="0">
49 <!-- hide/show private -->
50 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
51 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
52 <tr><td align="right"><span class="options"
53 >[<a href="frames.html" target="_top">frames</a
54 >]&nbsp;|&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html"
55 target="_top">no&nbsp;frames</a>]</span></td></tr>
56 </table>
57 </td>
58 </tr>
59 </table>
60 <!-- ==================== CLASS DESCRIPTION ==================== -->
61 <h1 class="epydoc">Class WorkerSimple</h1><p class="nomargin-top"><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple">source&nbsp;code</a></span></p>
62 <center>
63 <center> <map id="uml_class_diagram_for_clusters_63" name="uml_class_diagram_for_clusters_63">
64 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__" title="Initialize worker." alt="" coords="17,268,623,287"/>
65 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_key" title="Source key for this worker is free for use." alt="" coords="17,287,623,305"/>
66 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno" title="Returns the standard error reader file descriptor as an integer." alt="" coords="17,305,623,324"/>
67 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno" title="Returns the reader file descriptor as an integer." alt="" coords="17,324,623,343"/>
68 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno" title="Returns the writer file descriptor as an integer." alt="" coords="17,343,623,361"/>
69 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read" title="Read last msg, useful in an EventHandler." alt="" coords="17,361,623,380"/>
70 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error" title="Get last error message from event handler." alt="" coords="17,380,623,399"/>
71 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#read" title="Read worker buffer." alt="" coords="17,399,623,417"/>
72 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error" title="Read worker error buffer." alt="" coords="17,417,623,436"/>
73 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#write" title="Write to worker." alt="" coords="17,436,623,455"/>
74 <area shape="rect" id="node248" href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof" title="Tell worker to close its writer file descriptor once flushed." alt="" coords="17,455,623,473"/>
75 <area shape="rect" id="node1" href="ClusterShell.Worker.Worker.WorkerSimple-class.html" title="Implements a simple Worker being itself an EngineClient." alt="" coords="5,235,635,479"/>
76 <area shape="rect" id="node4" href="ClusterShell.Worker.Popen.WorkerPopen-class.html" title="Implements the Popen Worker." alt="" coords="241,499,399,538"/>
77 <area shape="rect" id="node2" href="ClusterShell.Worker.EngineClient.EngineClient-class.html" title="Abstract class EngineClient." alt="" coords="137,146,316,190"/>
78 <area shape="rect" id="node251" href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout" title="Return True if this worker aborted due to timeout." alt="" coords="357,153,469,172"/>
79 <area shape="rect" id="node251" href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers" title="Flush any messages associated to this worker." alt="" coords="357,172,469,191"/>
80 <area shape="rect" id="node251" href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors" title="Flush any error messages associated to this worker." alt="" coords="357,191,469,209"/>
81 <area shape="rect" id="node3" href="ClusterShell.Worker.Worker.Worker-class.html" title="Base class Worker." alt="" coords="345,121,481,215"/>
82 <area shape="rect" id="node250" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate" title="Invalidates a timer object, stopping it from ever firing again." alt="" coords="108,39,345,57"/>
83 <area shape="rect" id="node250" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid" title="Returns a boolean value that indicates whether an EngineTimer object is &#160;valid and able to fire." alt="" coords="108,57,345,76"/>
84 <area shape="rect" id="node250" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire" title="Set the next firing delay in seconds for an EngineTimer object." alt="" coords="108,76,345,95"/>
85 <area shape="rect" id="node5" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html" title="Abstract class for ClusterShell&#39;s engine timer." alt="" coords="96,6,357,101"/>
86 </map>
87 <img src="uml_class_diagram_for_clusters_63.png" alt='' usemap="#uml_class_diagram_for_clusters_63" ismap="ismap" class="graph-without-title" />
88 </center>
89 </center>
90 <hr />
91 <p>Implements a simple Worker being itself an EngineClient.</p>
92
93 <!-- ==================== INSTANCE METHODS ==================== -->
94 <a name="section-InstanceMethods"></a>
95 <table class="summary" border="1" cellpadding="3"
96 cellspacing="0" width="100%" bgcolor="white">
97 <tr bgcolor="#70b0f0" class="table-header">
98 <td colspan="2" class="table-header">
99 <table border="0" cellpadding="0" cellspacing="0" width="100%">
100 <tr valign="top">
101 <td align="left"><span class="table-header">Instance Methods</span></td>
102 <td align="right" valign="top"
103 ><span class="options">[<a href="#section-InstanceMethods"
104 class="privatelink" onclick="toggle_private();"
105 >hide private</a>]</span></td>
106 </tr>
107 </table>
108 </td>
109 </tr>
110 <tr>
111 <td width="15%" align="right" valign="top" class="summary">
112 <span class="summary-type">&nbsp;</span>
113 </td><td class="summary">
114 <table width="100%" cellpadding="0" cellspacing="0" border="0">
115 <tr>
116 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
117 <span class="summary-sig-arg">file_reader</span>,
118 <span class="summary-sig-arg">file_writer</span>,
119 <span class="summary-sig-arg">file_error</span>,
120 <span class="summary-sig-arg">key</span>,
121 <span class="summary-sig-arg">handler</span>,
122 <span class="summary-sig-arg">stderr</span>=<span class="summary-sig-default">False</span>,
123 <span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">-1</span>,
124 <span class="summary-sig-arg">autoclose</span>=<span class="summary-sig-default">False</span>)</span><br />
125 Initialize worker.</td>
126 <td align="right" valign="top">
127 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.__init__">source&nbsp;code</a></span>
128
129 </td>
130 </tr>
131 </table>
132
133 </td>
134 </tr>
135 <tr class="private">
136 <td width="15%" align="right" valign="top" class="summary">
137 <span class="summary-type">&nbsp;</span>
138 </td><td class="summary">
139 <table width="100%" cellpadding="0" cellspacing="0" border="0">
140 <tr>
141 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_engine_clients" class="summary-sig-name" onclick="show_private();">_engine_clients</a>(<span class="summary-sig-arg">self</span>)</span><br />
142 Return a list of underlying engine clients.</td>
143 <td align="right" valign="top">
144 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._engine_clients">source&nbsp;code</a></span>
145
146 </td>
147 </tr>
148 </table>
149
150 </td>
151 </tr>
152 <tr>
153 <td width="15%" align="right" valign="top" class="summary">
154 <span class="summary-type">&nbsp;</span>
155 </td><td class="summary">
156 <table width="100%" cellpadding="0" cellspacing="0" border="0">
157 <tr>
158 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_key" class="summary-sig-name">set_key</a>(<span class="summary-sig-arg">self</span>,
159 <span class="summary-sig-arg">key</span>)</span><br />
160 Source key for this worker is free for use.</td>
161 <td align="right" valign="top">
162 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.set_key">source&nbsp;code</a></span>
163
164 </td>
165 </tr>
166 </table>
167
168 </td>
169 </tr>
170 <tr class="private">
171 <td width="15%" align="right" valign="top" class="summary">
172 <span class="summary-type">&nbsp;</span>
173 </td><td class="summary">
174 <table width="100%" cellpadding="0" cellspacing="0" border="0">
175 <tr>
176 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_start" class="summary-sig-name" onclick="show_private();">_start</a>(<span class="summary-sig-arg">self</span>)</span><br />
177 Start worker.</td>
178 <td align="right" valign="top">
179 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._start">source&nbsp;code</a></span>
180
181 </td>
182 </tr>
183 </table>
184
185 </td>
186 </tr>
187 <tr>
188 <td width="15%" align="right" valign="top" class="summary">
189 <span class="summary-type">&nbsp;</span>
190 </td><td class="summary">
191 <table width="100%" cellpadding="0" cellspacing="0" border="0">
192 <tr>
193 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno" class="summary-sig-name">error_fileno</a>(<span class="summary-sig-arg">self</span>)</span><br />
194 Returns the standard error reader file descriptor as an integer.</td>
195 <td align="right" valign="top">
196 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.error_fileno">source&nbsp;code</a></span>
197
198 </td>
199 </tr>
200 </table>
201
202 </td>
203 </tr>
204 <tr>
205 <td width="15%" align="right" valign="top" class="summary">
206 <span class="summary-type">&nbsp;</span>
207 </td><td class="summary">
208 <table width="100%" cellpadding="0" cellspacing="0" border="0">
209 <tr>
210 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno" class="summary-sig-name">reader_fileno</a>(<span class="summary-sig-arg">self</span>)</span><br />
211 Returns the reader file descriptor as an integer.</td>
212 <td align="right" valign="top">
213 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.reader_fileno">source&nbsp;code</a></span>
214
215 </td>
216 </tr>
217 </table>
218
219 </td>
220 </tr>
221 <tr>
222 <td width="15%" align="right" valign="top" class="summary">
223 <span class="summary-type">&nbsp;</span>
224 </td><td class="summary">
225 <table width="100%" cellpadding="0" cellspacing="0" border="0">
226 <tr>
227 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno" class="summary-sig-name">writer_fileno</a>(<span class="summary-sig-arg">self</span>)</span><br />
228 Returns the writer file descriptor as an integer.</td>
229 <td align="right" valign="top">
230 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.writer_fileno">source&nbsp;code</a></span>
231
232 </td>
233 </tr>
234 </table>
235
236 </td>
237 </tr>
238 <tr class="private">
239 <td width="15%" align="right" valign="top" class="summary">
240 <span class="summary-type">&nbsp;</span>
241 </td><td class="summary">
242 <table width="100%" cellpadding="0" cellspacing="0" border="0">
243 <tr>
244 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_read" class="summary-sig-name" onclick="show_private();">_read</a>(<span class="summary-sig-arg">self</span>,
245 <span class="summary-sig-arg">size</span>=<span class="summary-sig-default">4096</span>)</span><br />
246 Read data from process.</td>
247 <td align="right" valign="top">
248 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._read">source&nbsp;code</a></span>
249
250 </td>
251 </tr>
252 </table>
253
254 </td>
255 </tr>
256 <tr class="private">
257 <td width="15%" align="right" valign="top" class="summary">
258 <span class="summary-type">&nbsp;</span>
259 </td><td class="summary">
260 <table width="100%" cellpadding="0" cellspacing="0" border="0">
261 <tr>
262 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_readerr" class="summary-sig-name" onclick="show_private();">_readerr</a>(<span class="summary-sig-arg">self</span>,
263 <span class="summary-sig-arg">size</span>=<span class="summary-sig-default">4096</span>)</span><br />
264 Read error data from process.</td>
265 <td align="right" valign="top">
266 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._readerr">source&nbsp;code</a></span>
267
268 </td>
269 </tr>
270 </table>
271
272 </td>
273 </tr>
274 <tr class="private">
275 <td width="15%" align="right" valign="top" class="summary">
276 <span class="summary-type">&nbsp;</span>
277 </td><td class="summary">
278 <table width="100%" cellpadding="0" cellspacing="0" border="0">
279 <tr>
280 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_close" class="summary-sig-name" onclick="show_private();">_close</a>(<span class="summary-sig-arg">self</span>,
281 <span class="summary-sig-arg">force</span>,
282 <span class="summary-sig-arg">timeout</span>)</span><br />
283 Close worker.</td>
284 <td align="right" valign="top">
285 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._close">source&nbsp;code</a></span>
286
287 </td>
288 </tr>
289 </table>
290
291 </td>
292 </tr>
293 <tr class="private">
294 <td width="15%" align="right" valign="top" class="summary">
295 <span class="summary-type">&nbsp;</span>
296 </td><td class="summary">
297 <table width="100%" cellpadding="0" cellspacing="0" border="0">
298 <tr>
299 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read" class="summary-sig-name" onclick="show_private();">_handle_read</a>(<span class="summary-sig-arg">self</span>)</span><br />
300 Engine is telling us there is data available for reading.</td>
301 <td align="right" valign="top">
302 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._handle_read">source&nbsp;code</a></span>
303
304 </td>
305 </tr>
306 </table>
307
308 </td>
309 </tr>
310 <tr class="private">
311 <td width="15%" align="right" valign="top" class="summary">
312 <span class="summary-type">&nbsp;</span>
313 </td><td class="summary">
314 <table width="100%" cellpadding="0" cellspacing="0" border="0">
315 <tr>
316 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_error" class="summary-sig-name" onclick="show_private();">_handle_error</a>(<span class="summary-sig-arg">self</span>)</span><br />
317 Engine is telling us there is error available for reading.</td>
318 <td align="right" valign="top">
319 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._handle_error">source&nbsp;code</a></span>
320
321 </td>
322 </tr>
323 </table>
324
325 </td>
326 </tr>
327 <tr>
328 <td width="15%" align="right" valign="top" class="summary">
329 <span class="summary-type">&nbsp;</span>
330 </td><td class="summary">
331 <table width="100%" cellpadding="0" cellspacing="0" border="0">
332 <tr>
333 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read" class="summary-sig-name">last_read</a>(<span class="summary-sig-arg">self</span>)</span><br />
334 Read last msg, useful in an EventHandler.</td>
335 <td align="right" valign="top">
336 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.last_read">source&nbsp;code</a></span>
337
338 </td>
339 </tr>
340 </table>
341
342 </td>
343 </tr>
344 <tr>
345 <td width="15%" align="right" valign="top" class="summary">
346 <span class="summary-type">&nbsp;</span>
347 </td><td class="summary">
348 <table width="100%" cellpadding="0" cellspacing="0" border="0">
349 <tr>
350 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error" class="summary-sig-name">last_error</a>(<span class="summary-sig-arg">self</span>)</span><br />
351 Get last error message from event handler.</td>
352 <td align="right" valign="top">
353 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.last_error">source&nbsp;code</a></span>
354
355 </td>
356 </tr>
357 </table>
358
359 </td>
360 </tr>
361 <tr class="private">
362 <td width="15%" align="right" valign="top" class="summary">
363 <span class="summary-type">&nbsp;</span>
364 </td><td class="summary">
365 <table width="100%" cellpadding="0" cellspacing="0" border="0">
366 <tr>
367 <td><span class="summary-sig"><a name="_on_msgline"></a><span class="summary-sig-name">_on_msgline</span>(<span class="summary-sig-arg">self</span>,
368 <span class="summary-sig-arg">msg</span>)</span><br />
369 Add a message.</td>
370 <td align="right" valign="top">
371 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._on_msgline">source&nbsp;code</a></span>
372
373 </td>
374 </tr>
375 </table>
376
377 </td>
378 </tr>
379 <tr class="private">
380 <td width="15%" align="right" valign="top" class="summary">
381 <span class="summary-type">&nbsp;</span>
382 </td><td class="summary">
383 <table width="100%" cellpadding="0" cellspacing="0" border="0">
384 <tr>
385 <td><span class="summary-sig"><a name="_on_errmsgline"></a><span class="summary-sig-name">_on_errmsgline</span>(<span class="summary-sig-arg">self</span>,
386 <span class="summary-sig-arg">msg</span>)</span><br />
387 Add a message.</td>
388 <td align="right" valign="top">
389 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._on_errmsgline">source&nbsp;code</a></span>
390
391 </td>
392 </tr>
393 </table>
394
395 </td>
396 </tr>
397 <tr class="private">
398 <td width="15%" align="right" valign="top" class="summary">
399 <span class="summary-type">&nbsp;</span>
400 </td><td class="summary">
401 <table width="100%" cellpadding="0" cellspacing="0" border="0">
402 <tr>
403 <td><span class="summary-sig"><a name="_on_timeout"></a><span class="summary-sig-name">_on_timeout</span>(<span class="summary-sig-arg">self</span>)</span><br />
404 Update on timeout.</td>
405 <td align="right" valign="top">
406 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._on_timeout">source&nbsp;code</a></span>
407
408 </td>
409 </tr>
410 </table>
411
412 </td>
413 </tr>
414 <tr>
415 <td width="15%" align="right" valign="top" class="summary">
416 <span class="summary-type">&nbsp;</span>
417 </td><td class="summary">
418 <table width="100%" cellpadding="0" cellspacing="0" border="0">
419 <tr>
420 <td><span class="summary-sig"><a name="read"></a><span class="summary-sig-name">read</span>(<span class="summary-sig-arg">self</span>)</span><br />
421 Read worker buffer.</td>
422 <td align="right" valign="top">
423 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.read">source&nbsp;code</a></span>
424
425 </td>
426 </tr>
427 </table>
428
429 </td>
430 </tr>
431 <tr>
432 <td width="15%" align="right" valign="top" class="summary">
433 <span class="summary-type">&nbsp;</span>
434 </td><td class="summary">
435 <table width="100%" cellpadding="0" cellspacing="0" border="0">
436 <tr>
437 <td><span class="summary-sig"><a name="error"></a><span class="summary-sig-name">error</span>(<span class="summary-sig-arg">self</span>)</span><br />
438 Read worker error buffer.</td>
439 <td align="right" valign="top">
440 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.error">source&nbsp;code</a></span>
441
442 </td>
443 </tr>
444 </table>
445
446 </td>
447 </tr>
448 <tr>
449 <td width="15%" align="right" valign="top" class="summary">
450 <span class="summary-type">&nbsp;</span>
451 </td><td class="summary">
452 <table width="100%" cellpadding="0" cellspacing="0" border="0">
453 <tr>
454 <td><span class="summary-sig"><a name="write"></a><span class="summary-sig-name">write</span>(<span class="summary-sig-arg">self</span>,
455 <span class="summary-sig-arg">buf</span>)</span><br />
456 Write to worker.</td>
457 <td align="right" valign="top">
458 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.write">source&nbsp;code</a></span>
459
460 </td>
461 </tr>
462 </table>
463
464 </td>
465 </tr>
466 <tr>
467 <td width="15%" align="right" valign="top" class="summary">
468 <span class="summary-type">&nbsp;</span>
469 </td><td class="summary">
470 <table width="100%" cellpadding="0" cellspacing="0" border="0">
471 <tr>
472 <td><span class="summary-sig"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof" class="summary-sig-name">set_write_eof</a>(<span class="summary-sig-arg">self</span>)</span><br />
473 Tell worker to close its writer file descriptor once flushed.</td>
474 <td align="right" valign="top">
475 <span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.set_write_eof">source&nbsp;code</a></span>
476
477 </td>
478 </tr>
479 </table>
480
481 </td>
482 </tr>
483 <tr>
484 <td colspan="2" class="summary">
485 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient.EngineClient</a></code></b> (private):
486 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer" onclick="show_private();">_close_writer</a></code>,
487 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock" onclick="show_private();">_exec_nonblock</a></code>,
488 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire" onclick="show_private();">_fire</a></code>,
489 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write" onclick="show_private();">_handle_write</a></code>,
490 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines" onclick="show_private();">_readerrlines</a></code>,
491 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines" onclick="show_private();">_readlines</a></code>,
492 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading" onclick="show_private();">_set_reading</a></code>,
493 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error" onclick="show_private();">_set_reading_error</a></code>,
494 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof" onclick="show_private();">_set_write_eof</a></code>,
495 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing" onclick="show_private();">_set_writing</a></code>,
496 <code><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_write" onclick="show_private();">_write</a></code>
497 </p></div>
498 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b>:
499 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate</a></code>,
500 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid</a></code>,
501 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire</a></code>
502 </p>
503 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">Engine.Engine.EngineBaseTimer</a></code></b> (private):
504 <code><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine" onclick="show_private();">_set_engine</a></code>
505 </p></div>
506 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a></code></b>:
507 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout">did_timeout</a></code>,
508 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers">flush_buffers</a></code>,
509 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors">flush_errors</a></code>
510 </p>
511 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a></code></b> (private):
512 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_invoke" onclick="show_private();">_invoke</a></code>,
513 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_set_task" onclick="show_private();">_set_task</a></code>,
514 <code><a href="ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check" onclick="show_private();">_task_bound_check</a></code>
515 </p></div>
516 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
517 <code>__delattr__</code>,
518 <code>__format__</code>,
519 <code>__getattribute__</code>,
520 <code>__hash__</code>,
521 <code>__new__</code>,
522 <code>__reduce__</code>,
523 <code>__reduce_ex__</code>,
524 <code>__repr__</code>,
525 <code>__setattr__</code>,
526 <code>__sizeof__</code>,
527 <code>__str__</code>,
528 <code>__subclasshook__</code>
529 </p>
530 </td>
531 </tr>
532 </table>
533 <!-- ==================== PROPERTIES ==================== -->
534 <a name="section-Properties"></a>
535 <table class="summary" border="1" cellpadding="3"
536 cellspacing="0" width="100%" bgcolor="white">
537 <tr bgcolor="#70b0f0" class="table-header">
538 <td colspan="2" class="table-header">
539 <table border="0" cellpadding="0" cellspacing="0" width="100%">
540 <tr valign="top">
541 <td align="left"><span class="table-header">Properties</span></td>
542 <td align="right" valign="top"
543 ><span class="options">[<a href="#section-Properties"
544 class="privatelink" onclick="toggle_private();"
545 >hide private</a>]</span></td>
546 </tr>
547 </table>
548 </td>
549 </tr>
550 <tr>
551 <td colspan="2" class="summary">
552 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
553 <code>__class__</code>
554 </p>
555 </td>
556 </tr>
557 </table>
558 <!-- ==================== METHOD DETAILS ==================== -->
559 <a name="section-MethodDetails"></a>
560 <table class="details" border="1" cellpadding="3"
561 cellspacing="0" width="100%" bgcolor="white">
562 <tr bgcolor="#70b0f0" class="table-header">
563 <td colspan="2" class="table-header">
564 <table border="0" cellpadding="0" cellspacing="0" width="100%">
565 <tr valign="top">
566 <td align="left"><span class="table-header">Method Details</span></td>
567 <td align="right" valign="top"
568 ><span class="options">[<a href="#section-MethodDetails"
569 class="privatelink" onclick="toggle_private();"
570 >hide private</a>]</span></td>
571 </tr>
572 </table>
573 </td>
574 </tr>
575 </table>
576 <a name="__init__"></a>
577 <div>
578 <table class="details" border="1" cellpadding="3"
579 cellspacing="0" width="100%" bgcolor="white">
580 <tr><td>
581 <table width="100%" cellpadding="0" cellspacing="0" border="0">
582 <tr valign="top"><td>
583 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
584 <span class="sig-arg">file_reader</span>,
585 <span class="sig-arg">file_writer</span>,
586 <span class="sig-arg">file_error</span>,
587 <span class="sig-arg">key</span>,
588 <span class="sig-arg">handler</span>,
589 <span class="sig-arg">stderr</span>=<span class="sig-default">False</span>,
590 <span class="sig-arg">timeout</span>=<span class="sig-default">-1</span>,
591 <span class="sig-arg">autoclose</span>=<span class="sig-default">False</span>)</span>
592 <br /><em class="fname">(Constructor)</em>
593 </h3>
594 </td><td align="right" valign="top"
595 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.__init__">source&nbsp;code</a></span>&nbsp;
596 </td>
597 </tr></table>
598
599 <p>Initialize worker.</p>
600 <dl class="fields">
601 <dt>Overrides:
602 object.__init__
603 </dt>
604 </dl>
605 </td></tr></table>
606 </div>
607 <a name="_engine_clients"></a>
608 <div class="private">
609 <table class="details" border="1" cellpadding="3"
610 cellspacing="0" width="100%" bgcolor="white">
611 <tr><td>
612 <table width="100%" cellpadding="0" cellspacing="0" border="0">
613 <tr valign="top"><td>
614 <h3 class="epydoc"><span class="sig"><span class="sig-name">_engine_clients</span>(<span class="sig-arg">self</span>)</span>
615 </h3>
616 </td><td align="right" valign="top"
617 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._engine_clients">source&nbsp;code</a></span>&nbsp;
618 </td>
619 </tr></table>
620
621 <p>Return a list of underlying engine clients.</p>
622 <dl class="fields">
623 <dt>Overrides:
624 <a href="ClusterShell.Worker.Worker.Worker-class.html#_engine_clients" onclick="show_private();">Worker._engine_clients</a>
625 </dt>
626 </dl>
627 </td></tr></table>
628 </div>
629 <a name="set_key"></a>
630 <div>
631 <table class="details" border="1" cellpadding="3"
632 cellspacing="0" width="100%" bgcolor="white">
633 <tr><td>
634 <table width="100%" cellpadding="0" cellspacing="0" border="0">
635 <tr valign="top"><td>
636 <h3 class="epydoc"><span class="sig"><span class="sig-name">set_key</span>(<span class="sig-arg">self</span>,
637 <span class="sig-arg">key</span>)</span>
638 </h3>
639 </td><td align="right" valign="top"
640 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.set_key">source&nbsp;code</a></span>&nbsp;
641 </td>
642 </tr></table>
643
644 <p>Source key for this worker is free for use. Use this method to set the
645 custom source key for this worker.</p>
646 <dl class="fields">
647 </dl>
648 </td></tr></table>
649 </div>
650 <a name="_start"></a>
651 <div class="private">
652 <table class="details" border="1" cellpadding="3"
653 cellspacing="0" width="100%" bgcolor="white">
654 <tr><td>
655 <table width="100%" cellpadding="0" cellspacing="0" border="0">
656 <tr valign="top"><td>
657 <h3 class="epydoc"><span class="sig"><span class="sig-name">_start</span>(<span class="sig-arg">self</span>)</span>
658 </h3>
659 </td><td align="right" valign="top"
660 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._start">source&nbsp;code</a></span>&nbsp;
661 </td>
662 </tr></table>
663
664 <p>Start worker.</p>
665 <dl class="fields">
666 <dt>Overrides:
667 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start" onclick="show_private();">EngineClient.EngineClient._start</a>
668 </dt>
669 </dl>
670 </td></tr></table>
671 </div>
672 <a name="error_fileno"></a>
673 <div>
674 <table class="details" border="1" cellpadding="3"
675 cellspacing="0" width="100%" bgcolor="white">
676 <tr><td>
677 <table width="100%" cellpadding="0" cellspacing="0" border="0">
678 <tr valign="top"><td>
679 <h3 class="epydoc"><span class="sig"><span class="sig-name">error_fileno</span>(<span class="sig-arg">self</span>)</span>
680 </h3>
681 </td><td align="right" valign="top"
682 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.error_fileno">source&nbsp;code</a></span>&nbsp;
683 </td>
684 </tr></table>
685
686 <p>Returns the standard error reader file descriptor as an integer.</p>
687 <dl class="fields">
688 <dt>Overrides:
689 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno">EngineClient.EngineClient.error_fileno</a>
690 </dt>
691 </dl>
692 </td></tr></table>
693 </div>
694 <a name="reader_fileno"></a>
695 <div>
696 <table class="details" border="1" cellpadding="3"
697 cellspacing="0" width="100%" bgcolor="white">
698 <tr><td>
699 <table width="100%" cellpadding="0" cellspacing="0" border="0">
700 <tr valign="top"><td>
701 <h3 class="epydoc"><span class="sig"><span class="sig-name">reader_fileno</span>(<span class="sig-arg">self</span>)</span>
702 </h3>
703 </td><td align="right" valign="top"
704 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.reader_fileno">source&nbsp;code</a></span>&nbsp;
705 </td>
706 </tr></table>
707
708 <p>Returns the reader file descriptor as an integer.</p>
709 <dl class="fields">
710 <dt>Overrides:
711 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno">EngineClient.EngineClient.reader_fileno</a>
712 </dt>
713 </dl>
714 </td></tr></table>
715 </div>
716 <a name="writer_fileno"></a>
717 <div>
718 <table class="details" border="1" cellpadding="3"
719 cellspacing="0" width="100%" bgcolor="white">
720 <tr><td>
721 <table width="100%" cellpadding="0" cellspacing="0" border="0">
722 <tr valign="top"><td>
723 <h3 class="epydoc"><span class="sig"><span class="sig-name">writer_fileno</span>(<span class="sig-arg">self</span>)</span>
724 </h3>
725 </td><td align="right" valign="top"
726 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.writer_fileno">source&nbsp;code</a></span>&nbsp;
727 </td>
728 </tr></table>
729
730 <p>Returns the writer file descriptor as an integer.</p>
731 <dl class="fields">
732 <dt>Overrides:
733 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno">EngineClient.EngineClient.writer_fileno</a>
734 </dt>
735 </dl>
736 </td></tr></table>
737 </div>
738 <a name="_read"></a>
739 <div class="private">
740 <table class="details" border="1" cellpadding="3"
741 cellspacing="0" width="100%" bgcolor="white">
742 <tr><td>
743 <table width="100%" cellpadding="0" cellspacing="0" border="0">
744 <tr valign="top"><td>
745 <h3 class="epydoc"><span class="sig"><span class="sig-name">_read</span>(<span class="sig-arg">self</span>,
746 <span class="sig-arg">size</span>=<span class="sig-default">4096</span>)</span>
747 </h3>
748 </td><td align="right" valign="top"
749 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._read">source&nbsp;code</a></span>&nbsp;
750 </td>
751 </tr></table>
752
753 <p>Read data from process.</p>
754 <dl class="fields">
755 <dt>Overrides:
756 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_read" onclick="show_private();">EngineClient.EngineClient._read</a>
757 </dt>
758 </dl>
759 </td></tr></table>
760 </div>
761 <a name="_readerr"></a>
762 <div class="private">
763 <table class="details" border="1" cellpadding="3"
764 cellspacing="0" width="100%" bgcolor="white">
765 <tr><td>
766 <table width="100%" cellpadding="0" cellspacing="0" border="0">
767 <tr valign="top"><td>
768 <h3 class="epydoc"><span class="sig"><span class="sig-name">_readerr</span>(<span class="sig-arg">self</span>,
769 <span class="sig-arg">size</span>=<span class="sig-default">4096</span>)</span>
770 </h3>
771 </td><td align="right" valign="top"
772 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._readerr">source&nbsp;code</a></span>&nbsp;
773 </td>
774 </tr></table>
775
776 <p>Read error data from process.</p>
777 <dl class="fields">
778 <dt>Overrides:
779 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr" onclick="show_private();">EngineClient.EngineClient._readerr</a>
780 </dt>
781 </dl>
782 </td></tr></table>
783 </div>
784 <a name="_close"></a>
785 <div class="private">
786 <table class="details" border="1" cellpadding="3"
787 cellspacing="0" width="100%" bgcolor="white">
788 <tr><td>
789 <table width="100%" cellpadding="0" cellspacing="0" border="0">
790 <tr valign="top"><td>
791 <h3 class="epydoc"><span class="sig"><span class="sig-name">_close</span>(<span class="sig-arg">self</span>,
792 <span class="sig-arg">force</span>,
793 <span class="sig-arg">timeout</span>)</span>
794 </h3>
795 </td><td align="right" valign="top"
796 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._close">source&nbsp;code</a></span>&nbsp;
797 </td>
798 </tr></table>
799
800 <p>Close worker. Called by engine after worker has been unregistered.
801 This method should handle all termination types (normal, forced or on
802 timeout).</p>
803 <dl class="fields">
804 <dt>Overrides:
805 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close" onclick="show_private();">EngineClient.EngineClient._close</a>
806 </dt>
807 </dl>
808 </td></tr></table>
809 </div>
810 <a name="_handle_read"></a>
811 <div class="private">
812 <table class="details" border="1" cellpadding="3"
813 cellspacing="0" width="100%" bgcolor="white">
814 <tr><td>
815 <table width="100%" cellpadding="0" cellspacing="0" border="0">
816 <tr valign="top"><td>
817 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_read</span>(<span class="sig-arg">self</span>)</span>
818 </h3>
819 </td><td align="right" valign="top"
820 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._handle_read">source&nbsp;code</a></span>&nbsp;
821 </td>
822 </tr></table>
823
824 <p>Engine is telling us there is data available for reading.</p>
825 <dl class="fields">
826 <dt>Overrides:
827 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read" onclick="show_private();">EngineClient.EngineClient._handle_read</a>
828 </dt>
829 </dl>
830 </td></tr></table>
831 </div>
832 <a name="_handle_error"></a>
833 <div class="private">
834 <table class="details" border="1" cellpadding="3"
835 cellspacing="0" width="100%" bgcolor="white">
836 <tr><td>
837 <table width="100%" cellpadding="0" cellspacing="0" border="0">
838 <tr valign="top"><td>
839 <h3 class="epydoc"><span class="sig"><span class="sig-name">_handle_error</span>(<span class="sig-arg">self</span>)</span>
840 </h3>
841 </td><td align="right" valign="top"
842 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple._handle_error">source&nbsp;code</a></span>&nbsp;
843 </td>
844 </tr></table>
845
846 <p>Engine is telling us there is error available for reading.</p>
847 <dl class="fields">
848 <dt>Overrides:
849 <a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error" onclick="show_private();">EngineClient.EngineClient._handle_error</a>
850 </dt>
851 </dl>
852 </td></tr></table>
853 </div>
854 <a name="last_read"></a>
855 <div>
856 <table class="details" border="1" cellpadding="3"
857 cellspacing="0" width="100%" bgcolor="white">
858 <tr><td>
859 <table width="100%" cellpadding="0" cellspacing="0" border="0">
860 <tr valign="top"><td>
861 <h3 class="epydoc"><span class="sig"><span class="sig-name">last_read</span>(<span class="sig-arg">self</span>)</span>
862 </h3>
863 </td><td align="right" valign="top"
864 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.last_read">source&nbsp;code</a></span>&nbsp;
865 </td>
866 </tr></table>
867
868 <p>Read last msg, useful in an EventHandler.</p>
869 <dl class="fields">
870 <dt>Overrides:
871 <a href="ClusterShell.Worker.Worker.Worker-class.html#last_read">Worker.last_read</a>
872 </dt>
873 </dl>
874 </td></tr></table>
875 </div>
876 <a name="last_error"></a>
877 <div>
878 <table class="details" border="1" cellpadding="3"
879 cellspacing="0" width="100%" bgcolor="white">
880 <tr><td>
881 <table width="100%" cellpadding="0" cellspacing="0" border="0">
882 <tr valign="top"><td>
883 <h3 class="epydoc"><span class="sig"><span class="sig-name">last_error</span>(<span class="sig-arg">self</span>)</span>
884 </h3>
885 </td><td align="right" valign="top"
886 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.last_error">source&nbsp;code</a></span>&nbsp;
887 </td>
888 </tr></table>
889
890 <p>Get last error message from event handler.</p>
891 <dl class="fields">
892 <dt>Overrides:
893 <a href="ClusterShell.Worker.Worker.Worker-class.html#last_error">Worker.last_error</a>
894 </dt>
895 </dl>
896 </td></tr></table>
897 </div>
898 <a name="set_write_eof"></a>
899 <div>
900 <table class="details" border="1" cellpadding="3"
901 cellspacing="0" width="100%" bgcolor="white">
902 <tr><td>
903 <table width="100%" cellpadding="0" cellspacing="0" border="0">
904 <tr valign="top"><td>
905 <h3 class="epydoc"><span class="sig"><span class="sig-name">set_write_eof</span>(<span class="sig-arg">self</span>)</span>
906 </h3>
907 </td><td align="right" valign="top"
908 ><span class="codelink"><a href="ClusterShell.Worker.Worker-pysrc.html#WorkerSimple.set_write_eof">source&nbsp;code</a></span>&nbsp;
909 </td>
910 </tr></table>
911
912 <p>Tell worker to close its writer file descriptor once flushed. Do not
913 perform writes after this call.</p>
914 <dl class="fields">
915 </dl>
916 </td></tr></table>
917 </div>
918 <br />
919 <!-- ==================== NAVIGATION BAR ==================== -->
920 <table class="navbar" border="0" width="100%" cellpadding="0"
921 bgcolor="#a0c0ff" cellspacing="0">
922 <tr valign="middle">
923
924 <!-- Tree link -->
925 <th>&nbsp;&nbsp;&nbsp;<a
926 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
927
928 <!-- Index link -->
929 <th>&nbsp;&nbsp;&nbsp;<a
930 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
931
932 <!-- Help link -->
933 <th>&nbsp;&nbsp;&nbsp;<a
934 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
935
936 <!-- Project homepage -->
937 <th class="navbar" align="right" width="100%">
938 <table border="0" cellpadding="0" cellspacing="0">
939 <tr><th class="navbar" align="center"
940 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
941 </tr></table></th>
942 </tr>
943 </table>
944 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
945 <tr>
946 <td align="left" class="footer">
947 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
948 </td>
949 <td align="right" class="footer">
950 <a target="mainFrame" href="http://epydoc.sourceforge.net"
951 >http://epydoc.sourceforge.net</a>
952 </td>
953 </tr>
954 </table>
955
956 <script type="text/javascript">
957 <!--
958 // Private objects are initially displayed (because if
959 // javascript is turned off then we want them to be
960 // visible); but by default, we want to hide them. So hide
961 // them unless we have a cookie that says to show them.
962 checkCookie();
963 // -->
964 </script>
965 </body>
966 </html>
+0
-1037
doc/epydoc/html/api-objects.txt less more
0 ClusterShell ClusterShell-module.html
1 ClusterShell.__url__ ClusterShell-module.html#__url__
2 ClusterShell.__package__ ClusterShell-module.html#__package__
3 ClusterShell._n ClusterShell-module.html#_n
4 ClusterShell.__version_info__ ClusterShell-module.html#__version_info__
5 ClusterShell.Engine ClusterShell.Engine-module.html
6 ClusterShell.Engine.__package__ ClusterShell.Engine-module.html#__package__
7 ClusterShell.Engine.EPoll ClusterShell.Engine.EPoll-module.html
8 ClusterShell.Engine.EPoll.__package__ ClusterShell.Engine.EPoll-module.html#__package__
9 ClusterShell.Engine.Engine ClusterShell.Engine.Engine-module.html
10 ClusterShell.Engine.Engine.__package__ ClusterShell.Engine.Engine-module.html#__package__
11 ClusterShell.Engine.Factory ClusterShell.Engine.Factory-module.html
12 ClusterShell.Engine.Factory.__package__ ClusterShell.Engine.Factory-module.html#__package__
13 ClusterShell.Engine.Poll ClusterShell.Engine.Poll-module.html
14 ClusterShell.Engine.Poll.__package__ ClusterShell.Engine.Poll-module.html#__package__
15 ClusterShell.Event ClusterShell.Event-module.html
16 ClusterShell.Event.__package__ ClusterShell.Event-module.html#__package__
17 ClusterShell.MsgTree ClusterShell.MsgTree-module.html
18 ClusterShell.MsgTree.__package__ ClusterShell.MsgTree-module.html#__package__
19 ClusterShell.NodeSet ClusterShell.NodeSet-module.html
20 ClusterShell.NodeSet.grouplist ClusterShell.NodeSet-module.html#grouplist
21 ClusterShell.NodeSet._test ClusterShell.NodeSet-module.html#_test
22 ClusterShell.NodeSet.fold ClusterShell.NodeSet-module.html#fold
23 ClusterShell.NodeSet.DEF_GROUPS_CONFIG ClusterShell.NodeSet-module.html#DEF_GROUPS_CONFIG
24 ClusterShell.NodeSet.__package__ ClusterShell.NodeSet-module.html#__package__
25 ClusterShell.NodeSet.NOGROUP_RESOLVER ClusterShell.NodeSet-module.html#NOGROUP_RESOLVER
26 ClusterShell.NodeSet.DEF_STD_GROUP_RESOLVER ClusterShell.NodeSet-module.html#DEF_STD_GROUP_RESOLVER
27 ClusterShell.NodeSet.expand ClusterShell.NodeSet-module.html#expand
28 ClusterShell.NodeSet.STD_GROUP_RESOLVER ClusterShell.NodeSet-module.html#STD_GROUP_RESOLVER
29 ClusterShell.NodeUtils ClusterShell.NodeUtils-module.html
30 ClusterShell.NodeUtils.__package__ ClusterShell.NodeUtils-module.html#__package__
31 ClusterShell.Task ClusterShell.Task-module.html
32 ClusterShell.Task.__package__ ClusterShell.Task-module.html#__package__
33 ClusterShell.Task.task_terminate ClusterShell.Task-module.html#task_terminate
34 ClusterShell.Task._task_print_debug ClusterShell.Task-module.html#_task_print_debug
35 ClusterShell.Task.task_self ClusterShell.Task-module.html#task_self
36 ClusterShell.Task.task_cleanup ClusterShell.Task-module.html#task_cleanup
37 ClusterShell.Task.task_wait ClusterShell.Task-module.html#task_wait
38 ClusterShell.Worker ClusterShell.Worker-module.html
39 ClusterShell.Worker.__package__ ClusterShell.Worker-module.html#__package__
40 ClusterShell.Worker.EngineClient ClusterShell.Worker.EngineClient-module.html
41 ClusterShell.Worker.EngineClient.__package__ ClusterShell.Worker.EngineClient-module.html#__package__
42 ClusterShell.Worker.Pdsh ClusterShell.Worker.Pdsh-module.html
43 ClusterShell.Worker.Pdsh.__package__ ClusterShell.Worker.Pdsh-module.html#__package__
44 ClusterShell.Worker.Popen ClusterShell.Worker.Popen-module.html
45 ClusterShell.Worker.Popen.__package__ ClusterShell.Worker.Popen-module.html#__package__
46 ClusterShell.Worker.Ssh ClusterShell.Worker.Ssh-module.html
47 ClusterShell.Worker.Ssh.__package__ ClusterShell.Worker.Ssh-module.html#__package__
48 ClusterShell.Worker.Worker ClusterShell.Worker.Worker-module.html
49 ClusterShell.Worker.Worker.__package__ ClusterShell.Worker.Worker-module.html#__package__
50 clubak clubak-module.html
51 clubak.nodeset_cmp clubak-module.html#nodeset_cmp
52 clubak.clubak clubak-module.html#clubak
53 clubak.display clubak-module.html#display
54 clubak.__package__ clubak-module.html#__package__
55 clubak.WHENCOLOR_CHOICES clubak-module.html#WHENCOLOR_CHOICES
56 clush clush-module.html
57 clush.ttyloop clush-module.html#ttyloop
58 clush.VERB_VERB clush-module.html#VERB_VERB
59 clush.VERB_STD clush-module.html#VERB_STD
60 clush.bufnodeset_cmp clush-module.html#bufnodeset_cmp
61 clush.clush_main clush-module.html#clush_main
62 clush.clush_excepthook clush-module.html#clush_excepthook
63 clush.__package__ clush-module.html#__package__
64 clush.WHENCOLOR_CHOICES clush-module.html#WHENCOLOR_CHOICES
65 clush.run_command clush-module.html#run_command
66 clush.VERB_DEBUG clush-module.html#VERB_DEBUG
67 clush.readline_setup clush-module.html#readline_setup
68 clush.clush_exit clush-module.html#clush_exit
69 clush.task_self ClusterShell.Task-module.html#task_self
70 clush.signal_handler clush-module.html#signal_handler
71 clush.run_copy clush-module.html#run_copy
72 clush.nodeset_cmp clush-module.html#nodeset_cmp
73 clush.bind_stdin clush-module.html#bind_stdin
74 clush.get_history_file clush-module.html#get_history_file
75 clush.VERB_QUIET clush-module.html#VERB_QUIET
76 nodeset nodeset-module.html
77 nodeset.grouplist ClusterShell.NodeSet-module.html#grouplist
78 nodeset.compute_nodeset nodeset-module.html#compute_nodeset
79 nodeset.process_stdin nodeset-module.html#process_stdin
80 nodeset.__package__ nodeset-module.html#__package__
81 nodeset.run_nodeset nodeset-module.html#run_nodeset
82 nodeset.error_exit nodeset-module.html#error_exit
83 ClusterShell.Engine.EPoll.EngineEPoll ClusterShell.Engine.EPoll.EngineEPoll-class.html
84 ClusterShell.Engine.EPoll.EngineEPoll._register_specific ClusterShell.Engine.EPoll.EngineEPoll-class.html#_register_specific
85 ClusterShell.Engine.Engine.Engine._fd2client ClusterShell.Engine.Engine.Engine-class.html#_fd2client
86 ClusterShell.Engine.Engine.Engine.register ClusterShell.Engine.Engine.Engine-class.html#register
87 ClusterShell.Engine.EPoll.EngineEPoll._unregister_specific ClusterShell.Engine.EPoll.EngineEPoll-class.html#_unregister_specific
88 ClusterShell.Engine.Engine.Engine.start_ports ClusterShell.Engine.Engine.Engine-class.html#start_ports
89 ClusterShell.Engine.Engine.Engine.abort ClusterShell.Engine.Engine.Engine-class.html#abort
90 ClusterShell.Engine.Engine.Engine.start_all ClusterShell.Engine.Engine.Engine-class.html#start_all
91 ClusterShell.Engine.EPoll.EngineEPoll.__init__ ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__
92 ClusterShell.Engine.Engine.Engine._debug ClusterShell.Engine.Engine.Engine-class.html#_debug
93 ClusterShell.Engine.Engine.Engine.set_reading ClusterShell.Engine.Engine.Engine-class.html#set_reading
94 ClusterShell.Engine.Engine.Engine._remove ClusterShell.Engine.Engine.Engine-class.html#_remove
95 ClusterShell.Engine.Engine.Engine.add ClusterShell.Engine.Engine.Engine-class.html#add
96 ClusterShell.Engine.Engine.Engine.set_events ClusterShell.Engine.Engine.Engine-class.html#set_events
97 ClusterShell.Engine.Engine.Engine.set_writing ClusterShell.Engine.Engine.Engine-class.html#set_writing
98 ClusterShell.Engine.Engine.Engine.unregister_writer ClusterShell.Engine.Engine.Engine-class.html#unregister_writer
99 ClusterShell.Engine.Engine.Engine.add_timer ClusterShell.Engine.Engine.Engine-class.html#add_timer
100 ClusterShell.Engine.Engine.Engine.run ClusterShell.Engine.Engine.Engine-class.html#run
101 ClusterShell.Engine.Engine.Engine.fire_timers ClusterShell.Engine.Engine.Engine-class.html#fire_timers
102 ClusterShell.Engine.Engine.Engine.E_ANY ClusterShell.Engine.Engine.Engine-class.html#E_ANY
103 ClusterShell.Engine.Engine.Engine.modify ClusterShell.Engine.Engine.Engine-class.html#modify
104 ClusterShell.Engine.Engine.Engine.remove_timer ClusterShell.Engine.Engine.Engine-class.html#remove_timer
105 ClusterShell.Engine.Engine.Engine.set_reading_error ClusterShell.Engine.Engine.Engine-class.html#set_reading_error
106 ClusterShell.Engine.EPoll.EngineEPoll.runloop ClusterShell.Engine.EPoll.EngineEPoll-class.html#runloop
107 ClusterShell.Engine.Engine.Engine.snoop_ports ClusterShell.Engine.Engine.Engine-class.html#snoop_ports
108 ClusterShell.Engine.Engine.Engine.E_WRITE ClusterShell.Engine.Engine.Engine-class.html#E_WRITE
109 ClusterShell.Engine.Engine.Engine.E_ERROR ClusterShell.Engine.Engine.Engine-class.html#E_ERROR
110 ClusterShell.Engine.Engine.Engine.unregister ClusterShell.Engine.Engine.Engine-class.html#unregister
111 ClusterShell.Engine.Engine.Engine.clear ClusterShell.Engine.Engine.Engine-class.html#clear
112 ClusterShell.Engine.Engine.Engine.clients ClusterShell.Engine.Engine.Engine-class.html#clients
113 ClusterShell.Engine.Engine.Engine.remove ClusterShell.Engine.Engine.Engine-class.html#remove
114 ClusterShell.Engine.Engine.Engine.exited ClusterShell.Engine.Engine.Engine-class.html#exited
115 ClusterShell.Engine.Engine.Engine.E_READ ClusterShell.Engine.Engine.Engine-class.html#E_READ
116 ClusterShell.Engine.EPoll.EngineEPoll.identifier ClusterShell.Engine.EPoll.EngineEPoll-class.html#identifier
117 ClusterShell.Engine.EPoll.EngineEPoll._modify_specific ClusterShell.Engine.EPoll.EngineEPoll-class.html#_modify_specific
118 ClusterShell.Engine.Engine.Engine.ports ClusterShell.Engine.Engine.Engine-class.html#ports
119 ClusterShell.Engine.Engine.Engine ClusterShell.Engine.Engine.Engine-class.html
120 ClusterShell.Engine.Engine.Engine._register_specific ClusterShell.Engine.Engine.Engine-class.html#_register_specific
121 ClusterShell.Engine.Engine.Engine._fd2client ClusterShell.Engine.Engine.Engine-class.html#_fd2client
122 ClusterShell.Engine.Engine.Engine.clients ClusterShell.Engine.Engine.Engine-class.html#clients
123 ClusterShell.Engine.Engine.Engine._unregister_specific ClusterShell.Engine.Engine.Engine-class.html#_unregister_specific
124 ClusterShell.Engine.Engine.Engine.start_ports ClusterShell.Engine.Engine.Engine-class.html#start_ports
125 ClusterShell.Engine.Engine.Engine.abort ClusterShell.Engine.Engine.Engine-class.html#abort
126 ClusterShell.Engine.Engine.Engine.start_all ClusterShell.Engine.Engine.Engine-class.html#start_all
127 ClusterShell.Engine.Engine.Engine.__init__ ClusterShell.Engine.Engine.Engine-class.html#__init__
128 ClusterShell.Engine.Engine.Engine._debug ClusterShell.Engine.Engine.Engine-class.html#_debug
129 ClusterShell.Engine.Engine.Engine.set_reading ClusterShell.Engine.Engine.Engine-class.html#set_reading
130 ClusterShell.Engine.Engine.Engine._remove ClusterShell.Engine.Engine.Engine-class.html#_remove
131 ClusterShell.Engine.Engine.Engine.add ClusterShell.Engine.Engine.Engine-class.html#add
132 ClusterShell.Engine.Engine.Engine.set_events ClusterShell.Engine.Engine.Engine-class.html#set_events
133 ClusterShell.Engine.Engine.Engine.fire_timers ClusterShell.Engine.Engine.Engine-class.html#fire_timers
134 ClusterShell.Engine.Engine.Engine.unregister_writer ClusterShell.Engine.Engine.Engine-class.html#unregister_writer
135 ClusterShell.Engine.Engine.Engine.add_timer ClusterShell.Engine.Engine.Engine-class.html#add_timer
136 ClusterShell.Engine.Engine.Engine.ports ClusterShell.Engine.Engine.Engine-class.html#ports
137 ClusterShell.Engine.Engine.Engine.run ClusterShell.Engine.Engine.Engine-class.html#run
138 ClusterShell.Engine.Engine.Engine.set_writing ClusterShell.Engine.Engine.Engine-class.html#set_writing
139 ClusterShell.Engine.Engine.Engine.E_ANY ClusterShell.Engine.Engine.Engine-class.html#E_ANY
140 ClusterShell.Engine.Engine.Engine.modify ClusterShell.Engine.Engine.Engine-class.html#modify
141 ClusterShell.Engine.Engine.Engine.set_reading_error ClusterShell.Engine.Engine.Engine-class.html#set_reading_error
142 ClusterShell.Engine.Engine.Engine.runloop ClusterShell.Engine.Engine.Engine-class.html#runloop
143 ClusterShell.Engine.Engine.Engine.E_ERROR ClusterShell.Engine.Engine.Engine-class.html#E_ERROR
144 ClusterShell.Engine.Engine.Engine.E_WRITE ClusterShell.Engine.Engine.Engine-class.html#E_WRITE
145 ClusterShell.Engine.Engine.Engine.snoop_ports ClusterShell.Engine.Engine.Engine-class.html#snoop_ports
146 ClusterShell.Engine.Engine.Engine.unregister ClusterShell.Engine.Engine.Engine-class.html#unregister
147 ClusterShell.Engine.Engine.Engine.clear ClusterShell.Engine.Engine.Engine-class.html#clear
148 ClusterShell.Engine.Engine.Engine.register ClusterShell.Engine.Engine.Engine-class.html#register
149 ClusterShell.Engine.Engine.Engine.remove ClusterShell.Engine.Engine.Engine-class.html#remove
150 ClusterShell.Engine.Engine.Engine.exited ClusterShell.Engine.Engine.Engine-class.html#exited
151 ClusterShell.Engine.Engine.Engine.E_READ ClusterShell.Engine.Engine.Engine-class.html#E_READ
152 ClusterShell.Engine.Engine.Engine.identifier ClusterShell.Engine.Engine.Engine-class.html#identifier
153 ClusterShell.Engine.Engine.Engine._modify_specific ClusterShell.Engine.Engine.Engine-class.html#_modify_specific
154 ClusterShell.Engine.Engine.Engine.remove_timer ClusterShell.Engine.Engine.Engine-class.html#remove_timer
155 ClusterShell.Engine.Engine.EngineAbortException ClusterShell.Engine.Engine.EngineAbortException-class.html
156 ClusterShell.Engine.Engine.EngineAbortException.__init__ ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__
157 ClusterShell.Engine.Engine.EngineAlreadyRunningError ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html
158 ClusterShell.Engine.Engine.EngineBaseTimer ClusterShell.Engine.Engine.EngineBaseTimer-class.html
159 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
160 ClusterShell.Engine.Engine.EngineBaseTimer._fire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_fire
161 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
162 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
163 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
164 ClusterShell.Engine.Engine.EngineBaseTimer.__init__ ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__
165 ClusterShell.Engine.Engine.EngineException ClusterShell.Engine.Engine.EngineException-class.html
166 ClusterShell.Engine.Engine.EngineIllegalOperationError ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html
167 ClusterShell.Engine.Engine.EngineNotSupportedError ClusterShell.Engine.Engine.EngineNotSupportedError-class.html
168 ClusterShell.Engine.Engine.EngineTimeoutException ClusterShell.Engine.Engine.EngineTimeoutException-class.html
169 ClusterShell.Engine.Engine.EngineTimer ClusterShell.Engine.Engine.EngineTimer-class.html
170 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
171 ClusterShell.Engine.Engine.EngineTimer._fire ClusterShell.Engine.Engine.EngineTimer-class.html#_fire
172 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
173 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
174 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
175 ClusterShell.Engine.Engine.EngineTimer.__init__ ClusterShell.Engine.Engine.EngineTimer-class.html#__init__
176 ClusterShell.Engine.Engine._EngineTimerQ ClusterShell.Engine.Engine._EngineTimerQ-class.html
177 ClusterShell.Engine.Engine._EngineTimerQ.invalidate ClusterShell.Engine.Engine._EngineTimerQ-class.html#invalidate
178 ClusterShell.Engine.Engine._EngineTimerQ.schedule ClusterShell.Engine.Engine._EngineTimerQ-class.html#schedule
179 ClusterShell.Engine.Engine._EngineTimerQ.fire ClusterShell.Engine.Engine._EngineTimerQ-class.html#fire
180 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html
181 ClusterShell.Engine.Engine._EngineTimerQ.clear ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear
182 ClusterShell.Engine.Engine._EngineTimerQ.reschedule ClusterShell.Engine.Engine._EngineTimerQ-class.html#reschedule
183 ClusterShell.Engine.Engine._EngineTimerQ.__len__ ClusterShell.Engine.Engine._EngineTimerQ-class.html#__len__
184 ClusterShell.Engine.Engine._EngineTimerQ.__init__ ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__
185 ClusterShell.Engine.Engine._EngineTimerQ.expired ClusterShell.Engine.Engine._EngineTimerQ-class.html#expired
186 ClusterShell.Engine.Engine._EngineTimerQ._dequeue_disarmed ClusterShell.Engine.Engine._EngineTimerQ-class.html#_dequeue_disarmed
187 ClusterShell.Engine.Engine._EngineTimerQ.nextfire_delay ClusterShell.Engine.Engine._EngineTimerQ-class.html#nextfire_delay
188 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html
189 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.armed ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#armed
190 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.disarm ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#disarm
191 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.arm ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#arm
192 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__ ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__
193 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__cmp__ ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__cmp__
194 ClusterShell.Engine.Factory.PreferredEngine ClusterShell.Engine.Factory.PreferredEngine-class.html
195 ClusterShell.Engine.Factory.PreferredEngine.__new__ ClusterShell.Engine.Factory.PreferredEngine-class.html#__new__
196 ClusterShell.Engine.Factory.PreferredEngine.engines ClusterShell.Engine.Factory.PreferredEngine-class.html#engines
197 ClusterShell.Engine.Poll.EnginePoll ClusterShell.Engine.Poll.EnginePoll-class.html
198 ClusterShell.Engine.Poll.EnginePoll._register_specific ClusterShell.Engine.Poll.EnginePoll-class.html#_register_specific
199 ClusterShell.Engine.Engine.Engine._fd2client ClusterShell.Engine.Engine.Engine-class.html#_fd2client
200 ClusterShell.Engine.Engine.Engine.register ClusterShell.Engine.Engine.Engine-class.html#register
201 ClusterShell.Engine.Poll.EnginePoll._unregister_specific ClusterShell.Engine.Poll.EnginePoll-class.html#_unregister_specific
202 ClusterShell.Engine.Engine.Engine.start_ports ClusterShell.Engine.Engine.Engine-class.html#start_ports
203 ClusterShell.Engine.Engine.Engine.abort ClusterShell.Engine.Engine.Engine-class.html#abort
204 ClusterShell.Engine.Engine.Engine.start_all ClusterShell.Engine.Engine.Engine-class.html#start_all
205 ClusterShell.Engine.Poll.EnginePoll.__init__ ClusterShell.Engine.Poll.EnginePoll-class.html#__init__
206 ClusterShell.Engine.Engine.Engine._debug ClusterShell.Engine.Engine.Engine-class.html#_debug
207 ClusterShell.Engine.Engine.Engine.set_reading ClusterShell.Engine.Engine.Engine-class.html#set_reading
208 ClusterShell.Engine.Engine.Engine._remove ClusterShell.Engine.Engine.Engine-class.html#_remove
209 ClusterShell.Engine.Engine.Engine.add ClusterShell.Engine.Engine.Engine-class.html#add
210 ClusterShell.Engine.Engine.Engine.set_events ClusterShell.Engine.Engine.Engine-class.html#set_events
211 ClusterShell.Engine.Engine.Engine.set_writing ClusterShell.Engine.Engine.Engine-class.html#set_writing
212 ClusterShell.Engine.Engine.Engine.unregister_writer ClusterShell.Engine.Engine.Engine-class.html#unregister_writer
213 ClusterShell.Engine.Engine.Engine.add_timer ClusterShell.Engine.Engine.Engine-class.html#add_timer
214 ClusterShell.Engine.Engine.Engine.run ClusterShell.Engine.Engine.Engine-class.html#run
215 ClusterShell.Engine.Engine.Engine.fire_timers ClusterShell.Engine.Engine.Engine-class.html#fire_timers
216 ClusterShell.Engine.Engine.Engine.E_ANY ClusterShell.Engine.Engine.Engine-class.html#E_ANY
217 ClusterShell.Engine.Engine.Engine.modify ClusterShell.Engine.Engine.Engine-class.html#modify
218 ClusterShell.Engine.Engine.Engine.remove_timer ClusterShell.Engine.Engine.Engine-class.html#remove_timer
219 ClusterShell.Engine.Engine.Engine.set_reading_error ClusterShell.Engine.Engine.Engine-class.html#set_reading_error
220 ClusterShell.Engine.Poll.EnginePoll.runloop ClusterShell.Engine.Poll.EnginePoll-class.html#runloop
221 ClusterShell.Engine.Engine.Engine.snoop_ports ClusterShell.Engine.Engine.Engine-class.html#snoop_ports
222 ClusterShell.Engine.Engine.Engine.E_WRITE ClusterShell.Engine.Engine.Engine-class.html#E_WRITE
223 ClusterShell.Engine.Engine.Engine.E_ERROR ClusterShell.Engine.Engine.Engine-class.html#E_ERROR
224 ClusterShell.Engine.Engine.Engine.unregister ClusterShell.Engine.Engine.Engine-class.html#unregister
225 ClusterShell.Engine.Engine.Engine.clear ClusterShell.Engine.Engine.Engine-class.html#clear
226 ClusterShell.Engine.Engine.Engine.clients ClusterShell.Engine.Engine.Engine-class.html#clients
227 ClusterShell.Engine.Engine.Engine.remove ClusterShell.Engine.Engine.Engine-class.html#remove
228 ClusterShell.Engine.Engine.Engine.exited ClusterShell.Engine.Engine.Engine-class.html#exited
229 ClusterShell.Engine.Engine.Engine.E_READ ClusterShell.Engine.Engine.Engine-class.html#E_READ
230 ClusterShell.Engine.Poll.EnginePoll.identifier ClusterShell.Engine.Poll.EnginePoll-class.html#identifier
231 ClusterShell.Engine.Poll.EnginePoll._modify_specific ClusterShell.Engine.Poll.EnginePoll-class.html#_modify_specific
232 ClusterShell.Engine.Engine.Engine.ports ClusterShell.Engine.Engine.Engine-class.html#ports
233 ClusterShell.Event.EventHandler ClusterShell.Event.EventHandler-class.html
234 ClusterShell.Event.EventHandler.ev_read ClusterShell.Event.EventHandler-class.html#ev_read
235 ClusterShell.Event.EventHandler.ev_error ClusterShell.Event.EventHandler-class.html#ev_error
236 ClusterShell.Event.EventHandler.ev_start ClusterShell.Event.EventHandler-class.html#ev_start
237 ClusterShell.Event.EventHandler.ev_close ClusterShell.Event.EventHandler-class.html#ev_close
238 ClusterShell.Event.EventHandler.ev_written ClusterShell.Event.EventHandler-class.html#ev_written
239 ClusterShell.Event.EventHandler.ev_timeout ClusterShell.Event.EventHandler-class.html#ev_timeout
240 ClusterShell.Event.EventHandler.ev_msg ClusterShell.Event.EventHandler-class.html#ev_msg
241 ClusterShell.Event.EventHandler.ev_timer ClusterShell.Event.EventHandler-class.html#ev_timer
242 ClusterShell.Event.EventHandler.ev_hup ClusterShell.Event.EventHandler-class.html#ev_hup
243 ClusterShell.Event.EventHandler._invoke ClusterShell.Event.EventHandler-class.html#_invoke
244 ClusterShell.MsgTree.MsgTree ClusterShell.MsgTree.MsgTree-class.html
245 ClusterShell.MsgTree.MsgTree._depth ClusterShell.MsgTree.MsgTree-class.html#_depth
246 ClusterShell.MsgTree.MsgTree.walk ClusterShell.MsgTree.MsgTree-class.html#walk
247 ClusterShell.MsgTree.MsgTree.__init__ ClusterShell.MsgTree.MsgTree-class.html#__init__
248 ClusterShell.MsgTree.MsgTree.add ClusterShell.MsgTree.MsgTree-class.html#add
249 ClusterShell.MsgTree.MsgTree.__len__ ClusterShell.MsgTree.MsgTree-class.html#__len__
250 ClusterShell.MsgTree.MsgTree.__getitem__ ClusterShell.MsgTree.MsgTree-class.html#__getitem__
251 ClusterShell.MsgTree.MsgTree.get ClusterShell.MsgTree.MsgTree-class.html#get
252 ClusterShell.MsgTree.MsgTree.keys ClusterShell.MsgTree.MsgTree-class.html#keys
253 ClusterShell.MsgTree.MsgTree.__iter__ ClusterShell.MsgTree.MsgTree-class.html#__iter__
254 ClusterShell.MsgTree.MsgTree.items ClusterShell.MsgTree.MsgTree-class.html#items
255 ClusterShell.MsgTree.MsgTree.clear ClusterShell.MsgTree.MsgTree-class.html#clear
256 ClusterShell.MsgTree.MsgTree.messages ClusterShell.MsgTree.MsgTree-class.html#messages
257 ClusterShell.MsgTree.MsgTree.remove ClusterShell.MsgTree.MsgTree-class.html#remove
258 ClusterShell.MsgTree.MsgTreeElem ClusterShell.MsgTree.MsgTreeElem-class.html
259 ClusterShell.MsgTree.MsgTreeElem.__str__ ClusterShell.MsgTree.MsgTreeElem-class.html#__str__
260 ClusterShell.MsgTree.MsgTreeElem.splitlines ClusterShell.MsgTree.MsgTreeElem-class.html#splitlines
261 ClusterShell.MsgTree.MsgTreeElem.message ClusterShell.MsgTree.MsgTreeElem-class.html#message
262 ClusterShell.MsgTree.MsgTreeElem.append ClusterShell.MsgTree.MsgTreeElem-class.html#append
263 ClusterShell.MsgTree.MsgTreeElem.__init__ ClusterShell.MsgTree.MsgTreeElem-class.html#__init__
264 ClusterShell.MsgTree.MsgTreeElem.__len__ ClusterShell.MsgTree.MsgTreeElem-class.html#__len__
265 ClusterShell.MsgTree.MsgTreeElem.__getitem__ ClusterShell.MsgTree.MsgTreeElem-class.html#__getitem__
266 ClusterShell.MsgTree.MsgTreeElem.__iter__ ClusterShell.MsgTree.MsgTreeElem-class.html#__iter__
267 ClusterShell.MsgTree.MsgTreeElem.__eq__ ClusterShell.MsgTree.MsgTreeElem-class.html#__eq__
268 ClusterShell.MsgTree.MsgTreeElem.lines ClusterShell.MsgTree.MsgTreeElem-class.html#lines
269 ClusterShell.MsgTree.MsgTreeElem._shift ClusterShell.MsgTree.MsgTreeElem-class.html#_shift
270 ClusterShell.NodeSet.NodeGroupBase ClusterShell.NodeSet.NodeGroupBase-class.html
271 ClusterShell.NodeSet.NodeSetBase.issubset ClusterShell.NodeSet.NodeSetBase-class.html#issubset
272 ClusterShell.NodeSet.NodeSetBase.symmetric_difference ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference
273 ClusterShell.NodeSet.NodeSetBase.__str__ ClusterShell.NodeSet.NodeSetBase-class.html#__str__
274 ClusterShell.NodeSet.NodeGroupBase._add ClusterShell.NodeSet.NodeGroupBase-class.html#_add
275 ClusterShell.NodeSet.NodeSetBase.issuperset ClusterShell.NodeSet.NodeSetBase-class.html#issuperset
276 ClusterShell.NodeSet.NodeSetBase.intersection_update ClusterShell.NodeSet.NodeSetBase-class.html#intersection_update
277 ClusterShell.NodeSet.NodeSetBase.__and__ ClusterShell.NodeSet.NodeSetBase-class.html#__and__
278 ClusterShell.NodeSet.NodeSetBase.__lt__ ClusterShell.NodeSet.NodeSetBase-class.html#__lt__
279 ClusterShell.NodeSet.NodeSetBase.__init__ ClusterShell.NodeSet.NodeSetBase-class.html#__init__
280 ClusterShell.NodeSet.NodeSetBase._iter ClusterShell.NodeSet.NodeSetBase-class.html#_iter
281 ClusterShell.NodeSet.NodeSetBase.intersection ClusterShell.NodeSet.NodeSetBase-class.html#intersection
282 ClusterShell.NodeSet.NodeSetBase.__iand__ ClusterShell.NodeSet.NodeSetBase-class.html#__iand__
283 ClusterShell.NodeSet.NodeSetBase.difference_update ClusterShell.NodeSet.NodeSetBase-class.html#difference_update
284 ClusterShell.NodeSet.NodeSetBase.__contains__ ClusterShell.NodeSet.NodeSetBase-class.html#__contains__
285 ClusterShell.NodeSet.NodeSetBase.union ClusterShell.NodeSet.NodeSetBase-class.html#union
286 ClusterShell.NodeSet.NodeSetBase.add ClusterShell.NodeSet.NodeSetBase-class.html#add
287 ClusterShell.NodeSet.NodeSetBase.__ixor__ ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__
288 ClusterShell.NodeSet.NodeSetBase.__len__ ClusterShell.NodeSet.NodeSetBase-class.html#__len__
289 ClusterShell.NodeSet.NodeSetBase.__isub__ ClusterShell.NodeSet.NodeSetBase-class.html#__isub__
290 ClusterShell.NodeSet.NodeSetBase._binary_sanity_check ClusterShell.NodeSet.NodeSetBase-class.html#_binary_sanity_check
291 ClusterShell.NodeSet.NodeSetBase.__getitem__ ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__
292 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference_update
293 ClusterShell.NodeSet.NodeSetBase.update ClusterShell.NodeSet.NodeSetBase-class.html#update
294 ClusterShell.NodeSet.NodeSetBase._iterbase ClusterShell.NodeSet.NodeSetBase-class.html#_iterbase
295 ClusterShell.NodeSet.NodeSetBase.__iter__ ClusterShell.NodeSet.NodeSetBase-class.html#__iter__
296 ClusterShell.NodeSet.NodeSetBase.__or__ ClusterShell.NodeSet.NodeSetBase-class.html#__or__
297 ClusterShell.NodeSet.NodeSetBase.__gt__ ClusterShell.NodeSet.NodeSetBase-class.html#__gt__
298 ClusterShell.NodeSet.NodeSetBase.difference ClusterShell.NodeSet.NodeSetBase-class.html#difference
299 ClusterShell.NodeSet.NodeSetBase.__eq__ ClusterShell.NodeSet.NodeSetBase-class.html#__eq__
300 ClusterShell.NodeSet.NodeSetBase.clear ClusterShell.NodeSet.NodeSetBase-class.html#clear
301 ClusterShell.NodeSet.NodeSetBase.remove ClusterShell.NodeSet.NodeSetBase-class.html#remove
302 ClusterShell.NodeSet.NodeSetBase.__xor__ ClusterShell.NodeSet.NodeSetBase-class.html#__xor__
303 ClusterShell.NodeSet.NodeSetBase.__ior__ ClusterShell.NodeSet.NodeSetBase-class.html#__ior__
304 ClusterShell.NodeSet.NodeSetBase.__le__ ClusterShell.NodeSet.NodeSetBase-class.html#__le__
305 ClusterShell.NodeSet.NodeSetBase.__sub__ ClusterShell.NodeSet.NodeSetBase-class.html#__sub__
306 ClusterShell.NodeSet.NodeSetBase.__ge__ ClusterShell.NodeSet.NodeSetBase-class.html#__ge__
307 ClusterShell.NodeSet.NodeSet ClusterShell.NodeSet.NodeSet-class.html
308 ClusterShell.NodeSet.NodeSet.fromlist ClusterShell.NodeSet.NodeSet-class.html#fromlist
309 ClusterShell.NodeSet.NodeSet.__getslice__ ClusterShell.NodeSet.NodeSet-class.html#__getslice__
310 ClusterShell.NodeSet.NodeSetBase.symmetric_difference ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference
311 ClusterShell.NodeSet.NodeSetBase.__str__ ClusterShell.NodeSet.NodeSetBase-class.html#__str__
312 ClusterShell.NodeSet.NodeSetBase._add ClusterShell.NodeSet.NodeSetBase-class.html#_add
313 ClusterShell.NodeSet.NodeSet._find_groups ClusterShell.NodeSet.NodeSet-class.html#_find_groups
314 ClusterShell.NodeSet.NodeSet.issubset ClusterShell.NodeSet.NodeSet-class.html#issubset
315 ClusterShell.NodeSet.NodeSetBase.remove ClusterShell.NodeSet.NodeSetBase-class.html#remove
316 ClusterShell.NodeSet.NodeSetBase.__and__ ClusterShell.NodeSet.NodeSetBase-class.html#__and__
317 ClusterShell.NodeSet.NodeSetBase.__lt__ ClusterShell.NodeSet.NodeSetBase-class.html#__lt__
318 ClusterShell.NodeSet.NodeSet.__init__ ClusterShell.NodeSet.NodeSet-class.html#__init__
319 ClusterShell.NodeSet.NodeSetBase._iter ClusterShell.NodeSet.NodeSetBase-class.html#_iter
320 ClusterShell.NodeSet.NodeSetBase.intersection ClusterShell.NodeSet.NodeSetBase-class.html#intersection
321 ClusterShell.NodeSet.NodeSetBase.__iand__ ClusterShell.NodeSet.NodeSetBase-class.html#__iand__
322 ClusterShell.NodeSet.NodeSet.difference_update ClusterShell.NodeSet.NodeSet-class.html#difference_update
323 ClusterShell.NodeSet.NodeSet.fromall ClusterShell.NodeSet.NodeSet-class.html#fromall
324 ClusterShell.NodeSet.NodeSetBase.__contains__ ClusterShell.NodeSet.NodeSetBase-class.html#__contains__
325 ClusterShell.NodeSet.NodeSetBase.union ClusterShell.NodeSet.NodeSetBase-class.html#union
326 ClusterShell.NodeSet.NodeSet.regroup ClusterShell.NodeSet.NodeSet-class.html#regroup
327 ClusterShell.NodeSet.NodeSetBase.add ClusterShell.NodeSet.NodeSetBase-class.html#add
328 ClusterShell.NodeSet.NodeSet.split ClusterShell.NodeSet.NodeSet-class.html#split
329 ClusterShell.NodeSet.NodeSet.__getstate__ ClusterShell.NodeSet.NodeSet-class.html#__getstate__
330 ClusterShell.NodeSet.NodeSetBase.__ixor__ ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__
331 ClusterShell.NodeSet.NodeSetBase.__len__ ClusterShell.NodeSet.NodeSetBase-class.html#__len__
332 ClusterShell.NodeSet.NodeSetBase.__isub__ ClusterShell.NodeSet.NodeSetBase-class.html#__isub__
333 ClusterShell.NodeSet.NodeSetBase._binary_sanity_check ClusterShell.NodeSet.NodeSetBase-class.html#_binary_sanity_check
334 ClusterShell.NodeSet.NodeSetBase.__getitem__ ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__
335 ClusterShell.NodeSet.NodeSet.__setstate__ ClusterShell.NodeSet.NodeSet-class.html#__setstate__
336 ClusterShell.NodeSet.NodeSet.symmetric_difference_update ClusterShell.NodeSet.NodeSet-class.html#symmetric_difference_update
337 ClusterShell.NodeSet.NodeSet.update ClusterShell.NodeSet.NodeSet-class.html#update
338 ClusterShell.NodeSet.NodeSetBase._iterbase ClusterShell.NodeSet.NodeSetBase-class.html#_iterbase
339 ClusterShell.NodeSet.NodeSetBase.__iter__ ClusterShell.NodeSet.NodeSetBase-class.html#__iter__
340 ClusterShell.NodeSet.NodeSetBase.__or__ ClusterShell.NodeSet.NodeSetBase-class.html#__or__
341 ClusterShell.NodeSet.NodeSetBase.__gt__ ClusterShell.NodeSet.NodeSetBase-class.html#__gt__
342 ClusterShell.NodeSet.NodeSetBase.difference ClusterShell.NodeSet.NodeSetBase-class.html#difference
343 ClusterShell.NodeSet.NodeSetBase.__eq__ ClusterShell.NodeSet.NodeSetBase-class.html#__eq__
344 ClusterShell.NodeSet.NodeSet.issuperset ClusterShell.NodeSet.NodeSet-class.html#issuperset
345 ClusterShell.NodeSet.NodeSetBase.clear ClusterShell.NodeSet.NodeSetBase-class.html#clear
346 ClusterShell.NodeSet.NodeSet.intersection_update ClusterShell.NodeSet.NodeSet-class.html#intersection_update
347 ClusterShell.NodeSet.NodeSetBase.__xor__ ClusterShell.NodeSet.NodeSetBase-class.html#__xor__
348 ClusterShell.NodeSet.NodeSetBase.__ior__ ClusterShell.NodeSet.NodeSetBase-class.html#__ior__
349 ClusterShell.NodeSet.NodeSetBase.__le__ ClusterShell.NodeSet.NodeSetBase-class.html#__le__
350 ClusterShell.NodeSet.NodeSetBase.__sub__ ClusterShell.NodeSet.NodeSetBase-class.html#__sub__
351 ClusterShell.NodeSet.NodeSetBase.__ge__ ClusterShell.NodeSet.NodeSetBase-class.html#__ge__
352 ClusterShell.NodeSet.NodeSetBase ClusterShell.NodeSet.NodeSetBase-class.html
353 ClusterShell.NodeSet.NodeSetBase.difference_update ClusterShell.NodeSet.NodeSetBase-class.html#difference_update
354 ClusterShell.NodeSet.NodeSetBase.symmetric_difference ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference
355 ClusterShell.NodeSet.NodeSetBase.__str__ ClusterShell.NodeSet.NodeSetBase-class.html#__str__
356 ClusterShell.NodeSet.NodeSetBase._add ClusterShell.NodeSet.NodeSetBase-class.html#_add
357 ClusterShell.NodeSet.NodeSetBase.issuperset ClusterShell.NodeSet.NodeSetBase-class.html#issuperset
358 ClusterShell.NodeSet.NodeSetBase.remove ClusterShell.NodeSet.NodeSetBase-class.html#remove
359 ClusterShell.NodeSet.NodeSetBase.__and__ ClusterShell.NodeSet.NodeSetBase-class.html#__and__
360 ClusterShell.NodeSet.NodeSetBase.__lt__ ClusterShell.NodeSet.NodeSetBase-class.html#__lt__
361 ClusterShell.NodeSet.NodeSetBase.__init__ ClusterShell.NodeSet.NodeSetBase-class.html#__init__
362 ClusterShell.NodeSet.NodeSetBase._iter ClusterShell.NodeSet.NodeSetBase-class.html#_iter
363 ClusterShell.NodeSet.NodeSetBase.difference ClusterShell.NodeSet.NodeSetBase-class.html#difference
364 ClusterShell.NodeSet.NodeSetBase.__iand__ ClusterShell.NodeSet.NodeSetBase-class.html#__iand__
365 ClusterShell.NodeSet.NodeSetBase.issubset ClusterShell.NodeSet.NodeSetBase-class.html#issubset
366 ClusterShell.NodeSet.NodeSetBase.__contains__ ClusterShell.NodeSet.NodeSetBase-class.html#__contains__
367 ClusterShell.NodeSet.NodeSetBase.union ClusterShell.NodeSet.NodeSetBase-class.html#union
368 ClusterShell.NodeSet.NodeSetBase.add ClusterShell.NodeSet.NodeSetBase-class.html#add
369 ClusterShell.NodeSet.NodeSetBase.__ixor__ ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__
370 ClusterShell.NodeSet.NodeSetBase.__len__ ClusterShell.NodeSet.NodeSetBase-class.html#__len__
371 ClusterShell.NodeSet.NodeSetBase.__isub__ ClusterShell.NodeSet.NodeSetBase-class.html#__isub__
372 ClusterShell.NodeSet.NodeSetBase._binary_sanity_check ClusterShell.NodeSet.NodeSetBase-class.html#_binary_sanity_check
373 ClusterShell.NodeSet.NodeSetBase.__getitem__ ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__
374 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference_update
375 ClusterShell.NodeSet.NodeSetBase.update ClusterShell.NodeSet.NodeSetBase-class.html#update
376 ClusterShell.NodeSet.NodeSetBase._iterbase ClusterShell.NodeSet.NodeSetBase-class.html#_iterbase
377 ClusterShell.NodeSet.NodeSetBase.__iter__ ClusterShell.NodeSet.NodeSetBase-class.html#__iter__
378 ClusterShell.NodeSet.NodeSetBase.__or__ ClusterShell.NodeSet.NodeSetBase-class.html#__or__
379 ClusterShell.NodeSet.NodeSetBase.__gt__ ClusterShell.NodeSet.NodeSetBase-class.html#__gt__
380 ClusterShell.NodeSet.NodeSetBase.intersection ClusterShell.NodeSet.NodeSetBase-class.html#intersection
381 ClusterShell.NodeSet.NodeSetBase.__eq__ ClusterShell.NodeSet.NodeSetBase-class.html#__eq__
382 ClusterShell.NodeSet.NodeSetBase.clear ClusterShell.NodeSet.NodeSetBase-class.html#clear
383 ClusterShell.NodeSet.NodeSetBase.intersection_update ClusterShell.NodeSet.NodeSetBase-class.html#intersection_update
384 ClusterShell.NodeSet.NodeSetBase.__xor__ ClusterShell.NodeSet.NodeSetBase-class.html#__xor__
385 ClusterShell.NodeSet.NodeSetBase.__ior__ ClusterShell.NodeSet.NodeSetBase-class.html#__ior__
386 ClusterShell.NodeSet.NodeSetBase.__le__ ClusterShell.NodeSet.NodeSetBase-class.html#__le__
387 ClusterShell.NodeSet.NodeSetBase.__sub__ ClusterShell.NodeSet.NodeSetBase-class.html#__sub__
388 ClusterShell.NodeSet.NodeSetBase.__ge__ ClusterShell.NodeSet.NodeSetBase-class.html#__ge__
389 ClusterShell.NodeSet.NodeSetException ClusterShell.NodeSet.NodeSetException-class.html
390 ClusterShell.NodeSet.NodeSetExternalError ClusterShell.NodeSet.NodeSetExternalError-class.html
391 ClusterShell.NodeSet.NodeSetParseError ClusterShell.NodeSet.NodeSetParseError-class.html
392 ClusterShell.NodeSet.NodeSetParseError.__init__ ClusterShell.NodeSet.NodeSetParseError-class.html#__init__
393 ClusterShell.NodeSet.NodeSetParseRangeError ClusterShell.NodeSet.NodeSetParseRangeError-class.html
394 ClusterShell.NodeSet.NodeSetParseRangeError.__init__ ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__
395 ClusterShell.NodeSet.ParsingEngine ClusterShell.NodeSet.ParsingEngine-class.html
396 ClusterShell.NodeSet.ParsingEngine.OP_CODES ClusterShell.NodeSet.ParsingEngine-class.html#OP_CODES
397 ClusterShell.NodeSet.ParsingEngine._next_op ClusterShell.NodeSet.ParsingEngine-class.html#_next_op
398 ClusterShell.NodeSet.ParsingEngine.parse_group ClusterShell.NodeSet.ParsingEngine-class.html#parse_group
399 ClusterShell.NodeSet.ParsingEngine.parse_string ClusterShell.NodeSet.ParsingEngine-class.html#parse_string
400 ClusterShell.NodeSet.ParsingEngine.parse ClusterShell.NodeSet.ParsingEngine-class.html#parse
401 ClusterShell.NodeSet.ParsingEngine.parse_group_string ClusterShell.NodeSet.ParsingEngine-class.html#parse_group_string
402 ClusterShell.NodeSet.ParsingEngine._scan_string ClusterShell.NodeSet.ParsingEngine-class.html#_scan_string
403 ClusterShell.NodeSet.ParsingEngine.__init__ ClusterShell.NodeSet.ParsingEngine-class.html#__init__
404 ClusterShell.NodeSet.RangeSet ClusterShell.NodeSet.RangeSet-class.html
405 ClusterShell.NodeSet.RangeSet.fromlist ClusterShell.NodeSet.RangeSet-class.html#fromlist
406 ClusterShell.NodeSet.RangeSet._expand ClusterShell.NodeSet.RangeSet-class.html#_expand
407 ClusterShell.NodeSet.RangeSet.issubset ClusterShell.NodeSet.RangeSet-class.html#issubset
408 ClusterShell.NodeSet.RangeSet.symmetric_difference ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference
409 ClusterShell.NodeSet.RangeSet.__str__ ClusterShell.NodeSet.RangeSet-class.html#__str__
410 ClusterShell.NodeSet.RangeSet.issuperset ClusterShell.NodeSet.RangeSet-class.html#issuperset
411 ClusterShell.NodeSet.RangeSet.intersection_update ClusterShell.NodeSet.RangeSet-class.html#intersection_update
412 ClusterShell.NodeSet.RangeSet.__and__ ClusterShell.NodeSet.RangeSet-class.html#__and__
413 ClusterShell.NodeSet.RangeSet.__lt__ ClusterShell.NodeSet.RangeSet-class.html#__lt__
414 ClusterShell.NodeSet.RangeSet.__init__ ClusterShell.NodeSet.RangeSet-class.html#__init__
415 ClusterShell.NodeSet.RangeSet.intersection ClusterShell.NodeSet.RangeSet-class.html#intersection
416 ClusterShell.NodeSet.RangeSet.__iand__ ClusterShell.NodeSet.RangeSet-class.html#__iand__
417 ClusterShell.NodeSet.RangeSet.__getslice__ ClusterShell.NodeSet.RangeSet-class.html#__getslice__
418 ClusterShell.NodeSet.RangeSet.__contains__ ClusterShell.NodeSet.RangeSet-class.html#__contains__
419 ClusterShell.NodeSet.RangeSet.union ClusterShell.NodeSet.RangeSet-class.html#union
420 ClusterShell.NodeSet.RangeSet._contains ClusterShell.NodeSet.RangeSet-class.html#_contains
421 ClusterShell.NodeSet.RangeSet.fromone ClusterShell.NodeSet.RangeSet-class.html#fromone
422 ClusterShell.NodeSet.RangeSet.add ClusterShell.NodeSet.RangeSet-class.html#add
423 ClusterShell.NodeSet.RangeSet.__ge__ ClusterShell.NodeSet.RangeSet-class.html#__ge__
424 ClusterShell.NodeSet.RangeSet.split ClusterShell.NodeSet.RangeSet-class.html#split
425 ClusterShell.NodeSet.RangeSet.__ixor__ ClusterShell.NodeSet.RangeSet-class.html#__ixor__
426 ClusterShell.NodeSet.RangeSet.__len__ ClusterShell.NodeSet.RangeSet-class.html#__len__
427 ClusterShell.NodeSet.RangeSet.__isub__ ClusterShell.NodeSet.RangeSet-class.html#__isub__
428 ClusterShell.NodeSet.RangeSet._fold ClusterShell.NodeSet.RangeSet-class.html#_fold
429 ClusterShell.NodeSet.RangeSet._binary_sanity_check ClusterShell.NodeSet.RangeSet-class.html#_binary_sanity_check
430 ClusterShell.NodeSet.RangeSet.__getitem__ ClusterShell.NodeSet.RangeSet-class.html#__getitem__
431 ClusterShell.NodeSet.RangeSet.symmetric_difference_update ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference_update
432 ClusterShell.NodeSet.RangeSet.update ClusterShell.NodeSet.RangeSet-class.html#update
433 ClusterShell.NodeSet.RangeSet.__iter__ ClusterShell.NodeSet.RangeSet-class.html#__iter__
434 ClusterShell.NodeSet.RangeSet.__or__ ClusterShell.NodeSet.RangeSet-class.html#__or__
435 ClusterShell.NodeSet.RangeSet.__gt__ ClusterShell.NodeSet.RangeSet-class.html#__gt__
436 ClusterShell.NodeSet.RangeSet.difference_update ClusterShell.NodeSet.RangeSet-class.html#difference_update
437 ClusterShell.NodeSet.RangeSet.difference ClusterShell.NodeSet.RangeSet-class.html#difference
438 ClusterShell.NodeSet.RangeSet.__eq__ ClusterShell.NodeSet.RangeSet-class.html#__eq__
439 ClusterShell.NodeSet.RangeSet._contains_with_padding ClusterShell.NodeSet.RangeSet-class.html#_contains_with_padding
440 ClusterShell.NodeSet.RangeSet.clear ClusterShell.NodeSet.RangeSet-class.html#clear
441 ClusterShell.NodeSet.RangeSet._xor_exfold ClusterShell.NodeSet.RangeSet-class.html#_xor_exfold
442 ClusterShell.NodeSet.RangeSet.remove ClusterShell.NodeSet.RangeSet-class.html#remove
443 ClusterShell.NodeSet.RangeSet.__xor__ ClusterShell.NodeSet.RangeSet-class.html#__xor__
444 ClusterShell.NodeSet.RangeSet.__ior__ ClusterShell.NodeSet.RangeSet-class.html#__ior__
445 ClusterShell.NodeSet.RangeSet.__le__ ClusterShell.NodeSet.RangeSet-class.html#__le__
446 ClusterShell.NodeSet.RangeSet.__repr__ ClusterShell.NodeSet.RangeSet-class.html#__repr__
447 ClusterShell.NodeSet.RangeSet._add_range_exfold ClusterShell.NodeSet.RangeSet-class.html#_add_range_exfold
448 ClusterShell.NodeSet.RangeSet.__sub__ ClusterShell.NodeSet.RangeSet-class.html#__sub__
449 ClusterShell.NodeSet.RangeSet.add_range ClusterShell.NodeSet.RangeSet-class.html#add_range
450 ClusterShell.NodeSet.RangeSet._sub_exfold ClusterShell.NodeSet.RangeSet-class.html#_sub_exfold
451 ClusterShell.NodeSet.RangeSet._intersect_exfold ClusterShell.NodeSet.RangeSet-class.html#_intersect_exfold
452 ClusterShell.NodeSet.RangeSetException ClusterShell.NodeSet.RangeSetException-class.html
453 ClusterShell.NodeSet.RangeSetPaddingError ClusterShell.NodeSet.RangeSetPaddingError-class.html
454 ClusterShell.NodeSet.RangeSetPaddingError.__init__ ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__
455 ClusterShell.NodeSet.RangeSetParseError ClusterShell.NodeSet.RangeSetParseError-class.html
456 ClusterShell.NodeSet.RangeSetParseError.__init__ ClusterShell.NodeSet.RangeSetParseError-class.html#__init__
457 ClusterShell.NodeUtils.GroupResolver ClusterShell.NodeUtils.GroupResolver-class.html
458 ClusterShell.NodeUtils.GroupResolver.grouplist ClusterShell.NodeUtils.GroupResolver-class.html#grouplist
459 ClusterShell.NodeUtils.GroupResolver.sources ClusterShell.NodeUtils.GroupResolver-class.html#sources
460 ClusterShell.NodeUtils.GroupResolver.node_groups ClusterShell.NodeUtils.GroupResolver-class.html#node_groups
461 ClusterShell.NodeUtils.GroupResolver.__init__ ClusterShell.NodeUtils.GroupResolver-class.html#__init__
462 ClusterShell.NodeUtils.GroupResolver.add_source ClusterShell.NodeUtils.GroupResolver-class.html#add_source
463 ClusterShell.NodeUtils.GroupResolver._list ClusterShell.NodeUtils.GroupResolver-class.html#_list
464 ClusterShell.NodeUtils.GroupResolver._source ClusterShell.NodeUtils.GroupResolver-class.html#_source
465 ClusterShell.NodeUtils.GroupResolver.group_nodes ClusterShell.NodeUtils.GroupResolver-class.html#group_nodes
466 ClusterShell.NodeUtils.GroupResolver.has_node_groups ClusterShell.NodeUtils.GroupResolver-class.html#has_node_groups
467 ClusterShell.NodeUtils.GroupResolver.all_nodes ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes
468 ClusterShell.NodeUtils.GroupResolver.set_verbosity ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity
469 ClusterShell.NodeUtils.GroupResolverConfig ClusterShell.NodeUtils.GroupResolverConfig-class.html
470 ClusterShell.NodeUtils.GroupResolver.grouplist ClusterShell.NodeUtils.GroupResolver-class.html#grouplist
471 ClusterShell.NodeUtils.GroupResolverConfig.sources ClusterShell.NodeUtils.GroupResolverConfig-class.html#sources
472 ClusterShell.NodeUtils.GroupResolver.node_groups ClusterShell.NodeUtils.GroupResolver-class.html#node_groups
473 ClusterShell.NodeUtils.GroupResolverConfig.__init__ ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__
474 ClusterShell.NodeUtils.GroupResolver.add_source ClusterShell.NodeUtils.GroupResolver-class.html#add_source
475 ClusterShell.NodeUtils.GroupResolver._list ClusterShell.NodeUtils.GroupResolver-class.html#_list
476 ClusterShell.NodeUtils.GroupResolverConfig._source ClusterShell.NodeUtils.GroupResolverConfig-class.html#_source
477 ClusterShell.NodeUtils.GroupResolver.group_nodes ClusterShell.NodeUtils.GroupResolver-class.html#group_nodes
478 ClusterShell.NodeUtils.GroupResolver.has_node_groups ClusterShell.NodeUtils.GroupResolver-class.html#has_node_groups
479 ClusterShell.NodeUtils.GroupResolver.all_nodes ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes
480 ClusterShell.NodeUtils.GroupResolver.set_verbosity ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity
481 ClusterShell.NodeUtils.GroupResolverConfigError ClusterShell.NodeUtils.GroupResolverConfigError-class.html
482 ClusterShell.NodeUtils.GroupResolverError ClusterShell.NodeUtils.GroupResolverError-class.html
483 ClusterShell.NodeUtils.GroupResolverSourceError ClusterShell.NodeUtils.GroupResolverSourceError-class.html
484 ClusterShell.NodeUtils.GroupSource ClusterShell.NodeUtils.GroupSource-class.html
485 ClusterShell.NodeUtils.GroupSource.resolv_list ClusterShell.NodeUtils.GroupSource-class.html#resolv_list
486 ClusterShell.NodeUtils.GroupSource._upcall_read ClusterShell.NodeUtils.GroupSource-class.html#_upcall_read
487 ClusterShell.NodeUtils.GroupSource._verbose_print ClusterShell.NodeUtils.GroupSource-class.html#_verbose_print
488 ClusterShell.NodeUtils.GroupSource.resolv_all ClusterShell.NodeUtils.GroupSource-class.html#resolv_all
489 ClusterShell.NodeUtils.GroupSource.resolv_reverse ClusterShell.NodeUtils.GroupSource-class.html#resolv_reverse
490 ClusterShell.NodeUtils.GroupSource.resolv_map ClusterShell.NodeUtils.GroupSource-class.html#resolv_map
491 ClusterShell.NodeUtils.GroupSource.__init__ ClusterShell.NodeUtils.GroupSource-class.html#__init__
492 ClusterShell.NodeUtils.GroupSourceException ClusterShell.NodeUtils.GroupSourceException-class.html
493 ClusterShell.NodeUtils.GroupSourceException.__init__ ClusterShell.NodeUtils.GroupSourceException-class.html#__init__
494 ClusterShell.NodeUtils.GroupSourceNoUpcall ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html
495 ClusterShell.NodeUtils.GroupSourceException.__init__ ClusterShell.NodeUtils.GroupSourceException-class.html#__init__
496 ClusterShell.NodeUtils.GroupSourceQueryFailed ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html
497 ClusterShell.NodeUtils.GroupSourceException.__init__ ClusterShell.NodeUtils.GroupSourceException-class.html#__init__
498 ClusterShell.Task.AlreadyRunningError ClusterShell.Task.AlreadyRunningError-class.html
499 ClusterShell.Task.Task ClusterShell.Task.Task-class.html
500 ClusterShell.Task.Task.node_retcode ClusterShell.Task.Task-class.html#node_retcode
501 ClusterShell.Task.Task.iter_buffers ClusterShell.Task.Task-class.html#iter_buffers
502 ClusterShell.Task.Task.set_info ClusterShell.Task.Task-class.html#set_info
503 ClusterShell.Task.Task._flush_errors_by_worker ClusterShell.Task.Task-class.html#_flush_errors_by_worker
504 ClusterShell.Task.Task._task_lock ClusterShell.Task.Task-class.html#_task_lock
505 ClusterShell.Task.Task.suspend ClusterShell.Task.Task-class.html#suspend
506 ClusterShell.Task.Task._getexcepthook ClusterShell.Task.Task-class.html#_getexcepthook
507 ClusterShell.Task.Task._krc_iter_by_worker ClusterShell.Task.Task-class.html#_krc_iter_by_worker
508 ClusterShell.Task.Task.excepthook ClusterShell.Task.Task-class.html#excepthook
509 ClusterShell.Task.Task._setexcepthook ClusterShell.Task.Task-class.html#_setexcepthook
510 ClusterShell.Task.Task.flush_errors ClusterShell.Task.Task-class.html#flush_errors
511 ClusterShell.Task.Task.port ClusterShell.Task.Task-class.html#port
512 ClusterShell.Task.Task.__init__ ClusterShell.Task.Task-class.html#__init__
513 ClusterShell.Task.Task.copy ClusterShell.Task.Task-class.html#copy
514 ClusterShell.Task.Task.key_buffer ClusterShell.Task.Task-class.html#key_buffer
515 ClusterShell.Task.Task.__new__ ClusterShell.Task.Task-class.html#__new__
516 ClusterShell.Task.Task._flush_buffers_by_worker ClusterShell.Task.Task-class.html#_flush_buffers_by_worker
517 ClusterShell.Task.Task._timeout_add ClusterShell.Task.Task-class.html#_timeout_add
518 ClusterShell.Task.Task._call_tree_matcher ClusterShell.Task.Task-class.html#_call_tree_matcher
519 ClusterShell.Task.Task.max_retcode ClusterShell.Task.Task-class.html#max_retcode
520 ClusterShell.Task.Task._rc_set ClusterShell.Task.Task-class.html#_rc_set
521 ClusterShell.Task.Task.iter_retcodes ClusterShell.Task.Task-class.html#iter_retcodes
522 ClusterShell.Task.Task._rc_by_source ClusterShell.Task.Task-class.html#_rc_by_source
523 ClusterShell.Task.Task._SyncMsgHandler ClusterShell.Task.Task._SyncMsgHandler-class.html
524 ClusterShell.Task.Task._SuspendCondition ClusterShell.Task.Task._SuspendCondition-class.html
525 ClusterShell.Task.Task._msg_add ClusterShell.Task.Task-class.html#_msg_add
526 ClusterShell.Task.Task.key_retcode ClusterShell.Task.Task-class.html#key_retcode
527 ClusterShell.Task.Task.set_default ClusterShell.Task.Task-class.html#set_default
528 ClusterShell.Task.Task._tasks ClusterShell.Task.Task-class.html#_tasks
529 ClusterShell.Task.Task._resume_thread ClusterShell.Task.Task-class.html#_resume_thread
530 ClusterShell.Task.Task._terminate ClusterShell.Task.Task-class.html#_terminate
531 ClusterShell.Task.Task._errmsg_by_source ClusterShell.Task.Task-class.html#_errmsg_by_source
532 ClusterShell.Task.Task.timer ClusterShell.Task.Task-class.html#timer
533 ClusterShell.Task.Task._run ClusterShell.Task.Task-class.html#_run
534 ClusterShell.Task.Task.shell ClusterShell.Task.Task-class.html#shell
535 ClusterShell.Task.Task.running ClusterShell.Task.Task-class.html#running
536 ClusterShell.Task.Task._taskid_max ClusterShell.Task.Task-class.html#_taskid_max
537 ClusterShell.Task.Task.num_timeout ClusterShell.Task.Task-class.html#num_timeout
538 ClusterShell.Task.Task.iter_keys_timeout ClusterShell.Task.Task-class.html#iter_keys_timeout
539 ClusterShell.Task.Task.schedule ClusterShell.Task.Task-class.html#schedule
540 ClusterShell.Task.Task._rc_iter_by_worker ClusterShell.Task.Task-class.html#_rc_iter_by_worker
541 ClusterShell.Task.Task._resume ClusterShell.Task.Task-class.html#_resume
542 ClusterShell.Task.Task._rc_iter_by_key ClusterShell.Task.Task-class.html#_rc_iter_by_key
543 ClusterShell.Task.Task.iter_errors ClusterShell.Task.Task-class.html#iter_errors
544 ClusterShell.Task.Task._thread_start ClusterShell.Task.Task-class.html#_thread_start
545 ClusterShell.Task.Task._num_timeout_by_worker ClusterShell.Task.Task-class.html#_num_timeout_by_worker
546 ClusterShell.Task.Task._is_task_self ClusterShell.Task.Task-class.html#_is_task_self
547 ClusterShell.Task.Task._std_default ClusterShell.Task.Task-class.html#_std_default
548 ClusterShell.Task.Task.key_error ClusterShell.Task.Task-class.html#key_error
549 ClusterShell.Task.Task.node_buffer ClusterShell.Task.Task-class.html#node_buffer
550 ClusterShell.Task.Task.wait ClusterShell.Task.Task-class.html#wait
551 ClusterShell.Task.Task.info ClusterShell.Task.Task-class.html#info
552 ClusterShell.Task.Task._msg_by_source ClusterShell.Task.Task-class.html#_msg_by_source
553 ClusterShell.Task.Task.tasksyncmethod ClusterShell.Task.Task.tasksyncmethod-class.html
554 ClusterShell.Task.Task.join ClusterShell.Task.Task-class.html#join
555 ClusterShell.Task.Task._excepthook ClusterShell.Task.Task-class.html#_excepthook
556 ClusterShell.Task.Task._add_port ClusterShell.Task.Task-class.html#_add_port
557 ClusterShell.Task.Task.default ClusterShell.Task.Task-class.html#default
558 ClusterShell.Task.Task._errmsg_add ClusterShell.Task.Task-class.html#_errmsg_add
559 ClusterShell.Task.Task._abort ClusterShell.Task.Task-class.html#_abort
560 ClusterShell.Task.Task.resume ClusterShell.Task.Task-class.html#resume
561 ClusterShell.Task.Task._std_info ClusterShell.Task.Task-class.html#_std_info
562 ClusterShell.Task.Task._iter_keys_timeout_by_worker ClusterShell.Task.Task-class.html#_iter_keys_timeout_by_worker
563 ClusterShell.Task.Task.abort ClusterShell.Task.Task-class.html#abort
564 ClusterShell.Task.Task.node_error ClusterShell.Task.Task-class.html#node_error
565 ClusterShell.Task.Task._suspend_wait ClusterShell.Task.Task-class.html#_suspend_wait
566 ClusterShell.Task.Task.default_excepthook ClusterShell.Task.Task-class.html#default_excepthook
567 ClusterShell.Task.Task._remove_port ClusterShell.Task.Task-class.html#_remove_port
568 ClusterShell.Task.Task._reset ClusterShell.Task.Task-class.html#_reset
569 ClusterShell.Task.Task.flush_buffers ClusterShell.Task.Task-class.html#flush_buffers
570 ClusterShell.Task.Task._SuspendCondition ClusterShell.Task.Task._SuspendCondition-class.html
571 ClusterShell.Task.Task._SuspendCondition.wait_check ClusterShell.Task.Task._SuspendCondition-class.html#wait_check
572 ClusterShell.Task.Task._SuspendCondition.atomic_inc ClusterShell.Task.Task._SuspendCondition-class.html#atomic_inc
573 ClusterShell.Task.Task._SuspendCondition.notify_all ClusterShell.Task.Task._SuspendCondition-class.html#notify_all
574 ClusterShell.Task.Task._SuspendCondition.atomic_dec ClusterShell.Task.Task._SuspendCondition-class.html#atomic_dec
575 ClusterShell.Task.Task._SuspendCondition.__init__ ClusterShell.Task.Task._SuspendCondition-class.html#__init__
576 ClusterShell.Task.Task._SyncMsgHandler ClusterShell.Task.Task._SyncMsgHandler-class.html
577 ClusterShell.Event.EventHandler.ev_read ClusterShell.Event.EventHandler-class.html#ev_read
578 ClusterShell.Event.EventHandler.ev_error ClusterShell.Event.EventHandler-class.html#ev_error
579 ClusterShell.Event.EventHandler.ev_start ClusterShell.Event.EventHandler-class.html#ev_start
580 ClusterShell.Event.EventHandler.ev_close ClusterShell.Event.EventHandler-class.html#ev_close
581 ClusterShell.Event.EventHandler.ev_written ClusterShell.Event.EventHandler-class.html#ev_written
582 ClusterShell.Event.EventHandler.ev_timeout ClusterShell.Event.EventHandler-class.html#ev_timeout
583 ClusterShell.Task.Task._SyncMsgHandler.ev_msg ClusterShell.Task.Task._SyncMsgHandler-class.html#ev_msg
584 ClusterShell.Event.EventHandler.ev_timer ClusterShell.Event.EventHandler-class.html#ev_timer
585 ClusterShell.Event.EventHandler.ev_hup ClusterShell.Event.EventHandler-class.html#ev_hup
586 ClusterShell.Event.EventHandler._invoke ClusterShell.Event.EventHandler-class.html#_invoke
587 ClusterShell.Task.Task.tasksyncmethod ClusterShell.Task.Task.tasksyncmethod-class.html
588 ClusterShell.Task.Task.tasksyncmethod.__call__ ClusterShell.Task.Task.tasksyncmethod-class.html#__call__
589 ClusterShell.Task.TaskError ClusterShell.Task.TaskError-class.html
590 ClusterShell.Task.TaskException ClusterShell.Task.TaskException-class.html
591 ClusterShell.Task.TaskMsgTreeError ClusterShell.Task.TaskMsgTreeError-class.html
592 ClusterShell.Task.TimeoutError ClusterShell.Task.TimeoutError-class.html
593 ClusterShell.Task._TaskMsgTree ClusterShell.Task._TaskMsgTree-class.html
594 ClusterShell.Task._TaskMsgTree.__getattr__ ClusterShell.Task._TaskMsgTree-class.html#__getattr__
595 ClusterShell.Task._TaskMsgTree.__init__ ClusterShell.Task._TaskMsgTree-class.html#__init__
596 ClusterShell.Worker.EngineClient.EngineClient ClusterShell.Worker.EngineClient.EngineClient-class.html
597 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
598 ClusterShell.Worker.EngineClient.EngineClient._handle_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error
599 ClusterShell.Worker.EngineClient.EngineClient._set_writing ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing
600 ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock
601 ClusterShell.Worker.EngineClient.EngineClient._handle_write ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write
602 ClusterShell.Worker.EngineClient.EngineClient._start ClusterShell.Worker.EngineClient.EngineClient-class.html#_start
603 ClusterShell.Worker.EngineClient.EngineClient._handle_read ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read
604 ClusterShell.Worker.EngineClient.EngineClient.__init__ ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__
605 ClusterShell.Worker.EngineClient.EngineClient._readerr ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr
606 ClusterShell.Worker.EngineClient.EngineClient._readlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines
607 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
608 ClusterShell.Worker.EngineClient.EngineClient._set_reading ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading
609 ClusterShell.Worker.EngineClient.EngineClient._close ClusterShell.Worker.EngineClient.EngineClient-class.html#_close
610 ClusterShell.Worker.EngineClient.EngineClient._fire ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire
611 ClusterShell.Worker.EngineClient.EngineClient.writer_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno
612 ClusterShell.Worker.EngineClient.EngineClient.reader_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno
613 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
614 ClusterShell.Worker.EngineClient.EngineClient._close_writer ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer
615 ClusterShell.Worker.EngineClient.EngineClient._write ClusterShell.Worker.EngineClient.EngineClient-class.html#_write
616 ClusterShell.Worker.EngineClient.EngineClient._readerrlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines
617 ClusterShell.Worker.EngineClient.EngineClient._set_reading_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error
618 ClusterShell.Worker.EngineClient.EngineClient._read ClusterShell.Worker.EngineClient.EngineClient-class.html#_read
619 ClusterShell.Worker.EngineClient.EngineClient.error_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno
620 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
621 ClusterShell.Worker.EngineClient.EngineClient._set_write_eof ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof
622 ClusterShell.Worker.EngineClient.EngineClientEOF ClusterShell.Worker.EngineClient.EngineClientEOF-class.html
623 ClusterShell.Worker.EngineClient.EngineClientError ClusterShell.Worker.EngineClient.EngineClientError-class.html
624 ClusterShell.Worker.EngineClient.EngineClientException ClusterShell.Worker.EngineClient.EngineClientException-class.html
625 ClusterShell.Worker.EngineClient.EngineClientNotSupportedError ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html
626 ClusterShell.Worker.EngineClient.EnginePort ClusterShell.Worker.EngineClient.EnginePort-class.html
627 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
628 ClusterShell.Worker.EngineClient.EngineClient._handle_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error
629 ClusterShell.Worker.EngineClient.EngineClient._set_writing ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing
630 ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock
631 ClusterShell.Worker.EngineClient.EngineClient._handle_write ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write
632 ClusterShell.Worker.EngineClient.EnginePort._start ClusterShell.Worker.EngineClient.EnginePort-class.html#_start
633 ClusterShell.Worker.EngineClient.EnginePort._handle_read ClusterShell.Worker.EngineClient.EnginePort-class.html#_handle_read
634 ClusterShell.Worker.EngineClient.EnginePort.__init__ ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__
635 ClusterShell.Worker.EngineClient.EngineClient._readerr ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr
636 ClusterShell.Worker.EngineClient.EngineClient._readlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines
637 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
638 ClusterShell.Worker.EngineClient.EngineClient._set_reading ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading
639 ClusterShell.Worker.EngineClient.EnginePort.msg ClusterShell.Worker.EngineClient.EnginePort-class.html#msg
640 ClusterShell.Worker.EngineClient.EnginePort._close ClusterShell.Worker.EngineClient.EnginePort-class.html#_close
641 ClusterShell.Worker.EngineClient.EngineClient._fire ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire
642 ClusterShell.Worker.EngineClient.EngineClient.writer_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno
643 ClusterShell.Worker.EngineClient.EngineClient.reader_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno
644 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
645 ClusterShell.Worker.EngineClient.EngineClient._close_writer ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer
646 ClusterShell.Worker.EngineClient.EngineClient._write ClusterShell.Worker.EngineClient.EngineClient-class.html#_write
647 ClusterShell.Worker.EngineClient.EnginePort.msg_send ClusterShell.Worker.EngineClient.EnginePort-class.html#msg_send
648 ClusterShell.Worker.EngineClient.EngineClient._readerrlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines
649 ClusterShell.Worker.EngineClient.EngineClient._set_reading_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error
650 ClusterShell.Worker.EngineClient.EnginePort._read ClusterShell.Worker.EngineClient.EnginePort-class.html#_read
651 ClusterShell.Worker.EngineClient.EngineClient.error_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno
652 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
653 ClusterShell.Worker.EngineClient.EngineClient._set_write_eof ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof
654 ClusterShell.Worker.EngineClient.EnginePort._Msg ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html
655 ClusterShell.Worker.EngineClient.EnginePort._Msg ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html
656 ClusterShell.Worker.EngineClient.EnginePort._Msg.sync ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#sync
657 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__ ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__
658 ClusterShell.Worker.EngineClient.EnginePort._Msg.get ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get
659 ClusterShell.Worker.Pdsh.WorkerPdsh ClusterShell.Worker.Pdsh.WorkerPdsh-class.html
660 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
661 ClusterShell.Worker.Pdsh.WorkerPdsh._handle_error ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_error
662 ClusterShell.Worker.Worker.DistantWorker.node_rc ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc
663 ClusterShell.Worker.Worker.DistantWorker.last_read ClusterShell.Worker.Worker.DistantWorker-class.html#last_read
664 ClusterShell.Worker.Worker.DistantWorker.iter_node_errors ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors
665 ClusterShell.Worker.EngineClient.EngineClient._set_writing ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing
666 ClusterShell.Worker.Worker.DistantWorker.last_error ClusterShell.Worker.Worker.DistantWorker-class.html#last_error
667 ClusterShell.Worker.Worker.Worker._set_task ClusterShell.Worker.Worker.Worker-class.html#_set_task
668 ClusterShell.Worker.Worker.DistantWorker.iter_node_buffers ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers
669 ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock
670 ClusterShell.Worker.Worker.DistantWorker.node_error_buffer ClusterShell.Worker.Worker.DistantWorker-class.html#node_error_buffer
671 ClusterShell.Worker.Worker.DistantWorker.node_retcode ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode
672 ClusterShell.Worker.EngineClient.EngineClient._handle_write ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write
673 ClusterShell.Worker.Worker.DistantWorker.iter_buffers ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers
674 ClusterShell.Worker.Worker.DistantWorker.last_retcode ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode
675 ClusterShell.Worker.Pdsh.WorkerPdsh._start ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_start
676 ClusterShell.Worker.Pdsh.WorkerPdsh._handle_read ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_read
677 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__ ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__
678 ClusterShell.Worker.Worker.Worker._invoke ClusterShell.Worker.Worker.Worker-class.html#_invoke
679 ClusterShell.Worker.Worker.Worker.did_timeout ClusterShell.Worker.Worker.Worker-class.html#did_timeout
680 ClusterShell.Worker.EngineClient.EngineClient._close_writer ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer
681 ClusterShell.Worker.EngineClient.EngineClient._readlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines
682 ClusterShell.Worker.Worker.Worker.flush_errors ClusterShell.Worker.Worker.Worker-class.html#flush_errors
683 ClusterShell.Worker.Pdsh.WorkerPdsh.write ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#write
684 ClusterShell.Worker.Worker.DistantWorker.iter_retcodes ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes
685 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
686 ClusterShell.Worker.EngineClient.EngineClient._set_reading ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading
687 ClusterShell.Worker.Worker.DistantWorker.last_node ClusterShell.Worker.Worker.DistantWorker-class.html#last_node
688 ClusterShell.Worker.Worker.DistantWorker._on_node_timeout ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_timeout
689 ClusterShell.Worker.Pdsh.WorkerPdsh._close ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_close
690 ClusterShell.Worker.Pdsh.WorkerPdsh._parse_line ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_parse_line
691 ClusterShell.Worker.Pdsh.WorkerPdsh._on_node_rc ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_on_node_rc
692 ClusterShell.Worker.Worker.DistantWorker._on_start ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start
693 ClusterShell.Worker.Worker.DistantWorker.num_timeout ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout
694 ClusterShell.Worker.Worker.DistantWorker.iter_keys_timeout ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout
695 ClusterShell.Worker.EngineClient.EngineClient._fire ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire
696 ClusterShell.Worker.Pdsh.WorkerPdsh._engine_clients ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_engine_clients
697 ClusterShell.Worker.Worker.DistantWorker._on_node_errline ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline
698 ClusterShell.Worker.EngineClient.EngineClient.writer_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno
699 ClusterShell.Worker.Worker.DistantWorker.iter_errors ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors
700 ClusterShell.Worker.EngineClient.EngineClient.reader_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno
701 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
702 ClusterShell.Worker.EngineClient.EngineClient._readerr ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr
703 ClusterShell.Worker.EngineClient.EngineClient._write ClusterShell.Worker.EngineClient.EngineClient-class.html#_write
704 ClusterShell.Worker.Worker.DistantWorker.node_buffer ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer
705 ClusterShell.Worker.EngineClient.EngineClient._readerrlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines
706 ClusterShell.Worker.EngineClient.EngineClient._set_reading_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error
707 ClusterShell.Worker.EngineClient.EngineClient._read ClusterShell.Worker.EngineClient.EngineClient-class.html#_read
708 ClusterShell.Worker.EngineClient.EngineClient.error_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno
709 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
710 ClusterShell.Worker.Worker.DistantWorker._on_node_msgline ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline
711 ClusterShell.Worker.Worker.DistantWorker.node_error ClusterShell.Worker.Worker.DistantWorker-class.html#node_error
712 ClusterShell.Worker.Worker.Worker._task_bound_check ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check
713 ClusterShell.Worker.EngineClient.EngineClient._set_write_eof ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof
714 ClusterShell.Worker.Worker.DistantWorker.iter_node_retcodes ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_retcodes
715 ClusterShell.Worker.Worker.Worker.flush_buffers ClusterShell.Worker.Worker.Worker-class.html#flush_buffers
716 ClusterShell.Worker.Popen.WorkerPopen ClusterShell.Worker.Popen.WorkerPopen-class.html
717 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
718 ClusterShell.Worker.Worker.WorkerSimple._handle_error ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_error
719 ClusterShell.Worker.Worker.WorkerSimple.last_read ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read
720 ClusterShell.Worker.EngineClient.EngineClient._set_writing ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing
721 ClusterShell.Worker.Worker.WorkerSimple.last_error ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error
722 ClusterShell.Worker.Worker.Worker._set_task ClusterShell.Worker.Worker.Worker-class.html#_set_task
723 ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock
724 ClusterShell.Worker.Worker.WorkerSimple._on_errmsgline ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_errmsgline
725 ClusterShell.Worker.EngineClient.EngineClient._handle_write ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write
726 ClusterShell.Worker.Worker.Worker._task_bound_check ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check
727 ClusterShell.Worker.Popen.WorkerPopen._start ClusterShell.Worker.Popen.WorkerPopen-class.html#_start
728 ClusterShell.Worker.Worker.WorkerSimple._handle_read ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read
729 ClusterShell.Worker.Popen.WorkerPopen.__init__ ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__
730 ClusterShell.Worker.Worker.Worker._invoke ClusterShell.Worker.Worker.Worker-class.html#_invoke
731 ClusterShell.Worker.Worker.Worker.did_timeout ClusterShell.Worker.Worker.Worker-class.html#did_timeout
732 ClusterShell.Worker.Worker.WorkerSimple._readerr ClusterShell.Worker.Worker.WorkerSimple-class.html#_readerr
733 ClusterShell.Worker.Popen.WorkerPopen.retcode ClusterShell.Worker.Popen.WorkerPopen-class.html#retcode
734 ClusterShell.Worker.EngineClient.EngineClient._readlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines
735 ClusterShell.Worker.Worker.Worker.flush_errors ClusterShell.Worker.Worker.Worker-class.html#flush_errors
736 ClusterShell.Worker.Worker.WorkerSimple.write ClusterShell.Worker.Worker.WorkerSimple-class.html#write
737 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
738 ClusterShell.Worker.EngineClient.EngineClient._set_reading ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading
739 ClusterShell.Worker.Popen.WorkerPopen._close ClusterShell.Worker.Popen.WorkerPopen-class.html#_close
740 ClusterShell.Worker.Worker.WorkerSimple.set_write_eof ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof
741 ClusterShell.Worker.Worker.WorkerSimple._on_timeout ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_timeout
742 ClusterShell.Worker.Worker.WorkerSimple.read ClusterShell.Worker.Worker.WorkerSimple-class.html#read
743 ClusterShell.Worker.Worker.WorkerSimple._on_msgline ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_msgline
744 ClusterShell.Worker.EngineClient.EngineClient._fire ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire
745 ClusterShell.Worker.Worker.WorkerSimple._engine_clients ClusterShell.Worker.Worker.WorkerSimple-class.html#_engine_clients
746 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno
747 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno
748 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
749 ClusterShell.Worker.EngineClient.EngineClient._close_writer ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer
750 ClusterShell.Worker.EngineClient.EngineClient._write ClusterShell.Worker.EngineClient.EngineClient-class.html#_write
751 ClusterShell.Worker.Popen.WorkerPopen._on_rc ClusterShell.Worker.Popen.WorkerPopen-class.html#_on_rc
752 ClusterShell.Worker.EngineClient.EngineClient._readerrlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines
753 ClusterShell.Worker.EngineClient.EngineClient._set_reading_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error
754 ClusterShell.Worker.Worker.WorkerSimple._read ClusterShell.Worker.Worker.WorkerSimple-class.html#_read
755 ClusterShell.Worker.Worker.WorkerSimple.set_key ClusterShell.Worker.Worker.WorkerSimple-class.html#set_key
756 ClusterShell.Worker.Worker.WorkerSimple.error_fileno ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno
757 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
758 ClusterShell.Worker.Worker.WorkerSimple.error ClusterShell.Worker.Worker.WorkerSimple-class.html#error
759 ClusterShell.Worker.EngineClient.EngineClient._set_write_eof ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof
760 ClusterShell.Worker.Worker.Worker.flush_buffers ClusterShell.Worker.Worker.Worker-class.html#flush_buffers
761 ClusterShell.Worker.Ssh.Scp ClusterShell.Worker.Ssh.Scp-class.html
762 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
763 ClusterShell.Worker.Ssh.Ssh._handle_error ClusterShell.Worker.Ssh.Ssh-class.html#_handle_error
764 ClusterShell.Worker.EngineClient.EngineClient._set_writing ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing
765 ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock
766 ClusterShell.Worker.EngineClient.EngineClient._set_write_eof ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof
767 ClusterShell.Worker.Ssh.Scp._start ClusterShell.Worker.Ssh.Scp-class.html#_start
768 ClusterShell.Worker.Ssh.Ssh._handle_read ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read
769 ClusterShell.Worker.Ssh.Scp.__init__ ClusterShell.Worker.Ssh.Scp-class.html#__init__
770 ClusterShell.Worker.EngineClient.EngineClient._readerr ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr
771 ClusterShell.Worker.EngineClient.EngineClient._readlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines
772 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
773 ClusterShell.Worker.EngineClient.EngineClient._set_reading ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading
774 ClusterShell.Worker.Ssh.Ssh._close ClusterShell.Worker.Ssh.Ssh-class.html#_close
775 ClusterShell.Worker.EngineClient.EngineClient._fire ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire
776 ClusterShell.Worker.EngineClient.EngineClient.writer_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno
777 ClusterShell.Worker.EngineClient.EngineClient.reader_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno
778 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
779 ClusterShell.Worker.EngineClient.EngineClient._close_writer ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer
780 ClusterShell.Worker.EngineClient.EngineClient._write ClusterShell.Worker.EngineClient.EngineClient-class.html#_write
781 ClusterShell.Worker.EngineClient.EngineClient._readerrlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines
782 ClusterShell.Worker.EngineClient.EngineClient._set_reading_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error
783 ClusterShell.Worker.EngineClient.EngineClient._read ClusterShell.Worker.EngineClient.EngineClient-class.html#_read
784 ClusterShell.Worker.EngineClient.EngineClient.error_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno
785 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
786 ClusterShell.Worker.EngineClient.EngineClient._handle_write ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write
787 ClusterShell.Worker.Ssh.Ssh ClusterShell.Worker.Ssh.Ssh-class.html
788 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
789 ClusterShell.Worker.Ssh.Ssh._handle_error ClusterShell.Worker.Ssh.Ssh-class.html#_handle_error
790 ClusterShell.Worker.EngineClient.EngineClient._set_writing ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing
791 ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock
792 ClusterShell.Worker.EngineClient.EngineClient._set_write_eof ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof
793 ClusterShell.Worker.Ssh.Ssh._start ClusterShell.Worker.Ssh.Ssh-class.html#_start
794 ClusterShell.Worker.Ssh.Ssh._handle_read ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read
795 ClusterShell.Worker.Ssh.Ssh.__init__ ClusterShell.Worker.Ssh.Ssh-class.html#__init__
796 ClusterShell.Worker.EngineClient.EngineClient._readerr ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr
797 ClusterShell.Worker.EngineClient.EngineClient._readlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines
798 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
799 ClusterShell.Worker.EngineClient.EngineClient._set_reading ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading
800 ClusterShell.Worker.Ssh.Ssh._close ClusterShell.Worker.Ssh.Ssh-class.html#_close
801 ClusterShell.Worker.EngineClient.EngineClient._fire ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire
802 ClusterShell.Worker.EngineClient.EngineClient.writer_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno
803 ClusterShell.Worker.EngineClient.EngineClient.reader_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno
804 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
805 ClusterShell.Worker.EngineClient.EngineClient._close_writer ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer
806 ClusterShell.Worker.EngineClient.EngineClient._write ClusterShell.Worker.EngineClient.EngineClient-class.html#_write
807 ClusterShell.Worker.EngineClient.EngineClient._readerrlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines
808 ClusterShell.Worker.EngineClient.EngineClient._set_reading_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error
809 ClusterShell.Worker.EngineClient.EngineClient._read ClusterShell.Worker.EngineClient.EngineClient-class.html#_read
810 ClusterShell.Worker.EngineClient.EngineClient.error_fileno ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno
811 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
812 ClusterShell.Worker.EngineClient.EngineClient._handle_write ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write
813 ClusterShell.Worker.Ssh.WorkerSsh ClusterShell.Worker.Ssh.WorkerSsh-class.html
814 ClusterShell.Worker.Worker.DistantWorker.iter_node_errors ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors
815 ClusterShell.Worker.Worker.DistantWorker.node_retcode ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode
816 ClusterShell.Worker.Worker.DistantWorker.node_rc ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc
817 ClusterShell.Worker.Worker.DistantWorker.last_read ClusterShell.Worker.Worker.DistantWorker-class.html#last_read
818 ClusterShell.Worker.Worker.DistantWorker.last_error ClusterShell.Worker.Worker.DistantWorker-class.html#last_error
819 ClusterShell.Worker.Worker.Worker._set_task ClusterShell.Worker.Worker.Worker-class.html#_set_task
820 ClusterShell.Worker.Worker.DistantWorker.iter_node_buffers ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers
821 ClusterShell.Worker.Worker.DistantWorker.node_error_buffer ClusterShell.Worker.Worker.DistantWorker-class.html#node_error_buffer
822 ClusterShell.Worker.Worker.DistantWorker._on_node_msgline ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline
823 ClusterShell.Worker.Worker.DistantWorker.iter_buffers ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers
824 ClusterShell.Worker.Worker.DistantWorker.last_retcode ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode
825 ClusterShell.Worker.Worker.Worker.flush_errors ClusterShell.Worker.Worker.Worker-class.html#flush_errors
826 ClusterShell.Worker.Ssh.WorkerSsh.__init__ ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__
827 ClusterShell.Worker.Worker.Worker.did_timeout ClusterShell.Worker.Worker.Worker-class.html#did_timeout
828 ClusterShell.Worker.Ssh.WorkerSsh.write ClusterShell.Worker.Ssh.WorkerSsh-class.html#write
829 ClusterShell.Worker.Worker.DistantWorker.iter_retcodes ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes
830 ClusterShell.Worker.Worker.DistantWorker.last_node ClusterShell.Worker.Worker.DistantWorker-class.html#last_node
831 ClusterShell.Worker.Ssh.WorkerSsh._on_node_timeout ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_timeout
832 ClusterShell.Worker.Ssh.WorkerSsh.set_write_eof ClusterShell.Worker.Ssh.WorkerSsh-class.html#set_write_eof
833 ClusterShell.Worker.Ssh.WorkerSsh._on_node_rc ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_rc
834 ClusterShell.Worker.Worker.DistantWorker.iter_keys_timeout ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout
835 ClusterShell.Worker.Worker.DistantWorker.num_timeout ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout
836 ClusterShell.Worker.Worker.DistantWorker._on_start ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start
837 ClusterShell.Worker.Ssh.WorkerSsh._engine_clients ClusterShell.Worker.Ssh.WorkerSsh-class.html#_engine_clients
838 ClusterShell.Worker.Worker.DistantWorker._on_node_errline ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline
839 ClusterShell.Worker.Worker.DistantWorker.iter_errors ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors
840 ClusterShell.Worker.Ssh.WorkerSsh._check_fini ClusterShell.Worker.Ssh.WorkerSsh-class.html#_check_fini
841 ClusterShell.Worker.Worker.DistantWorker.node_buffer ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer
842 ClusterShell.Worker.Worker.Worker._task_bound_check ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check
843 ClusterShell.Worker.Worker.Worker._invoke ClusterShell.Worker.Worker.Worker-class.html#_invoke
844 ClusterShell.Worker.Worker.DistantWorker.node_error ClusterShell.Worker.Worker.DistantWorker-class.html#node_error
845 ClusterShell.Worker.Worker.DistantWorker.iter_node_retcodes ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_retcodes
846 ClusterShell.Worker.Worker.Worker.flush_buffers ClusterShell.Worker.Worker.Worker-class.html#flush_buffers
847 ClusterShell.Worker.Worker.DistantWorker ClusterShell.Worker.Worker.DistantWorker-class.html
848 ClusterShell.Worker.Worker.DistantWorker.iter_node_errors ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors
849 ClusterShell.Worker.Worker.DistantWorker.node_retcode ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode
850 ClusterShell.Worker.Worker.DistantWorker.node_rc ClusterShell.Worker.Worker.DistantWorker-class.html#node_rc
851 ClusterShell.Worker.Worker.DistantWorker.last_read ClusterShell.Worker.Worker.DistantWorker-class.html#last_read
852 ClusterShell.Worker.Worker.DistantWorker.last_error ClusterShell.Worker.Worker.DistantWorker-class.html#last_error
853 ClusterShell.Worker.Worker.Worker._set_task ClusterShell.Worker.Worker.Worker-class.html#_set_task
854 ClusterShell.Worker.Worker.DistantWorker.iter_node_buffers ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers
855 ClusterShell.Worker.Worker.DistantWorker.node_error_buffer ClusterShell.Worker.Worker.DistantWorker-class.html#node_error_buffer
856 ClusterShell.Worker.Worker.DistantWorker._on_node_msgline ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline
857 ClusterShell.Worker.Worker.DistantWorker.iter_buffers ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers
858 ClusterShell.Worker.Worker.DistantWorker.last_retcode ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode
859 ClusterShell.Worker.Worker.Worker.flush_errors ClusterShell.Worker.Worker.Worker-class.html#flush_errors
860 ClusterShell.Worker.Worker.DistantWorker.__init__ ClusterShell.Worker.Worker.DistantWorker-class.html#__init__
861 ClusterShell.Worker.Worker.Worker.did_timeout ClusterShell.Worker.Worker.Worker-class.html#did_timeout
862 ClusterShell.Worker.Worker.DistantWorker.iter_retcodes ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes
863 ClusterShell.Worker.Worker.DistantWorker.node_buffer ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer
864 ClusterShell.Worker.Worker.DistantWorker._on_node_timeout ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_timeout
865 ClusterShell.Worker.Worker.DistantWorker._on_node_rc ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_rc
866 ClusterShell.Worker.Worker.DistantWorker.iter_keys_timeout ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout
867 ClusterShell.Worker.Worker.DistantWorker.num_timeout ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout
868 ClusterShell.Worker.Worker.DistantWorker._on_start ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start
869 ClusterShell.Worker.Worker.Worker._engine_clients ClusterShell.Worker.Worker.Worker-class.html#_engine_clients
870 ClusterShell.Worker.Worker.DistantWorker._on_node_errline ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline
871 ClusterShell.Worker.Worker.DistantWorker.iter_errors ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors
872 ClusterShell.Worker.Worker.DistantWorker.last_node ClusterShell.Worker.Worker.DistantWorker-class.html#last_node
873 ClusterShell.Worker.Worker.Worker._task_bound_check ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check
874 ClusterShell.Worker.Worker.Worker._invoke ClusterShell.Worker.Worker.Worker-class.html#_invoke
875 ClusterShell.Worker.Worker.DistantWorker.node_error ClusterShell.Worker.Worker.DistantWorker-class.html#node_error
876 ClusterShell.Worker.Worker.DistantWorker.iter_node_retcodes ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_retcodes
877 ClusterShell.Worker.Worker.Worker.flush_buffers ClusterShell.Worker.Worker.Worker-class.html#flush_buffers
878 ClusterShell.Worker.Worker.Worker ClusterShell.Worker.Worker.Worker-class.html
879 ClusterShell.Worker.Worker.Worker.last_read ClusterShell.Worker.Worker.Worker-class.html#last_read
880 ClusterShell.Worker.Worker.Worker.last_error ClusterShell.Worker.Worker.Worker-class.html#last_error
881 ClusterShell.Worker.Worker.Worker._set_task ClusterShell.Worker.Worker.Worker-class.html#_set_task
882 ClusterShell.Worker.Worker.Worker.flush_errors ClusterShell.Worker.Worker.Worker-class.html#flush_errors
883 ClusterShell.Worker.Worker.Worker.__init__ ClusterShell.Worker.Worker.Worker-class.html#__init__
884 ClusterShell.Worker.Worker.Worker.did_timeout ClusterShell.Worker.Worker.Worker-class.html#did_timeout
885 ClusterShell.Worker.Worker.Worker._engine_clients ClusterShell.Worker.Worker.Worker-class.html#_engine_clients
886 ClusterShell.Worker.Worker.Worker._task_bound_check ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check
887 ClusterShell.Worker.Worker.Worker._invoke ClusterShell.Worker.Worker.Worker-class.html#_invoke
888 ClusterShell.Worker.Worker.Worker.flush_buffers ClusterShell.Worker.Worker.Worker-class.html#flush_buffers
889 ClusterShell.Worker.Worker.WorkerBadArgumentError ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html
890 ClusterShell.Worker.Worker.WorkerError ClusterShell.Worker.Worker.WorkerError-class.html
891 ClusterShell.Worker.Worker.WorkerException ClusterShell.Worker.Worker.WorkerException-class.html
892 ClusterShell.Worker.Worker.WorkerSimple ClusterShell.Worker.Worker.WorkerSimple-class.html
893 ClusterShell.Engine.Engine.EngineBaseTimer.invalidate ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate
894 ClusterShell.Worker.Worker.WorkerSimple._handle_error ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_error
895 ClusterShell.Worker.Worker.WorkerSimple.last_read ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read
896 ClusterShell.Worker.EngineClient.EngineClient._set_writing ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing
897 ClusterShell.Worker.Worker.WorkerSimple.last_error ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error
898 ClusterShell.Worker.Worker.Worker._set_task ClusterShell.Worker.Worker.Worker-class.html#_set_task
899 ClusterShell.Worker.EngineClient.EngineClient._exec_nonblock ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock
900 ClusterShell.Worker.Worker.WorkerSimple._on_errmsgline ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_errmsgline
901 ClusterShell.Worker.EngineClient.EngineClient._handle_write ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write
902 ClusterShell.Worker.Worker.Worker._task_bound_check ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check
903 ClusterShell.Worker.Worker.WorkerSimple._start ClusterShell.Worker.Worker.WorkerSimple-class.html#_start
904 ClusterShell.Worker.Worker.WorkerSimple._handle_read ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read
905 ClusterShell.Worker.Worker.WorkerSimple.__init__ ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__
906 ClusterShell.Worker.Worker.Worker._invoke ClusterShell.Worker.Worker.Worker-class.html#_invoke
907 ClusterShell.Worker.Worker.Worker.did_timeout ClusterShell.Worker.Worker.Worker-class.html#did_timeout
908 ClusterShell.Worker.Worker.WorkerSimple._readerr ClusterShell.Worker.Worker.WorkerSimple-class.html#_readerr
909 ClusterShell.Worker.EngineClient.EngineClient._readlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines
910 ClusterShell.Worker.Worker.Worker.flush_errors ClusterShell.Worker.Worker.Worker-class.html#flush_errors
911 ClusterShell.Worker.Worker.WorkerSimple.write ClusterShell.Worker.Worker.WorkerSimple-class.html#write
912 ClusterShell.Engine.Engine.EngineBaseTimer.is_valid ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid
913 ClusterShell.Worker.EngineClient.EngineClient._set_reading ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading
914 ClusterShell.Worker.Worker.WorkerSimple._close ClusterShell.Worker.Worker.WorkerSimple-class.html#_close
915 ClusterShell.Worker.Worker.WorkerSimple.set_write_eof ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof
916 ClusterShell.Worker.Worker.WorkerSimple._on_timeout ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_timeout
917 ClusterShell.Worker.Worker.WorkerSimple.read ClusterShell.Worker.Worker.WorkerSimple-class.html#read
918 ClusterShell.Worker.Worker.WorkerSimple._on_msgline ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_msgline
919 ClusterShell.Worker.EngineClient.EngineClient._fire ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire
920 ClusterShell.Worker.Worker.WorkerSimple._engine_clients ClusterShell.Worker.Worker.WorkerSimple-class.html#_engine_clients
921 ClusterShell.Worker.Worker.WorkerSimple.error_fileno ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno
922 ClusterShell.Worker.Worker.WorkerSimple.reader_fileno ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno
923 ClusterShell.Engine.Engine.EngineBaseTimer._set_engine ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine
924 ClusterShell.Worker.EngineClient.EngineClient._close_writer ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer
925 ClusterShell.Worker.EngineClient.EngineClient._write ClusterShell.Worker.EngineClient.EngineClient-class.html#_write
926 ClusterShell.Worker.EngineClient.EngineClient._readerrlines ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines
927 ClusterShell.Worker.EngineClient.EngineClient._set_reading_error ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error
928 ClusterShell.Worker.Worker.WorkerSimple._read ClusterShell.Worker.Worker.WorkerSimple-class.html#_read
929 ClusterShell.Worker.Worker.WorkerSimple.set_key ClusterShell.Worker.Worker.WorkerSimple-class.html#set_key
930 ClusterShell.Worker.Worker.WorkerSimple.writer_fileno ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno
931 ClusterShell.Engine.Engine.EngineBaseTimer.set_nextfire ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire
932 ClusterShell.Worker.Worker.WorkerSimple.error ClusterShell.Worker.Worker.WorkerSimple-class.html#error
933 ClusterShell.Worker.EngineClient.EngineClient._set_write_eof ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof
934 ClusterShell.Worker.Worker.Worker.flush_buffers ClusterShell.Worker.Worker.Worker-class.html#flush_buffers
935 clubak.Display clubak.Display-class.html
936 clubak.Display.__init__ clubak.Display-class.html#__init__
937 clubak.Display._print_lines clubak.Display-class.html#_print_lines
938 clubak.Display.SEP clubak.Display-class.html#SEP
939 clubak.Display.print_gather clubak.Display-class.html#print_gather
940 clubak.Display.COLOR_STDERR_FMT clubak.Display-class.html#COLOR_STDERR_FMT
941 clubak.Display._print_buffer clubak.Display-class.html#_print_buffer
942 clubak.Display._setlmode clubak.Display-class.html#_setlmode
943 clubak.Display._format_header clubak.Display-class.html#_format_header
944 clubak.Display.line_mode clubak.Display-class.html#line_mode
945 clubak.Display.print_line clubak.Display-class.html#print_line
946 clubak.Display.COLOR_STDOUT_FMT clubak.Display-class.html#COLOR_STDOUT_FMT
947 clubak.Display._getlmode clubak.Display-class.html#_getlmode
948 clubak.Display.print_line_error clubak.Display-class.html#print_line_error
949 clush.ClushConfig clush.ClushConfig-class.html
950 clush.ClushConfig.get_command_timeout clush.ClushConfig-class.html#get_command_timeout
951 clush.ClushConfig.getfloat clush.ClushConfig-class.html#getfloat
952 clush.ClushConfig.get_connect_timeout clush.ClushConfig-class.html#get_connect_timeout
953 clush.ClushConfig.get_ssh_options clush.ClushConfig-class.html#get_ssh_options
954 clush.ClushConfig.__init__ clush.ClushConfig-class.html#__init__
955 clush.ClushConfig.get_verbosity clush.ClushConfig-class.html#get_verbosity
956 clush.ClushConfig.set_main clush.ClushConfig-class.html#set_main
957 clush.ClushConfig._get_optional clush.ClushConfig-class.html#_get_optional
958 clush.ClushConfig.get_color clush.ClushConfig-class.html#get_color
959 clush.ClushConfig.main_defaults clush.ClushConfig-class.html#main_defaults
960 clush.ClushConfig.max_fdlimit clush.ClushConfig-class.html#max_fdlimit
961 clush.ClushConfig.verbose_print clush.ClushConfig-class.html#verbose_print
962 clush.ClushConfig.get_ssh_user clush.ClushConfig-class.html#get_ssh_user
963 clush.ClushConfig.get_ssh_path clush.ClushConfig-class.html#get_ssh_path
964 clush.ClushConfig.getint clush.ClushConfig-class.html#getint
965 clush.ClushConfig.get_fanout clush.ClushConfig-class.html#get_fanout
966 clush.ClushConfigError clush.ClushConfigError-class.html
967 clush.ClushConfigError.__str__ clush.ClushConfigError-class.html#__str__
968 clush.ClushConfigError.__init__ clush.ClushConfigError-class.html#__init__
969 clush.DirectOutputHandler clush.DirectOutputHandler-class.html
970 clush.DirectOutputHandler.ev_read clush.DirectOutputHandler-class.html#ev_read
971 clush.DirectOutputHandler.ev_error clush.DirectOutputHandler-class.html#ev_error
972 ClusterShell.Event.EventHandler.ev_start ClusterShell.Event.EventHandler-class.html#ev_start
973 clush.DirectOutputHandler.__init__ clush.DirectOutputHandler-class.html#__init__
974 clush.DirectOutputHandler.ev_close clush.DirectOutputHandler-class.html#ev_close
975 ClusterShell.Event.EventHandler.ev_written ClusterShell.Event.EventHandler-class.html#ev_written
976 clush.DirectOutputHandler.ev_timeout clush.DirectOutputHandler-class.html#ev_timeout
977 ClusterShell.Event.EventHandler.ev_msg ClusterShell.Event.EventHandler-class.html#ev_msg
978 ClusterShell.Event.EventHandler.ev_timer ClusterShell.Event.EventHandler-class.html#ev_timer
979 clush.DirectOutputHandler.ev_hup clush.DirectOutputHandler-class.html#ev_hup
980 ClusterShell.Event.EventHandler._invoke ClusterShell.Event.EventHandler-class.html#_invoke
981 clush.Display clush.Display-class.html
982 clush.Display.__init__ clush.Display-class.html#__init__
983 clush.Display._print_lines clush.Display-class.html#_print_lines
984 clush.Display.SEP clush.Display-class.html#SEP
985 clush.Display.print_gather clush.Display-class.html#print_gather
986 clush.Display.COLOR_STDERR_FMT clush.Display-class.html#COLOR_STDERR_FMT
987 clush.Display._print_buffer clush.Display-class.html#_print_buffer
988 clush.Display._setlmode clush.Display-class.html#_setlmode
989 clush.Display._format_header clush.Display-class.html#_format_header
990 clush.Display.line_mode clush.Display-class.html#line_mode
991 clush.Display.print_line clush.Display-class.html#print_line
992 clush.Display.COLOR_STDOUT_FMT clush.Display-class.html#COLOR_STDOUT_FMT
993 clush.Display._getlmode clush.Display-class.html#_getlmode
994 clush.Display.print_line_error clush.Display-class.html#print_line_error
995 clush.GatherOutputHandler clush.GatherOutputHandler-class.html
996 clush.GatherOutputHandler.ev_read clush.GatherOutputHandler-class.html#ev_read
997 clush.GatherOutputHandler.ev_error clush.GatherOutputHandler-class.html#ev_error
998 ClusterShell.Event.EventHandler.ev_start ClusterShell.Event.EventHandler-class.html#ev_start
999 clush.GatherOutputHandler.__init__ clush.GatherOutputHandler-class.html#__init__
1000 clush.GatherOutputHandler.ev_close clush.GatherOutputHandler-class.html#ev_close
1001 ClusterShell.Event.EventHandler.ev_written ClusterShell.Event.EventHandler-class.html#ev_written
1002 clush.GatherOutputHandler._live_line clush.GatherOutputHandler-class.html#_live_line
1003 ClusterShell.Event.EventHandler.ev_timeout ClusterShell.Event.EventHandler-class.html#ev_timeout
1004 ClusterShell.Event.EventHandler.ev_msg ClusterShell.Event.EventHandler-class.html#ev_msg
1005 ClusterShell.Event.EventHandler.ev_timer ClusterShell.Event.EventHandler-class.html#ev_timer
1006 clush.GatherOutputHandler.ev_hup clush.GatherOutputHandler-class.html#ev_hup
1007 ClusterShell.Event.EventHandler._invoke ClusterShell.Event.EventHandler-class.html#_invoke
1008 clush.RunTimer clush.RunTimer-class.html
1009 ClusterShell.Event.EventHandler.ev_read ClusterShell.Event.EventHandler-class.html#ev_read
1010 clush.RunTimer.set_dirty clush.RunTimer-class.html#set_dirty
1011 ClusterShell.Event.EventHandler.ev_error ClusterShell.Event.EventHandler-class.html#ev_error
1012 ClusterShell.Event.EventHandler.ev_start ClusterShell.Event.EventHandler-class.html#ev_start
1013 clush.RunTimer.__init__ clush.RunTimer-class.html#__init__
1014 ClusterShell.Event.EventHandler.ev_close ClusterShell.Event.EventHandler-class.html#ev_close
1015 ClusterShell.Event.EventHandler.ev_written ClusterShell.Event.EventHandler-class.html#ev_written
1016 clush.RunTimer.finalize clush.RunTimer-class.html#finalize
1017 clush.RunTimer.update clush.RunTimer-class.html#update
1018 ClusterShell.Event.EventHandler.ev_timeout ClusterShell.Event.EventHandler-class.html#ev_timeout
1019 clush.RunTimer.erase_line clush.RunTimer-class.html#erase_line
1020 ClusterShell.Event.EventHandler.ev_msg ClusterShell.Event.EventHandler-class.html#ev_msg
1021 clush.RunTimer.ev_timer clush.RunTimer-class.html#ev_timer
1022 ClusterShell.Event.EventHandler.ev_hup ClusterShell.Event.EventHandler-class.html#ev_hup
1023 ClusterShell.Event.EventHandler._invoke ClusterShell.Event.EventHandler-class.html#_invoke
1024 clush.StdInputHandler clush.StdInputHandler-class.html
1025 clush.StdInputHandler.ev_read clush.StdInputHandler-class.html#ev_read
1026 ClusterShell.Event.EventHandler.ev_error ClusterShell.Event.EventHandler-class.html#ev_error
1027 ClusterShell.Event.EventHandler.ev_start ClusterShell.Event.EventHandler-class.html#ev_start
1028 clush.StdInputHandler.__init__ clush.StdInputHandler-class.html#__init__
1029 clush.StdInputHandler.ev_close clush.StdInputHandler-class.html#ev_close
1030 ClusterShell.Event.EventHandler.ev_written ClusterShell.Event.EventHandler-class.html#ev_written
1031 ClusterShell.Event.EventHandler.ev_timeout ClusterShell.Event.EventHandler-class.html#ev_timeout
1032 ClusterShell.Event.EventHandler.ev_msg ClusterShell.Event.EventHandler-class.html#ev_msg
1033 ClusterShell.Event.EventHandler.ev_timer ClusterShell.Event.EventHandler-class.html#ev_timer
1034 ClusterShell.Event.EventHandler.ev_hup ClusterShell.Event.EventHandler-class.html#ev_hup
1035 ClusterShell.Event.EventHandler._invoke ClusterShell.Event.EventHandler-class.html#_invoke
1036 clush.UpdatePromptException clush.UpdatePromptException-class.html
+0
-422
doc/epydoc/html/class-tree.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Class Hierarchy</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th bgcolor="#70b0f0" class="navbar-select"
19 >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">&nbsp;</td>
40 <td>
41 <table cellpadding="0" cellspacing="0">
42 <!-- hide/show private -->
43 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
44 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
45 <tr><td align="right"><span class="options"
46 >[<a href="frames.html" target="_top">frames</a
47 >]&nbsp;|&nbsp;<a href="class-tree.html"
48 target="_top">no&nbsp;frames</a>]</span></td></tr>
49 </table>
50 </td>
51 </tr>
52 </table>
53 <center><b>
54 [ <a href="module-tree.html">Module Hierarchy</a>
55 | <a href="class-tree.html">Class Hierarchy</a> ]
56 </b></center><br />
57 <h1 class="epydoc">Class Hierarchy</h1>
58 <ul class="nomargin-top">
59 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.Engine-class.html">ClusterShell.Engine.Engine.Engine</a></strong>:
60 <em class="summary">Interface for ClusterShell engine.</em>
61 <ul>
62 <li> <strong class="uidlink"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">ClusterShell.Engine.EPoll.EngineEPoll</a></strong>:
63 <em class="summary">EPoll Engine</em>
64 </li>
65 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html">ClusterShell.Engine.Poll.EnginePoll</a></strong>:
66 <em class="summary">Poll Engine</em>
67 </li>
68 </ul>
69 </li>
70 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">ClusterShell.Engine.Engine.EngineBaseTimer</a></strong>:
71 <em class="summary">Abstract class for ClusterShell's engine timer.</em>
72 <ul>
73 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">ClusterShell.Worker.EngineClient.EngineClient</a></strong>:
74 <em class="summary">Abstract class EngineClient.</em>
75 <ul>
76 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">ClusterShell.Worker.EngineClient.EnginePort</a></strong>:
77 <em class="summary">An EnginePort is an abstraction object to deliver messages reliably
78 between tasks.</em>
79 </li>
80 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Ssh.Ssh-class.html">ClusterShell.Worker.Ssh.Ssh</a></strong>:
81 <em class="summary">Ssh EngineClient.</em>
82 <ul>
83 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Ssh.Scp-class.html">ClusterShell.Worker.Ssh.Scp</a></strong>:
84 <em class="summary">Scp EngineClient.</em>
85 </li>
86 </ul>
87 </li>
88 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">ClusterShell.Worker.Pdsh.WorkerPdsh</a></strong>:
89 <em class="summary">ClusterShell pdsh-based worker Class.</em>
90 </li>
91 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">ClusterShell.Worker.Worker.WorkerSimple</a></strong>:
92 <em class="summary">Implements a simple Worker being itself an EngineClient.</em>
93 <ul>
94 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html">ClusterShell.Worker.Popen.WorkerPopen</a></strong>:
95 <em class="summary">Implements the Popen Worker.</em>
96 </li>
97 </ul>
98 </li>
99 </ul>
100 </li>
101 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.EngineTimer-class.html">ClusterShell.Engine.Engine.EngineTimer</a></strong>:
102 <em class="summary">Concrete class EngineTimer</em>
103 </li>
104 </ul>
105 </li>
106 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.RangeSet-class.html">ClusterShell.NodeSet.RangeSet</a></strong>:
107 <em class="summary">Advanced range sets.</em>
108 </li>
109 <li> <strong class="uidlink">ConfigParser.RawConfigParser</strong>
110 <ul>
111 <li> <strong class="uidlink">ConfigParser.ConfigParser</strong>
112 <ul>
113 <li> <strong class="uidlink"><a href="clush.ClushConfig-class.html">clush.ClushConfig</a></strong>:
114 <em class="summary">Config class for clush (specialized ConfigParser)</em>
115 </li>
116 </ul>
117 </li>
118 </ul>
119 </li>
120 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html" onclick="show_private();">ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase</a></strong>:
121 <em class="summary">Helper class that allows comparisons of fire times, to be easily
122 used in an heapq.</em>
123 </li>
124 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">ClusterShell.Engine.Engine._EngineTimerQ</a></strong>
125 </li>
126 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html" onclick="show_private();">ClusterShell.Worker.EngineClient.EnginePort._Msg</a></strong>:
127 <em class="summary">Private class representing a port message.</em>
128 </li>
129 <li> <strong class="uidlink">object</strong>:
130 <em class="summary">The most base type</em>
131 <ul>
132 <li> <strong class="uidlink">exceptions.BaseException</strong>:
133 <em class="summary">Common base class for all exceptions</em>
134 <ul>
135 <li> <strong class="uidlink">exceptions.Exception</strong>:
136 <em class="summary">Common base class for all non-exit exceptions.</em>
137 <ul>
138 <li> <strong class="uidlink"><a href="clush.ClushConfigError-class.html">clush.ClushConfigError</a></strong>:
139 <em class="summary">Exception used by ClushConfig to report an error.</em>
140 </li>
141 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient.EngineClientException-class.html">ClusterShell.Worker.EngineClient.EngineClientException</a></strong>:
142 <em class="summary">Generic EngineClient exception.</em>
143 <ul>
144 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html">ClusterShell.Worker.EngineClient.EngineClientEOF</a></strong>:
145 <em class="summary">EOF from client.</em>
146 </li>
147 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient.EngineClientError-class.html">ClusterShell.Worker.EngineClient.EngineClientError</a></strong>:
148 <em class="summary">Base EngineClient error exception.</em>
149 <ul>
150 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html">ClusterShell.Worker.EngineClient.EngineClientNotSupportedError</a></strong>:
151 <em class="summary">Operation not supported by EngineClient.</em>
152 </li>
153 </ul>
154 </li>
155 </ul>
156 </li>
157 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.EngineException-class.html">ClusterShell.Engine.Engine.EngineException</a></strong>:
158 <em class="summary">Base engine exception.</em>
159 <ul>
160 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.EngineAbortException-class.html">ClusterShell.Engine.Engine.EngineAbortException</a></strong>:
161 <em class="summary">Raised on user abort.</em>
162 </li>
163 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html">ClusterShell.Engine.Engine.EngineIllegalOperationError</a></strong>:
164 <em class="summary">Error raised when an illegal operation has been performed.</em>
165 <ul>
166 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html">ClusterShell.Engine.Engine.EngineAlreadyRunningError</a></strong>:
167 <em class="summary">Error raised when the engine is already running.</em>
168 </li>
169 </ul>
170 </li>
171 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html">ClusterShell.Engine.Engine.EngineNotSupportedError</a></strong>:
172 <em class="summary">Error raised when the engine mechanism is not supported.</em>
173 </li>
174 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html">ClusterShell.Engine.Engine.EngineTimeoutException</a></strong>:
175 <em class="summary">Raised when a timeout is encountered.</em>
176 </li>
177 </ul>
178 </li>
179 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupResolverError-class.html">ClusterShell.NodeUtils.GroupResolverError</a></strong>:
180 <em class="summary">Base GroupResolver error</em>
181 <ul>
182 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html">ClusterShell.NodeUtils.GroupResolverConfigError</a></strong>:
183 <em class="summary">Raised when a configuration error is encountered</em>
184 </li>
185 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html">ClusterShell.NodeUtils.GroupResolverSourceError</a></strong>:
186 <em class="summary">Raised when upcall is not available</em>
187 </li>
188 </ul>
189 </li>
190 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupSourceException-class.html">ClusterShell.NodeUtils.GroupSourceException</a></strong>:
191 <em class="summary">Base GroupSource exception</em>
192 <ul>
193 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html">ClusterShell.NodeUtils.GroupSourceNoUpcall</a></strong>:
194 <em class="summary">Raised when upcall is not available</em>
195 </li>
196 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html">ClusterShell.NodeUtils.GroupSourceQueryFailed</a></strong>:
197 <em class="summary">Raised when a query failed (eg.</em>
198 </li>
199 </ul>
200 </li>
201 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.NodeSetException-class.html">ClusterShell.NodeSet.NodeSetException</a></strong>:
202 <em class="summary">Base NodeSet exception class.</em>
203 <ul>
204 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.NodeSetExternalError-class.html">ClusterShell.NodeSet.NodeSetExternalError</a></strong>:
205 <em class="summary">Raised when an external error is encountered.</em>
206 </li>
207 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.NodeSetParseError-class.html">ClusterShell.NodeSet.NodeSetParseError</a></strong>:
208 <em class="summary">Raised when NodeSet parsing cannot be done properly.</em>
209 <ul>
210 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html">ClusterShell.NodeSet.NodeSetParseRangeError</a></strong>:
211 <em class="summary">Raised when bad range is encountered during NodeSet parsing.</em>
212 </li>
213 </ul>
214 </li>
215 </ul>
216 </li>
217 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.RangeSetException-class.html">ClusterShell.NodeSet.RangeSetException</a></strong>:
218 <em class="summary">Base RangeSet exception class.</em>
219 <ul>
220 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.RangeSetParseError-class.html">ClusterShell.NodeSet.RangeSetParseError</a></strong>:
221 <em class="summary">Raised when RangeSet parsing cannot be done properly.</em>
222 <ul>
223 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.RangeSetPaddingError-class.html">ClusterShell.NodeSet.RangeSetPaddingError</a></strong>:
224 <em class="summary">Raised when a fatal padding incoherency occurs</em>
225 </li>
226 </ul>
227 </li>
228 </ul>
229 </li>
230 <li> <strong class="uidlink"><a href="ClusterShell.Task.TaskException-class.html">ClusterShell.Task.TaskException</a></strong>:
231 <em class="summary">Base task exception.</em>
232 <ul>
233 <li> <strong class="uidlink"><a href="ClusterShell.Task.TaskError-class.html">ClusterShell.Task.TaskError</a></strong>:
234 <em class="summary">Base task error exception.</em>
235 <ul>
236 <li> <strong class="uidlink"><a href="ClusterShell.Task.AlreadyRunningError-class.html">ClusterShell.Task.AlreadyRunningError</a></strong>:
237 <em class="summary">Raised when trying to resume an already running task.</em>
238 </li>
239 <li> <strong class="uidlink"><a href="ClusterShell.Task.TaskMsgTreeError-class.html">ClusterShell.Task.TaskMsgTreeError</a></strong>:
240 <em class="summary">Raised when trying to access disabled MsgTree.</em>
241 </li>
242 <li> <strong class="uidlink"><a href="ClusterShell.Task.TimeoutError-class.html">ClusterShell.Task.TimeoutError</a></strong>:
243 <em class="summary">Raised when the task timed out.</em>
244 </li>
245 </ul>
246 </li>
247 </ul>
248 </li>
249 <li> <strong class="uidlink"><a href="clush.UpdatePromptException-class.html">clush.UpdatePromptException</a></strong>:
250 <em class="summary">Exception used by the signal handler</em>
251 </li>
252 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker.WorkerException-class.html">ClusterShell.Worker.Worker.WorkerException</a></strong>:
253 <em class="summary">Generic worker exception.</em>
254 <ul>
255 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker.WorkerError-class.html">ClusterShell.Worker.Worker.WorkerError</a></strong>:
256 <em class="summary">Generic worker error.</em>
257 <ul>
258 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html">ClusterShell.Worker.Worker.WorkerBadArgumentError</a></strong>:
259 <em class="summary">Bad argument in worker error.</em>
260 </li>
261 </ul>
262 </li>
263 </ul>
264 </li>
265 </ul>
266 </li>
267 </ul>
268 </li>
269 <li> <strong class="uidlink"><a href="clush.Display-class.html">clush.Display</a></strong>:
270 <em class="summary">Output display class for clush script.</em>
271 </li>
272 <li> <strong class="uidlink"><a href="clubak.Display-class.html">clubak.Display</a></strong>:
273 <em class="summary">Output display class for clush script.</em>
274 </li>
275 <li> <strong class="uidlink"><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></strong>:
276 <em class="summary">Base class EventHandler.</em>
277 <ul>
278 <li> <strong class="uidlink"><a href="clush.DirectOutputHandler-class.html">clush.DirectOutputHandler</a></strong>:
279 <em class="summary">Direct output event handler class.</em>
280 </li>
281 <li> <strong class="uidlink"><a href="clush.GatherOutputHandler-class.html">clush.GatherOutputHandler</a></strong>:
282 <em class="summary">Gathered output event handler class.</em>
283 </li>
284 <li> <strong class="uidlink"><a href="clush.RunTimer-class.html">clush.RunTimer</a></strong>
285 </li>
286 <li> <strong class="uidlink"><a href="clush.StdInputHandler-class.html">clush.StdInputHandler</a></strong>:
287 <em class="summary">Standard input event handler class.</em>
288 </li>
289 <li> <strong class="uidlink"><a href="ClusterShell.Task.Task._SyncMsgHandler-class.html" onclick="show_private();">ClusterShell.Task.Task._SyncMsgHandler</a></strong>:
290 <em class="summary">Special task control port event handler.</em>
291 </li>
292 </ul>
293 </li>
294 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupResolver-class.html">ClusterShell.NodeUtils.GroupResolver</a></strong>:
295 <em class="summary">Base class GroupResolver that aims to provide node/group resolution
296 from multiple GroupSource's.</em>
297 <ul>
298 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html">ClusterShell.NodeUtils.GroupResolverConfig</a></strong>:
299 <em class="summary">GroupResolver class that is able to automatically setup its
300 GroupSource's from a configuration file.</em>
301 </li>
302 </ul>
303 </li>
304 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils.GroupSource-class.html">ClusterShell.NodeUtils.GroupSource</a></strong>:
305 <em class="summary">GroupSource class managing external calls for nodegroup support.</em>
306 </li>
307 <li> <strong class="uidlink"><a href="ClusterShell.MsgTree.MsgTree-class.html">ClusterShell.MsgTree.MsgTree</a></strong>:
308 <em class="summary">A MsgTree object maps key objects to multi-lines messages.</em>
309 </li>
310 <li> <strong class="uidlink"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html">ClusterShell.MsgTree.MsgTreeElem</a></strong>:
311 <em class="summary">Class representing an element of the MsgTree and its associated
312 message.</em>
313 </li>
314 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.NodeSetBase-class.html">ClusterShell.NodeSet.NodeSetBase</a></strong>:
315 <em class="summary">Base class for NodeSet.</em>
316 <ul>
317 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.NodeGroupBase-class.html">ClusterShell.NodeSet.NodeGroupBase</a></strong>
318 </li>
319 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.NodeSet-class.html">ClusterShell.NodeSet.NodeSet</a></strong>:
320 <em class="summary">Iterable class of nodes with node ranges support.</em>
321 </li>
322 </ul>
323 </li>
324 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet.ParsingEngine-class.html">ClusterShell.NodeSet.ParsingEngine</a></strong>:
325 <em class="summary">Class that is able to transform a source into a NodeSetBase.</em>
326 </li>
327 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Factory.PreferredEngine-class.html">ClusterShell.Engine.Factory.PreferredEngine</a></strong>:
328 <em class="summary">Preferred Engine selection metaclass (DP Abstract Factory).</em>
329 </li>
330 <li> <strong class="uidlink"><a href="ClusterShell.Task.Task-class.html">ClusterShell.Task.Task</a></strong>:
331 <em class="summary">Always bound to a thread, the Task class allows you to execute
332 commands in parallel and get their results.</em>
333 </li>
334 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker.Worker-class.html">ClusterShell.Worker.Worker.Worker</a></strong>:
335 <em class="summary">Base class Worker.</em>
336 <ul>
337 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html">ClusterShell.Worker.Worker.DistantWorker</a></strong>:
338 <em class="summary">Base class DistantWorker, which provides a useful set of
339 setters/getters to use with distant workers like ssh or pdsh.</em>
340 <ul>
341 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">ClusterShell.Worker.Pdsh.WorkerPdsh</a></strong>:
342 <em class="summary">ClusterShell pdsh-based worker Class.</em>
343 </li>
344 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">ClusterShell.Worker.Ssh.WorkerSsh</a></strong>:
345 <em class="summary">ClusterShell ssh-based worker Class.</em>
346 </li>
347 </ul>
348 </li>
349 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">ClusterShell.Worker.Worker.WorkerSimple</a></strong>:
350 <em class="summary">Implements a simple Worker being itself an EngineClient.</em>
351 <ul>
352 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html">ClusterShell.Worker.Popen.WorkerPopen</a></strong>:
353 <em class="summary">Implements the Popen Worker.</em>
354 </li>
355 </ul>
356 </li>
357 </ul>
358 </li>
359 <li> <strong class="uidlink"><a href="ClusterShell.Task.Task._SuspendCondition-class.html" onclick="show_private();">ClusterShell.Task.Task._SuspendCondition</a></strong>:
360 <em class="summary">Special class to manage task suspend condition.</em>
361 </li>
362 <li> <strong class="uidlink"><a href="ClusterShell.Task._TaskMsgTree-class.html" onclick="show_private();">ClusterShell.Task._TaskMsgTree</a></strong>:
363 <em class="summary">Task special MsgTree wrapper class, for easy disabling of MsgTree
364 buffering.</em>
365 </li>
366 <li> <strong class="uidlink"><a href="ClusterShell.Task.Task.tasksyncmethod-class.html">ClusterShell.Task.Task.tasksyncmethod</a></strong>:
367 <em class="summary">Class encapsulating a function that checks if the calling task is
368 running or is the current task, and allowing it to be used as a
369 decorator making the wrapped task method thread-safe.</em>
370 </li>
371 </ul>
372 </li>
373 </ul>
374 <!-- ==================== NAVIGATION BAR ==================== -->
375 <table class="navbar" border="0" width="100%" cellpadding="0"
376 bgcolor="#a0c0ff" cellspacing="0">
377 <tr valign="middle">
378
379 <!-- Tree link -->
380 <th bgcolor="#70b0f0" class="navbar-select"
381 >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
382
383 <!-- Index link -->
384 <th>&nbsp;&nbsp;&nbsp;<a
385 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
386
387 <!-- Help link -->
388 <th>&nbsp;&nbsp;&nbsp;<a
389 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
390
391 <!-- Project homepage -->
392 <th class="navbar" align="right" width="100%">
393 <table border="0" cellpadding="0" cellspacing="0">
394 <tr><th class="navbar" align="center"
395 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
396 </tr></table></th>
397 </tr>
398 </table>
399 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
400 <tr>
401 <td align="left" class="footer">
402 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
403 </td>
404 <td align="right" class="footer">
405 <a target="mainFrame" href="http://epydoc.sourceforge.net"
406 >http://epydoc.sourceforge.net</a>
407 </td>
408 </tr>
409 </table>
410
411 <script type="text/javascript">
412 <!--
413 // Private objects are initially displayed (because if
414 // javascript is turned off then we want them to be
415 // visible); but by default, we want to hide them. So hide
416 // them unless we have a cookie that says to show them.
417 checkCookie();
418 // -->
419 </script>
420 </body>
421 </html>
+0
-248
doc/epydoc/html/clubak-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clubak</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 Module&nbsp;clubak
42 </span>
43 </td>
44 <td>
45 <table cellpadding="0" cellspacing="0">
46 <!-- hide/show private -->
47 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49 <tr><td align="right"><span class="options"
50 >[<a href="frames.html" target="_top">frames</a
51 >]&nbsp;|&nbsp;<a href="clubak-module.html"
52 target="_top">no&nbsp;frames</a>]</span></td></tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 <!-- ==================== MODULE DESCRIPTION ==================== -->
58 <h1 class="epydoc">Module clubak</h1><p class="nomargin-top"><span class="codelink"><a href="clubak-pysrc.html">source&nbsp;code</a></span></p>
59 <p>clubak formats clush/dsh/pdsh output for humans.</p>
60 <p>For help, type:</p>
61 <pre class="literalblock">
62 $ clubak --help
63 </pre>
64
65 <hr />
66 <div class="fields"> <p><strong>Version:</strong>
67 1.3
68 </p>
69 </div><!-- ==================== CLASSES ==================== -->
70 <a name="section-Classes"></a>
71 <table class="summary" border="1" cellpadding="3"
72 cellspacing="0" width="100%" bgcolor="white">
73 <tr bgcolor="#70b0f0" class="table-header">
74 <td colspan="2" class="table-header">
75 <table border="0" cellpadding="0" cellspacing="0" width="100%">
76 <tr valign="top">
77 <td align="left"><span class="table-header">Classes</span></td>
78 <td align="right" valign="top"
79 ><span class="options">[<a href="#section-Classes"
80 class="privatelink" onclick="toggle_private();"
81 >hide private</a>]</span></td>
82 </tr>
83 </table>
84 </td>
85 </tr>
86 <tr>
87 <td width="15%" align="right" valign="top" class="summary">
88 <span class="summary-type">&nbsp;</span>
89 </td><td class="summary">
90 <a href="clubak.Display-class.html" class="summary-name">Display</a><br />
91 Output display class for clush script.
92 </td>
93 </tr>
94 </table>
95 <!-- ==================== FUNCTIONS ==================== -->
96 <a name="section-Functions"></a>
97 <table class="summary" border="1" cellpadding="3"
98 cellspacing="0" width="100%" bgcolor="white">
99 <tr bgcolor="#70b0f0" class="table-header">
100 <td colspan="2" class="table-header">
101 <table border="0" cellpadding="0" cellspacing="0" width="100%">
102 <tr valign="top">
103 <td align="left"><span class="table-header">Functions</span></td>
104 <td align="right" valign="top"
105 ><span class="options">[<a href="#section-Functions"
106 class="privatelink" onclick="toggle_private();"
107 >hide private</a>]</span></td>
108 </tr>
109 </table>
110 </td>
111 </tr>
112 <tr>
113 <td width="15%" align="right" valign="top" class="summary">
114 <span class="summary-type">&nbsp;</span>
115 </td><td class="summary">
116 <table width="100%" cellpadding="0" cellspacing="0" border="0">
117 <tr>
118 <td><span class="summary-sig"><a name="nodeset_cmp"></a><span class="summary-sig-name">nodeset_cmp</span>(<span class="summary-sig-arg">ns1</span>,
119 <span class="summary-sig-arg">ns2</span>)</span><br />
120 Compare 2 nodesets by their length (we want larger nodeset first) and
121 then by first node.</td>
122 <td align="right" valign="top">
123 <span class="codelink"><a href="clubak-pysrc.html#nodeset_cmp">source&nbsp;code</a></span>
124
125 </td>
126 </tr>
127 </table>
128
129 </td>
130 </tr>
131 <tr>
132 <td width="15%" align="right" valign="top" class="summary">
133 <span class="summary-type">&nbsp;</span>
134 </td><td class="summary">
135 <table width="100%" cellpadding="0" cellspacing="0" border="0">
136 <tr>
137 <td><span class="summary-sig"><a name="display"></a><span class="summary-sig-name">display</span>(<span class="summary-sig-arg">tree</span>,
138 <span class="summary-sig-arg">gather</span>,
139 <span class="summary-sig-arg">disp</span>)</span><br />
140 Display results</td>
141 <td align="right" valign="top">
142 <span class="codelink"><a href="clubak-pysrc.html#display">source&nbsp;code</a></span>
143
144 </td>
145 </tr>
146 </table>
147
148 </td>
149 </tr>
150 <tr>
151 <td width="15%" align="right" valign="top" class="summary">
152 <span class="summary-type">&nbsp;</span>
153 </td><td class="summary">
154 <table width="100%" cellpadding="0" cellspacing="0" border="0">
155 <tr>
156 <td><span class="summary-sig"><a name="clubak"></a><span class="summary-sig-name">clubak</span>()</span><br />
157 Main clubak script function</td>
158 <td align="right" valign="top">
159 <span class="codelink"><a href="clubak-pysrc.html#clubak">source&nbsp;code</a></span>
160
161 </td>
162 </tr>
163 </table>
164
165 </td>
166 </tr>
167 </table>
168 <!-- ==================== VARIABLES ==================== -->
169 <a name="section-Variables"></a>
170 <table class="summary" border="1" cellpadding="3"
171 cellspacing="0" width="100%" bgcolor="white">
172 <tr bgcolor="#70b0f0" class="table-header">
173 <td colspan="2" class="table-header">
174 <table border="0" cellpadding="0" cellspacing="0" width="100%">
175 <tr valign="top">
176 <td align="left"><span class="table-header">Variables</span></td>
177 <td align="right" valign="top"
178 ><span class="options">[<a href="#section-Variables"
179 class="privatelink" onclick="toggle_private();"
180 >hide private</a>]</span></td>
181 </tr>
182 </table>
183 </td>
184 </tr>
185 <tr>
186 <td width="15%" align="right" valign="top" class="summary">
187 <span class="summary-type">&nbsp;</span>
188 </td><td class="summary">
189 <a name="WHENCOLOR_CHOICES"></a><span class="summary-name">WHENCOLOR_CHOICES</span> = <code title="['never', 'always', 'auto']"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">never</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">always</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">auto</code><code class="variable-quote">'</code><code class="variable-group">]</code></code>
190 </td>
191 </tr>
192 <tr>
193 <td width="15%" align="right" valign="top" class="summary">
194 <span class="summary-type">&nbsp;</span>
195 </td><td class="summary">
196 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
197 </td>
198 </tr>
199 </table>
200 <!-- ==================== NAVIGATION BAR ==================== -->
201 <table class="navbar" border="0" width="100%" cellpadding="0"
202 bgcolor="#a0c0ff" cellspacing="0">
203 <tr valign="middle">
204
205 <!-- Tree link -->
206 <th>&nbsp;&nbsp;&nbsp;<a
207 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
208
209 <!-- Index link -->
210 <th>&nbsp;&nbsp;&nbsp;<a
211 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
212
213 <!-- Help link -->
214 <th>&nbsp;&nbsp;&nbsp;<a
215 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
216
217 <!-- Project homepage -->
218 <th class="navbar" align="right" width="100%">
219 <table border="0" cellpadding="0" cellspacing="0">
220 <tr><th class="navbar" align="center"
221 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
222 </tr></table></th>
223 </tr>
224 </table>
225 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
226 <tr>
227 <td align="left" class="footer">
228 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
229 </td>
230 <td align="right" class="footer">
231 <a target="mainFrame" href="http://epydoc.sourceforge.net"
232 >http://epydoc.sourceforge.net</a>
233 </td>
234 </tr>
235 </table>
236
237 <script type="text/javascript">
238 <!--
239 // Private objects are initially displayed (because if
240 // javascript is turned off then we want them to be
241 // visible); but by default, we want to hide them. So hide
242 // them unless we have a cookie that says to show them.
243 checkCookie();
244 // -->
245 </script>
246 </body>
247 </html>
+0
-429
doc/epydoc/html/clubak-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clubak</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 Module&nbsp;clubak
42 </span>
43 </td>
44 <td>
45 <table cellpadding="0" cellspacing="0">
46 <!-- hide/show private -->
47 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49 <tr><td align="right"><span class="options"
50 >[<a href="frames.html" target="_top">frames</a
51 >]&nbsp;|&nbsp;<a href="clubak-pysrc.html"
52 target="_top">no&nbsp;frames</a>]</span></td></tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 <h1 class="epydoc">Source Code for <a href="clubak-module.html">Module clubak</a></h1>
58 <pre class="py-src">
59 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
60 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
61 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2010)</tt> </tt>
62 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
63 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
64 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
65 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
66 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
67 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
68 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
69 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
70 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
71 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
72 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
73 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
74 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
75 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
76 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
77 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
78 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
79 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
80 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
81 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
82 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
83 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
84 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
85 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
86 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
87 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
88 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
89 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
90 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
91 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
92 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-comment"># $Id: clubak.py 303 2010-07-27 19:29:43Z st-cea $</tt> </tt>
93 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> </tt>
94 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
95 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring">clubak formats clush/dsh/pdsh output for humans.</tt> </tt>
96 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
97 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">For help, type::</tt> </tt>
98 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring"> $ clubak --help</tt> </tt>
99 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
100 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> </tt>
101 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">itertools</tt> <tt class="py-keyword">import</tt> <tt class="py-name">imap</tt> </tt>
102 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">optparse</tt> </tt>
103 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
104 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
105 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> </tt>
106 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Module ClusterShell.NodeUtils=ClusterShell.NodeUtils-module.html"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-1', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverConfigError=ClusterShell.NodeUtils.GroupResolverConfigError-class.html"><a title="ClusterShell.NodeUtils.GroupResolverConfigError" class="py-name" href="#" onclick="return doclink('link-2', 'GroupResolverConfigError', 'link-2');">GroupResolverConfigError</a></tt> </tt>
107 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-3', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-4" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-4', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverSourceError=ClusterShell.NodeUtils.GroupResolverSourceError-class.html"><a title="ClusterShell.NodeUtils.GroupResolverSourceError" class="py-name" href="#" onclick="return doclink('link-5', 'GroupResolverSourceError', 'link-5');">GroupResolverSourceError</a></tt> </tt>
108 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-6', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-7', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-8" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceException=ClusterShell.NodeUtils.GroupSourceException-class.html"><a title="ClusterShell.NodeUtils.GroupSourceException" class="py-name" href="#" onclick="return doclink('link-8', 'GroupSourceException', 'link-8');">GroupSourceException</a></tt> </tt>
109 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-9" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-9', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-10', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceNoUpcall=ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-11', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt> </tt>
110 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
111 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-12" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-12', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Module ClusterShell.MsgTree=ClusterShell.MsgTree-module.html,Class ClusterShell.MsgTree.MsgTree=ClusterShell.MsgTree.MsgTree-class.html"><a title="ClusterShell.MsgTree
112 ClusterShell.MsgTree.MsgTree" class="py-name" href="#" onclick="return doclink('link-13', 'MsgTree', 'link-13');">MsgTree</a></tt> <tt class="py-keyword">import</tt> <tt id="link-14" class="py-name"><a title="ClusterShell.MsgTree
113 ClusterShell.MsgTree.MsgTree" class="py-name" href="#" onclick="return doclink('link-14', 'MsgTree', 'link-13');">MsgTree</a></tt> </tt>
114 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-15" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-15', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Module ClusterShell.NodeSet=ClusterShell.NodeSet-module.html,Class ClusterShell.NodeSet.NodeSet=ClusterShell.NodeSet.NodeSet-class.html"><a title="ClusterShell.NodeSet
115 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-16', 'NodeSet', 'link-16');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-17" class="py-name"><a title="ClusterShell.NodeSet
116 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-17', 'NodeSet', 'link-16');">NodeSet</a></tt> </tt>
117 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-18" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-18', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="ClusterShell.NodeSet
118 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-19', 'NodeSet', 'link-16');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-20" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetExternalError=ClusterShell.NodeSet.NodeSetExternalError-class.html"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-20', 'NodeSetExternalError', 'link-20');">NodeSetExternalError</a></tt><tt class="py-op">,</tt> <tt id="link-21" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetParseError=ClusterShell.NodeSet.NodeSetParseError-class.html"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-21', 'NodeSetParseError', 'link-21');">NodeSetParseError</a></tt> </tt>
119 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-22" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-22', 'ClusterShell', 'link-0');">ClusterShell</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">__version__</tt> </tt>
120 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-keyword">except</tt> <tt id="link-23" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolverConfigError" class="py-name" href="#" onclick="return doclink('link-23', 'GroupResolverConfigError', 'link-2');">GroupResolverConfigError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
121 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> \ </tt>
122 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-string">"ERROR: ClusterShell Groups configuration error:\n\t%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">e</tt> </tt>
123 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
124 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> </tt>
125 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> </tt>
126 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-comment"># Start of clush.py common code</tt> </tt>
127 <a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> </tt>
128 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt id="link-24" class="py-name" targets="Variable clubak.WHENCOLOR_CHOICES=clubak-module.html#WHENCOLOR_CHOICES,Variable clush.WHENCOLOR_CHOICES=clush-module.html#WHENCOLOR_CHOICES"><a title="clubak.WHENCOLOR_CHOICES
129 clush.WHENCOLOR_CHOICES" class="py-name" href="#" onclick="return doclink('link-24', 'WHENCOLOR_CHOICES', 'link-24');">WHENCOLOR_CHOICES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"never"</tt><tt class="py-op">,</tt> <tt class="py-string">"always"</tt><tt class="py-op">,</tt> <tt class="py-string">"auto"</tt><tt class="py-op">]</tt> </tt>
130 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> </tt>
131 <a name="Display"></a><div id="Display-def"><a name="L67"></a><tt class="py-lineno"> 67</tt> <a class="py-toggle" href="#" id="Display-toggle" onclick="return toggle('Display');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clubak.Display-class.html">Display</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
132 </div><div id="Display-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Display-expanded"><a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
133 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> Output display class for clush script.</tt> </tt>
134 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
135 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt id="link-25" class="py-name" targets="Variable clubak.Display.COLOR_STDOUT_FMT=clubak.Display-class.html#COLOR_STDOUT_FMT,Variable clush.Display.COLOR_STDOUT_FMT=clush.Display-class.html#COLOR_STDOUT_FMT"><a title="clubak.Display.COLOR_STDOUT_FMT
136 clush.Display.COLOR_STDOUT_FMT" class="py-name" href="#" onclick="return doclink('link-25', 'COLOR_STDOUT_FMT', 'link-25');">COLOR_STDOUT_FMT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"\033[34m%s\033[0m"</tt> </tt>
137 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt id="link-26" class="py-name" targets="Variable clubak.Display.COLOR_STDERR_FMT=clubak.Display-class.html#COLOR_STDERR_FMT,Variable clush.Display.COLOR_STDERR_FMT=clush.Display-class.html#COLOR_STDERR_FMT"><a title="clubak.Display.COLOR_STDERR_FMT
138 clush.Display.COLOR_STDERR_FMT" class="py-name" href="#" onclick="return doclink('link-26', 'COLOR_STDERR_FMT', 'link-26');">COLOR_STDERR_FMT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"\033[31m%s\033[0m"</tt> </tt>
139 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt id="link-27" class="py-name" targets="Variable clubak.Display.SEP=clubak.Display-class.html#SEP,Variable clush.Display.SEP=clush.Display-class.html#SEP"><a title="clubak.Display.SEP
140 clush.Display.SEP" class="py-name" href="#" onclick="return doclink('link-27', 'SEP', 'link-27');">SEP</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"-"</tt> <tt class="py-op">*</tt> <tt class="py-number">15</tt> </tt>
141 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
142 <a name="Display.__init__"></a><div id="Display.__init__-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="Display.__init__-toggle" onclick="return toggle('Display.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-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">color</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
143 </div><div id="Display.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display.__init__-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_color</tt> <tt class="py-op">=</tt> <tt class="py-name">color</tt> </tt>
144 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method clubak.Display._print_buffer()=clubak.Display-class.html#_print_buffer,Method clush.Display._print_buffer()=clush.Display-class.html#_print_buffer"><a title="clubak.Display._print_buffer
145 clush.Display._print_buffer" class="py-name" href="#" onclick="return doclink('link-28', '_print_buffer', 'link-28');">_print_buffer</a></tt> </tt>
146 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out</tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> </tt>
147 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">err</tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
148 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">label</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
149 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.regroup()=ClusterShell.NodeSet.NodeSet-class.html#regroup"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-29', 'regroup', 'link-29');">regroup</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
150 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
151 <a name="L83"></a><tt class="py-lineno"> 83</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">_color</tt><tt class="py-op">:</tt> </tt>
152 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="clubak.Display.COLOR_STDOUT_FMT
153 clush.Display.COLOR_STDOUT_FMT" class="py-name" href="#" onclick="return doclink('link-30', 'COLOR_STDOUT_FMT', 'link-25');">COLOR_STDOUT_FMT</a></tt> </tt>
154 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stderr_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="clubak.Display.COLOR_STDERR_FMT
155 clush.Display.COLOR_STDERR_FMT" class="py-name" href="#" onclick="return doclink('link-31', 'COLOR_STDERR_FMT', 'link-26');">COLOR_STDERR_FMT</a></tt> </tt>
156 <a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
157 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stderr_fmt</tt> <tt class="py-op">=</tt> <tt class="py-string">"%s"</tt> </tt>
158 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">noprefix</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
159 </div><a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
160 <a name="Display._getlmode"></a><div id="Display._getlmode-def"><a name="L90"></a><tt class="py-lineno"> 90</tt> <a class="py-toggle" href="#" id="Display._getlmode-toggle" onclick="return toggle('Display._getlmode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-class.html#_getlmode">_getlmode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
161 </div><div id="Display._getlmode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display._getlmode-expanded"><a name="L91"></a><tt class="py-lineno"> 91</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">_display</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method clubak.Display._print_lines()=clubak.Display-class.html#_print_lines,Method clush.Display._print_lines()=clush.Display-class.html#_print_lines"><a title="clubak.Display._print_lines
162 clush.Display._print_lines" class="py-name" href="#" onclick="return doclink('link-32', '_print_lines', 'link-32');">_print_lines</a></tt> </tt>
163 </div><a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> </tt>
164 <a name="Display._setlmode"></a><div id="Display._setlmode-def"><a name="L93"></a><tt class="py-lineno"> 93</tt> <a class="py-toggle" href="#" id="Display._setlmode-toggle" onclick="return toggle('Display._setlmode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-class.html#_setlmode">_setlmode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
165 </div><div id="Display._setlmode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display._setlmode-expanded"><a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">value</tt><tt class="py-op">:</tt> </tt>
166 <a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="clubak.Display._print_lines
167 clush.Display._print_lines" class="py-name" href="#" onclick="return doclink('link-33', '_print_lines', 'link-32');">_print_lines</a></tt> </tt>
168 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
169 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="clubak.Display._print_buffer
170 clush.Display._print_buffer" class="py-name" href="#" onclick="return doclink('link-34', '_print_buffer', 'link-28');">_print_buffer</a></tt> </tt>
171 </div><a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt id="link-35" class="py-name" targets="Variable clubak.Display.line_mode=clubak.Display-class.html#line_mode,Variable clush.Display.line_mode=clush.Display-class.html#line_mode"><a title="clubak.Display.line_mode
172 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-35', 'line_mode', 'link-35');">line_mode</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-36" class="py-name" targets="Method clubak.Display._getlmode()=clubak.Display-class.html#_getlmode,Method clush.Display._getlmode()=clush.Display-class.html#_getlmode"><a title="clubak.Display._getlmode
173 clush.Display._getlmode" class="py-name" href="#" onclick="return doclink('link-36', '_getlmode', 'link-36');">_getlmode</a></tt><tt class="py-op">,</tt> <tt id="link-37" class="py-name" targets="Method clubak.Display._setlmode()=clubak.Display-class.html#_setlmode,Method clush.Display._setlmode()=clush.Display-class.html#_setlmode"><a title="clubak.Display._setlmode
174 clush.Display._setlmode" class="py-name" href="#" onclick="return doclink('link-37', '_setlmode', 'link-37');">_setlmode</a></tt><tt class="py-op">)</tt> </tt>
175 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> </tt>
176 <a name="Display._format_header"></a><div id="Display._format_header-def"><a name="L100"></a><tt class="py-lineno">100</tt> <a class="py-toggle" href="#" id="Display._format_header-toggle" onclick="return toggle('Display._format_header');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-class.html#_format_header">_format_header</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
177 </div><div id="Display._format_header-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display._format_header-expanded"><a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-docstring">"""Format nodeset-based header."""</tt> </tt>
178 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-38', 'regroup', 'link-29');">regroup</a></tt><tt class="py-op">:</tt> </tt>
179 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-39" class="py-name" targets="Module nodeset=nodeset-module.html"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-39', 'nodeset', 'link-39');">nodeset</a></tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-40', 'regroup', 'link-29');">regroup</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt><tt class="py-op">,</tt> <tt class="py-name">noprefix</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">noprefix</tt><tt class="py-op">)</tt> </tt>
180 <a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-41" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-41', 'nodeset', 'link-39');">nodeset</a></tt><tt class="py-op">)</tt> </tt>
181 </div><a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> </tt>
182 <a name="Display.print_line"></a><div id="Display.print_line-def"><a name="L106"></a><tt class="py-lineno">106</tt> <a class="py-toggle" href="#" id="Display.print_line-toggle" onclick="return toggle('Display.print_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-class.html#print_line">print_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
183 </div><div id="Display.print_line-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display.print_line-expanded"><a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-docstring">"""Display a line with optional label."""</tt> </tt>
184 <a name="L108"></a><tt class="py-lineno">108</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">label</tt><tt class="py-op">:</tt> </tt>
185 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">"%s: "</tt> <tt class="py-op">%</tt> <tt id="link-42" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-42', 'nodeset', 'link-39');">nodeset</a></tt><tt class="py-op">)</tt> </tt>
186 <a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method ClusterShell.Worker.Pdsh.WorkerPdsh.write()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#write,Method ClusterShell.Worker.Ssh.WorkerSsh.write()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#write,Method ClusterShell.Worker.Worker.WorkerSimple.write()=ClusterShell.Worker.Worker.WorkerSimple-class.html#write"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
187 ClusterShell.Worker.Ssh.WorkerSsh.write
188 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-43', 'write', 'link-43');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">prefix</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
189 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
190 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
191 ClusterShell.Worker.Ssh.WorkerSsh.write
192 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-44', 'write', 'link-43');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s\n"</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
193 </div><a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> </tt>
194 <a name="Display.print_line_error"></a><div id="Display.print_line_error-def"><a name="L114"></a><tt class="py-lineno">114</tt> <a class="py-toggle" href="#" id="Display.print_line_error-toggle" onclick="return toggle('Display.print_line_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-class.html#print_line_error">print_line_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
195 </div><div id="Display.print_line_error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display.print_line_error-expanded"><a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-docstring">"""Display an error line with optional label."""</tt> </tt>
196 <a name="L116"></a><tt class="py-lineno">116</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">label</tt><tt class="py-op">:</tt> </tt>
197 <a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stderr_fmt</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">"%s: "</tt> <tt class="py-op">%</tt> <tt id="link-45" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-45', 'nodeset', 'link-39');">nodeset</a></tt><tt class="py-op">)</tt> </tt>
198 <a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">err</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
199 ClusterShell.Worker.Ssh.WorkerSsh.write
200 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-46', 'write', 'link-43');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">prefix</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
201 <a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
202 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">err</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
203 ClusterShell.Worker.Ssh.WorkerSsh.write
204 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-47', 'write', 'link-43');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s\n"</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
205 </div><a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> </tt>
206 <a name="Display.print_gather"></a><div id="Display.print_gather-def"><a name="L122"></a><tt class="py-lineno">122</tt> <a class="py-toggle" href="#" id="Display.print_gather-toggle" onclick="return toggle('Display.print_gather');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-class.html#print_gather">print_gather</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">obj</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
207 </div><div id="Display.print_gather-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display.print_gather-expanded"><a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-docstring">"""Generic method for displaying nodeset/content according to current</tt> </tt>
208 <a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"><tt class="py-docstring"> object settings."""</tt> </tt>
209 <a name="L125"></a><tt class="py-lineno">125</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">_display</tt><tt class="py-op">(</tt><tt id="link-48" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-48', 'nodeset', 'link-39');">nodeset</a></tt><tt class="py-op">,</tt> <tt class="py-name">obj</tt><tt class="py-op">)</tt> </tt>
210 </div><a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> </tt>
211 <a name="Display._print_buffer"></a><div id="Display._print_buffer-def"><a name="L127"></a><tt class="py-lineno">127</tt> <a class="py-toggle" href="#" id="Display._print_buffer-toggle" onclick="return toggle('Display._print_buffer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-class.html#_print_buffer">_print_buffer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
212 </div><div id="Display._print_buffer-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display._print_buffer-expanded"><a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-docstring">"""Display a dshbak-like header block and content."""</tt> </tt>
213 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">"%s\n%s\n%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="clubak.Display.SEP
214 clush.Display.SEP" class="py-name" href="#" onclick="return doclink('link-49', 'SEP', 'link-27');">SEP</a></tt><tt class="py-op">,</tt> </tt>
215 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name" targets="Method clubak.Display._format_header()=clubak.Display-class.html#_format_header,Method clush.Display._format_header()=clush.Display-class.html#_format_header"><a title="clubak.Display._format_header
216 clush.Display._format_header" class="py-name" href="#" onclick="return doclink('link-50', '_format_header', 'link-50');">_format_header</a></tt><tt class="py-op">(</tt><tt id="link-51" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-51', 'nodeset', 'link-39');">nodeset</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
217 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="clubak.Display.SEP
218 clush.Display.SEP" class="py-name" href="#" onclick="return doclink('link-52', 'SEP', 'link-27');">SEP</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
219 <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 class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
220 ClusterShell.Worker.Ssh.WorkerSsh.write
221 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-53', 'write', 'link-43');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">header</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
222 </div><a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt>
223 <a name="Display._print_lines"></a><div id="Display._print_lines-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="Display._print_lines-toggle" onclick="return toggle('Display._print_lines');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak.Display-class.html#_print_lines">_print_lines</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
224 </div><div id="Display._print_lines-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Display._print_lines-expanded"><a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-docstring">"""Display a MsgTree buffer by line with prefixed header."""</tt> </tt>
225 <a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">%</tt> \ </tt>
226 <a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">"%s: "</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="clubak.Display._format_header
227 clush.Display._format_header" class="py-name" href="#" onclick="return doclink('link-54', '_format_header', 'link-50');">_format_header</a></tt><tt class="py-op">(</tt><tt id="link-55" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-55', 'nodeset', 'link-39');">nodeset</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
228 <a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt id="link-56" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-56', 'msg', 'link-56');">msg</a></tt><tt class="py-op">:</tt> </tt>
229 <a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
230 ClusterShell.Worker.Ssh.WorkerSsh.write
231 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-57', 'write', 'link-43');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">header</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
232 </div></div><a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> </tt>
233 <a name="nodeset_cmp"></a><div id="nodeset_cmp-def"><a name="L141"></a><tt class="py-lineno">141</tt> <a class="py-toggle" href="#" id="nodeset_cmp-toggle" onclick="return toggle('nodeset_cmp');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak-module.html#nodeset_cmp">nodeset_cmp</a><tt class="py-op">(</tt><tt class="py-param">ns1</tt><tt class="py-op">,</tt> <tt class="py-param">ns2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
234 </div><div id="nodeset_cmp-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="nodeset_cmp-expanded"><a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-docstring">"""Compare 2 nodesets by their length (we want larger nodeset</tt> </tt>
235 <a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"><tt class="py-docstring"> first) and then by first node."""</tt> </tt>
236 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-name">len_cmp</tt> <tt class="py-op">=</tt> <tt class="py-name">cmp</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">ns2</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">ns1</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
237 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">len_cmp</tt><tt class="py-op">:</tt> </tt>
238 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">smaller</tt> <tt class="py-op">=</tt> <tt id="link-58" class="py-name"><a title="ClusterShell.NodeSet
239 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-58', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Class Method ClusterShell.NodeSet.NodeSet.fromlist()=ClusterShell.NodeSet.NodeSet-class.html#fromlist,Class Method ClusterShell.NodeSet.RangeSet.fromlist()=ClusterShell.NodeSet.RangeSet-class.html#fromlist"><a title="ClusterShell.NodeSet.NodeSet.fromlist
240 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-59', 'fromlist', 'link-59');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">ns1</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">ns2</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-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
241 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">smaller</tt> <tt class="py-op">==</tt> <tt class="py-name">ns1</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
242 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
243 <a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
244 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">1</tt> </tt>
245 <a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len_cmp</tt> </tt>
246 </div><a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> </tt>
247 <a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"><tt class="py-comment"># End of clush.py common code</tt> </tt>
248 <a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> </tt>
249 <a name="display"></a><div id="display-def"><a name="L155"></a><tt class="py-lineno">155</tt> <a class="py-toggle" href="#" id="display-toggle" onclick="return toggle('display');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak-module.html#display">display</a><tt class="py-op">(</tt><tt class="py-param">tree</tt><tt class="py-op">,</tt> <tt class="py-param">gather</tt><tt class="py-op">,</tt> <tt class="py-param">disp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
250 </div><div id="display-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="display-expanded"><a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-docstring">"""Display results"""</tt> </tt>
251 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
252 <a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">gather</tt><tt class="py-op">:</tt> </tt>
253 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-comment"># lambda to create a NodeSet from keys list returned by walk()</tt> </tt>
254 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">ns_getter</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">x</tt><tt class="py-op">:</tt> <tt id="link-60" class="py-name"><a title="ClusterShell.NodeSet
255 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-60', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
256 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-61', 'fromlist', 'link-59');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
257 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-62" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-62', 'nodeset', 'link-39');">nodeset</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">imap</tt><tt class="py-op">(</tt><tt class="py-name">ns_getter</tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.walk()=ClusterShell.MsgTree.MsgTree-class.html#walk"><a title="ClusterShell.MsgTree.MsgTree.walk" class="py-name" href="#" onclick="return doclink('link-63', 'walk', 'link-63');">walk</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
258 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-name">cmp</tt><tt class="py-op">=</tt><tt id="link-64" class="py-name" targets="Function clubak.nodeset_cmp()=clubak-module.html#nodeset_cmp,Function clush.nodeset_cmp()=clush-module.html#nodeset_cmp"><a title="clubak.nodeset_cmp
259 clush.nodeset_cmp" class="py-name" href="#" onclick="return doclink('link-64', 'nodeset_cmp', 'link-64');">nodeset_cmp</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
260 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name" targets="Method clubak.Display.print_gather()=clubak.Display-class.html#print_gather,Method clush.Display.print_gather()=clush.Display-class.html#print_gather"><a title="clubak.Display.print_gather
261 clush.Display.print_gather" class="py-name" href="#" onclick="return doclink('link-65', 'print_gather', 'link-65');">print_gather</a></tt><tt class="py-op">(</tt><tt id="link-66" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-66', 'nodeset', 'link-39');">nodeset</a></tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">[</tt><tt id="link-67" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-67', 'nodeset', 'link-39');">nodeset</a></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-op">)</tt> </tt>
262 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
263 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-comment"># nodes are automagically sorted by NodeSet</tt> </tt>
264 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt id="link-68" class="py-name"><a title="ClusterShell.NodeSet
265 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-68', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
266 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-69', 'fromlist', 'link-59');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">tree</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.keys()=ClusterShell.MsgTree.MsgTree-class.html#keys"><a title="ClusterShell.MsgTree.MsgTree.keys" class="py-name" href="#" onclick="return doclink('link-70', 'keys', 'link-70');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
267 <a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="clubak.Display.print_gather
268 clush.Display.print_gather" class="py-name" href="#" onclick="return doclink('link-71', 'print_gather', 'link-65');">print_gather</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">[</tt><tt class="py-name">node</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
269 <a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
270 <a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">flush</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
271 </div><a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> </tt>
272 <a name="clubak"></a><div id="clubak-def"><a name="L171"></a><tt class="py-lineno">171</tt> <a class="py-toggle" href="#" id="clubak-toggle" onclick="return toggle('clubak');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clubak-module.html#clubak">clubak</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
273 </div><div id="clubak-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="clubak-expanded"><a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-docstring">"""Main clubak script function"""</tt> </tt>
274 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
275 <a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-comment"># Argument management</tt> </tt>
276 <a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
277 <a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">usage</tt> <tt class="py-op">=</tt> <tt class="py-string">"%prog [options]"</tt> </tt>
278 <a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">optparse</tt><tt class="py-op">.</tt><tt class="py-name">OptionParser</tt><tt class="py-op">(</tt><tt class="py-name">usage</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">=</tt><tt class="py-string">"%%prog %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">__version__</tt><tt class="py-op">)</tt> </tt>
279 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> </tt>
280 <a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-comment"># Set parsing to stop on the first non-option</tt> </tt>
281 <a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">disable_interspersed_args</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
282 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> </tt>
283 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-b"</tt><tt class="py-op">,</tt> <tt class="py-string">"-c"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"gather"</tt><tt class="py-op">,</tt> </tt>
284 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"gather nodes with same output (-c is provided "</tt> \ </tt>
285 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-string">"for dshbak compatibility)"</tt><tt class="py-op">)</tt> </tt>
286 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-d"</tt><tt class="py-op">,</tt> <tt class="py-string">"--debug"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> </tt>
287 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"output more messages for debugging purpose"</tt><tt class="py-op">)</tt> </tt>
288 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-L"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"line_mode"</tt><tt class="py-op">,</tt> </tt>
289 <a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"disable header block and order output by nodes"</tt><tt class="py-op">)</tt> </tt>
290 <a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-r"</tt><tt class="py-op">,</tt> <tt class="py-string">"--regroup"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"regroup"</tt><tt class="py-op">,</tt> </tt>
291 <a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt id="link-72" class="py-name" targets="Method ClusterShell.Task.Task.default()=ClusterShell.Task.Task-class.html#default"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-72', 'default', 'link-72');">default</a></tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"fold nodeset using node groups"</tt><tt class="py-op">)</tt> </tt>
292 <a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-s"</tt><tt class="py-op">,</tt> <tt class="py-string">"--groupsource"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"groupsource"</tt><tt class="py-op">,</tt> </tt>
293 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"optional groups.conf(5) group source to use"</tt><tt class="py-op">)</tt> </tt>
294 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-G"</tt><tt class="py-op">,</tt> <tt class="py-string">"--groupbase"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> </tt>
295 <a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"groupbase"</tt><tt class="py-op">,</tt> <tt id="link-73" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-73', 'default', 'link-72');">default</a></tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"do not display "</tt> \ </tt>
296 <a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-string">"group source prefix"</tt><tt class="py-op">)</tt> </tt>
297 <a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-S"</tt><tt class="py-op">,</tt> <tt class="py-string">"--separator"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"separator"</tt><tt class="py-op">,</tt> </tt>
298 <a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt id="link-74" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-74', 'default', 'link-72');">default</a></tt><tt class="py-op">=</tt><tt class="py-string">':'</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"node / line content separator "</tt> \ </tt>
299 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-string">"string (default: ':')"</tt><tt class="py-op">)</tt> </tt>
300 <a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"--color"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"whencolor"</tt><tt class="py-op">,</tt> </tt>
301 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">choices</tt><tt class="py-op">=</tt><tt id="link-75" class="py-name"><a title="clubak.WHENCOLOR_CHOICES
302 clush.WHENCOLOR_CHOICES" class="py-name" href="#" onclick="return doclink('link-75', 'WHENCOLOR_CHOICES', 'link-24');">WHENCOLOR_CHOICES</a></tt><tt class="py-op">,</tt> </tt>
303 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"whether to use ANSI colors (never, always or auto)"</tt><tt class="py-op">)</tt> </tt>
304 <a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">options</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">parse_args</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
305 <a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> </tt>
306 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-comment"># Create new message tree</tt> </tt>
307 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">tree</tt> <tt class="py-op">=</tt> <tt id="link-76" class="py-name"><a title="ClusterShell.MsgTree
308 ClusterShell.MsgTree.MsgTree" class="py-name" href="#" onclick="return doclink('link-76', 'MsgTree', 'link-13');">MsgTree</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
309 <a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> </tt>
310 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-comment"># Feed the tree from standard input lines</tt> </tt>
311 <a name="L208"></a><tt class="py-lineno">208</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">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">:</tt> </tt>
312 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.split()=ClusterShell.NodeSet.NodeSet-class.html#split,Method ClusterShell.NodeSet.RangeSet.split()=ClusterShell.NodeSet.RangeSet-class.html#split"><a title="ClusterShell.NodeSet.NodeSet.split
313 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-77', 'split', 'link-77');">split</a></tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">separator</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
314 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
315 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">node</tt><tt class="py-op">:</tt> </tt>
316 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"No node found for line: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
317 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-name">tree</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.add()=ClusterShell.Engine.Engine.Engine-class.html#add,Method ClusterShell.MsgTree.MsgTree.add()=ClusterShell.MsgTree.MsgTree-class.html#add,Method ClusterShell.NodeSet.NodeSetBase.add()=ClusterShell.NodeSet.NodeSetBase-class.html#add,Method ClusterShell.NodeSet.RangeSet.add()=ClusterShell.NodeSet.RangeSet-class.html#add"><a title="ClusterShell.Engine.Engine.Engine.add
318 ClusterShell.MsgTree.MsgTree.add
319 ClusterShell.NodeSet.NodeSetBase.add
320 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-78', 'add', 'link-78');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
321 <a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> </tt>
322 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
323 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clubak: line_mode=%s gather=%s tree_depth=%d"</tt> <tt class="py-op">%</tt> \ </tt>
324 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="clubak.Display.line_mode
325 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-79', 'line_mode', 'link-35');">line_mode</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">gather</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree._depth()=ClusterShell.MsgTree.MsgTree-class.html#_depth"><a title="ClusterShell.MsgTree.MsgTree._depth" class="py-name" href="#" onclick="return doclink('link-80', '_depth', 'link-80');">_depth</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
326 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> </tt>
327 <a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-comment"># Should we use ANSI colors?</tt> </tt>
328 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-name">color</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
329 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">whencolor</tt> <tt class="py-op">==</tt> <tt class="py-string">"auto"</tt><tt class="py-op">:</tt> </tt>
330 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-name">color</tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">isatty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
331 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">whencolor</tt> <tt class="py-op">==</tt> <tt class="py-string">"always"</tt><tt class="py-op">:</tt> </tt>
332 <a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-name">color</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
333 <a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> </tt>
334 <a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-comment"># Display results</tt> </tt>
335 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">disp</tt> <tt class="py-op">=</tt> <tt id="link-81" class="py-name" targets="Class clubak.Display=clubak.Display-class.html,Class clush.Display=clush.Display-class.html"><a title="clubak.Display
336 clush.Display" class="py-name" href="#" onclick="return doclink('link-81', 'Display', 'link-81');">Display</a></tt><tt class="py-op">(</tt><tt class="py-name">color</tt><tt class="py-op">)</tt> </tt>
337 <a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="clubak.Display.line_mode
338 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-82', 'line_mode', 'link-35');">line_mode</a></tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="clubak.Display.line_mode
339 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-83', 'line_mode', 'link-35');">line_mode</a></tt> </tt>
340 <a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt class="py-name">label</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
341 <a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-84', 'regroup', 'link-29');">regroup</a></tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-85', 'regroup', 'link-29');">regroup</a></tt> </tt>
342 <a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt> </tt>
343 <a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt class="py-name">noprefix</tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">groupbase</tt> </tt>
344 <a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt id="link-86" class="py-name" targets="Function clubak.display()=clubak-module.html#display"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-86', 'display', 'link-86');">display</a></tt><tt class="py-op">(</tt><tt class="py-name">tree</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">gather</tt><tt class="py-op">,</tt> <tt class="py-name">disp</tt><tt class="py-op">)</tt> </tt>
345 <a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
346 </div><a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> </tt>
347 <a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
348 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
349 <a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt id="link-87" class="py-name" targets="Module clubak=clubak-module.html,Function clubak.clubak()=clubak-module.html#clubak"><a title="clubak
350 clubak.clubak" class="py-name" href="#" onclick="return doclink('link-87', 'clubak', 'link-87');">clubak</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
351 <a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-88" class="py-name"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-88', 'NodeSetExternalError', 'link-20');">NodeSetExternalError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
352 <a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clubak: external error:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
353 <a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
354 <a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-89" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-89', 'NodeSetParseError', 'link-21');">NodeSetParseError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
355 <a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clubak: parse error:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
356 <a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
357 <a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-90" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolverSourceError" class="py-name" href="#" onclick="return doclink('link-90', 'GroupResolverSourceError', 'link-5');">GroupResolverSourceError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
358 <a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: unknown group source: \"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-name">e</tt> </tt>
359 <a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
360 <a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-91" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-91', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
361 <a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: no %s upcall defined for group "</tt> \ </tt>
362 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-string">"source \"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">group_source</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
363 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
364 <a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-92" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceException" class="py-name" href="#" onclick="return doclink('link-92', 'GroupSourceException', 'link-8');">GroupSourceException</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
365 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: other group error:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
366 <a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
367 <a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">:</tt> </tt>
368 <a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-comment"># exit with error on broken pipe</tt> </tt>
369 <a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyboardInterrupt</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
370 <a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">128</tt> <tt class="py-op">+</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGINT</tt><tt class="py-op">)</tt> </tt>
371 <a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
372 <a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clubak:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
373 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
374 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> </tt><script type="text/javascript">
375 <!--
376 expandto(location.href);
377 // -->
378 </script>
379 </pre>
380 <br />
381 <!-- ==================== NAVIGATION BAR ==================== -->
382 <table class="navbar" border="0" width="100%" cellpadding="0"
383 bgcolor="#a0c0ff" cellspacing="0">
384 <tr valign="middle">
385
386 <!-- Tree link -->
387 <th>&nbsp;&nbsp;&nbsp;<a
388 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
389
390 <!-- Index link -->
391 <th>&nbsp;&nbsp;&nbsp;<a
392 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
393
394 <!-- Help link -->
395 <th>&nbsp;&nbsp;&nbsp;<a
396 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
397
398 <!-- Project homepage -->
399 <th class="navbar" align="right" width="100%">
400 <table border="0" cellpadding="0" cellspacing="0">
401 <tr><th class="navbar" align="center"
402 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
403 </tr></table></th>
404 </tr>
405 </table>
406 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
407 <tr>
408 <td align="left" class="footer">
409 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
410 </td>
411 <td align="right" class="footer">
412 <a target="mainFrame" href="http://epydoc.sourceforge.net"
413 >http://epydoc.sourceforge.net</a>
414 </td>
415 </tr>
416 </table>
417
418 <script type="text/javascript">
419 <!--
420 // Private objects are initially displayed (because if
421 // javascript is turned off then we want them to be
422 // visible); but by default, we want to hide them. So hide
423 // them unless we have a cookie that says to show them.
424 checkCookie();
425 // -->
426 </script>
427 </body>
428 </html>
+0
-480
doc/epydoc/html/clubak.Display-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clubak.Display</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clubak-module.html">Module&nbsp;clubak</a> ::
42 Class&nbsp;Display
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clubak.Display-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class Display</h1><p class="nomargin-top"><span class="codelink"><a href="clubak-pysrc.html#Display">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clubak_d" name="uml_class_diagram_for_clubak_d">
62 <area shape="rect" id="node253" href="clubak.Display-class.html#COLOR_STDOUT_FMT" title="clubak.Display.COLOR_STDOUT_FMT" alt="" coords="17,31,221,49"/>
63 <area shape="rect" id="node253" href="clubak.Display-class.html#COLOR_STDERR_FMT" title="clubak.Display.COLOR_STDERR_FMT" alt="" coords="17,49,221,68"/>
64 <area shape="rect" id="node253" href="clubak.Display-class.html#SEP" title="clubak.Display.SEP" alt="" coords="17,68,221,87"/>
65 <area shape="rect" id="node253" href="clubak.Display-class.html#line_mode" title="clubak.Display.line_mode" alt="" coords="17,87,221,105"/>
66 <area shape="rect" id="node253" href="clubak.Display-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,108,221,127"/>
67 <area shape="rect" id="node253" href="clubak.Display-class.html#print_line" title="Display a line with optional label." alt="" coords="17,127,221,145"/>
68 <area shape="rect" id="node253" href="clubak.Display-class.html#print_line_error" title="Display an error line with optional label." alt="" coords="17,145,221,164"/>
69 <area shape="rect" id="node253" href="clubak.Display-class.html#print_gather" title="Generic method for displaying nodeset/content according to current object &#160;settings." alt="" coords="17,164,221,183"/>
70 <area shape="rect" id="node1" href="clubak.Display-class.html" title="Output display class for clush script." alt="" coords="5,6,232,189"/>
71 </map>
72 <img src="uml_class_diagram_for_clubak_d.png" alt='' usemap="#uml_class_diagram_for_clubak_d" ismap="ismap" class="graph-without-title" />
73 </center>
74 </center>
75 <hr />
76 <p>Output display class for clush script.</p>
77
78 <!-- ==================== INSTANCE METHODS ==================== -->
79 <a name="section-InstanceMethods"></a>
80 <table class="summary" border="1" cellpadding="3"
81 cellspacing="0" width="100%" bgcolor="white">
82 <tr bgcolor="#70b0f0" class="table-header">
83 <td colspan="2" class="table-header">
84 <table border="0" cellpadding="0" cellspacing="0" width="100%">
85 <tr valign="top">
86 <td align="left"><span class="table-header">Instance Methods</span></td>
87 <td align="right" valign="top"
88 ><span class="options">[<a href="#section-InstanceMethods"
89 class="privatelink" onclick="toggle_private();"
90 >hide private</a>]</span></td>
91 </tr>
92 </table>
93 </td>
94 </tr>
95 <tr>
96 <td width="15%" align="right" valign="top" class="summary">
97 <span class="summary-type">&nbsp;</span>
98 </td><td class="summary">
99 <table width="100%" cellpadding="0" cellspacing="0" border="0">
100 <tr>
101 <td><span class="summary-sig"><a href="clubak.Display-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
102 <span class="summary-sig-arg">color</span>=<span class="summary-sig-default">True</span>)</span><br />
103 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
104 <td align="right" valign="top">
105 <span class="codelink"><a href="clubak-pysrc.html#Display.__init__">source&nbsp;code</a></span>
106
107 </td>
108 </tr>
109 </table>
110
111 </td>
112 </tr>
113 <tr class="private">
114 <td width="15%" align="right" valign="top" class="summary">
115 <span class="summary-type">&nbsp;</span>
116 </td><td class="summary">
117 <table width="100%" cellpadding="0" cellspacing="0" border="0">
118 <tr>
119 <td><span class="summary-sig"><a name="_getlmode"></a><span class="summary-sig-name">_getlmode</span>(<span class="summary-sig-arg">self</span>)</span></td>
120 <td align="right" valign="top">
121 <span class="codelink"><a href="clubak-pysrc.html#Display._getlmode">source&nbsp;code</a></span>
122
123 </td>
124 </tr>
125 </table>
126
127 </td>
128 </tr>
129 <tr class="private">
130 <td width="15%" align="right" valign="top" class="summary">
131 <span class="summary-type">&nbsp;</span>
132 </td><td class="summary">
133 <table width="100%" cellpadding="0" cellspacing="0" border="0">
134 <tr>
135 <td><span class="summary-sig"><a name="_setlmode"></a><span class="summary-sig-name">_setlmode</span>(<span class="summary-sig-arg">self</span>,
136 <span class="summary-sig-arg">value</span>)</span></td>
137 <td align="right" valign="top">
138 <span class="codelink"><a href="clubak-pysrc.html#Display._setlmode">source&nbsp;code</a></span>
139
140 </td>
141 </tr>
142 </table>
143
144 </td>
145 </tr>
146 <tr class="private">
147 <td width="15%" align="right" valign="top" class="summary">
148 <span class="summary-type">&nbsp;</span>
149 </td><td class="summary">
150 <table width="100%" cellpadding="0" cellspacing="0" border="0">
151 <tr>
152 <td><span class="summary-sig"><a name="_format_header"></a><span class="summary-sig-name">_format_header</span>(<span class="summary-sig-arg">self</span>,
153 <span class="summary-sig-arg">nodeset</span>)</span><br />
154 Format nodeset-based header.</td>
155 <td align="right" valign="top">
156 <span class="codelink"><a href="clubak-pysrc.html#Display._format_header">source&nbsp;code</a></span>
157
158 </td>
159 </tr>
160 </table>
161
162 </td>
163 </tr>
164 <tr>
165 <td width="15%" align="right" valign="top" class="summary">
166 <span class="summary-type">&nbsp;</span>
167 </td><td class="summary">
168 <table width="100%" cellpadding="0" cellspacing="0" border="0">
169 <tr>
170 <td><span class="summary-sig"><a name="print_line"></a><span class="summary-sig-name">print_line</span>(<span class="summary-sig-arg">self</span>,
171 <span class="summary-sig-arg">nodeset</span>,
172 <span class="summary-sig-arg">line</span>)</span><br />
173 Display a line with optional label.</td>
174 <td align="right" valign="top">
175 <span class="codelink"><a href="clubak-pysrc.html#Display.print_line">source&nbsp;code</a></span>
176
177 </td>
178 </tr>
179 </table>
180
181 </td>
182 </tr>
183 <tr>
184 <td width="15%" align="right" valign="top" class="summary">
185 <span class="summary-type">&nbsp;</span>
186 </td><td class="summary">
187 <table width="100%" cellpadding="0" cellspacing="0" border="0">
188 <tr>
189 <td><span class="summary-sig"><a name="print_line_error"></a><span class="summary-sig-name">print_line_error</span>(<span class="summary-sig-arg">self</span>,
190 <span class="summary-sig-arg">nodeset</span>,
191 <span class="summary-sig-arg">line</span>)</span><br />
192 Display an error line with optional label.</td>
193 <td align="right" valign="top">
194 <span class="codelink"><a href="clubak-pysrc.html#Display.print_line_error">source&nbsp;code</a></span>
195
196 </td>
197 </tr>
198 </table>
199
200 </td>
201 </tr>
202 <tr>
203 <td width="15%" align="right" valign="top" class="summary">
204 <span class="summary-type">&nbsp;</span>
205 </td><td class="summary">
206 <table width="100%" cellpadding="0" cellspacing="0" border="0">
207 <tr>
208 <td><span class="summary-sig"><a name="print_gather"></a><span class="summary-sig-name">print_gather</span>(<span class="summary-sig-arg">self</span>,
209 <span class="summary-sig-arg">nodeset</span>,
210 <span class="summary-sig-arg">obj</span>)</span><br />
211 Generic method for displaying nodeset/content according to current
212 object settings.</td>
213 <td align="right" valign="top">
214 <span class="codelink"><a href="clubak-pysrc.html#Display.print_gather">source&nbsp;code</a></span>
215
216 </td>
217 </tr>
218 </table>
219
220 </td>
221 </tr>
222 <tr class="private">
223 <td width="15%" align="right" valign="top" class="summary">
224 <span class="summary-type">&nbsp;</span>
225 </td><td class="summary">
226 <table width="100%" cellpadding="0" cellspacing="0" border="0">
227 <tr>
228 <td><span class="summary-sig"><a name="_print_buffer"></a><span class="summary-sig-name">_print_buffer</span>(<span class="summary-sig-arg">self</span>,
229 <span class="summary-sig-arg">nodeset</span>,
230 <span class="summary-sig-arg">content</span>)</span><br />
231 Display a dshbak-like header block and content.</td>
232 <td align="right" valign="top">
233 <span class="codelink"><a href="clubak-pysrc.html#Display._print_buffer">source&nbsp;code</a></span>
234
235 </td>
236 </tr>
237 </table>
238
239 </td>
240 </tr>
241 <tr class="private">
242 <td width="15%" align="right" valign="top" class="summary">
243 <span class="summary-type">&nbsp;</span>
244 </td><td class="summary">
245 <table width="100%" cellpadding="0" cellspacing="0" border="0">
246 <tr>
247 <td><span class="summary-sig"><a name="_print_lines"></a><span class="summary-sig-name">_print_lines</span>(<span class="summary-sig-arg">self</span>,
248 <span class="summary-sig-arg">nodeset</span>,
249 <span class="summary-sig-arg">msg</span>)</span><br />
250 Display a MsgTree buffer by line with prefixed header.</td>
251 <td align="right" valign="top">
252 <span class="codelink"><a href="clubak-pysrc.html#Display._print_lines">source&nbsp;code</a></span>
253
254 </td>
255 </tr>
256 </table>
257
258 </td>
259 </tr>
260 <tr>
261 <td colspan="2" class="summary">
262 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
263 <code>__delattr__</code>,
264 <code>__format__</code>,
265 <code>__getattribute__</code>,
266 <code>__hash__</code>,
267 <code>__new__</code>,
268 <code>__reduce__</code>,
269 <code>__reduce_ex__</code>,
270 <code>__repr__</code>,
271 <code>__setattr__</code>,
272 <code>__sizeof__</code>,
273 <code>__str__</code>,
274 <code>__subclasshook__</code>
275 </p>
276 </td>
277 </tr>
278 </table>
279 <!-- ==================== CLASS VARIABLES ==================== -->
280 <a name="section-ClassVariables"></a>
281 <table class="summary" border="1" cellpadding="3"
282 cellspacing="0" width="100%" bgcolor="white">
283 <tr bgcolor="#70b0f0" class="table-header">
284 <td colspan="2" class="table-header">
285 <table border="0" cellpadding="0" cellspacing="0" width="100%">
286 <tr valign="top">
287 <td align="left"><span class="table-header">Class Variables</span></td>
288 <td align="right" valign="top"
289 ><span class="options">[<a href="#section-ClassVariables"
290 class="privatelink" onclick="toggle_private();"
291 >hide private</a>]</span></td>
292 </tr>
293 </table>
294 </td>
295 </tr>
296 <tr>
297 <td width="15%" align="right" valign="top" class="summary">
298 <span class="summary-type">&nbsp;</span>
299 </td><td class="summary">
300 <a name="COLOR_STDOUT_FMT"></a><span class="summary-name">COLOR_STDOUT_FMT</span> = <code title="'\x1b[34m%s\x1b[0m'"><code class="variable-quote">'</code><code class="variable-string">\x1b[34m%s\x1b[0m</code><code class="variable-quote">'</code></code>
301 </td>
302 </tr>
303 <tr>
304 <td width="15%" align="right" valign="top" class="summary">
305 <span class="summary-type">&nbsp;</span>
306 </td><td class="summary">
307 <a name="COLOR_STDERR_FMT"></a><span class="summary-name">COLOR_STDERR_FMT</span> = <code title="'\x1b[31m%s\x1b[0m'"><code class="variable-quote">'</code><code class="variable-string">\x1b[31m%s\x1b[0m</code><code class="variable-quote">'</code></code>
308 </td>
309 </tr>
310 <tr>
311 <td width="15%" align="right" valign="top" class="summary">
312 <span class="summary-type">&nbsp;</span>
313 </td><td class="summary">
314 <a name="SEP"></a><span class="summary-name">SEP</span> = <code title="'---------------'"><code class="variable-quote">'</code><code class="variable-string">---------------</code><code class="variable-quote">'</code></code>
315 </td>
316 </tr>
317 </table>
318 <!-- ==================== PROPERTIES ==================== -->
319 <a name="section-Properties"></a>
320 <table class="summary" border="1" cellpadding="3"
321 cellspacing="0" width="100%" bgcolor="white">
322 <tr bgcolor="#70b0f0" class="table-header">
323 <td colspan="2" class="table-header">
324 <table border="0" cellpadding="0" cellspacing="0" width="100%">
325 <tr valign="top">
326 <td align="left"><span class="table-header">Properties</span></td>
327 <td align="right" valign="top"
328 ><span class="options">[<a href="#section-Properties"
329 class="privatelink" onclick="toggle_private();"
330 >hide private</a>]</span></td>
331 </tr>
332 </table>
333 </td>
334 </tr>
335 <tr>
336 <td width="15%" align="right" valign="top" class="summary">
337 <span class="summary-type">&nbsp;</span>
338 </td><td class="summary">
339 <a href="clubak.Display-class.html#line_mode" class="summary-name">line_mode</a>
340 </td>
341 </tr>
342 <tr>
343 <td colspan="2" class="summary">
344 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
345 <code>__class__</code>
346 </p>
347 </td>
348 </tr>
349 </table>
350 <!-- ==================== METHOD DETAILS ==================== -->
351 <a name="section-MethodDetails"></a>
352 <table class="details" border="1" cellpadding="3"
353 cellspacing="0" width="100%" bgcolor="white">
354 <tr bgcolor="#70b0f0" class="table-header">
355 <td colspan="2" class="table-header">
356 <table border="0" cellpadding="0" cellspacing="0" width="100%">
357 <tr valign="top">
358 <td align="left"><span class="table-header">Method Details</span></td>
359 <td align="right" valign="top"
360 ><span class="options">[<a href="#section-MethodDetails"
361 class="privatelink" onclick="toggle_private();"
362 >hide private</a>]</span></td>
363 </tr>
364 </table>
365 </td>
366 </tr>
367 </table>
368 <a name="__init__"></a>
369 <div>
370 <table class="details" border="1" cellpadding="3"
371 cellspacing="0" width="100%" bgcolor="white">
372 <tr><td>
373 <table width="100%" cellpadding="0" cellspacing="0" border="0">
374 <tr valign="top"><td>
375 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
376 <span class="sig-arg">color</span>=<span class="sig-default">True</span>)</span>
377 <br /><em class="fname">(Constructor)</em>
378 </h3>
379 </td><td align="right" valign="top"
380 ><span class="codelink"><a href="clubak-pysrc.html#Display.__init__">source&nbsp;code</a></span>&nbsp;
381 </td>
382 </tr></table>
383
384 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
385 signature</p>
386 <dl class="fields">
387 <dt>Overrides:
388 object.__init__
389 <dd><em class="note">(inherited documentation)</em></dd>
390 </dt>
391 </dl>
392 </td></tr></table>
393 </div>
394 <br />
395 <!-- ==================== PROPERTY DETAILS ==================== -->
396 <a name="section-PropertyDetails"></a>
397 <table class="details" border="1" cellpadding="3"
398 cellspacing="0" width="100%" bgcolor="white">
399 <tr bgcolor="#70b0f0" class="table-header">
400 <td colspan="2" class="table-header">
401 <table border="0" cellpadding="0" cellspacing="0" width="100%">
402 <tr valign="top">
403 <td align="left"><span class="table-header">Property Details</span></td>
404 <td align="right" valign="top"
405 ><span class="options">[<a href="#section-PropertyDetails"
406 class="privatelink" onclick="toggle_private();"
407 >hide private</a>]</span></td>
408 </tr>
409 </table>
410 </td>
411 </tr>
412 </table>
413 <a name="line_mode"></a>
414 <div>
415 <table class="details" border="1" cellpadding="3"
416 cellspacing="0" width="100%" bgcolor="white">
417 <tr><td>
418 <h3 class="epydoc">line_mode</h3>
419
420 <dl class="fields">
421 <dt>Get Method:</dt>
422 <dd class="value"><span class="summary-sig"><a href="clubak.Display-class.html#_getlmode" class="summary-sig-name" onclick="show_private();">_getlmode</a>(<span class="summary-sig-arg">self</span>)</span>
423 </dd>
424 <dt>Set Method:</dt>
425 <dd class="value"><span class="summary-sig"><a href="clubak.Display-class.html#_setlmode" class="summary-sig-name" onclick="show_private();">_setlmode</a>(<span class="summary-sig-arg">self</span>,
426 <span class="summary-sig-arg">value</span>)</span>
427 </dd>
428 </dl>
429 </td></tr></table>
430 </div>
431 <br />
432 <!-- ==================== NAVIGATION BAR ==================== -->
433 <table class="navbar" border="0" width="100%" cellpadding="0"
434 bgcolor="#a0c0ff" cellspacing="0">
435 <tr valign="middle">
436
437 <!-- Tree link -->
438 <th>&nbsp;&nbsp;&nbsp;<a
439 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
440
441 <!-- Index link -->
442 <th>&nbsp;&nbsp;&nbsp;<a
443 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
444
445 <!-- Help link -->
446 <th>&nbsp;&nbsp;&nbsp;<a
447 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
448
449 <!-- Project homepage -->
450 <th class="navbar" align="right" width="100%">
451 <table border="0" cellpadding="0" cellspacing="0">
452 <tr><th class="navbar" align="center"
453 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
454 </tr></table></th>
455 </tr>
456 </table>
457 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
458 <tr>
459 <td align="left" class="footer">
460 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
461 </td>
462 <td align="right" class="footer">
463 <a target="mainFrame" href="http://epydoc.sourceforge.net"
464 >http://epydoc.sourceforge.net</a>
465 </td>
466 </tr>
467 </table>
468
469 <script type="text/javascript">
470 <!--
471 // Private objects are initially displayed (because if
472 // javascript is turned off then we want them to be
473 // visible); but by default, we want to hide them. So hide
474 // them unless we have a cookie that says to show them.
475 checkCookie();
476 // -->
477 </script>
478 </body>
479 </html>
+0
-552
doc/epydoc/html/clush-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 Module&nbsp;clush
42 </span>
43 </td>
44 <td>
45 <table cellpadding="0" cellspacing="0">
46 <!-- hide/show private -->
47 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49 <tr><td align="right"><span class="options"
50 >[<a href="frames.html" target="_top">frames</a
51 >]&nbsp;|&nbsp;<a href="clush-module.html"
52 target="_top">no&nbsp;frames</a>]</span></td></tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 <!-- ==================== MODULE DESCRIPTION ==================== -->
58 <h1 class="epydoc">Module clush</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html">source&nbsp;code</a></span></p>
59 <p>Utility program to run commands on a cluster using the ClusterShell
60 library.</p>
61 <p>clush is a pdsh-like command which benefits from the ClusterShell
62 library and its Ssh worker. It features an integrated output results
63 gathering system (dshbak-like), can get node groups by running predefined
64 external commands and can redirect lines read on its standard input to
65 the remote commands.</p>
66 <p>When no command are specified, clush runs interactively.</p>
67
68 <hr />
69 <div class="fields"> <p><strong>Version:</strong>
70 1.3
71 </p>
72 </div><!-- ==================== CLASSES ==================== -->
73 <a name="section-Classes"></a>
74 <table class="summary" border="1" cellpadding="3"
75 cellspacing="0" width="100%" bgcolor="white">
76 <tr bgcolor="#70b0f0" class="table-header">
77 <td colspan="2" class="table-header">
78 <table border="0" cellpadding="0" cellspacing="0" width="100%">
79 <tr valign="top">
80 <td align="left"><span class="table-header">Classes</span></td>
81 <td align="right" valign="top"
82 ><span class="options">[<a href="#section-Classes"
83 class="privatelink" onclick="toggle_private();"
84 >hide private</a>]</span></td>
85 </tr>
86 </table>
87 </td>
88 </tr>
89 <tr>
90 <td width="15%" align="right" valign="top" class="summary">
91 <span class="summary-type">&nbsp;</span>
92 </td><td class="summary">
93 <a href="clush.Display-class.html" class="summary-name">Display</a><br />
94 Output display class for clush script.
95 </td>
96 </tr>
97 <tr>
98 <td width="15%" align="right" valign="top" class="summary">
99 <span class="summary-type">&nbsp;</span>
100 </td><td class="summary">
101 <a href="clush.UpdatePromptException-class.html" class="summary-name">UpdatePromptException</a><br />
102 Exception used by the signal handler
103 </td>
104 </tr>
105 <tr>
106 <td width="15%" align="right" valign="top" class="summary">
107 <span class="summary-type">&nbsp;</span>
108 </td><td class="summary">
109 <a href="clush.StdInputHandler-class.html" class="summary-name">StdInputHandler</a><br />
110 Standard input event handler class.
111 </td>
112 </tr>
113 <tr>
114 <td width="15%" align="right" valign="top" class="summary">
115 <span class="summary-type">&nbsp;</span>
116 </td><td class="summary">
117 <a href="clush.DirectOutputHandler-class.html" class="summary-name">DirectOutputHandler</a><br />
118 Direct output event handler class.
119 </td>
120 </tr>
121 <tr>
122 <td width="15%" align="right" valign="top" class="summary">
123 <span class="summary-type">&nbsp;</span>
124 </td><td class="summary">
125 <a href="clush.GatherOutputHandler-class.html" class="summary-name">GatherOutputHandler</a><br />
126 Gathered output event handler class.
127 </td>
128 </tr>
129 <tr>
130 <td width="15%" align="right" valign="top" class="summary">
131 <span class="summary-type">&nbsp;</span>
132 </td><td class="summary">
133 <a href="clush.RunTimer-class.html" class="summary-name">RunTimer</a>
134 </td>
135 </tr>
136 <tr>
137 <td width="15%" align="right" valign="top" class="summary">
138 <span class="summary-type">&nbsp;</span>
139 </td><td class="summary">
140 <a href="clush.ClushConfigError-class.html" class="summary-name">ClushConfigError</a><br />
141 Exception used by ClushConfig to report an error.
142 </td>
143 </tr>
144 <tr>
145 <td width="15%" align="right" valign="top" class="summary">
146 <span class="summary-type">&nbsp;</span>
147 </td><td class="summary">
148 <a href="clush.ClushConfig-class.html" class="summary-name">ClushConfig</a><br />
149 Config class for clush (specialized ConfigParser)
150 </td>
151 </tr>
152 </table>
153 <!-- ==================== FUNCTIONS ==================== -->
154 <a name="section-Functions"></a>
155 <table class="summary" border="1" cellpadding="3"
156 cellspacing="0" width="100%" bgcolor="white">
157 <tr bgcolor="#70b0f0" class="table-header">
158 <td colspan="2" class="table-header">
159 <table border="0" cellpadding="0" cellspacing="0" width="100%">
160 <tr valign="top">
161 <td align="left"><span class="table-header">Functions</span></td>
162 <td align="right" valign="top"
163 ><span class="options">[<a href="#section-Functions"
164 class="privatelink" onclick="toggle_private();"
165 >hide private</a>]</span></td>
166 </tr>
167 </table>
168 </td>
169 </tr>
170 <tr>
171 <td width="15%" align="right" valign="top" class="summary">
172 <span class="summary-type">&nbsp;</span>
173 </td><td class="summary">
174 <table width="100%" cellpadding="0" cellspacing="0" border="0">
175 <tr>
176 <td><span class="summary-sig"><a name="nodeset_cmp"></a><span class="summary-sig-name">nodeset_cmp</span>(<span class="summary-sig-arg">ns1</span>,
177 <span class="summary-sig-arg">ns2</span>)</span><br />
178 Compare 2 nodesets by their length (we want larger nodeset first) and
179 then by first node.</td>
180 <td align="right" valign="top">
181 <span class="codelink"><a href="clush-pysrc.html#nodeset_cmp">source&nbsp;code</a></span>
182
183 </td>
184 </tr>
185 </table>
186
187 </td>
188 </tr>
189 <tr>
190 <td width="15%" align="right" valign="top" class="summary">
191 <span class="summary-type">&nbsp;</span>
192 </td><td class="summary">
193 <table width="100%" cellpadding="0" cellspacing="0" border="0">
194 <tr>
195 <td><span class="summary-sig"><a name="bufnodeset_cmp"></a><span class="summary-sig-name">bufnodeset_cmp</span>(<span class="summary-sig-arg">bn1</span>,
196 <span class="summary-sig-arg">bn2</span>)</span><br />
197 Convenience function to compare 2 (buf, nodeset) tuples by their
198 nodeset length (we want larger nodeset first) and then by first node.</td>
199 <td align="right" valign="top">
200 <span class="codelink"><a href="clush-pysrc.html#bufnodeset_cmp">source&nbsp;code</a></span>
201
202 </td>
203 </tr>
204 </table>
205
206 </td>
207 </tr>
208 <tr>
209 <td width="15%" align="right" valign="top" class="summary">
210 <span class="summary-type">&nbsp;</span>
211 </td><td class="summary">
212 <table width="100%" cellpadding="0" cellspacing="0" border="0">
213 <tr>
214 <td><span class="summary-sig"><a name="signal_handler"></a><span class="summary-sig-name">signal_handler</span>(<span class="summary-sig-arg">signum</span>,
215 <span class="summary-sig-arg">frame</span>)</span><br />
216 Signal handler used for main thread notification</td>
217 <td align="right" valign="top">
218 <span class="codelink"><a href="clush-pysrc.html#signal_handler">source&nbsp;code</a></span>
219
220 </td>
221 </tr>
222 </table>
223
224 </td>
225 </tr>
226 <tr>
227 <td width="15%" align="right" valign="top" class="summary">
228 <span class="summary-type">&nbsp;</span>
229 </td><td class="summary">
230 <table width="100%" cellpadding="0" cellspacing="0" border="0">
231 <tr>
232 <td><span class="summary-sig"><a name="get_history_file"></a><span class="summary-sig-name">get_history_file</span>()</span><br />
233 Turn the history file path</td>
234 <td align="right" valign="top">
235 <span class="codelink"><a href="clush-pysrc.html#get_history_file">source&nbsp;code</a></span>
236
237 </td>
238 </tr>
239 </table>
240
241 </td>
242 </tr>
243 <tr>
244 <td width="15%" align="right" valign="top" class="summary">
245 <span class="summary-type">&nbsp;</span>
246 </td><td class="summary">
247 <table width="100%" cellpadding="0" cellspacing="0" border="0">
248 <tr>
249 <td><span class="summary-sig"><a name="readline_setup"></a><span class="summary-sig-name">readline_setup</span>()</span><br />
250 Configure readline to automatically load and save a history file
251 named .clush_history</td>
252 <td align="right" valign="top">
253 <span class="codelink"><a href="clush-pysrc.html#readline_setup">source&nbsp;code</a></span>
254
255 </td>
256 </tr>
257 </table>
258
259 </td>
260 </tr>
261 <tr>
262 <td width="15%" align="right" valign="top" class="summary">
263 <span class="summary-type">&nbsp;</span>
264 </td><td class="summary">
265 <table width="100%" cellpadding="0" cellspacing="0" border="0">
266 <tr>
267 <td><span class="summary-sig"><a name="ttyloop"></a><span class="summary-sig-name">ttyloop</span>(<span class="summary-sig-arg">task</span>,
268 <span class="summary-sig-arg">nodeset</span>,
269 <span class="summary-sig-arg">gather</span>,
270 <span class="summary-sig-arg">timeout</span>,
271 <span class="summary-sig-arg">verbosity</span>,
272 <span class="summary-sig-arg">display</span>)</span><br />
273 Manage the interactive prompt to run command</td>
274 <td align="right" valign="top">
275 <span class="codelink"><a href="clush-pysrc.html#ttyloop">source&nbsp;code</a></span>
276
277 </td>
278 </tr>
279 </table>
280
281 </td>
282 </tr>
283 <tr>
284 <td width="15%" align="right" valign="top" class="summary">
285 <span class="summary-type">&nbsp;</span>
286 </td><td class="summary">
287 <table width="100%" cellpadding="0" cellspacing="0" border="0">
288 <tr>
289 <td><span class="summary-sig"><a name="bind_stdin"></a><span class="summary-sig-name">bind_stdin</span>(<span class="summary-sig-arg">worker</span>)</span><br />
290 Create a ClusterShell stdin-reader worker bound to specified worker.</td>
291 <td align="right" valign="top">
292 <span class="codelink"><a href="clush-pysrc.html#bind_stdin">source&nbsp;code</a></span>
293
294 </td>
295 </tr>
296 </table>
297
298 </td>
299 </tr>
300 <tr>
301 <td width="15%" align="right" valign="top" class="summary">
302 <span class="summary-type">&nbsp;</span>
303 </td><td class="summary">
304 <table width="100%" cellpadding="0" cellspacing="0" border="0">
305 <tr>
306 <td><span class="summary-sig"><a name="run_command"></a><span class="summary-sig-name">run_command</span>(<span class="summary-sig-arg">task</span>,
307 <span class="summary-sig-arg">cmd</span>,
308 <span class="summary-sig-arg">ns</span>,
309 <span class="summary-sig-arg">gather</span>,
310 <span class="summary-sig-arg">timeout</span>,
311 <span class="summary-sig-arg">verbosity</span>,
312 <span class="summary-sig-arg">display</span>)</span><br />
313 Create and run the specified command line, displaying results in a
314 dshbak way when gathering is used.</td>
315 <td align="right" valign="top">
316 <span class="codelink"><a href="clush-pysrc.html#run_command">source&nbsp;code</a></span>
317
318 </td>
319 </tr>
320 </table>
321
322 </td>
323 </tr>
324 <tr>
325 <td width="15%" align="right" valign="top" class="summary">
326 <span class="summary-type">&nbsp;</span>
327 </td><td class="summary">
328 <table width="100%" cellpadding="0" cellspacing="0" border="0">
329 <tr>
330 <td><span class="summary-sig"><a name="run_copy"></a><span class="summary-sig-name">run_copy</span>(<span class="summary-sig-arg">task</span>,
331 <span class="summary-sig-arg">source</span>,
332 <span class="summary-sig-arg">dest</span>,
333 <span class="summary-sig-arg">ns</span>,
334 <span class="summary-sig-arg">timeout</span>,
335 <span class="summary-sig-arg">preserve_flag</span>,
336 <span class="summary-sig-arg">display</span>)</span><br />
337 run copy command</td>
338 <td align="right" valign="top">
339 <span class="codelink"><a href="clush-pysrc.html#run_copy">source&nbsp;code</a></span>
340
341 </td>
342 </tr>
343 </table>
344
345 </td>
346 </tr>
347 <tr>
348 <td width="15%" align="right" valign="top" class="summary">
349 <span class="summary-type">&nbsp;</span>
350 </td><td class="summary">
351 <table width="100%" cellpadding="0" cellspacing="0" border="0">
352 <tr>
353 <td><span class="summary-sig"><a name="clush_exit"></a><span class="summary-sig-name">clush_exit</span>(<span class="summary-sig-arg">status</span>)</span></td>
354 <td align="right" valign="top">
355 <span class="codelink"><a href="clush-pysrc.html#clush_exit">source&nbsp;code</a></span>
356
357 </td>
358 </tr>
359 </table>
360
361 </td>
362 </tr>
363 <tr>
364 <td width="15%" align="right" valign="top" class="summary">
365 <span class="summary-type">&nbsp;</span>
366 </td><td class="summary">
367 <table width="100%" cellpadding="0" cellspacing="0" border="0">
368 <tr>
369 <td><span class="summary-sig"><a href="clush-module.html#clush_excepthook" class="summary-sig-name">clush_excepthook</a>(<span class="summary-sig-arg">type</span>,
370 <span class="summary-sig-arg">value</span>,
371 <span class="summary-sig-arg">traceback</span>)</span><br />
372 Exceptions hook for clush: this method centralizes exception handling
373 from main thread and from (possible) separate task thread.</td>
374 <td align="right" valign="top">
375 <span class="codelink"><a href="clush-pysrc.html#clush_excepthook">source&nbsp;code</a></span>
376
377 </td>
378 </tr>
379 </table>
380
381 </td>
382 </tr>
383 <tr>
384 <td width="15%" align="right" valign="top" class="summary">
385 <span class="summary-type">&nbsp;</span>
386 </td><td class="summary">
387 <table width="100%" cellpadding="0" cellspacing="0" border="0">
388 <tr>
389 <td><span class="summary-sig"><a name="clush_main"></a><span class="summary-sig-name">clush_main</span>(<span class="summary-sig-arg">args</span>)</span><br />
390 Main clush script function</td>
391 <td align="right" valign="top">
392 <span class="codelink"><a href="clush-pysrc.html#clush_main">source&nbsp;code</a></span>
393
394 </td>
395 </tr>
396 </table>
397
398 </td>
399 </tr>
400 </table>
401 <!-- ==================== VARIABLES ==================== -->
402 <a name="section-Variables"></a>
403 <table class="summary" border="1" cellpadding="3"
404 cellspacing="0" width="100%" bgcolor="white">
405 <tr bgcolor="#70b0f0" class="table-header">
406 <td colspan="2" class="table-header">
407 <table border="0" cellpadding="0" cellspacing="0" width="100%">
408 <tr valign="top">
409 <td align="left"><span class="table-header">Variables</span></td>
410 <td align="right" valign="top"
411 ><span class="options">[<a href="#section-Variables"
412 class="privatelink" onclick="toggle_private();"
413 >hide private</a>]</span></td>
414 </tr>
415 </table>
416 </td>
417 </tr>
418 <tr>
419 <td width="15%" align="right" valign="top" class="summary">
420 <span class="summary-type">&nbsp;</span>
421 </td><td class="summary">
422 <a name="VERB_QUIET"></a><span class="summary-name">VERB_QUIET</span> = <code title="0">0</code>
423 </td>
424 </tr>
425 <tr>
426 <td width="15%" align="right" valign="top" class="summary">
427 <span class="summary-type">&nbsp;</span>
428 </td><td class="summary">
429 <a name="VERB_STD"></a><span class="summary-name">VERB_STD</span> = <code title="1">1</code>
430 </td>
431 </tr>
432 <tr>
433 <td width="15%" align="right" valign="top" class="summary">
434 <span class="summary-type">&nbsp;</span>
435 </td><td class="summary">
436 <a name="VERB_VERB"></a><span class="summary-name">VERB_VERB</span> = <code title="2">2</code>
437 </td>
438 </tr>
439 <tr>
440 <td width="15%" align="right" valign="top" class="summary">
441 <span class="summary-type">&nbsp;</span>
442 </td><td class="summary">
443 <a name="VERB_DEBUG"></a><span class="summary-name">VERB_DEBUG</span> = <code title="3">3</code>
444 </td>
445 </tr>
446 <tr>
447 <td width="15%" align="right" valign="top" class="summary">
448 <span class="summary-type">&nbsp;</span>
449 </td><td class="summary">
450 <a name="WHENCOLOR_CHOICES"></a><span class="summary-name">WHENCOLOR_CHOICES</span> = <code title="['never', 'always', 'auto']"><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string">never</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">always</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">auto</code><code class="variable-quote">'</code><code class="variable-group">]</code></code>
451 </td>
452 </tr>
453 <tr>
454 <td width="15%" align="right" valign="top" class="summary">
455 <span class="summary-type">&nbsp;</span>
456 </td><td class="summary">
457 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
458 </td>
459 </tr>
460 </table>
461 <!-- ==================== FUNCTION DETAILS ==================== -->
462 <a name="section-FunctionDetails"></a>
463 <table class="details" border="1" cellpadding="3"
464 cellspacing="0" width="100%" bgcolor="white">
465 <tr bgcolor="#70b0f0" class="table-header">
466 <td colspan="2" class="table-header">
467 <table border="0" cellpadding="0" cellspacing="0" width="100%">
468 <tr valign="top">
469 <td align="left"><span class="table-header">Function Details</span></td>
470 <td align="right" valign="top"
471 ><span class="options">[<a href="#section-FunctionDetails"
472 class="privatelink" onclick="toggle_private();"
473 >hide private</a>]</span></td>
474 </tr>
475 </table>
476 </td>
477 </tr>
478 </table>
479 <a name="clush_excepthook"></a>
480 <div>
481 <table class="details" border="1" cellpadding="3"
482 cellspacing="0" width="100%" bgcolor="white">
483 <tr><td>
484 <table width="100%" cellpadding="0" cellspacing="0" border="0">
485 <tr valign="top"><td>
486 <h3 class="epydoc"><span class="sig"><span class="sig-name">clush_excepthook</span>(<span class="sig-arg">type</span>,
487 <span class="sig-arg">value</span>,
488 <span class="sig-arg">traceback</span>)</span>
489 </h3>
490 </td><td align="right" valign="top"
491 ><span class="codelink"><a href="clush-pysrc.html#clush_excepthook">source&nbsp;code</a></span>&nbsp;
492 </td>
493 </tr></table>
494
495 <p>Exceptions hook for clush: this method centralizes exception handling
496 from main thread and from (possible) separate task thread. This hook has
497 to be previously installed on startup by overriding sys.excepthook and
498 task.excepthook.</p>
499 <dl class="fields">
500 </dl>
501 </td></tr></table>
502 </div>
503 <br />
504 <!-- ==================== NAVIGATION BAR ==================== -->
505 <table class="navbar" border="0" width="100%" cellpadding="0"
506 bgcolor="#a0c0ff" cellspacing="0">
507 <tr valign="middle">
508
509 <!-- Tree link -->
510 <th>&nbsp;&nbsp;&nbsp;<a
511 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
512
513 <!-- Index link -->
514 <th>&nbsp;&nbsp;&nbsp;<a
515 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
516
517 <!-- Help link -->
518 <th>&nbsp;&nbsp;&nbsp;<a
519 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
520
521 <!-- Project homepage -->
522 <th class="navbar" align="right" width="100%">
523 <table border="0" cellpadding="0" cellspacing="0">
524 <tr><th class="navbar" align="center"
525 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
526 </tr></table></th>
527 </tr>
528 </table>
529 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
530 <tr>
531 <td align="left" class="footer">
532 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
533 </td>
534 <td align="right" class="footer">
535 <a target="mainFrame" href="http://epydoc.sourceforge.net"
536 >http://epydoc.sourceforge.net</a>
537 </td>
538 </tr>
539 </table>
540
541 <script type="text/javascript">
542 <!--
543 // Private objects are initially displayed (because if
544 // javascript is turned off then we want them to be
545 // visible); but by default, we want to hide them. So hide
546 // them unless we have a cookie that says to show them.
547 checkCookie();
548 // -->
549 </script>
550 </body>
551 </html>
+0
-1360
doc/epydoc/html/clush-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 Module&nbsp;clush
42 </span>
43 </td>
44 <td>
45 <table cellpadding="0" cellspacing="0">
46 <!-- hide/show private -->
47 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49 <tr><td align="right"><span class="options"
50 >[<a href="frames.html" target="_top">frames</a
51 >]&nbsp;|&nbsp;<a href="clush-pysrc.html"
52 target="_top">no&nbsp;frames</a>]</span></td></tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 <h1 class="epydoc">Source Code for <a href="clush-module.html">Module clush</a></h1>
58 <pre class="py-src">
59 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
60 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
61 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2007, 2008, 2009, 2010)</tt> </tt>
62 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
63 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
64 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
65 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
66 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
67 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
68 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
69 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
70 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
71 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
72 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
73 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
74 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
75 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
76 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
77 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
78 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
79 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
80 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
81 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
82 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
83 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
84 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
85 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
86 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
87 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
88 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
89 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
90 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
91 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
92 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-comment"># $Id: clush.py 302 2010-07-23 19:59:20Z st-cea $</tt> </tt>
93 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> </tt>
94 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
95 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring">Utility program to run commands on a cluster using the ClusterShell</tt> </tt>
96 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring">library.</tt> </tt>
97 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
98 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring">clush is a pdsh-like command which benefits from the ClusterShell</tt> </tt>
99 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring">library and its Ssh worker. It features an integrated output results</tt> </tt>
100 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring">gathering system (dshbak-like), can get node groups by running</tt> </tt>
101 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring">predefined external commands and can redirect lines read on its</tt> </tt>
102 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring">standard input to the remote commands.</tt> </tt>
103 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
104 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring">When no command are specified, clush runs interactively.</tt> </tt>
105 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
106 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
107 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> </tt>
108 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">errno</tt> </tt>
109 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">exceptions</tt> </tt>
110 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">fcntl</tt> </tt>
111 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">optparse</tt> </tt>
112 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
113 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">resource</tt> </tt>
114 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
115 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
116 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">ConfigParser</tt> </tt>
117 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> </tt>
118 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Module ClusterShell.NodeUtils=ClusterShell.NodeUtils-module.html"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-1', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverConfigError=ClusterShell.NodeUtils.GroupResolverConfigError-class.html"><a title="ClusterShell.NodeUtils.GroupResolverConfigError" class="py-name" href="#" onclick="return doclink('link-2', 'GroupResolverConfigError', 'link-2');">GroupResolverConfigError</a></tt> </tt>
119 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-3', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-4" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-4', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverSourceError=ClusterShell.NodeUtils.GroupResolverSourceError-class.html"><a title="ClusterShell.NodeUtils.GroupResolverSourceError" class="py-name" href="#" onclick="return doclink('link-5', 'GroupResolverSourceError', 'link-5');">GroupResolverSourceError</a></tt> </tt>
120 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-6', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-7', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-8" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceException=ClusterShell.NodeUtils.GroupSourceException-class.html"><a title="ClusterShell.NodeUtils.GroupSourceException" class="py-name" href="#" onclick="return doclink('link-8', 'GroupSourceException', 'link-8');">GroupSourceException</a></tt> </tt>
121 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-9" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-9', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-10', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceNoUpcall=ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-11', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt> </tt>
122 <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>
123 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-12" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-12', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Module ClusterShell.Event=ClusterShell.Event-module.html"><a title="ClusterShell.Event" class="py-name" href="#" onclick="return doclink('link-13', 'Event', 'link-13');">Event</a></tt> <tt class="py-keyword">import</tt> <tt id="link-14" class="py-name" targets="Class ClusterShell.Event.EventHandler=ClusterShell.Event.EventHandler-class.html"><a title="ClusterShell.Event.EventHandler" class="py-name" href="#" onclick="return doclink('link-14', 'EventHandler', 'link-14');">EventHandler</a></tt> </tt>
124 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-15" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-15', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Module ClusterShell.NodeSet=ClusterShell.NodeSet-module.html,Class ClusterShell.NodeSet.NodeSet=ClusterShell.NodeSet.NodeSet-class.html"><a title="ClusterShell.NodeSet
125 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-16', 'NodeSet', 'link-16');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-17" class="py-name"><a title="ClusterShell.NodeSet
126 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-17', 'NodeSet', 'link-16');">NodeSet</a></tt> </tt>
127 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-18" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-18', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="ClusterShell.NodeSet
128 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-19', 'NodeSet', 'link-16');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-20" class="py-name" targets="Variable ClusterShell.NodeSet.NOGROUP_RESOLVER=ClusterShell.NodeSet-module.html#NOGROUP_RESOLVER"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-20', 'NOGROUP_RESOLVER', 'link-20');">NOGROUP_RESOLVER</a></tt><tt class="py-op">,</tt> <tt id="link-21" class="py-name" targets="Variable ClusterShell.NodeSet.STD_GROUP_RESOLVER=ClusterShell.NodeSet-module.html#STD_GROUP_RESOLVER"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-21', 'STD_GROUP_RESOLVER', 'link-21');">STD_GROUP_RESOLVER</a></tt> </tt>
129 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-22" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-22', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="ClusterShell.NodeSet
130 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-23', 'NodeSet', 'link-16');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-24" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetExternalError=ClusterShell.NodeSet.NodeSetExternalError-class.html"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-24', 'NodeSetExternalError', 'link-24');">NodeSetExternalError</a></tt><tt class="py-op">,</tt> <tt id="link-25" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetParseError=ClusterShell.NodeSet.NodeSetParseError-class.html"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-25', 'NodeSetParseError', 'link-25');">NodeSetParseError</a></tt> </tt>
131 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-26" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-26', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Module ClusterShell.Task=ClusterShell.Task-module.html,Class ClusterShell.Task.Task=ClusterShell.Task.Task-class.html"><a title="ClusterShell.Task
132 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-27', 'Task', 'link-27');">Task</a></tt> <tt class="py-keyword">import</tt> <tt id="link-28" class="py-name"><a title="ClusterShell.Task
133 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-28', 'Task', 'link-27');">Task</a></tt><tt class="py-op">,</tt> <tt id="link-29" class="py-name" targets="Function ClusterShell.Task.task_self()=ClusterShell.Task-module.html#task_self"><a title="ClusterShell.Task.task_self" class="py-name" href="#" onclick="return doclink('link-29', 'task_self', 'link-29');">task_self</a></tt> </tt>
134 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-30" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-30', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Package ClusterShell.Worker=ClusterShell.Worker-module.html,Module ClusterShell.Worker.Worker=ClusterShell.Worker.Worker-module.html,Class ClusterShell.Worker.Worker.Worker=ClusterShell.Worker.Worker.Worker-class.html"><a title="ClusterShell.Worker
135 ClusterShell.Worker.Worker
136 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-31', 'Worker', 'link-31');">Worker</a></tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="ClusterShell.Worker
137 ClusterShell.Worker.Worker
138 ClusterShell.Worker.Worker.Worker" class="py-name" href="#" onclick="return doclink('link-32', 'Worker', 'link-31');">Worker</a></tt> <tt class="py-keyword">import</tt> <tt id="link-33" class="py-name" targets="Class ClusterShell.Worker.Worker.WorkerSimple=ClusterShell.Worker.Worker.WorkerSimple-class.html"><a title="ClusterShell.Worker.Worker.WorkerSimple" class="py-name" href="#" onclick="return doclink('link-33', 'WorkerSimple', 'link-33');">WorkerSimple</a></tt> </tt>
139 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-34" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-34', 'ClusterShell', 'link-0');">ClusterShell</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">__version__</tt> </tt>
140 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-keyword">except</tt> <tt id="link-35" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolverConfigError" class="py-name" href="#" onclick="return doclink('link-35', 'GroupResolverConfigError', 'link-2');">GroupResolverConfigError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
141 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> \ </tt>
142 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-string">"ERROR: ClusterShell Groups configuration error:\n\t%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">e</tt> </tt>
143 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
144 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> </tt>
145 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt id="link-36" class="py-name" targets="Variable clush.VERB_QUIET=clush-module.html#VERB_QUIET"><a title="clush.VERB_QUIET" class="py-name" href="#" onclick="return doclink('link-36', 'VERB_QUIET', 'link-36');">VERB_QUIET</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
146 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt id="link-37" class="py-name" targets="Variable clush.VERB_STD=clush-module.html#VERB_STD"><a title="clush.VERB_STD" class="py-name" href="#" onclick="return doclink('link-37', 'VERB_STD', 'link-37');">VERB_STD</a></tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
147 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt id="link-38" class="py-name" targets="Variable clush.VERB_VERB=clush-module.html#VERB_VERB"><a title="clush.VERB_VERB" class="py-name" href="#" onclick="return doclink('link-38', 'VERB_VERB', 'link-38');">VERB_VERB</a></tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> </tt>
148 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt id="link-39" class="py-name" targets="Variable clush.VERB_DEBUG=clush-module.html#VERB_DEBUG"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-39', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt> <tt class="py-op">=</tt> <tt class="py-number">3</tt> </tt>
149 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> </tt>
150 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-comment"># Start of clubak.py common code</tt> </tt>
151 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> </tt>
152 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt id="link-40" class="py-name" targets="Variable clubak.WHENCOLOR_CHOICES=clubak-module.html#WHENCOLOR_CHOICES,Variable clush.WHENCOLOR_CHOICES=clush-module.html#WHENCOLOR_CHOICES"><a title="clubak.WHENCOLOR_CHOICES
153 clush.WHENCOLOR_CHOICES" class="py-name" href="#" onclick="return doclink('link-40', 'WHENCOLOR_CHOICES', 'link-40');">WHENCOLOR_CHOICES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"never"</tt><tt class="py-op">,</tt> <tt class="py-string">"always"</tt><tt class="py-op">,</tt> <tt class="py-string">"auto"</tt><tt class="py-op">]</tt> </tt>
154 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> </tt>
155 <a name="Display"></a><div id="Display-def"><a name="L86"></a><tt class="py-lineno"> 86</tt> <a class="py-toggle" href="#" id="Display-toggle" onclick="return toggle('Display');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clush.Display-class.html">Display</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
156 </div><div id="Display-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Display-expanded"><a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
157 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt class="py-docstring"> Output display class for clush script.</tt> </tt>
158 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
159 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt id="link-41" class="py-name" targets="Variable clubak.Display.COLOR_STDOUT_FMT=clubak.Display-class.html#COLOR_STDOUT_FMT,Variable clush.Display.COLOR_STDOUT_FMT=clush.Display-class.html#COLOR_STDOUT_FMT"><a title="clubak.Display.COLOR_STDOUT_FMT
160 clush.Display.COLOR_STDOUT_FMT" class="py-name" href="#" onclick="return doclink('link-41', 'COLOR_STDOUT_FMT', 'link-41');">COLOR_STDOUT_FMT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"\033[34m%s\033[0m"</tt> </tt>
161 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt id="link-42" class="py-name" targets="Variable clubak.Display.COLOR_STDERR_FMT=clubak.Display-class.html#COLOR_STDERR_FMT,Variable clush.Display.COLOR_STDERR_FMT=clush.Display-class.html#COLOR_STDERR_FMT"><a title="clubak.Display.COLOR_STDERR_FMT
162 clush.Display.COLOR_STDERR_FMT" class="py-name" href="#" onclick="return doclink('link-42', 'COLOR_STDERR_FMT', 'link-42');">COLOR_STDERR_FMT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"\033[31m%s\033[0m"</tt> </tt>
163 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt id="link-43" class="py-name" targets="Variable clubak.Display.SEP=clubak.Display-class.html#SEP,Variable clush.Display.SEP=clush.Display-class.html#SEP"><a title="clubak.Display.SEP
164 clush.Display.SEP" class="py-name" href="#" onclick="return doclink('link-43', 'SEP', 'link-43');">SEP</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"-"</tt> <tt class="py-op">*</tt> <tt class="py-number">15</tt> </tt>
165 <a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> </tt>
166 <a name="Display.__init__"></a><div id="Display.__init__-def"><a name="L94"></a><tt class="py-lineno"> 94</tt> <a class="py-toggle" href="#" id="Display.__init__-toggle" onclick="return toggle('Display.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-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">color</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
167 </div><div id="Display.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display.__init__-expanded"><a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_color</tt> <tt class="py-op">=</tt> <tt class="py-name">color</tt> </tt>
168 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name" targets="Method clubak.Display._print_buffer()=clubak.Display-class.html#_print_buffer,Method clush.Display._print_buffer()=clush.Display-class.html#_print_buffer"><a title="clubak.Display._print_buffer
169 clush.Display._print_buffer" class="py-name" href="#" onclick="return doclink('link-44', '_print_buffer', 'link-44');">_print_buffer</a></tt> </tt>
170 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out</tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt> </tt>
171 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">err</tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt> </tt>
172 <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">label</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
173 <a name="L100"></a><tt class="py-lineno"> 100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.regroup()=ClusterShell.NodeSet.NodeSet-class.html#regroup"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-45', 'regroup', 'link-45');">regroup</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
174 <a name="L101"></a><tt class="py-lineno"> 101</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
175 <a name="L102"></a><tt class="py-lineno"> 102</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">_color</tt><tt class="py-op">:</tt> </tt>
176 <a name="L103"></a><tt class="py-lineno"> 103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="clubak.Display.COLOR_STDOUT_FMT
177 clush.Display.COLOR_STDOUT_FMT" class="py-name" href="#" onclick="return doclink('link-46', 'COLOR_STDOUT_FMT', 'link-41');">COLOR_STDOUT_FMT</a></tt> </tt>
178 <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 class="py-name">color_stderr_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="clubak.Display.COLOR_STDERR_FMT
179 clush.Display.COLOR_STDERR_FMT" class="py-name" href="#" onclick="return doclink('link-47', 'COLOR_STDERR_FMT', 'link-42');">COLOR_STDERR_FMT</a></tt> </tt>
180 <a name="L105"></a><tt class="py-lineno"> 105</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
181 <a name="L106"></a><tt class="py-lineno"> 106</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stderr_fmt</tt> <tt class="py-op">=</tt> <tt class="py-string">"%s"</tt> </tt>
182 <a name="L107"></a><tt class="py-lineno"> 107</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">noprefix</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
183 </div><a name="L108"></a><tt class="py-lineno"> 108</tt> <tt class="py-line"> </tt>
184 <a name="Display._getlmode"></a><div id="Display._getlmode-def"><a name="L109"></a><tt class="py-lineno"> 109</tt> <a class="py-toggle" href="#" id="Display._getlmode-toggle" onclick="return toggle('Display._getlmode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-class.html#_getlmode">_getlmode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
185 </div><div id="Display._getlmode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display._getlmode-expanded"><a name="L110"></a><tt class="py-lineno"> 110</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">_display</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method clubak.Display._print_lines()=clubak.Display-class.html#_print_lines,Method clush.Display._print_lines()=clush.Display-class.html#_print_lines"><a title="clubak.Display._print_lines
186 clush.Display._print_lines" class="py-name" href="#" onclick="return doclink('link-48', '_print_lines', 'link-48');">_print_lines</a></tt> </tt>
187 </div><a name="L111"></a><tt class="py-lineno"> 111</tt> <tt class="py-line"> </tt>
188 <a name="Display._setlmode"></a><div id="Display._setlmode-def"><a name="L112"></a><tt class="py-lineno"> 112</tt> <a class="py-toggle" href="#" id="Display._setlmode-toggle" onclick="return toggle('Display._setlmode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-class.html#_setlmode">_setlmode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
189 </div><div id="Display._setlmode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display._setlmode-expanded"><a name="L113"></a><tt class="py-lineno"> 113</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">value</tt><tt class="py-op">:</tt> </tt>
190 <a name="L114"></a><tt class="py-lineno"> 114</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="clubak.Display._print_lines
191 clush.Display._print_lines" class="py-name" href="#" onclick="return doclink('link-49', '_print_lines', 'link-48');">_print_lines</a></tt> </tt>
192 <a name="L115"></a><tt class="py-lineno"> 115</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
193 <a name="L116"></a><tt class="py-lineno"> 116</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="clubak.Display._print_buffer
194 clush.Display._print_buffer" class="py-name" href="#" onclick="return doclink('link-50', '_print_buffer', 'link-44');">_print_buffer</a></tt> </tt>
195 </div><a name="L117"></a><tt class="py-lineno"> 117</tt> <tt class="py-line"> <tt id="link-51" class="py-name" targets="Variable clubak.Display.line_mode=clubak.Display-class.html#line_mode,Variable clush.Display.line_mode=clush.Display-class.html#line_mode"><a title="clubak.Display.line_mode
196 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-51', 'line_mode', 'link-51');">line_mode</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-52" class="py-name" targets="Method clubak.Display._getlmode()=clubak.Display-class.html#_getlmode,Method clush.Display._getlmode()=clush.Display-class.html#_getlmode"><a title="clubak.Display._getlmode
197 clush.Display._getlmode" class="py-name" href="#" onclick="return doclink('link-52', '_getlmode', 'link-52');">_getlmode</a></tt><tt class="py-op">,</tt> <tt id="link-53" class="py-name" targets="Method clubak.Display._setlmode()=clubak.Display-class.html#_setlmode,Method clush.Display._setlmode()=clush.Display-class.html#_setlmode"><a title="clubak.Display._setlmode
198 clush.Display._setlmode" class="py-name" href="#" onclick="return doclink('link-53', '_setlmode', 'link-53');">_setlmode</a></tt><tt class="py-op">)</tt> </tt>
199 <a name="L118"></a><tt class="py-lineno"> 118</tt> <tt class="py-line"> </tt>
200 <a name="Display._format_header"></a><div id="Display._format_header-def"><a name="L119"></a><tt class="py-lineno"> 119</tt> <a class="py-toggle" href="#" id="Display._format_header-toggle" onclick="return toggle('Display._format_header');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-class.html#_format_header">_format_header</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
201 </div><div id="Display._format_header-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display._format_header-expanded"><a name="L120"></a><tt class="py-lineno"> 120</tt> <tt class="py-line"> <tt class="py-docstring">"""Format nodeset-based header."""</tt> </tt>
202 <a name="L121"></a><tt class="py-lineno"> 121</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-54', 'regroup', 'link-45');">regroup</a></tt><tt class="py-op">:</tt> </tt>
203 <a name="L122"></a><tt class="py-lineno"> 122</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-55" class="py-name" targets="Module nodeset=nodeset-module.html"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-55', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-56', 'regroup', 'link-45');">regroup</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt><tt class="py-op">,</tt> <tt class="py-name">noprefix</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">noprefix</tt><tt class="py-op">)</tt> </tt>
204 <a name="L123"></a><tt class="py-lineno"> 123</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-57" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-57', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">)</tt> </tt>
205 </div><a name="L124"></a><tt class="py-lineno"> 124</tt> <tt class="py-line"> </tt>
206 <a name="Display.print_line"></a><div id="Display.print_line-def"><a name="L125"></a><tt class="py-lineno"> 125</tt> <a class="py-toggle" href="#" id="Display.print_line-toggle" onclick="return toggle('Display.print_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-class.html#print_line">print_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
207 </div><div id="Display.print_line-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display.print_line-expanded"><a name="L126"></a><tt class="py-lineno"> 126</tt> <tt class="py-line"> <tt class="py-docstring">"""Display a line with optional label."""</tt> </tt>
208 <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">label</tt><tt class="py-op">:</tt> </tt>
209 <a name="L128"></a><tt class="py-lineno"> 128</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">"%s: "</tt> <tt class="py-op">%</tt> <tt id="link-58" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-58', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">)</tt> </tt>
210 <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">out</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Method ClusterShell.Worker.Pdsh.WorkerPdsh.write()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#write,Method ClusterShell.Worker.Ssh.WorkerSsh.write()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#write,Method ClusterShell.Worker.Worker.WorkerSimple.write()=ClusterShell.Worker.Worker.WorkerSimple-class.html#write"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
211 ClusterShell.Worker.Ssh.WorkerSsh.write
212 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-59', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">prefix</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
213 <a name="L130"></a><tt class="py-lineno"> 130</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
214 <a name="L131"></a><tt class="py-lineno"> 131</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
215 ClusterShell.Worker.Ssh.WorkerSsh.write
216 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-60', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
217 </div><a name="L132"></a><tt class="py-lineno"> 132</tt> <tt class="py-line"> </tt>
218 <a name="Display.print_line_error"></a><div id="Display.print_line_error-def"><a name="L133"></a><tt class="py-lineno"> 133</tt> <a class="py-toggle" href="#" id="Display.print_line_error-toggle" onclick="return toggle('Display.print_line_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-class.html#print_line_error">print_line_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
219 </div><div id="Display.print_line_error-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display.print_line_error-expanded"><a name="L134"></a><tt class="py-lineno"> 134</tt> <tt class="py-line"> <tt class="py-docstring">"""Display an error line with optional label."""</tt> </tt>
220 <a name="L135"></a><tt class="py-lineno"> 135</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">label</tt><tt class="py-op">:</tt> </tt>
221 <a name="L136"></a><tt class="py-lineno"> 136</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stderr_fmt</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">"%s: "</tt> <tt class="py-op">%</tt> <tt id="link-61" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-61', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">)</tt> </tt>
222 <a name="L137"></a><tt class="py-lineno"> 137</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">err</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
223 ClusterShell.Worker.Ssh.WorkerSsh.write
224 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-62', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">prefix</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
225 <a name="L138"></a><tt class="py-lineno"> 138</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
226 <a name="L139"></a><tt class="py-lineno"> 139</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">err</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
227 ClusterShell.Worker.Ssh.WorkerSsh.write
228 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-63', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
229 </div><a name="L140"></a><tt class="py-lineno"> 140</tt> <tt class="py-line"> </tt>
230 <a name="Display.print_gather"></a><div id="Display.print_gather-def"><a name="L141"></a><tt class="py-lineno"> 141</tt> <a class="py-toggle" href="#" id="Display.print_gather-toggle" onclick="return toggle('Display.print_gather');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-class.html#print_gather">print_gather</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">obj</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
231 </div><div id="Display.print_gather-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display.print_gather-expanded"><a name="L142"></a><tt class="py-lineno"> 142</tt> <tt class="py-line"> <tt class="py-docstring">"""Generic method for displaying nodeset/content according to current</tt> </tt>
232 <a name="L143"></a><tt class="py-lineno"> 143</tt> <tt class="py-line"><tt class="py-docstring"> object settings."""</tt> </tt>
233 <a name="L144"></a><tt class="py-lineno"> 144</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">_display</tt><tt class="py-op">(</tt><tt id="link-64" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-64', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">,</tt> <tt class="py-name">obj</tt><tt class="py-op">)</tt> </tt>
234 </div><a name="L145"></a><tt class="py-lineno"> 145</tt> <tt class="py-line"> </tt>
235 <a name="Display._print_buffer"></a><div id="Display._print_buffer-def"><a name="L146"></a><tt class="py-lineno"> 146</tt> <a class="py-toggle" href="#" id="Display._print_buffer-toggle" onclick="return toggle('Display._print_buffer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-class.html#_print_buffer">_print_buffer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
236 </div><div id="Display._print_buffer-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display._print_buffer-expanded"><a name="L147"></a><tt class="py-lineno"> 147</tt> <tt class="py-line"> <tt class="py-docstring">"""Display a dshbak-like header block and content."""</tt> </tt>
237 <a name="L148"></a><tt class="py-lineno"> 148</tt> <tt class="py-line"> <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">"%s\n%s\n%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="clubak.Display.SEP
238 clush.Display.SEP" class="py-name" href="#" onclick="return doclink('link-65', 'SEP', 'link-43');">SEP</a></tt><tt class="py-op">,</tt> </tt>
239 <a name="L149"></a><tt class="py-lineno"> 149</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name" targets="Method clubak.Display._format_header()=clubak.Display-class.html#_format_header,Method clush.Display._format_header()=clush.Display-class.html#_format_header"><a title="clubak.Display._format_header
240 clush.Display._format_header" class="py-name" href="#" onclick="return doclink('link-66', '_format_header', 'link-66');">_format_header</a></tt><tt class="py-op">(</tt><tt id="link-67" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-67', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
241 <a name="L150"></a><tt class="py-lineno"> 150</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="clubak.Display.SEP
242 clush.Display.SEP" class="py-name" href="#" onclick="return doclink('link-68', 'SEP', 'link-43');">SEP</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
243 <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">out</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
244 ClusterShell.Worker.Ssh.WorkerSsh.write
245 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-69', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">header</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
246 </div><a name="L152"></a><tt class="py-lineno"> 152</tt> <tt class="py-line"> </tt>
247 <a name="Display._print_lines"></a><div id="Display._print_lines-def"><a name="L153"></a><tt class="py-lineno"> 153</tt> <a class="py-toggle" href="#" id="Display._print_lines-toggle" onclick="return toggle('Display._print_lines');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.Display-class.html#_print_lines">_print_lines</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
248 </div><div id="Display._print_lines-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Display._print_lines-expanded"><a name="L154"></a><tt class="py-lineno"> 154</tt> <tt class="py-line"> <tt class="py-docstring">"""Display a MsgTree buffer by line with prefixed header."""</tt> </tt>
249 <a name="L155"></a><tt class="py-lineno"> 155</tt> <tt class="py-line"> <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">color_stdout_fmt</tt> <tt class="py-op">%</tt> \ </tt>
250 <a name="L156"></a><tt class="py-lineno"> 156</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">"%s: "</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="clubak.Display._format_header
251 clush.Display._format_header" class="py-name" href="#" onclick="return doclink('link-70', '_format_header', 'link-66');">_format_header</a></tt><tt class="py-op">(</tt><tt id="link-71" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-71', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
252 <a name="L157"></a><tt class="py-lineno"> 157</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt id="link-72" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-72', 'msg', 'link-72');">msg</a></tt><tt class="py-op">:</tt> </tt>
253 <a name="L158"></a><tt class="py-lineno"> 158</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
254 ClusterShell.Worker.Ssh.WorkerSsh.write
255 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-73', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s\n"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">header</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
256 </div></div><a name="L159"></a><tt class="py-lineno"> 159</tt> <tt class="py-line"> </tt>
257 <a name="nodeset_cmp"></a><div id="nodeset_cmp-def"><a name="L160"></a><tt class="py-lineno"> 160</tt> <a class="py-toggle" href="#" id="nodeset_cmp-toggle" onclick="return toggle('nodeset_cmp');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#nodeset_cmp">nodeset_cmp</a><tt class="py-op">(</tt><tt class="py-param">ns1</tt><tt class="py-op">,</tt> <tt class="py-param">ns2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
258 </div><div id="nodeset_cmp-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="nodeset_cmp-expanded"><a name="L161"></a><tt class="py-lineno"> 161</tt> <tt class="py-line"> <tt class="py-docstring">"""Compare 2 nodesets by their length (we want larger nodeset</tt> </tt>
259 <a name="L162"></a><tt class="py-lineno"> 162</tt> <tt class="py-line"><tt class="py-docstring"> first) and then by first node."""</tt> </tt>
260 <a name="L163"></a><tt class="py-lineno"> 163</tt> <tt class="py-line"> <tt class="py-name">len_cmp</tt> <tt class="py-op">=</tt> <tt class="py-name">cmp</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">ns2</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">ns1</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
261 <a name="L164"></a><tt class="py-lineno"> 164</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">len_cmp</tt><tt class="py-op">:</tt> </tt>
262 <a name="L165"></a><tt class="py-lineno"> 165</tt> <tt class="py-line"> <tt class="py-name">smaller</tt> <tt class="py-op">=</tt> <tt id="link-74" class="py-name"><a title="ClusterShell.NodeSet
263 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-74', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-75" class="py-name" targets="Class Method ClusterShell.NodeSet.NodeSet.fromlist()=ClusterShell.NodeSet.NodeSet-class.html#fromlist,Class Method ClusterShell.NodeSet.RangeSet.fromlist()=ClusterShell.NodeSet.RangeSet-class.html#fromlist"><a title="ClusterShell.NodeSet.NodeSet.fromlist
264 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-75', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">ns1</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">ns2</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-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
265 <a name="L166"></a><tt class="py-lineno"> 166</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">smaller</tt> <tt class="py-op">==</tt> <tt class="py-name">ns1</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
266 <a name="L167"></a><tt class="py-lineno"> 167</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
267 <a name="L168"></a><tt class="py-lineno"> 168</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
268 <a name="L169"></a><tt class="py-lineno"> 169</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">1</tt> </tt>
269 <a name="L170"></a><tt class="py-lineno"> 170</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len_cmp</tt> </tt>
270 </div><a name="L171"></a><tt class="py-lineno"> 171</tt> <tt class="py-line"> </tt>
271 <a name="L172"></a><tt class="py-lineno"> 172</tt> <tt class="py-line"><tt class="py-comment"># End of clubak.py common code</tt> </tt>
272 <a name="L173"></a><tt class="py-lineno"> 173</tt> <tt class="py-line"> </tt>
273 <a name="bufnodeset_cmp"></a><div id="bufnodeset_cmp-def"><a name="L174"></a><tt class="py-lineno"> 174</tt> <a class="py-toggle" href="#" id="bufnodeset_cmp-toggle" onclick="return toggle('bufnodeset_cmp');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#bufnodeset_cmp">bufnodeset_cmp</a><tt class="py-op">(</tt><tt class="py-param">bn1</tt><tt class="py-op">,</tt> <tt class="py-param">bn2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
274 </div><div id="bufnodeset_cmp-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="bufnodeset_cmp-expanded"><a name="L175"></a><tt class="py-lineno"> 175</tt> <tt class="py-line"> <tt class="py-docstring">"""Convenience function to compare 2 (buf, nodeset) tuples by their</tt> </tt>
275 <a name="L176"></a><tt class="py-lineno"> 176</tt> <tt class="py-line"><tt class="py-docstring"> nodeset length (we want larger nodeset first) and then by first</tt> </tt>
276 <a name="L177"></a><tt class="py-lineno"> 177</tt> <tt class="py-line"><tt class="py-docstring"> node."""</tt> </tt>
277 <a name="L178"></a><tt class="py-lineno"> 178</tt> <tt class="py-line"> <tt class="py-comment"># Extract nodesets and call nodeset_cmp</tt> </tt>
278 <a name="L179"></a><tt class="py-lineno"> 179</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-76" class="py-name" targets="Function clubak.nodeset_cmp()=clubak-module.html#nodeset_cmp,Function clush.nodeset_cmp()=clush-module.html#nodeset_cmp"><a title="clubak.nodeset_cmp
279 clush.nodeset_cmp" class="py-name" href="#" onclick="return doclink('link-76', 'nodeset_cmp', 'link-76');">nodeset_cmp</a></tt><tt class="py-op">(</tt><tt class="py-name">bn1</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">bn2</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
280 </div><a name="L180"></a><tt class="py-lineno"> 180</tt> <tt class="py-line"> </tt>
281 <a name="UpdatePromptException"></a><div id="UpdatePromptException-def"><a name="L181"></a><tt class="py-lineno"> 181</tt> <a class="py-toggle" href="#" id="UpdatePromptException-toggle" onclick="return toggle('UpdatePromptException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clush.UpdatePromptException-class.html">UpdatePromptException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
282 </div><div id="UpdatePromptException-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UpdatePromptException-expanded"><a name="L182"></a><tt class="py-lineno"> 182</tt> <tt class="py-line"> <tt class="py-docstring">"""Exception used by the signal handler"""</tt> </tt>
283 </div><a name="L183"></a><tt class="py-lineno"> 183</tt> <tt class="py-line"> </tt>
284 <a name="StdInputHandler"></a><div id="StdInputHandler-def"><a name="L184"></a><tt class="py-lineno"> 184</tt> <a class="py-toggle" href="#" id="StdInputHandler-toggle" onclick="return toggle('StdInputHandler');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clush.StdInputHandler-class.html">StdInputHandler</a><tt class="py-op">(</tt><tt class="py-base-class">EventHandler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
285 </div><div id="StdInputHandler-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="StdInputHandler-expanded"><a name="L185"></a><tt class="py-lineno"> 185</tt> <tt class="py-line"> <tt class="py-docstring">"""Standard input event handler class."""</tt> </tt>
286 <a name="L186"></a><tt class="py-lineno"> 186</tt> <tt class="py-line"> </tt>
287 <a name="StdInputHandler.__init__"></a><div id="StdInputHandler.__init__-def"><a name="L187"></a><tt class="py-lineno"> 187</tt> <a class="py-toggle" href="#" id="StdInputHandler.__init__-toggle" onclick="return toggle('StdInputHandler.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.StdInputHandler-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">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
288 </div><div id="StdInputHandler.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="StdInputHandler.__init__-expanded"><a name="L188"></a><tt class="py-lineno"> 188</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">master_worker</tt> <tt class="py-op">=</tt> <tt class="py-name">worker</tt> </tt>
289 </div><a name="L189"></a><tt class="py-lineno"> 189</tt> <tt class="py-line"> </tt>
290 <a name="StdInputHandler.ev_read"></a><div id="StdInputHandler.ev_read-def"><a name="L190"></a><tt class="py-lineno"> 190</tt> <a class="py-toggle" href="#" id="StdInputHandler.ev_read-toggle" onclick="return toggle('StdInputHandler.ev_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.StdInputHandler-class.html#ev_read">ev_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
291 </div><div id="StdInputHandler.ev_read-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="StdInputHandler.ev_read-expanded"><a name="L191"></a><tt class="py-lineno"> 191</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">master_worker</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
292 ClusterShell.Worker.Ssh.WorkerSsh.write
293 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-77', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.last_read()=ClusterShell.Worker.Worker.DistantWorker-class.html#last_read,Method ClusterShell.Worker.Worker.Worker.last_read()=ClusterShell.Worker.Worker.Worker-class.html#last_read,Method ClusterShell.Worker.Worker.WorkerSimple.last_read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read"><a title="ClusterShell.Worker.Worker.DistantWorker.last_read
294 ClusterShell.Worker.Worker.Worker.last_read
295 ClusterShell.Worker.Worker.WorkerSimple.last_read" class="py-name" href="#" onclick="return doclink('link-78', 'last_read', 'link-78');">last_read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'\n'</tt><tt class="py-op">)</tt> </tt>
296 </div><a name="L192"></a><tt class="py-lineno"> 192</tt> <tt class="py-line"> </tt>
297 <a name="StdInputHandler.ev_close"></a><div id="StdInputHandler.ev_close-def"><a name="L193"></a><tt class="py-lineno"> 193</tt> <a class="py-toggle" href="#" id="StdInputHandler.ev_close-toggle" onclick="return toggle('StdInputHandler.ev_close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.StdInputHandler-class.html#ev_close">ev_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
298 </div><div id="StdInputHandler.ev_close-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="StdInputHandler.ev_close-expanded"><a name="L194"></a><tt class="py-lineno"> 194</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">master_worker</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name" targets="Method ClusterShell.Worker.Ssh.WorkerSsh.set_write_eof()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#set_write_eof,Method ClusterShell.Worker.Worker.WorkerSimple.set_write_eof()=ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof"><a title="ClusterShell.Worker.Ssh.WorkerSsh.set_write_eof
299 ClusterShell.Worker.Worker.WorkerSimple.set_write_eof" class="py-name" href="#" onclick="return doclink('link-79', 'set_write_eof', 'link-79');">set_write_eof</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
300 </div></div><a name="L195"></a><tt class="py-lineno"> 195</tt> <tt class="py-line"> </tt>
301 <a name="DirectOutputHandler"></a><div id="DirectOutputHandler-def"><a name="L196"></a><tt class="py-lineno"> 196</tt> <a class="py-toggle" href="#" id="DirectOutputHandler-toggle" onclick="return toggle('DirectOutputHandler');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clush.DirectOutputHandler-class.html">DirectOutputHandler</a><tt class="py-op">(</tt><tt class="py-base-class">EventHandler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
302 </div><div id="DirectOutputHandler-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="DirectOutputHandler-expanded"><a name="L197"></a><tt class="py-lineno"> 197</tt> <tt class="py-line"> <tt class="py-docstring">"""Direct output event handler class."""</tt> </tt>
303 <a name="L198"></a><tt class="py-lineno"> 198</tt> <tt class="py-line"> </tt>
304 <a name="DirectOutputHandler.__init__"></a><div id="DirectOutputHandler.__init__-def"><a name="L199"></a><tt class="py-lineno"> 199</tt> <a class="py-toggle" href="#" id="DirectOutputHandler.__init__-toggle" onclick="return toggle('DirectOutputHandler.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.DirectOutputHandler-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">display</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
305 </div><div id="DirectOutputHandler.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DirectOutputHandler.__init__-expanded"><a name="L200"></a><tt class="py-lineno"> 200</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt> <tt class="py-op">=</tt> <tt id="link-80" class="py-name" targets="Function clubak.display()=clubak-module.html#display"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-80', 'display', 'link-80');">display</a></tt> </tt>
306 </div><a name="L201"></a><tt class="py-lineno"> 201</tt> <tt class="py-line"> </tt>
307 <a name="DirectOutputHandler.ev_read"></a><div id="DirectOutputHandler.ev_read-def"><a name="L202"></a><tt class="py-lineno"> 202</tt> <a class="py-toggle" href="#" id="DirectOutputHandler.ev_read-toggle" onclick="return toggle('DirectOutputHandler.ev_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.DirectOutputHandler-class.html#ev_read">ev_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
308 </div><div id="DirectOutputHandler.ev_read-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DirectOutputHandler.ev_read-expanded"><a name="L203"></a><tt class="py-lineno"> 203</tt> <tt class="py-line"> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt> <tt class="py-op">=</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker.last_read
309 ClusterShell.Worker.Worker.Worker.last_read
310 ClusterShell.Worker.Worker.WorkerSimple.last_read" class="py-name" href="#" onclick="return doclink('link-81', 'last_read', 'link-78');">last_read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
311 <a name="L204"></a><tt class="py-lineno"> 204</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name" targets="Method clubak.Display.print_line()=clubak.Display-class.html#print_line,Method clush.Display.print_line()=clush.Display-class.html#print_line"><a title="clubak.Display.print_line
312 clush.Display.print_line" class="py-name" href="#" onclick="return doclink('link-82', 'print_line', 'link-82');">print_line</a></tt><tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt><tt class="py-op">)</tt> </tt>
313 </div><a name="L205"></a><tt class="py-lineno"> 205</tt> <tt class="py-line"> </tt>
314 <a name="DirectOutputHandler.ev_error"></a><div id="DirectOutputHandler.ev_error-def"><a name="L206"></a><tt class="py-lineno"> 206</tt> <a class="py-toggle" href="#" id="DirectOutputHandler.ev_error-toggle" onclick="return toggle('DirectOutputHandler.ev_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.DirectOutputHandler-class.html#ev_error">ev_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
315 </div><div id="DirectOutputHandler.ev_error-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DirectOutputHandler.ev_error-expanded"><a name="L207"></a><tt class="py-lineno"> 207</tt> <tt class="py-line"> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt> <tt class="py-op">=</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.last_error()=ClusterShell.Worker.Worker.DistantWorker-class.html#last_error,Method ClusterShell.Worker.Worker.Worker.last_error()=ClusterShell.Worker.Worker.Worker-class.html#last_error,Method ClusterShell.Worker.Worker.WorkerSimple.last_error()=ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error"><a title="ClusterShell.Worker.Worker.DistantWorker.last_error
316 ClusterShell.Worker.Worker.Worker.last_error
317 ClusterShell.Worker.Worker.WorkerSimple.last_error" class="py-name" href="#" onclick="return doclink('link-83', 'last_error', 'link-83');">last_error</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
318 <a name="L208"></a><tt class="py-lineno"> 208</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name" targets="Method clubak.Display.print_line_error()=clubak.Display-class.html#print_line_error,Method clush.Display.print_line_error()=clush.Display-class.html#print_line_error"><a title="clubak.Display.print_line_error
319 clush.Display.print_line_error" class="py-name" href="#" onclick="return doclink('link-84', 'print_line_error', 'link-84');">print_line_error</a></tt><tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt><tt class="py-op">)</tt> </tt>
320 </div><a name="L209"></a><tt class="py-lineno"> 209</tt> <tt class="py-line"> </tt>
321 <a name="DirectOutputHandler.ev_hup"></a><div id="DirectOutputHandler.ev_hup-def"><a name="L210"></a><tt class="py-lineno"> 210</tt> <a class="py-toggle" href="#" id="DirectOutputHandler.ev_hup-toggle" onclick="return toggle('DirectOutputHandler.ev_hup');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.DirectOutputHandler-class.html#ev_hup">ev_hup</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
322 </div><div id="DirectOutputHandler.ev_hup-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DirectOutputHandler.ev_hup-expanded"><a name="L211"></a><tt class="py-lineno"> 211</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">,</tt> <tt class="py-string">"last_retcode"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
323 <a name="L212"></a><tt class="py-lineno"> 212</tt> <tt class="py-line"> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.last_retcode()=ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode"><a title="ClusterShell.Worker.Worker.DistantWorker.last_retcode" class="py-name" href="#" onclick="return doclink('link-85', 'last_retcode', 'link-85');">last_retcode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
324 <a name="L213"></a><tt class="py-lineno"> 213</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
325 <a name="L214"></a><tt class="py-lineno"> 214</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-string">"local"</tt> </tt>
326 <a name="L215"></a><tt class="py-lineno"> 215</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name" targets="Method ClusterShell.Worker.Popen.WorkerPopen.retcode()=ClusterShell.Worker.Popen.WorkerPopen-class.html#retcode"><a title="ClusterShell.Worker.Popen.WorkerPopen.retcode" class="py-name" href="#" onclick="return doclink('link-86', 'retcode', 'link-86');">retcode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
327 <a name="L216"></a><tt class="py-lineno"> 216</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rc</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
328 <a name="L217"></a><tt class="py-lineno"> 217</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: %s: exited with exit code %d"</tt> \ </tt>
329 <a name="L218"></a><tt class="py-lineno"> 218</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
330 </div><a name="L219"></a><tt class="py-lineno"> 219</tt> <tt class="py-line"> </tt>
331 <a name="DirectOutputHandler.ev_timeout"></a><div id="DirectOutputHandler.ev_timeout-def"><a name="L220"></a><tt class="py-lineno"> 220</tt> <a class="py-toggle" href="#" id="DirectOutputHandler.ev_timeout-toggle" onclick="return toggle('DirectOutputHandler.ev_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.DirectOutputHandler-class.html#ev_timeout">ev_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
332 </div><div id="DirectOutputHandler.ev_timeout-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DirectOutputHandler.ev_timeout-expanded"><a name="L221"></a><tt class="py-lineno"> 221</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: %s: command timeout"</tt> <tt class="py-op">%</tt> \ </tt>
333 <a name="L222"></a><tt class="py-lineno"> 222</tt> <tt class="py-line"> <tt id="link-87" class="py-name"><a title="ClusterShell.NodeSet
334 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-87', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
335 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-88', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name" targets="Method ClusterShell.Task.Task.iter_keys_timeout()=ClusterShell.Task.Task-class.html#iter_keys_timeout,Method ClusterShell.Worker.Worker.DistantWorker.iter_keys_timeout()=ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout"><a title="ClusterShell.Task.Task.iter_keys_timeout
336 ClusterShell.Worker.Worker.DistantWorker.iter_keys_timeout" class="py-name" href="#" onclick="return doclink('link-89', 'iter_keys_timeout', 'link-89');">iter_keys_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
337 </div><a name="L223"></a><tt class="py-lineno"> 223</tt> <tt class="py-line"> </tt>
338 <a name="DirectOutputHandler.ev_close"></a><div id="DirectOutputHandler.ev_close-def"><a name="L224"></a><tt class="py-lineno"> 224</tt> <a class="py-toggle" href="#" id="DirectOutputHandler.ev_close-toggle" onclick="return toggle('DirectOutputHandler.ev_close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.DirectOutputHandler-class.html#ev_close">ev_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
339 </div><div id="DirectOutputHandler.ev_close-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DirectOutputHandler.ev_close-expanded"><a name="L225"></a><tt class="py-lineno"> 225</tt> <tt class="py-line"> <tt class="py-comment"># If needed, notify main thread to update its prompt by sending</tt> </tt>
340 <a name="L226"></a><tt class="py-lineno"> 226</tt> <tt class="py-line"> <tt class="py-comment"># a SIGUSR1 signal. We use task-specific user-defined variable</tt> </tt>
341 <a name="L227"></a><tt class="py-lineno"> 227</tt> <tt class="py-line"> <tt class="py-comment"># to record current states (prefixed by USER_).</tt> </tt>
342 <a name="L228"></a><tt class="py-lineno"> 228</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method ClusterShell.Task.Task.set_default()=ClusterShell.Task.Task-class.html#set_default"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-90', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_running"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
343 <a name="L229"></a><tt class="py-lineno"> 229</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name" targets="Method ClusterShell.Task.Task.default()=ClusterShell.Task.Task-class.html#default"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-91', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_handle_SIGUSR1"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
344 <a name="L230"></a><tt class="py-lineno"> 230</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">kill</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">getpid</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGUSR1</tt><tt class="py-op">)</tt> </tt>
345 </div></div><a name="L231"></a><tt class="py-lineno"> 231</tt> <tt class="py-line"> </tt>
346 <a name="GatherOutputHandler"></a><div id="GatherOutputHandler-def"><a name="L232"></a><tt class="py-lineno"> 232</tt> <a class="py-toggle" href="#" id="GatherOutputHandler-toggle" onclick="return toggle('GatherOutputHandler');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clush.GatherOutputHandler-class.html">GatherOutputHandler</a><tt class="py-op">(</tt><tt class="py-base-class">EventHandler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
347 </div><div id="GatherOutputHandler-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="GatherOutputHandler-expanded"><a name="L233"></a><tt class="py-lineno"> 233</tt> <tt class="py-line"> <tt class="py-docstring">"""Gathered output event handler class."""</tt> </tt>
348 <a name="L234"></a><tt class="py-lineno"> 234</tt> <tt class="py-line"> </tt>
349 <a name="GatherOutputHandler.__init__"></a><div id="GatherOutputHandler.__init__-def"><a name="L235"></a><tt class="py-lineno"> 235</tt> <a class="py-toggle" href="#" id="GatherOutputHandler.__init__-toggle" onclick="return toggle('GatherOutputHandler.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.GatherOutputHandler-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">display</tt><tt class="py-op">,</tt> <tt class="py-param">runtimer</tt><tt class="py-op">,</tt> <tt class="py-param">nodes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
350 </div><div id="GatherOutputHandler.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="GatherOutputHandler.__init__-expanded"><a name="L236"></a><tt class="py-lineno"> 236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt> <tt class="py-op">=</tt> <tt id="link-92" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-92', 'display', 'link-80');">display</a></tt> </tt>
351 <a name="L237"></a><tt class="py-lineno"> 237</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_runtimer</tt> <tt class="py-op">=</tt> <tt class="py-name">runtimer</tt> </tt>
352 <a name="L238"></a><tt class="py-lineno"> 238</tt> <tt class="py-line"> <tt class="py-comment"># needed for -L enhancement:</tt> </tt>
353 <a name="L239"></a><tt class="py-lineno"> 239</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes</tt> <tt class="py-op">=</tt> <tt id="link-93" class="py-name"><a title="ClusterShell.NodeSet
354 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-93', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">nodes</tt><tt class="py-op">)</tt> </tt>
355 <a name="L240"></a><tt class="py-lineno"> 240</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap_base</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">.</tt><tt class="py-name">fromkeys</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
356 <a name="L241"></a><tt class="py-lineno"> 241</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap_base</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name" targets="Method ClusterShell.Task.Task.copy()=ClusterShell.Task.Task-class.html#copy"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-94', 'copy', 'link-94');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
357 <a name="L242"></a><tt class="py-lineno"> 242</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes_cnt</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
358 </div><a name="L243"></a><tt class="py-lineno"> 243</tt> <tt class="py-line"> </tt>
359 <a name="GatherOutputHandler.ev_read"></a><div id="GatherOutputHandler.ev_read-def"><a name="L244"></a><tt class="py-lineno"> 244</tt> <a class="py-toggle" href="#" id="GatherOutputHandler.ev_read-toggle" onclick="return toggle('GatherOutputHandler.ev_read');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.GatherOutputHandler-class.html#ev_read">ev_read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
360 </div><div id="GatherOutputHandler.ev_read-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="GatherOutputHandler.ev_read-expanded"><a name="L245"></a><tt class="py-lineno"> 245</tt> <tt class="py-line"> <tt class="py-comment"># Implementation of -bL "per line live gathering":</tt> </tt>
361 <a name="L246"></a><tt class="py-lineno"> 246</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="clubak.Display.line_mode
362 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-95', 'line_mode', 'link-51');">line_mode</a></tt><tt class="py-op">:</tt> </tt>
363 <a name="L247"></a><tt class="py-lineno"> 247</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
364 <a name="L248"></a><tt class="py-lineno"> 248</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker.last_read
365 ClusterShell.Worker.Worker.Worker.last_read
366 ClusterShell.Worker.Worker.WorkerSimple.last_read" class="py-name" href="#" onclick="return doclink('link-96', 'last_read', 'link-78');">last_read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
367 <a name="L249"></a><tt class="py-lineno"> 249</tt> <tt class="py-line"> <tt class="py-comment"># keep counter and nodemap up-to-date</tt> </tt>
368 <a name="L250"></a><tt class="py-lineno"> 250</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-name">result</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
369 <a name="L251"></a><tt class="py-lineno"> 251</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes_cnt</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
370 <a name="L252"></a><tt class="py-lineno"> 252</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap</tt><tt class="py-op">[</tt><tt class="py-name">node</tt><tt class="py-op">]</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
371 <a name="L253"></a><tt class="py-lineno"> 253</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name" targets="Method clush.GatherOutputHandler._live_line()=clush.GatherOutputHandler-class.html#_live_line"><a title="clush.GatherOutputHandler._live_line" class="py-name" href="#" onclick="return doclink('link-97', '_live_line', 'link-97');">_live_line</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">)</tt> </tt>
372 </div><a name="L254"></a><tt class="py-lineno"> 254</tt> <tt class="py-line"> </tt>
373 <a name="GatherOutputHandler.ev_error"></a><div id="GatherOutputHandler.ev_error-def"><a name="L255"></a><tt class="py-lineno"> 255</tt> <a class="py-toggle" href="#" id="GatherOutputHandler.ev_error-toggle" onclick="return toggle('GatherOutputHandler.ev_error');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.GatherOutputHandler-class.html#ev_error">ev_error</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
374 </div><div id="GatherOutputHandler.ev_error-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="GatherOutputHandler.ev_error-expanded"><a name="L256"></a><tt class="py-lineno"> 256</tt> <tt class="py-line"> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt> <tt class="py-op">=</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker.last_error
375 ClusterShell.Worker.Worker.Worker.last_error
376 ClusterShell.Worker.Worker.WorkerSimple.last_error" class="py-name" href="#" onclick="return doclink('link-98', 'last_error', 'link-83');">last_error</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
377 <a name="L257"></a><tt class="py-lineno"> 257</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">_runtimer</tt><tt class="py-op">:</tt> </tt>
378 <a name="L258"></a><tt class="py-lineno"> 258</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_runtimer</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name" targets="Method clush.RunTimer.erase_line()=clush.RunTimer-class.html#erase_line"><a title="clush.RunTimer.erase_line" class="py-name" href="#" onclick="return doclink('link-99', 'erase_line', 'link-99');">erase_line</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
379 <a name="L259"></a><tt class="py-lineno"> 259</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="clubak.Display.print_line_error
380 clush.Display.print_line_error" class="py-name" href="#" onclick="return doclink('link-100', 'print_line_error', 'link-84');">print_line_error</a></tt><tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt><tt class="py-op">)</tt> </tt>
381 <a name="L260"></a><tt class="py-lineno"> 260</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">_runtimer</tt><tt class="py-op">:</tt> </tt>
382 <a name="L261"></a><tt class="py-lineno"> 261</tt> <tt class="py-line"> <tt class="py-comment"># Force redisplay of counter</tt> </tt>
383 <a name="L262"></a><tt class="py-lineno"> 262</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_runtimer</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name" targets="Method clush.RunTimer.set_dirty()=clush.RunTimer-class.html#set_dirty"><a title="clush.RunTimer.set_dirty" class="py-name" href="#" onclick="return doclink('link-101', 'set_dirty', 'link-101');">set_dirty</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
384 </div><a name="L263"></a><tt class="py-lineno"> 263</tt> <tt class="py-line"> </tt>
385 <a name="GatherOutputHandler.ev_hup"></a><div id="GatherOutputHandler.ev_hup-def"><a name="L264"></a><tt class="py-lineno"> 264</tt> <a class="py-toggle" href="#" id="GatherOutputHandler.ev_hup-toggle" onclick="return toggle('GatherOutputHandler.ev_hup');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.GatherOutputHandler-class.html#ev_hup">ev_hup</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
386 </div><div id="GatherOutputHandler.ev_hup-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="GatherOutputHandler.ev_hup-expanded"><a name="L265"></a><tt class="py-lineno"> 265</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">_display</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="clubak.Display.line_mode
387 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-102', 'line_mode', 'link-51');">line_mode</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap</tt><tt class="py-op">[</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name" targets="Method ClusterShell.Worker.Worker.DistantWorker.last_node()=ClusterShell.Worker.Worker.DistantWorker-class.html#last_node"><a title="ClusterShell.Worker.Worker.DistantWorker.last_node" class="py-name" href="#" onclick="return doclink('link-103', 'last_node', 'link-103');">last_node</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
388 <a name="L266"></a><tt class="py-lineno"> 266</tt> <tt class="py-line"> <tt class="py-comment"># forget node that doesn't answer (used for live line gathering)</tt> </tt>
389 <a name="L267"></a><tt class="py-lineno"> 267</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.remove()=ClusterShell.Engine.Engine.Engine-class.html#remove,Method ClusterShell.MsgTree.MsgTree.remove()=ClusterShell.MsgTree.MsgTree-class.html#remove,Method ClusterShell.NodeSet.NodeSetBase.remove()=ClusterShell.NodeSet.NodeSetBase-class.html#remove,Method ClusterShell.NodeSet.RangeSet.remove()=ClusterShell.NodeSet.RangeSet-class.html#remove"><a title="ClusterShell.Engine.Engine.Engine.remove
390 ClusterShell.MsgTree.MsgTree.remove
391 ClusterShell.NodeSet.NodeSetBase.remove
392 ClusterShell.NodeSet.RangeSet.remove" class="py-name" href="#" onclick="return doclink('link-104', 'remove', 'link-104');">remove</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker.last_node" class="py-name" href="#" onclick="return doclink('link-105', 'last_node', 'link-103');">last_node</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
393 <a name="L268"></a><tt class="py-lineno"> 268</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap</tt><tt class="py-op">[</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker.last_node" class="py-name" href="#" onclick="return doclink('link-106', 'last_node', 'link-103');">last_node</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
394 <a name="L269"></a><tt class="py-lineno"> 269</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap_base</tt><tt class="py-op">[</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="ClusterShell.Worker.Worker.DistantWorker.last_node" class="py-name" href="#" onclick="return doclink('link-107', 'last_node', 'link-103');">last_node</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
395 <a name="L270"></a><tt class="py-lineno"> 270</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="clush.GatherOutputHandler._live_line" class="py-name" href="#" onclick="return doclink('link-108', '_live_line', 'link-97');">_live_line</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">)</tt> </tt>
396 </div><a name="L271"></a><tt class="py-lineno"> 271</tt> <tt class="py-line"> </tt>
397 <a name="GatherOutputHandler._live_line"></a><div id="GatherOutputHandler._live_line-def"><a name="L272"></a><tt class="py-lineno"> 272</tt> <a class="py-toggle" href="#" id="GatherOutputHandler._live_line-toggle" onclick="return toggle('GatherOutputHandler._live_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.GatherOutputHandler-class.html#_live_line">_live_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
398 </div><div id="GatherOutputHandler._live_line-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="GatherOutputHandler._live_line-expanded"><a name="L273"></a><tt class="py-lineno"> 273</tt> <tt class="py-line"> <tt class="py-comment"># if all nodes replied 1 (or n) time(s), display gathered line(s)</tt> </tt>
399 <a name="L274"></a><tt class="py-lineno"> 274</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">_nodes</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes_cnt</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> \ </tt>
400 <a name="L275"></a><tt class="py-lineno"> 275</tt> <tt class="py-line"> <tt class="py-name">max</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap</tt><tt class="py-op">.</tt><tt class="py-name">itervalues</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes_cnt</tt> \ </tt>
401 <a name="L276"></a><tt class="py-lineno"> 276</tt> <tt class="py-line"> <tt class="py-op">/</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
402 <a name="L277"></a><tt class="py-lineno"> 277</tt> <tt class="py-line"> <tt class="py-name">nodesetify</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> <tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-109" class="py-name"><a title="ClusterShell.NodeSet
403 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-109', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
404 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-110', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">v</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>
405 <a name="L278"></a><tt class="py-lineno"> 278</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">buf</tt><tt class="py-op">,</tt> <tt id="link-111" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-111', 'nodeset', 'link-55');">nodeset</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt class="py-name">nodesetify</tt><tt class="py-op">,</tt> </tt>
406 <a name="L279"></a><tt class="py-lineno"> 279</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name" targets="Method ClusterShell.Task.Task.iter_buffers()=ClusterShell.Task.Task-class.html#iter_buffers,Method ClusterShell.Worker.Worker.DistantWorker.iter_buffers()=ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers"><a title="ClusterShell.Task.Task.iter_buffers
407 ClusterShell.Worker.Worker.DistantWorker.iter_buffers" class="py-name" href="#" onclick="return doclink('link-112', 'iter_buffers', 'link-112');">iter_buffers</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
408 <a name="L280"></a><tt class="py-lineno"> 280</tt> <tt class="py-line"> <tt class="py-name">cmp</tt><tt class="py-op">=</tt><tt id="link-113" class="py-name" targets="Function clush.bufnodeset_cmp()=clush-module.html#bufnodeset_cmp"><a title="clush.bufnodeset_cmp" class="py-name" href="#" onclick="return doclink('link-113', 'bufnodeset_cmp', 'link-113');">bufnodeset_cmp</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
409 <a name="L281"></a><tt class="py-lineno"> 281</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name" targets="Method clubak.Display.print_gather()=clubak.Display-class.html#print_gather,Method clush.Display.print_gather()=clush.Display-class.html#print_gather"><a title="clubak.Display.print_gather
410 clush.Display.print_gather" class="py-name" href="#" onclick="return doclink('link-114', 'print_gather', 'link-114');">print_gather</a></tt><tt class="py-op">(</tt><tt id="link-115" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-115', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt><tt class="py-op">)</tt> </tt>
411 <a name="L282"></a><tt class="py-lineno"> 282</tt> <tt class="py-line"> <tt class="py-comment"># clear worker buffers, reset nodemap and node counter</tt> </tt>
412 <a name="L283"></a><tt class="py-lineno"> 283</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name" targets="Method ClusterShell.Task.Task.flush_buffers()=ClusterShell.Task.Task-class.html#flush_buffers,Method ClusterShell.Worker.Worker.Worker.flush_buffers()=ClusterShell.Worker.Worker.Worker-class.html#flush_buffers"><a title="ClusterShell.Task.Task.flush_buffers
413 ClusterShell.Worker.Worker.Worker.flush_buffers" class="py-name" href="#" onclick="return doclink('link-116', 'flush_buffers', 'link-116');">flush_buffers</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
414 <a name="L284"></a><tt class="py-lineno"> 284</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodemap_base</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-117', 'copy', 'link-94');">copy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
415 <a name="L285"></a><tt class="py-lineno"> 285</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_nodes_cnt</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
416 </div><a name="L286"></a><tt class="py-lineno"> 286</tt> <tt class="py-line"> </tt>
417 <a name="GatherOutputHandler.ev_close"></a><div id="GatherOutputHandler.ev_close-def"><a name="L287"></a><tt class="py-lineno"> 287</tt> <a class="py-toggle" href="#" id="GatherOutputHandler.ev_close-toggle" onclick="return toggle('GatherOutputHandler.ev_close');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.GatherOutputHandler-class.html#ev_close">ev_close</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
418 </div><div id="GatherOutputHandler.ev_close-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="GatherOutputHandler.ev_close-expanded"><a name="L288"></a><tt class="py-lineno"> 288</tt> <tt class="py-line"> <tt class="py-comment"># Worker is closing -- it's time to gather results...</tt> </tt>
419 <a name="L289"></a><tt class="py-lineno"> 289</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">_runtimer</tt><tt class="py-op">:</tt> </tt>
420 <a name="L290"></a><tt class="py-lineno"> 290</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_runtimer</tt><tt class="py-op">.</tt><tt class="py-name">eh</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name" targets="Method clush.RunTimer.finalize()=clush.RunTimer-class.html#finalize"><a title="clush.RunTimer.finalize" class="py-name" href="#" onclick="return doclink('link-118', 'finalize', 'link-118');">finalize</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-119', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_interactive"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
421 <a name="L291"></a><tt class="py-lineno"> 291</tt> <tt class="py-line"> </tt>
422 <a name="L292"></a><tt class="py-lineno"> 292</tt> <tt class="py-line"> <tt class="py-comment"># Display command output, try to order buffers by rc</tt> </tt>
423 <a name="L293"></a><tt class="py-lineno"> 293</tt> <tt class="py-line"> <tt class="py-name">nodesetify</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> <tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-120" class="py-name"><a title="ClusterShell.NodeSet
424 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-120', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-121" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
425 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-121', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">v</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>
426 <a name="L294"></a><tt class="py-lineno"> 294</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-name">nodelist</tt> <tt class="py-keyword">in</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name" targets="Method ClusterShell.Task.Task.iter_retcodes()=ClusterShell.Task.Task-class.html#iter_retcodes,Method ClusterShell.Worker.Worker.DistantWorker.iter_retcodes()=ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes"><a title="ClusterShell.Task.Task.iter_retcodes
427 ClusterShell.Worker.Worker.DistantWorker.iter_retcodes" class="py-name" href="#" onclick="return doclink('link-122', 'iter_retcodes', 'link-122');">iter_retcodes</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
428 <a name="L295"></a><tt class="py-lineno"> 295</tt> <tt class="py-line"> <tt class="py-comment"># Then order by node/nodeset (see bufnodeset_cmp)</tt> </tt>
429 <a name="L296"></a><tt class="py-lineno"> 296</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">buf</tt><tt class="py-op">,</tt> <tt id="link-123" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-123', 'nodeset', 'link-55');">nodeset</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt class="py-name">nodesetify</tt><tt class="py-op">,</tt> </tt>
430 <a name="L297"></a><tt class="py-lineno"> 297</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="ClusterShell.Task.Task.iter_buffers
431 ClusterShell.Worker.Worker.DistantWorker.iter_buffers" class="py-name" href="#" onclick="return doclink('link-124', 'iter_buffers', 'link-112');">iter_buffers</a></tt><tt class="py-op">(</tt><tt class="py-name">nodelist</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
432 <a name="L298"></a><tt class="py-lineno"> 298</tt> <tt class="py-line"> <tt class="py-name">cmp</tt><tt class="py-op">=</tt><tt id="link-125" class="py-name"><a title="clush.bufnodeset_cmp" class="py-name" href="#" onclick="return doclink('link-125', 'bufnodeset_cmp', 'link-113');">bufnodeset_cmp</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
433 <a name="L299"></a><tt class="py-lineno"> 299</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_display</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name"><a title="clubak.Display.print_gather
434 clush.Display.print_gather" class="py-name" href="#" onclick="return doclink('link-126', 'print_gather', 'link-114');">print_gather</a></tt><tt class="py-op">(</tt><tt id="link-127" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-127', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt><tt class="py-op">)</tt> </tt>
435 <a name="L300"></a><tt class="py-lineno"> 300</tt> <tt class="py-line"> </tt>
436 <a name="L301"></a><tt class="py-lineno"> 301</tt> <tt class="py-line"> <tt class="py-comment"># Display return code if not ok ( != 0)</tt> </tt>
437 <a name="L302"></a><tt class="py-lineno"> 302</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-name">nodelist</tt> <tt class="py-keyword">in</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="ClusterShell.Task.Task.iter_retcodes
438 ClusterShell.Worker.Worker.DistantWorker.iter_retcodes" class="py-name" href="#" onclick="return doclink('link-128', 'iter_retcodes', 'link-122');">iter_retcodes</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
439 <a name="L303"></a><tt class="py-lineno"> 303</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rc</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
440 <a name="L304"></a><tt class="py-lineno"> 304</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt id="link-129" class="py-name"><a title="ClusterShell.NodeSet
441 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-129', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
442 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-130', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">nodelist</tt><tt class="py-op">)</tt> </tt>
443 <a name="L305"></a><tt class="py-lineno"> 305</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: %s: exited with exit code %s"</tt> \ </tt>
444 <a name="L306"></a><tt class="py-lineno"> 306</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
445 <a name="L307"></a><tt class="py-lineno"> 307</tt> <tt class="py-line"> </tt>
446 <a name="L308"></a><tt class="py-lineno"> 308</tt> <tt class="py-line"> <tt class="py-comment"># Display nodes that didn't answer within command timeout delay</tt> </tt>
447 <a name="L309"></a><tt class="py-lineno"> 309</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-131" class="py-name" targets="Method ClusterShell.Task.Task.num_timeout()=ClusterShell.Task.Task-class.html#num_timeout,Method ClusterShell.Worker.Worker.DistantWorker.num_timeout()=ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout"><a title="ClusterShell.Task.Task.num_timeout
448 ClusterShell.Worker.Worker.DistantWorker.num_timeout" class="py-name" href="#" onclick="return doclink('link-131', 'num_timeout', 'link-131');">num_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
449 <a name="L310"></a><tt class="py-lineno"> 310</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: %s: command timeout"</tt> <tt class="py-op">%</tt> \ </tt>
450 <a name="L311"></a><tt class="py-lineno"> 311</tt> <tt class="py-line"> <tt id="link-132" class="py-name"><a title="ClusterShell.NodeSet
451 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-132', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-133" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
452 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-133', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="ClusterShell.Task.Task.iter_keys_timeout
453 ClusterShell.Worker.Worker.DistantWorker.iter_keys_timeout" class="py-name" href="#" onclick="return doclink('link-134', 'iter_keys_timeout', 'link-89');">iter_keys_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
454 <a name="L312"></a><tt class="py-lineno"> 312</tt> <tt class="py-line"> </tt>
455 <a name="L313"></a><tt class="py-lineno"> 313</tt> <tt class="py-line"> <tt class="py-comment"># Notify main thread to update its prompt</tt> </tt>
456 <a name="L314"></a><tt class="py-lineno"> 314</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-135', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_running"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
457 <a name="L315"></a><tt class="py-lineno"> 315</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-136', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_handle_SIGUSR1"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
458 <a name="L316"></a><tt class="py-lineno"> 316</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">kill</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">getpid</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGUSR1</tt><tt class="py-op">)</tt> </tt>
459 </div></div><a name="L317"></a><tt class="py-lineno"> 317</tt> <tt class="py-line"> </tt>
460 <a name="RunTimer"></a><div id="RunTimer-def"><a name="L318"></a><tt class="py-lineno"> 318</tt> <a class="py-toggle" href="#" id="RunTimer-toggle" onclick="return toggle('RunTimer');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clush.RunTimer-class.html">RunTimer</a><tt class="py-op">(</tt><tt class="py-base-class">EventHandler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
461 </div><div id="RunTimer-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RunTimer-expanded"><a name="RunTimer.__init__"></a><div id="RunTimer.__init__-def"><a name="L319"></a><tt class="py-lineno"> 319</tt> <a class="py-toggle" href="#" id="RunTimer.__init__-toggle" onclick="return toggle('RunTimer.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.RunTimer-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">task</tt><tt class="py-op">,</tt> <tt class="py-param">total</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
462 </div><div id="RunTimer.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RunTimer.__init__-expanded"><a name="L320"></a><tt class="py-lineno"> 320</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt> </tt>
463 <a name="L321"></a><tt class="py-lineno"> 321</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total</tt> <tt class="py-op">=</tt> <tt class="py-name">total</tt> </tt>
464 <a name="L322"></a><tt class="py-lineno"> 322</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cnt_last</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
465 <a name="L323"></a><tt class="py-lineno"> 323</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tslen</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
466 <a name="L324"></a><tt class="py-lineno"> 324</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wholelen</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
467 </div><a name="L325"></a><tt class="py-lineno"> 325</tt> <tt class="py-line"> </tt>
468 <a name="RunTimer.ev_timer"></a><div id="RunTimer.ev_timer-def"><a name="L326"></a><tt class="py-lineno"> 326</tt> <a class="py-toggle" href="#" id="RunTimer.ev_timer-toggle" onclick="return toggle('RunTimer.ev_timer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.RunTimer-class.html#ev_timer">ev_timer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
469 </div><div id="RunTimer.ev_timer-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RunTimer.ev_timer-expanded"><a name="L327"></a><tt class="py-lineno"> 327</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.update()=ClusterShell.NodeSet.NodeSet-class.html#update,Method ClusterShell.NodeSet.NodeSetBase.update()=ClusterShell.NodeSet.NodeSetBase-class.html#update,Method ClusterShell.NodeSet.RangeSet.update()=ClusterShell.NodeSet.RangeSet-class.html#update,Method clush.RunTimer.update()=clush.RunTimer-class.html#update"><a title="ClusterShell.NodeSet.NodeSet.update
470 ClusterShell.NodeSet.NodeSetBase.update
471 ClusterShell.NodeSet.RangeSet.update
472 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-137', 'update', 'link-137');">update</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
473 </div><a name="L328"></a><tt class="py-lineno"> 328</tt> <tt class="py-line"> </tt>
474 <a name="RunTimer.set_dirty"></a><div id="RunTimer.set_dirty-def"><a name="L329"></a><tt class="py-lineno"> 329</tt> <a class="py-toggle" href="#" id="RunTimer.set_dirty-toggle" onclick="return toggle('RunTimer.set_dirty');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.RunTimer-class.html#set_dirty">set_dirty</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
475 </div><div id="RunTimer.set_dirty-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RunTimer.set_dirty-expanded"><a name="L330"></a><tt class="py-lineno"> 330</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cnt_last</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
476 </div><a name="L331"></a><tt class="py-lineno"> 331</tt> <tt class="py-line"> </tt>
477 <a name="RunTimer.erase_line"></a><div id="RunTimer.erase_line-def"><a name="L332"></a><tt class="py-lineno"> 332</tt> <a class="py-toggle" href="#" id="RunTimer.erase_line-toggle" onclick="return toggle('RunTimer.erase_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.RunTimer-class.html#erase_line">erase_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
478 </div><div id="RunTimer.erase_line-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RunTimer.erase_line-expanded"><a name="L333"></a><tt class="py-lineno"> 333</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">wholelen</tt><tt class="py-op">:</tt> </tt>
479 <a name="L334"></a><tt class="py-lineno"> 334</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
480 ClusterShell.Worker.Ssh.WorkerSsh.write
481 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-138', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">' '</tt> <tt class="py-op">*</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wholelen</tt> <tt class="py-op">+</tt> <tt class="py-string">'\r'</tt><tt class="py-op">)</tt> </tt>
482 </div><a name="L335"></a><tt class="py-lineno"> 335</tt> <tt class="py-line"> </tt>
483 <a name="RunTimer.update"></a><div id="RunTimer.update-def"><a name="L336"></a><tt class="py-lineno"> 336</tt> <a class="py-toggle" href="#" id="RunTimer.update-toggle" onclick="return toggle('RunTimer.update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.RunTimer-class.html#update">update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
484 </div><div id="RunTimer.update-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RunTimer.update-expanded"><a name="L337"></a><tt class="py-lineno"> 337</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.clients()=ClusterShell.Engine.Engine.Engine-class.html#clients"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-139', 'clients', 'link-139');">clients</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
485 <a name="L338"></a><tt class="py-lineno"> 338</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cnt</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cnt_last</tt><tt class="py-op">:</tt> </tt>
486 <a name="L339"></a><tt class="py-lineno"> 339</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cnt_last</tt> <tt class="py-op">=</tt> <tt class="py-name">cnt</tt> </tt>
487 <a name="L340"></a><tt class="py-lineno"> 340</tt> <tt class="py-line"> <tt class="py-comment"># display completed/total clients</tt> </tt>
488 <a name="L341"></a><tt class="py-lineno"> 341</tt> <tt class="py-line"> <tt class="py-name">towrite</tt> <tt class="py-op">=</tt> <tt class="py-string">'clush: %*d/%*d\r'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tslen</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total</tt> <tt class="py-op">-</tt> <tt class="py-name">cnt</tt><tt class="py-op">,</tt> </tt>
489 <a name="L342"></a><tt class="py-lineno"> 342</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tslen</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total</tt><tt class="py-op">)</tt> </tt>
490 <a name="L343"></a><tt class="py-lineno"> 343</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wholelen</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">towrite</tt><tt class="py-op">)</tt> </tt>
491 <a name="L344"></a><tt class="py-lineno"> 344</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt id="link-140" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
492 ClusterShell.Worker.Ssh.WorkerSsh.write
493 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-140', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">towrite</tt><tt class="py-op">)</tt> </tt>
494 </div><a name="L345"></a><tt class="py-lineno"> 345</tt> <tt class="py-line"> </tt>
495 <a name="RunTimer.finalize"></a><div id="RunTimer.finalize-def"><a name="L346"></a><tt class="py-lineno"> 346</tt> <a class="py-toggle" href="#" id="RunTimer.finalize-toggle" onclick="return toggle('RunTimer.finalize');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.RunTimer-class.html#finalize">finalize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
496 </div><div id="RunTimer.finalize-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="RunTimer.finalize-expanded"><a name="L347"></a><tt class="py-lineno"> 347</tt> <tt class="py-line"> <tt class="py-comment"># display completed/total clients</tt> </tt>
497 <a name="L348"></a><tt class="py-lineno"> 348</tt> <tt class="py-line"> <tt class="py-name">fmt</tt> <tt class="py-op">=</tt> <tt class="py-string">'clush: %*d/%*d'</tt> </tt>
498 <a name="L349"></a><tt class="py-lineno"> 349</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cr</tt><tt class="py-op">:</tt> </tt>
499 <a name="L350"></a><tt class="py-lineno"> 350</tt> <tt class="py-line"> <tt class="py-name">fmt</tt> <tt class="py-op">+=</tt> <tt class="py-string">'\n'</tt> </tt>
500 <a name="L351"></a><tt class="py-lineno"> 351</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
501 <a name="L352"></a><tt class="py-lineno"> 352</tt> <tt class="py-line"> <tt class="py-name">fmt</tt> <tt class="py-op">+=</tt> <tt class="py-string">'\r'</tt> </tt>
502 <a name="L353"></a><tt class="py-lineno"> 353</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="ClusterShell.Worker.Pdsh.WorkerPdsh.write
503 ClusterShell.Worker.Ssh.WorkerSsh.write
504 ClusterShell.Worker.Worker.WorkerSimple.write" class="py-name" href="#" onclick="return doclink('link-141', 'write', 'link-59');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">fmt</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tslen</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tslen</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
505 </div></div><a name="L354"></a><tt class="py-lineno"> 354</tt> <tt class="py-line"> </tt>
506 <a name="ClushConfigError"></a><div id="ClushConfigError-def"><a name="L355"></a><tt class="py-lineno"> 355</tt> <a class="py-toggle" href="#" id="ClushConfigError-toggle" onclick="return toggle('ClushConfigError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clush.ClushConfigError-class.html">ClushConfigError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
507 </div><div id="ClushConfigError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ClushConfigError-expanded"><a name="L356"></a><tt class="py-lineno"> 356</tt> <tt class="py-line"> <tt class="py-docstring">"""Exception used by ClushConfig to report an error."""</tt> </tt>
508 <a name="L357"></a><tt class="py-lineno"> 357</tt> <tt class="py-line"> </tt>
509 <a name="ClushConfigError.__init__"></a><div id="ClushConfigError.__init__-def"><a name="L358"></a><tt class="py-lineno"> 358</tt> <a class="py-toggle" href="#" id="ClushConfigError.__init__-toggle" onclick="return toggle('ClushConfigError.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfigError-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">section</tt><tt class="py-op">,</tt> <tt class="py-param">option</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
510 </div><div id="ClushConfigError.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfigError.__init__-expanded"><a name="L359"></a><tt class="py-lineno"> 359</tt> <tt class="py-line"> <tt class="py-name">Exception</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name" targets="Method ClusterShell.Engine.EPoll.EngineEPoll.__init__()=ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__,Method ClusterShell.Engine.Engine.Engine.__init__()=ClusterShell.Engine.Engine.Engine-class.html#__init__,Method ClusterShell.Engine.Engine.EngineAbortException.__init__()=ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__,Method ClusterShell.Engine.Engine.EngineBaseTimer.__init__()=ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__,Method ClusterShell.Engine.Engine.EngineTimer.__init__()=ClusterShell.Engine.Engine.EngineTimer-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__()=ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__,Method ClusterShell.Engine.Engine._EngineTimerQ.__init__()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__,Method ClusterShell.Engine.Poll.EnginePoll.__init__()=ClusterShell.Engine.Poll.EnginePoll-class.html#__init__,Method ClusterShell.MsgTree.MsgTree.__init__()=ClusterShell.MsgTree.MsgTree-class.html#__init__,Method ClusterShell.MsgTree.MsgTreeElem.__init__()=ClusterShell.MsgTree.MsgTreeElem-class.html#__init__,Method ClusterShell.NodeSet.NodeSet.__init__()=ClusterShell.NodeSet.NodeSet-class.html#__init__,Method ClusterShell.NodeSet.NodeSetBase.__init__()=ClusterShell.NodeSet.NodeSetBase-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseError.__init__()=ClusterShell.NodeSet.NodeSetParseError-class.html#__init__,Method ClusterShell.NodeSet.NodeSetParseRangeError.__init__()=ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__,Method ClusterShell.NodeSet.ParsingEngine.__init__()=ClusterShell.NodeSet.ParsingEngine-class.html#__init__,Method ClusterShell.NodeSet.RangeSet.__init__()=ClusterShell.NodeSet.RangeSet-class.html#__init__,Method ClusterShell.NodeSet.RangeSetPaddingError.__init__()=ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__,Method ClusterShell.NodeSet.RangeSetParseError.__init__()=ClusterShell.NodeSet.RangeSetParseError-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolver.__init__()=ClusterShell.NodeUtils.GroupResolver-class.html#__init__,Method ClusterShell.NodeUtils.GroupResolverConfig.__init__()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__,Method ClusterShell.NodeUtils.GroupSource.__init__()=ClusterShell.NodeUtils.GroupSource-class.html#__init__,Method ClusterShell.NodeUtils.GroupSourceException.__init__()=ClusterShell.NodeUtils.GroupSourceException-class.html#__init__,Method ClusterShell.Task.Task._SuspendCondition.__init__()=ClusterShell.Task.Task._SuspendCondition-class.html#__init__,Method ClusterShell.Task.Task.__init__()=ClusterShell.Task.Task-class.html#__init__,Method ClusterShell.Task._TaskMsgTree.__init__()=ClusterShell.Task._TaskMsgTree-class.html#__init__,Method ClusterShell.Worker.EngineClient.EngineClient.__init__()=ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__,Method ClusterShell.Worker.EngineClient.EnginePort.__init__()=ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__,Method ClusterShell.Worker.Pdsh.WorkerPdsh.__init__()=ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__,Method ClusterShell.Worker.Popen.WorkerPopen.__init__()=ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__,Method ClusterShell.Worker.Ssh.Scp.__init__()=ClusterShell.Worker.Ssh.Scp-class.html#__init__,Method ClusterShell.Worker.Ssh.Ssh.__init__()=ClusterShell.Worker.Ssh.Ssh-class.html#__init__,Method ClusterShell.Worker.Ssh.WorkerSsh.__init__()=ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__,Method ClusterShell.Worker.Worker.DistantWorker.__init__()=ClusterShell.Worker.Worker.DistantWorker-class.html#__init__,Method ClusterShell.Worker.Worker.Worker.__init__()=ClusterShell.Worker.Worker.Worker-class.html#__init__,Method ClusterShell.Worker.Worker.WorkerSimple.__init__()=ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__,Method clubak.Display.__init__()=clubak.Display-class.html#__init__,Method clush.ClushConfig.__init__()=clush.ClushConfig-class.html#__init__,Method clush.ClushConfigError.__init__()=clush.ClushConfigError-class.html#__init__,Method clush.DirectOutputHandler.__init__()=clush.DirectOutputHandler-class.html#__init__,Method clush.Display.__init__()=clush.Display-class.html#__init__,Method clush.GatherOutputHandler.__init__()=clush.GatherOutputHandler-class.html#__init__,Method clush.RunTimer.__init__()=clush.RunTimer-class.html#__init__,Method clush.StdInputHandler.__init__()=clush.StdInputHandler-class.html#__init__"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
511 ClusterShell.Engine.Engine.Engine.__init__
512 ClusterShell.Engine.Engine.EngineAbortException.__init__
513 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
514 ClusterShell.Engine.Engine.EngineTimer.__init__
515 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
516 ClusterShell.Engine.Engine._EngineTimerQ.__init__
517 ClusterShell.Engine.Poll.EnginePoll.__init__
518 ClusterShell.MsgTree.MsgTree.__init__
519 ClusterShell.MsgTree.MsgTreeElem.__init__
520 ClusterShell.NodeSet.NodeSet.__init__
521 ClusterShell.NodeSet.NodeSetBase.__init__
522 ClusterShell.NodeSet.NodeSetParseError.__init__
523 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
524 ClusterShell.NodeSet.ParsingEngine.__init__
525 ClusterShell.NodeSet.RangeSet.__init__
526 ClusterShell.NodeSet.RangeSetPaddingError.__init__
527 ClusterShell.NodeSet.RangeSetParseError.__init__
528 ClusterShell.NodeUtils.GroupResolver.__init__
529 ClusterShell.NodeUtils.GroupResolverConfig.__init__
530 ClusterShell.NodeUtils.GroupSource.__init__
531 ClusterShell.NodeUtils.GroupSourceException.__init__
532 ClusterShell.Task.Task._SuspendCondition.__init__
533 ClusterShell.Task.Task.__init__
534 ClusterShell.Task._TaskMsgTree.__init__
535 ClusterShell.Worker.EngineClient.EngineClient.__init__
536 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
537 ClusterShell.Worker.EngineClient.EnginePort.__init__
538 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
539 ClusterShell.Worker.Popen.WorkerPopen.__init__
540 ClusterShell.Worker.Ssh.Scp.__init__
541 ClusterShell.Worker.Ssh.Ssh.__init__
542 ClusterShell.Worker.Ssh.WorkerSsh.__init__
543 ClusterShell.Worker.Worker.DistantWorker.__init__
544 ClusterShell.Worker.Worker.Worker.__init__
545 ClusterShell.Worker.Worker.WorkerSimple.__init__
546 clubak.Display.__init__
547 clush.ClushConfig.__init__
548 clush.ClushConfigError.__init__
549 clush.DirectOutputHandler.__init__
550 clush.Display.__init__
551 clush.GatherOutputHandler.__init__
552 clush.RunTimer.__init__
553 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-142', '__init__', 'link-142');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
554 <a name="L360"></a><tt class="py-lineno"> 360</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">section</tt> <tt class="py-op">=</tt> <tt class="py-name">section</tt> </tt>
555 <a name="L361"></a><tt class="py-lineno"> 361</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">option</tt> <tt class="py-op">=</tt> <tt class="py-name">option</tt> </tt>
556 <a name="L362"></a><tt class="py-lineno"> 362</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-143', 'msg', 'link-72');">msg</a></tt> <tt class="py-op">=</tt> <tt id="link-144" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-144', 'msg', 'link-72');">msg</a></tt> </tt>
557 </div><a name="L363"></a><tt class="py-lineno"> 363</tt> <tt class="py-line"> </tt>
558 <a name="ClushConfigError.__str__"></a><div id="ClushConfigError.__str__-def"><a name="L364"></a><tt class="py-lineno"> 364</tt> <a class="py-toggle" href="#" id="ClushConfigError.__str__-toggle" onclick="return toggle('ClushConfigError.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfigError-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
559 </div><div id="ClushConfigError.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfigError.__str__-expanded"><a name="L365"></a><tt class="py-lineno"> 365</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"(Config %s.%s): %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">option</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-145" class="py-name"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-145', 'msg', 'link-72');">msg</a></tt><tt class="py-op">)</tt> </tt>
560 </div></div><a name="L366"></a><tt class="py-lineno"> 366</tt> <tt class="py-line"> </tt>
561 <a name="ClushConfig"></a><div id="ClushConfig-def"><a name="L367"></a><tt class="py-lineno"> 367</tt> <a class="py-toggle" href="#" id="ClushConfig-toggle" onclick="return toggle('ClushConfig');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="clush.ClushConfig-class.html">ClushConfig</a><tt class="py-op">(</tt><tt class="py-base-class">ConfigParser</tt><tt class="py-op">.</tt><tt class="py-base-class">ConfigParser</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
562 </div><div id="ClushConfig-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ClushConfig-expanded"><a name="L368"></a><tt class="py-lineno"> 368</tt> <tt class="py-line"> <tt class="py-docstring">"""Config class for clush (specialized ConfigParser)"""</tt> </tt>
563 <a name="L369"></a><tt class="py-lineno"> 369</tt> <tt class="py-line"> </tt>
564 <a name="L370"></a><tt class="py-lineno"> 370</tt> <tt class="py-line"> <tt id="link-146" class="py-name" targets="Variable clush.ClushConfig.main_defaults=clush.ClushConfig-class.html#main_defaults"><a title="clush.ClushConfig.main_defaults" class="py-name" href="#" onclick="return doclink('link-146', 'main_defaults', 'link-146');">main_defaults</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <tt class="py-string">"fanout"</tt> <tt class="py-op">:</tt> <tt class="py-string">"64"</tt><tt class="py-op">,</tt> </tt>
565 <a name="L371"></a><tt class="py-lineno"> 371</tt> <tt class="py-line"> <tt class="py-string">"connect_timeout"</tt> <tt class="py-op">:</tt> <tt class="py-string">"30"</tt><tt class="py-op">,</tt> </tt>
566 <a name="L372"></a><tt class="py-lineno"> 372</tt> <tt class="py-line"> <tt class="py-string">"command_timeout"</tt> <tt class="py-op">:</tt> <tt class="py-string">"0"</tt><tt class="py-op">,</tt> </tt>
567 <a name="L373"></a><tt class="py-lineno"> 373</tt> <tt class="py-line"> <tt class="py-string">"history_size"</tt> <tt class="py-op">:</tt> <tt class="py-string">"100"</tt><tt class="py-op">,</tt> </tt>
568 <a name="L374"></a><tt class="py-lineno"> 374</tt> <tt class="py-line"> <tt class="py-string">"color"</tt> <tt class="py-op">:</tt> <tt id="link-147" class="py-name"><a title="clubak.WHENCOLOR_CHOICES
569 clush.WHENCOLOR_CHOICES" class="py-name" href="#" onclick="return doclink('link-147', 'WHENCOLOR_CHOICES', 'link-40');">WHENCOLOR_CHOICES</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
570 <a name="L375"></a><tt class="py-lineno"> 375</tt> <tt class="py-line"> <tt class="py-string">"verbosity"</tt> <tt class="py-op">:</tt> <tt class="py-string">"%d"</tt> <tt class="py-op">%</tt> <tt id="link-148" class="py-name"><a title="clush.VERB_STD" class="py-name" href="#" onclick="return doclink('link-148', 'VERB_STD', 'link-37');">VERB_STD</a></tt> <tt class="py-op">}</tt> </tt>
571 <a name="L376"></a><tt class="py-lineno"> 376</tt> <tt class="py-line"> </tt>
572 <a name="ClushConfig.__init__"></a><div id="ClushConfig.__init__-def"><a name="L377"></a><tt class="py-lineno"> 377</tt> <a class="py-toggle" href="#" id="ClushConfig.__init__-toggle" onclick="return toggle('ClushConfig.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-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>
573 </div><div id="ClushConfig.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.__init__-expanded"><a name="L378"></a><tt class="py-lineno"> 378</tt> <tt class="py-line"> <tt class="py-name">ConfigParser</tt><tt class="py-op">.</tt><tt class="py-name">ConfigParser</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="ClusterShell.Engine.EPoll.EngineEPoll.__init__
574 ClusterShell.Engine.Engine.Engine.__init__
575 ClusterShell.Engine.Engine.EngineAbortException.__init__
576 ClusterShell.Engine.Engine.EngineBaseTimer.__init__
577 ClusterShell.Engine.Engine.EngineTimer.__init__
578 ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase.__init__
579 ClusterShell.Engine.Engine._EngineTimerQ.__init__
580 ClusterShell.Engine.Poll.EnginePoll.__init__
581 ClusterShell.MsgTree.MsgTree.__init__
582 ClusterShell.MsgTree.MsgTreeElem.__init__
583 ClusterShell.NodeSet.NodeSet.__init__
584 ClusterShell.NodeSet.NodeSetBase.__init__
585 ClusterShell.NodeSet.NodeSetParseError.__init__
586 ClusterShell.NodeSet.NodeSetParseRangeError.__init__
587 ClusterShell.NodeSet.ParsingEngine.__init__
588 ClusterShell.NodeSet.RangeSet.__init__
589 ClusterShell.NodeSet.RangeSetPaddingError.__init__
590 ClusterShell.NodeSet.RangeSetParseError.__init__
591 ClusterShell.NodeUtils.GroupResolver.__init__
592 ClusterShell.NodeUtils.GroupResolverConfig.__init__
593 ClusterShell.NodeUtils.GroupSource.__init__
594 ClusterShell.NodeUtils.GroupSourceException.__init__
595 ClusterShell.Task.Task._SuspendCondition.__init__
596 ClusterShell.Task.Task.__init__
597 ClusterShell.Task._TaskMsgTree.__init__
598 ClusterShell.Worker.EngineClient.EngineClient.__init__
599 ClusterShell.Worker.EngineClient.EnginePort._Msg.__init__
600 ClusterShell.Worker.EngineClient.EnginePort.__init__
601 ClusterShell.Worker.Pdsh.WorkerPdsh.__init__
602 ClusterShell.Worker.Popen.WorkerPopen.__init__
603 ClusterShell.Worker.Ssh.Scp.__init__
604 ClusterShell.Worker.Ssh.Ssh.__init__
605 ClusterShell.Worker.Ssh.WorkerSsh.__init__
606 ClusterShell.Worker.Worker.DistantWorker.__init__
607 ClusterShell.Worker.Worker.Worker.__init__
608 ClusterShell.Worker.Worker.WorkerSimple.__init__
609 clubak.Display.__init__
610 clush.ClushConfig.__init__
611 clush.ClushConfigError.__init__
612 clush.DirectOutputHandler.__init__
613 clush.Display.__init__
614 clush.GatherOutputHandler.__init__
615 clush.RunTimer.__init__
616 clush.StdInputHandler.__init__" class="py-name" href="#" onclick="return doclink('link-149', '__init__', 'link-142');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
617 <a name="L379"></a><tt class="py-lineno"> 379</tt> <tt class="py-line"> <tt class="py-comment"># create Main section with default values</tt> </tt>
618 <a name="L380"></a><tt class="py-lineno"> 380</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add_section</tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">)</tt> </tt>
619 <a name="L381"></a><tt class="py-lineno"> 381</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt id="link-150" class="py-name" targets="Class clush.ClushConfig=clush.ClushConfig-class.html"><a title="clush.ClushConfig" class="py-name" href="#" onclick="return doclink('link-150', 'ClushConfig', 'link-150');">ClushConfig</a></tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="clush.ClushConfig.main_defaults" class="py-name" href="#" onclick="return doclink('link-151', 'main_defaults', 'link-146');">main_defaults</a></tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
620 <a name="L382"></a><tt class="py-lineno"> 382</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
621 <a name="L383"></a><tt class="py-lineno"> 383</tt> <tt class="py-line"> <tt class="py-comment"># config files override defaults values</tt> </tt>
622 <a name="L384"></a><tt class="py-lineno"> 384</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple.read()=ClusterShell.Worker.Worker.WorkerSimple-class.html#read"><a title="ClusterShell.Worker.Worker.WorkerSimple.read" class="py-name" href="#" onclick="return doclink('link-152', 'read', 'link-152');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'/etc/clustershell/clush.conf'</tt><tt class="py-op">,</tt> </tt>
623 <a name="L385"></a><tt class="py-lineno"> 385</tt> <tt class="py-line"> <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">expanduser</tt><tt class="py-op">(</tt><tt class="py-string">'~/.clush.conf'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
624 </div><a name="L386"></a><tt class="py-lineno"> 386</tt> <tt class="py-line"> </tt>
625 <a name="ClushConfig.verbose_print"></a><div id="ClushConfig.verbose_print-def"><a name="L387"></a><tt class="py-lineno"> 387</tt> <a class="py-toggle" href="#" id="ClushConfig.verbose_print-toggle" onclick="return toggle('ClushConfig.verbose_print');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#verbose_print">verbose_print</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">level</tt><tt class="py-op">,</tt> <tt class="py-param">message</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
626 </div><div id="ClushConfig.verbose_print-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.verbose_print-expanded"><a name="L388"></a><tt class="py-lineno"> 388</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name" targets="Method clush.ClushConfig.get_verbosity()=clush.ClushConfig-class.html#get_verbosity"><a title="clush.ClushConfig.get_verbosity" class="py-name" href="#" onclick="return doclink('link-153', 'get_verbosity', 'link-153');">get_verbosity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">level</tt><tt class="py-op">:</tt> </tt>
627 <a name="L389"></a><tt class="py-lineno"> 389</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt id="link-154" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.message()=ClusterShell.MsgTree.MsgTreeElem-class.html#message"><a title="ClusterShell.MsgTree.MsgTreeElem.message" class="py-name" href="#" onclick="return doclink('link-154', 'message', 'link-154');">message</a></tt> </tt>
628 </div><a name="L390"></a><tt class="py-lineno"> 390</tt> <tt class="py-line"> </tt>
629 <a name="ClushConfig.max_fdlimit"></a><div id="ClushConfig.max_fdlimit-def"><a name="L391"></a><tt class="py-lineno"> 391</tt> <a class="py-toggle" href="#" id="ClushConfig.max_fdlimit-toggle" onclick="return toggle('ClushConfig.max_fdlimit');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#max_fdlimit">max_fdlimit</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
630 </div><div id="ClushConfig.max_fdlimit-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.max_fdlimit-expanded"><a name="L392"></a><tt class="py-lineno"> 392</tt> <tt class="py-line"> <tt class="py-docstring">"""Make open file descriptors soft limit the max."""</tt> </tt>
631 <a name="L393"></a><tt class="py-lineno"> 393</tt> <tt class="py-line"> <tt class="py-name">soft</tt><tt class="py-op">,</tt> <tt class="py-name">hard</tt> <tt class="py-op">=</tt> <tt class="py-name">resource</tt><tt class="py-op">.</tt><tt class="py-name">getrlimit</tt><tt class="py-op">(</tt><tt class="py-name">resource</tt><tt class="py-op">.</tt><tt class="py-name">RLIMIT_NOFILE</tt><tt class="py-op">)</tt> </tt>
632 <a name="L394"></a><tt class="py-lineno"> 394</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">soft</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">hard</tt><tt class="py-op">:</tt> </tt>
633 <a name="L395"></a><tt class="py-lineno"> 395</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name" targets="Method clush.ClushConfig.verbose_print()=clush.ClushConfig-class.html#verbose_print"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-155', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-156" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-156', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Setting max soft limit "</tt> </tt>
634 <a name="L396"></a><tt class="py-lineno"> 396</tt> <tt class="py-line"> <tt class="py-string">"RLIMIT_NOFILE: %d -&gt; %d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">soft</tt><tt class="py-op">,</tt> <tt class="py-name">hard</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
635 <a name="L397"></a><tt class="py-lineno"> 397</tt> <tt class="py-line"> <tt class="py-name">resource</tt><tt class="py-op">.</tt><tt class="py-name">setrlimit</tt><tt class="py-op">(</tt><tt class="py-name">resource</tt><tt class="py-op">.</tt><tt class="py-name">RLIMIT_NOFILE</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">hard</tt><tt class="py-op">,</tt> <tt class="py-name">hard</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
636 <a name="L398"></a><tt class="py-lineno"> 398</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
637 <a name="L399"></a><tt class="py-lineno"> 399</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-157', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-158" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-158', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Soft limit RLIMIT_NOFILE already "</tt> </tt>
638 <a name="L400"></a><tt class="py-lineno"> 400</tt> <tt class="py-line"> <tt class="py-string">"set to the max (%d)"</tt> <tt class="py-op">%</tt> <tt class="py-name">soft</tt><tt class="py-op">)</tt> </tt>
639 </div><a name="L401"></a><tt class="py-lineno"> 401</tt> <tt class="py-line"> </tt>
640 <a name="ClushConfig.set_main"></a><div id="ClushConfig.set_main-def"><a name="L402"></a><tt class="py-lineno"> 402</tt> <a class="py-toggle" href="#" id="ClushConfig.set_main-toggle" onclick="return toggle('ClushConfig.set_main');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#set_main">set_main</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">option</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
641 </div><div id="ClushConfig.set_main-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.set_main-expanded"><a name="L403"></a><tt class="py-lineno"> 403</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">set</tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-name">option</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
642 </div><a name="L404"></a><tt class="py-lineno"> 404</tt> <tt class="py-line"> </tt>
643 <a name="ClushConfig.getint"></a><div id="ClushConfig.getint-def"><a name="L405"></a><tt class="py-lineno"> 405</tt> <a class="py-toggle" href="#" id="ClushConfig.getint-toggle" onclick="return toggle('ClushConfig.getint');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#getint">getint</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">section</tt><tt class="py-op">,</tt> <tt class="py-param">option</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
644 </div><div id="ClushConfig.getint-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.getint-expanded"><a name="L406"></a><tt class="py-lineno"> 406</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
645 <a name="L407"></a><tt class="py-lineno"> 407</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ConfigParser</tt><tt class="py-op">.</tt><tt class="py-name">ConfigParser</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name" targets="Method clush.ClushConfig.getint()=clush.ClushConfig-class.html#getint"><a title="clush.ClushConfig.getint" class="py-name" href="#" onclick="return doclink('link-159', 'getint', 'link-159');">getint</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-name">option</tt><tt class="py-op">)</tt> </tt>
646 <a name="L408"></a><tt class="py-lineno"> 408</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">ConfigParser</tt><tt class="py-op">.</tt><tt class="py-name">Error</tt><tt class="py-op">,</tt> <tt class="py-name">TypeError</tt><tt class="py-op">,</tt> <tt class="py-name">ValueError</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
647 <a name="L409"></a><tt class="py-lineno"> 409</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-160" class="py-name" targets="Class clush.ClushConfigError=clush.ClushConfigError-class.html"><a title="clush.ClushConfigError" class="py-name" href="#" onclick="return doclink('link-160', 'ClushConfigError', 'link-160');">ClushConfigError</a></tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-name">option</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
648 </div><a name="L410"></a><tt class="py-lineno"> 410</tt> <tt class="py-line"> </tt>
649 <a name="ClushConfig.getfloat"></a><div id="ClushConfig.getfloat-def"><a name="L411"></a><tt class="py-lineno"> 411</tt> <a class="py-toggle" href="#" id="ClushConfig.getfloat-toggle" onclick="return toggle('ClushConfig.getfloat');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#getfloat">getfloat</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">section</tt><tt class="py-op">,</tt> <tt class="py-param">option</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
650 </div><div id="ClushConfig.getfloat-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.getfloat-expanded"><a name="L412"></a><tt class="py-lineno"> 412</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
651 <a name="L413"></a><tt class="py-lineno"> 413</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ConfigParser</tt><tt class="py-op">.</tt><tt class="py-name">ConfigParser</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name" targets="Method clush.ClushConfig.getfloat()=clush.ClushConfig-class.html#getfloat"><a title="clush.ClushConfig.getfloat" class="py-name" href="#" onclick="return doclink('link-161', 'getfloat', 'link-161');">getfloat</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-name">option</tt><tt class="py-op">)</tt> </tt>
652 <a name="L414"></a><tt class="py-lineno"> 414</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">ConfigParser</tt><tt class="py-op">.</tt><tt class="py-name">Error</tt><tt class="py-op">,</tt> <tt class="py-name">TypeError</tt><tt class="py-op">,</tt> <tt class="py-name">ValueError</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
653 <a name="L415"></a><tt class="py-lineno"> 415</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-162" class="py-name"><a title="clush.ClushConfigError" class="py-name" href="#" onclick="return doclink('link-162', 'ClushConfigError', 'link-160');">ClushConfigError</a></tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-name">option</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
654 </div><a name="L416"></a><tt class="py-lineno"> 416</tt> <tt class="py-line"> </tt>
655 <a name="ClushConfig._get_optional"></a><div id="ClushConfig._get_optional-def"><a name="L417"></a><tt class="py-lineno"> 417</tt> <a class="py-toggle" href="#" id="ClushConfig._get_optional-toggle" onclick="return toggle('ClushConfig._get_optional');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#_get_optional">_get_optional</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">section</tt><tt class="py-op">,</tt> <tt class="py-param">option</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
656 </div><div id="ClushConfig._get_optional-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig._get_optional-expanded"><a name="L418"></a><tt class="py-lineno"> 418</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
657 <a name="L419"></a><tt class="py-lineno"> 419</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name" targets="Method ClusterShell.MsgTree.MsgTree.get()=ClusterShell.MsgTree.MsgTree-class.html#get,Method ClusterShell.Worker.EngineClient.EnginePort._Msg.get()=ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get"><a title="ClusterShell.MsgTree.MsgTree.get
658 ClusterShell.Worker.EngineClient.EnginePort._Msg.get" class="py-name" href="#" onclick="return doclink('link-163', 'get', 'link-163');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">section</tt><tt class="py-op">,</tt> <tt class="py-name">option</tt><tt class="py-op">)</tt> </tt>
659 <a name="L420"></a><tt class="py-lineno"> 420</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ConfigParser</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>
660 <a name="L421"></a><tt class="py-lineno"> 421</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
661 </div><a name="L422"></a><tt class="py-lineno"> 422</tt> <tt class="py-line"> </tt>
662 <a name="ClushConfig.get_color"></a><div id="ClushConfig.get_color-def"><a name="L423"></a><tt class="py-lineno"> 423</tt> <a class="py-toggle" href="#" id="ClushConfig.get_color-toggle" onclick="return toggle('ClushConfig.get_color');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#get_color">get_color</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
663 </div><div id="ClushConfig.get_color-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.get_color-expanded"><a name="L424"></a><tt class="py-lineno"> 424</tt> <tt class="py-line"> <tt class="py-name">whencolor</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-164" class="py-name" targets="Method clush.ClushConfig._get_optional()=clush.ClushConfig-class.html#_get_optional"><a title="clush.ClushConfig._get_optional" class="py-name" href="#" onclick="return doclink('link-164', '_get_optional', 'link-164');">_get_optional</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"color"</tt><tt class="py-op">)</tt> </tt>
664 <a name="L425"></a><tt class="py-lineno"> 425</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">whencolor</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt id="link-165" class="py-name"><a title="clubak.WHENCOLOR_CHOICES
665 clush.WHENCOLOR_CHOICES" class="py-name" href="#" onclick="return doclink('link-165', 'WHENCOLOR_CHOICES', 'link-40');">WHENCOLOR_CHOICES</a></tt><tt class="py-op">:</tt> </tt>
666 <a name="L426"></a><tt class="py-lineno"> 426</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-166" class="py-name"><a title="clush.ClushConfigError" class="py-name" href="#" onclick="return doclink('link-166', 'ClushConfigError', 'link-160');">ClushConfigError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"color"</tt><tt class="py-op">,</tt> <tt class="py-string">"choose from %s"</tt> <tt class="py-op">%</tt> \ </tt>
667 <a name="L427"></a><tt class="py-lineno"> 427</tt> <tt class="py-line"> <tt id="link-167" class="py-name"><a title="clubak.WHENCOLOR_CHOICES
668 clush.WHENCOLOR_CHOICES" class="py-name" href="#" onclick="return doclink('link-167', 'WHENCOLOR_CHOICES', 'link-40');">WHENCOLOR_CHOICES</a></tt><tt class="py-op">)</tt> </tt>
669 <a name="L428"></a><tt class="py-lineno"> 428</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">whencolor</tt> </tt>
670 </div><a name="L429"></a><tt class="py-lineno"> 429</tt> <tt class="py-line"> </tt>
671 <a name="ClushConfig.get_verbosity"></a><div id="ClushConfig.get_verbosity-def"><a name="L430"></a><tt class="py-lineno"> 430</tt> <a class="py-toggle" href="#" id="ClushConfig.get_verbosity-toggle" onclick="return toggle('ClushConfig.get_verbosity');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#get_verbosity">get_verbosity</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
672 </div><div id="ClushConfig.get_verbosity-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.get_verbosity-expanded"><a name="L431"></a><tt class="py-lineno"> 431</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
673 <a name="L432"></a><tt class="py-lineno"> 432</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="clush.ClushConfig.getint" class="py-name" href="#" onclick="return doclink('link-168', 'getint', 'link-159');">getint</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"verbosity"</tt><tt class="py-op">)</tt> </tt>
674 <a name="L433"></a><tt class="py-lineno"> 433</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-169" class="py-name"><a title="clush.ClushConfigError" class="py-name" href="#" onclick="return doclink('link-169', 'ClushConfigError', 'link-160');">ClushConfigError</a></tt><tt class="py-op">:</tt> </tt>
675 <a name="L434"></a><tt class="py-lineno"> 434</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
676 </div><a name="L435"></a><tt class="py-lineno"> 435</tt> <tt class="py-line"> </tt>
677 <a name="ClushConfig.get_fanout"></a><div id="ClushConfig.get_fanout-def"><a name="L436"></a><tt class="py-lineno"> 436</tt> <a class="py-toggle" href="#" id="ClushConfig.get_fanout-toggle" onclick="return toggle('ClushConfig.get_fanout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#get_fanout">get_fanout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
678 </div><div id="ClushConfig.get_fanout-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.get_fanout-expanded"><a name="L437"></a><tt class="py-lineno"> 437</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="clush.ClushConfig.getint" class="py-name" href="#" onclick="return doclink('link-170', 'getint', 'link-159');">getint</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"fanout"</tt><tt class="py-op">)</tt> </tt>
679 </div><a name="L438"></a><tt class="py-lineno"> 438</tt> <tt class="py-line"> </tt>
680 <a name="ClushConfig.get_connect_timeout"></a><div id="ClushConfig.get_connect_timeout-def"><a name="L439"></a><tt class="py-lineno"> 439</tt> <a class="py-toggle" href="#" id="ClushConfig.get_connect_timeout-toggle" onclick="return toggle('ClushConfig.get_connect_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#get_connect_timeout">get_connect_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
681 </div><div id="ClushConfig.get_connect_timeout-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.get_connect_timeout-expanded"><a name="L440"></a><tt class="py-lineno"> 440</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="clush.ClushConfig.getfloat" class="py-name" href="#" onclick="return doclink('link-171', 'getfloat', 'link-161');">getfloat</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"connect_timeout"</tt><tt class="py-op">)</tt> </tt>
682 </div><a name="L441"></a><tt class="py-lineno"> 441</tt> <tt class="py-line"> </tt>
683 <a name="ClushConfig.get_command_timeout"></a><div id="ClushConfig.get_command_timeout-def"><a name="L442"></a><tt class="py-lineno"> 442</tt> <a class="py-toggle" href="#" id="ClushConfig.get_command_timeout-toggle" onclick="return toggle('ClushConfig.get_command_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#get_command_timeout">get_command_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
684 </div><div id="ClushConfig.get_command_timeout-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.get_command_timeout-expanded"><a name="L443"></a><tt class="py-lineno"> 443</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="clush.ClushConfig.getfloat" class="py-name" href="#" onclick="return doclink('link-172', 'getfloat', 'link-161');">getfloat</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"command_timeout"</tt><tt class="py-op">)</tt> </tt>
685 </div><a name="L444"></a><tt class="py-lineno"> 444</tt> <tt class="py-line"> </tt>
686 <a name="ClushConfig.get_ssh_user"></a><div id="ClushConfig.get_ssh_user-def"><a name="L445"></a><tt class="py-lineno"> 445</tt> <a class="py-toggle" href="#" id="ClushConfig.get_ssh_user-toggle" onclick="return toggle('ClushConfig.get_ssh_user');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#get_ssh_user">get_ssh_user</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
687 </div><div id="ClushConfig.get_ssh_user-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.get_ssh_user-expanded"><a name="L446"></a><tt class="py-lineno"> 446</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-173" class="py-name"><a title="clush.ClushConfig._get_optional" class="py-name" href="#" onclick="return doclink('link-173', '_get_optional', 'link-164');">_get_optional</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"ssh_user"</tt><tt class="py-op">)</tt> </tt>
688 </div><a name="L447"></a><tt class="py-lineno"> 447</tt> <tt class="py-line"> </tt>
689 <a name="ClushConfig.get_ssh_path"></a><div id="ClushConfig.get_ssh_path-def"><a name="L448"></a><tt class="py-lineno"> 448</tt> <a class="py-toggle" href="#" id="ClushConfig.get_ssh_path-toggle" onclick="return toggle('ClushConfig.get_ssh_path');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#get_ssh_path">get_ssh_path</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
690 </div><div id="ClushConfig.get_ssh_path-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.get_ssh_path-expanded"><a name="L449"></a><tt class="py-lineno"> 449</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="clush.ClushConfig._get_optional" class="py-name" href="#" onclick="return doclink('link-174', '_get_optional', 'link-164');">_get_optional</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"ssh_path"</tt><tt class="py-op">)</tt> </tt>
691 </div><a name="L450"></a><tt class="py-lineno"> 450</tt> <tt class="py-line"> </tt>
692 <a name="ClushConfig.get_ssh_options"></a><div id="ClushConfig.get_ssh_options-def"><a name="L451"></a><tt class="py-lineno"> 451</tt> <a class="py-toggle" href="#" id="ClushConfig.get_ssh_options-toggle" onclick="return toggle('ClushConfig.get_ssh_options');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="clush.ClushConfig-class.html#get_ssh_options">get_ssh_options</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
693 </div><div id="ClushConfig.get_ssh_options-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ClushConfig.get_ssh_options-expanded"><a name="L452"></a><tt class="py-lineno"> 452</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-175" class="py-name"><a title="clush.ClushConfig._get_optional" class="py-name" href="#" onclick="return doclink('link-175', '_get_optional', 'link-164');">_get_optional</a></tt><tt class="py-op">(</tt><tt class="py-string">"Main"</tt><tt class="py-op">,</tt> <tt class="py-string">"ssh_options"</tt><tt class="py-op">)</tt> </tt>
694 </div></div><a name="L453"></a><tt class="py-lineno"> 453</tt> <tt class="py-line"> </tt>
695 <a name="L454"></a><tt class="py-lineno"> 454</tt> <tt class="py-line"> </tt>
696 <a name="signal_handler"></a><div id="signal_handler-def"><a name="L455"></a><tt class="py-lineno"> 455</tt> <a class="py-toggle" href="#" id="signal_handler-toggle" onclick="return toggle('signal_handler');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#signal_handler">signal_handler</a><tt class="py-op">(</tt><tt class="py-param">signum</tt><tt class="py-op">,</tt> <tt class="py-param">frame</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
697 </div><div id="signal_handler-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="signal_handler-expanded"><a name="L456"></a><tt class="py-lineno"> 456</tt> <tt class="py-line"> <tt class="py-docstring">"""Signal handler used for main thread notification"""</tt> </tt>
698 <a name="L457"></a><tt class="py-lineno"> 457</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">signum</tt> <tt class="py-op">==</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGUSR1</tt><tt class="py-op">:</tt> </tt>
699 <a name="L458"></a><tt class="py-lineno"> 458</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-176" class="py-name" targets="Class clush.UpdatePromptException=clush.UpdatePromptException-class.html"><a title="clush.UpdatePromptException" class="py-name" href="#" onclick="return doclink('link-176', 'UpdatePromptException', 'link-176');">UpdatePromptException</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
700 </div><a name="L459"></a><tt class="py-lineno"> 459</tt> <tt class="py-line"> </tt>
701 <a name="get_history_file"></a><div id="get_history_file-def"><a name="L460"></a><tt class="py-lineno"> 460</tt> <a class="py-toggle" href="#" id="get_history_file-toggle" onclick="return toggle('get_history_file');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#get_history_file">get_history_file</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
702 </div><div id="get_history_file-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="get_history_file-expanded"><a name="L461"></a><tt class="py-lineno"> 461</tt> <tt class="py-line"> <tt class="py-docstring">"""Turn the history file path"""</tt> </tt>
703 <a name="L462"></a><tt class="py-lineno"> 462</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt id="link-177" class="py-name" targets="Method ClusterShell.Task.Task.join()=ClusterShell.Task.Task-class.html#join"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-177', 'join', 'link-177');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">"HOME"</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">".clush_history"</tt><tt class="py-op">)</tt> </tt>
704 </div><a name="L463"></a><tt class="py-lineno"> 463</tt> <tt class="py-line"> </tt>
705 <a name="readline_setup"></a><div id="readline_setup-def"><a name="L464"></a><tt class="py-lineno"> 464</tt> <a class="py-toggle" href="#" id="readline_setup-toggle" onclick="return toggle('readline_setup');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#readline_setup">readline_setup</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
706 </div><div id="readline_setup-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="readline_setup-expanded"><a name="L465"></a><tt class="py-lineno"> 465</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
707 <a name="L466"></a><tt class="py-lineno"> 466</tt> <tt class="py-line"><tt class="py-docstring"> Configure readline to automatically load and save a history file</tt> </tt>
708 <a name="L467"></a><tt class="py-lineno"> 467</tt> <tt class="py-line"><tt class="py-docstring"> named .clush_history</tt> </tt>
709 <a name="L468"></a><tt class="py-lineno"> 468</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
710 <a name="L469"></a><tt class="py-lineno"> 469</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">readline</tt> </tt>
711 <a name="L470"></a><tt class="py-lineno"> 470</tt> <tt class="py-line"> <tt class="py-name">readline</tt><tt class="py-op">.</tt><tt class="py-name">parse_and_bind</tt><tt class="py-op">(</tt><tt class="py-string">"tab: complete"</tt><tt class="py-op">)</tt> </tt>
712 <a name="L471"></a><tt class="py-lineno"> 471</tt> <tt class="py-line"> <tt class="py-name">readline</tt><tt class="py-op">.</tt><tt class="py-name">set_completer_delims</tt><tt class="py-op">(</tt><tt class="py-string">""</tt><tt class="py-op">)</tt> </tt>
713 <a name="L472"></a><tt class="py-lineno"> 472</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
714 <a name="L473"></a><tt class="py-lineno"> 473</tt> <tt class="py-line"> <tt class="py-name">readline</tt><tt class="py-op">.</tt><tt class="py-name">read_history_file</tt><tt class="py-op">(</tt><tt id="link-178" class="py-name" targets="Function clush.get_history_file()=clush-module.html#get_history_file"><a title="clush.get_history_file" class="py-name" href="#" onclick="return doclink('link-178', 'get_history_file', 'link-178');">get_history_file</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
715 <a name="L474"></a><tt class="py-lineno"> 474</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">:</tt> </tt>
716 <a name="L475"></a><tt class="py-lineno"> 475</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
717 </div><a name="L476"></a><tt class="py-lineno"> 476</tt> <tt class="py-line"> </tt>
718 <a name="ttyloop"></a><div id="ttyloop-def"><a name="L477"></a><tt class="py-lineno"> 477</tt> <a class="py-toggle" href="#" id="ttyloop-toggle" onclick="return toggle('ttyloop');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#ttyloop">ttyloop</a><tt class="py-op">(</tt><tt class="py-param">task</tt><tt class="py-op">,</tt> <tt class="py-param">nodeset</tt><tt class="py-op">,</tt> <tt class="py-param">gather</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">,</tt> <tt class="py-param">verbosity</tt><tt class="py-op">,</tt> <tt class="py-param">display</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
719 </div><div id="ttyloop-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ttyloop-expanded"><a name="L478"></a><tt class="py-lineno"> 478</tt> <tt class="py-line"> <tt class="py-docstring">"""Manage the interactive prompt to run command"""</tt> </tt>
720 <a name="L479"></a><tt class="py-lineno"> 479</tt> <tt class="py-line"> <tt class="py-name">readline_avail</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
721 <a name="L480"></a><tt class="py-lineno"> 480</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-179', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_interactive"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
722 <a name="L481"></a><tt class="py-lineno"> 481</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">isatty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
723 <a name="L482"></a><tt class="py-lineno"> 482</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
724 <a name="L483"></a><tt class="py-lineno"> 483</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">readline</tt> </tt>
725 <a name="L484"></a><tt class="py-lineno"> 484</tt> <tt class="py-line"> <tt id="link-180" class="py-name" targets="Function clush.readline_setup()=clush-module.html#readline_setup"><a title="clush.readline_setup" class="py-name" href="#" onclick="return doclink('link-180', 'readline_setup', 'link-180');">readline_setup</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
726 <a name="L485"></a><tt class="py-lineno"> 485</tt> <tt class="py-line"> <tt class="py-name">readline_avail</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
727 <a name="L486"></a><tt class="py-lineno"> 486</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
728 <a name="L487"></a><tt class="py-lineno"> 487</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
729 <a name="L488"></a><tt class="py-lineno"> 488</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">verbosity</tt> <tt class="py-op">&gt;=</tt> <tt id="link-181" class="py-name"><a title="clush.VERB_STD" class="py-name" href="#" onclick="return doclink('link-181', 'VERB_STD', 'link-37');">VERB_STD</a></tt><tt class="py-op">:</tt> </tt>
730 <a name="L489"></a><tt class="py-lineno"> 489</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">"Enter 'quit' to leave this interactive mode"</tt> </tt>
731 <a name="L490"></a><tt class="py-lineno"> 490</tt> <tt class="py-line"> </tt>
732 <a name="L491"></a><tt class="py-lineno"> 491</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
733 <a name="L492"></a><tt class="py-lineno"> 492</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt id="link-182" class="py-name"><a title="ClusterShell.NodeSet
734 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-182', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt id="link-183" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-183', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">)</tt> </tt>
735 <a name="L493"></a><tt class="py-lineno"> 493</tt> <tt class="py-line"> <tt class="py-name">ns_info</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
736 <a name="L494"></a><tt class="py-lineno"> 494</tt> <tt class="py-line"> <tt class="py-name">cmd</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
737 <a name="L495"></a><tt class="py-lineno"> 495</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-184" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-184', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_running"</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">cmd</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'quit'</tt><tt class="py-op">:</tt> </tt>
738 <a name="L496"></a><tt class="py-lineno"> 496</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
739 <a name="L497"></a><tt class="py-lineno"> 497</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-185" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-185', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_interactive"</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> \ </tt>
740 <a name="L498"></a><tt class="py-lineno"> 498</tt> <tt class="py-line"> <tt class="py-keyword">not</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-186', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_running"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
741 <a name="L499"></a><tt class="py-lineno"> 499</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ns_info</tt><tt class="py-op">:</tt> </tt>
742 <a name="L500"></a><tt class="py-lineno"> 500</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">"Working with nodes: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">ns</tt> </tt>
743 <a name="L501"></a><tt class="py-lineno"> 501</tt> <tt class="py-line"> <tt class="py-name">ns_info</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
744 <a name="L502"></a><tt class="py-lineno"> 502</tt> <tt class="py-line"> <tt class="py-name">prompt</tt> <tt class="py-op">=</tt> <tt class="py-string">"clush&gt; "</tt> </tt>
745 <a name="L503"></a><tt class="py-lineno"> 503</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
746 <a name="L504"></a><tt class="py-lineno"> 504</tt> <tt class="py-line"> <tt class="py-name">prompt</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
747 <a name="L505"></a><tt class="py-lineno"> 505</tt> <tt class="py-line"> <tt class="py-name">cmd</tt> <tt class="py-op">=</tt> <tt class="py-name">raw_input</tt><tt class="py-op">(</tt><tt class="py-name">prompt</tt><tt class="py-op">)</tt> </tt>
748 <a name="L506"></a><tt class="py-lineno"> 506</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">EOFError</tt><tt class="py-op">:</tt> </tt>
749 <a name="L507"></a><tt class="py-lineno"> 507</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> </tt>
750 <a name="L508"></a><tt class="py-lineno"> 508</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
751 <a name="L509"></a><tt class="py-lineno"> 509</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-187" class="py-name"><a title="clush.UpdatePromptException" class="py-name" href="#" onclick="return doclink('link-187', 'UpdatePromptException', 'link-176');">UpdatePromptException</a></tt><tt class="py-op">:</tt> </tt>
752 <a name="L510"></a><tt class="py-lineno"> 510</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-188', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_interactive"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
753 <a name="L511"></a><tt class="py-lineno"> 511</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
754 <a name="L512"></a><tt class="py-lineno"> 512</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
755 <a name="L513"></a><tt class="py-lineno"> 513</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyboardInterrupt</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
756 <a name="L514"></a><tt class="py-lineno"> 514</tt> <tt class="py-line"> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">signal</tt><tt class="py-op">(</tt><tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGUSR1</tt><tt class="py-op">,</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIG_IGN</tt><tt class="py-op">)</tt> </tt>
757 <a name="L515"></a><tt class="py-lineno"> 515</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">gather</tt><tt class="py-op">:</tt> </tt>
758 <a name="L516"></a><tt class="py-lineno"> 516</tt> <tt class="py-line"> <tt class="py-comment"># Suspend task, so we can safely access its data from</tt> </tt>
759 <a name="L517"></a><tt class="py-lineno"> 517</tt> <tt class="py-line"> <tt class="py-comment"># the main thread</tt> </tt>
760 <a name="L518"></a><tt class="py-lineno"> 518</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name" targets="Method ClusterShell.Task.Task.suspend()=ClusterShell.Task.Task-class.html#suspend"><a title="ClusterShell.Task.Task.suspend" class="py-name" href="#" onclick="return doclink('link-189', 'suspend', 'link-189');">suspend</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
761 <a name="L519"></a><tt class="py-lineno"> 519</tt> <tt class="py-line"> </tt>
762 <a name="L520"></a><tt class="py-lineno"> 520</tt> <tt class="py-line"> <tt class="py-name">print_warn</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
763 <a name="L521"></a><tt class="py-lineno"> 521</tt> <tt class="py-line"> </tt>
764 <a name="L522"></a><tt class="py-lineno"> 522</tt> <tt class="py-line"> <tt class="py-comment"># Display command output, but cannot order buffers by rc</tt> </tt>
765 <a name="L523"></a><tt class="py-lineno"> 523</tt> <tt class="py-line"> <tt class="py-name">nodesetify</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">v</tt><tt class="py-op">:</tt> <tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-190" class="py-name"><a title="ClusterShell.NodeSet
766 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-190', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-191" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
767 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-191', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">v</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>
768 <a name="L524"></a><tt class="py-lineno"> 524</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">buf</tt><tt class="py-op">,</tt> <tt id="link-192" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-192', 'nodeset', 'link-55');">nodeset</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt class="py-name">nodesetify</tt><tt class="py-op">,</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="ClusterShell.Task.Task.iter_buffers
769 ClusterShell.Worker.Worker.DistantWorker.iter_buffers" class="py-name" href="#" onclick="return doclink('link-193', 'iter_buffers', 'link-112');">iter_buffers</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
770 <a name="L525"></a><tt class="py-lineno"> 525</tt> <tt class="py-line"> <tt class="py-name">cmp</tt><tt class="py-op">=</tt><tt id="link-194" class="py-name"><a title="clush.bufnodeset_cmp" class="py-name" href="#" onclick="return doclink('link-194', 'bufnodeset_cmp', 'link-113');">bufnodeset_cmp</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
771 <a name="L526"></a><tt class="py-lineno"> 526</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">print_warn</tt><tt class="py-op">:</tt> </tt>
772 <a name="L527"></a><tt class="py-lineno"> 527</tt> <tt class="py-line"> <tt class="py-name">print_warn</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
773 <a name="L528"></a><tt class="py-lineno"> 528</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Warning: Caught keyboard interrupt!"</tt> </tt>
774 <a name="L529"></a><tt class="py-lineno"> 529</tt> <tt class="py-line"> <tt id="link-195" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-195', 'display', 'link-80');">display</a></tt><tt class="py-op">.</tt><tt id="link-196" class="py-name"><a title="clubak.Display.print_gather
775 clush.Display.print_gather" class="py-name" href="#" onclick="return doclink('link-196', 'print_gather', 'link-114');">print_gather</a></tt><tt class="py-op">(</tt><tt id="link-197" class="py-name"><a title="nodeset" class="py-name" href="#" onclick="return doclink('link-197', 'nodeset', 'link-55');">nodeset</a></tt><tt class="py-op">,</tt> <tt class="py-name">buf</tt><tt class="py-op">)</tt> </tt>
776 <a name="L530"></a><tt class="py-lineno"> 530</tt> <tt class="py-line"> </tt>
777 <a name="L531"></a><tt class="py-lineno"> 531</tt> <tt class="py-line"> <tt class="py-comment"># Return code handling</tt> </tt>
778 <a name="L532"></a><tt class="py-lineno"> 532</tt> <tt class="py-line"> <tt class="py-name">ns_ok</tt> <tt class="py-op">=</tt> <tt id="link-198" class="py-name"><a title="ClusterShell.NodeSet
779 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-198', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
780 <a name="L533"></a><tt class="py-lineno"> 533</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">rc</tt><tt class="py-op">,</tt> <tt class="py-name">nodelist</tt> <tt class="py-keyword">in</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="ClusterShell.Task.Task.iter_retcodes
781 ClusterShell.Worker.Worker.DistantWorker.iter_retcodes" class="py-name" href="#" onclick="return doclink('link-199', 'iter_retcodes', 'link-122');">iter_retcodes</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
782 <a name="L534"></a><tt class="py-lineno"> 534</tt> <tt class="py-line"> <tt class="py-name">ns_ok</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name" targets="Method ClusterShell.Engine.Engine.Engine.add()=ClusterShell.Engine.Engine.Engine-class.html#add,Method ClusterShell.MsgTree.MsgTree.add()=ClusterShell.MsgTree.MsgTree-class.html#add,Method ClusterShell.NodeSet.NodeSetBase.add()=ClusterShell.NodeSet.NodeSetBase-class.html#add,Method ClusterShell.NodeSet.RangeSet.add()=ClusterShell.NodeSet.RangeSet-class.html#add"><a title="ClusterShell.Engine.Engine.Engine.add
783 ClusterShell.MsgTree.MsgTree.add
784 ClusterShell.NodeSet.NodeSetBase.add
785 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-200', 'add', 'link-200');">add</a></tt><tt class="py-op">(</tt><tt id="link-201" class="py-name"><a title="ClusterShell.NodeSet
786 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-201', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-202" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
787 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-202', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">nodelist</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
788 <a name="L535"></a><tt class="py-lineno"> 535</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rc</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
789 <a name="L536"></a><tt class="py-lineno"> 536</tt> <tt class="py-line"> <tt class="py-comment"># Display return code if not ok ( != 0)</tt> </tt>
790 <a name="L537"></a><tt class="py-lineno"> 537</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt id="link-203" class="py-name"><a title="ClusterShell.NodeSet
791 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-203', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-204" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
792 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-204', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">nodelist</tt><tt class="py-op">)</tt> </tt>
793 <a name="L538"></a><tt class="py-lineno"> 538</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> \ </tt>
794 <a name="L539"></a><tt class="py-lineno"> 539</tt> <tt class="py-line"> <tt class="py-string">"clush: %s: exited with exit code %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
795 <a name="L540"></a><tt class="py-lineno"> 540</tt> <tt class="py-line"> <tt class="py-comment"># Add uncompleted nodeset to exception object</tt> </tt>
796 <a name="L541"></a><tt class="py-lineno"> 541</tt> <tt class="py-line"> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">uncompleted_nodes</tt> <tt class="py-op">=</tt> <tt class="py-name">ns</tt> <tt class="py-op">-</tt> <tt class="py-name">ns_ok</tt> </tt>
797 <a name="L542"></a><tt class="py-lineno"> 542</tt> <tt class="py-line"> </tt>
798 <a name="L543"></a><tt class="py-lineno"> 543</tt> <tt class="py-line"> <tt class="py-comment"># Display nodes that didn't answer within command timeout delay</tt> </tt>
799 <a name="L544"></a><tt class="py-lineno"> 544</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-205" class="py-name"><a title="ClusterShell.Task.Task.num_timeout
800 ClusterShell.Worker.Worker.DistantWorker.num_timeout" class="py-name" href="#" onclick="return doclink('link-205', 'num_timeout', 'link-131');">num_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
801 <a name="L545"></a><tt class="py-lineno"> 545</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: %s: command timeout"</tt> <tt class="py-op">%</tt> \ </tt>
802 <a name="L546"></a><tt class="py-lineno"> 546</tt> <tt class="py-line"> <tt id="link-206" class="py-name"><a title="ClusterShell.NodeSet
803 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-206', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-207" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
804 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-207', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-208" class="py-name"><a title="ClusterShell.Task.Task.iter_keys_timeout
805 ClusterShell.Worker.Worker.DistantWorker.iter_keys_timeout" class="py-name" href="#" onclick="return doclink('link-208', 'iter_keys_timeout', 'link-89');">iter_keys_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
806 <a name="L547"></a><tt class="py-lineno"> 547</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">e</tt> </tt>
807 <a name="L548"></a><tt class="py-lineno"> 548</tt> <tt class="py-line"> </tt>
808 <a name="L549"></a><tt class="py-lineno"> 549</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-209" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-209', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_running"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
809 <a name="L550"></a><tt class="py-lineno"> 550</tt> <tt class="py-line"> <tt class="py-name">ns_reg</tt><tt class="py-op">,</tt> <tt class="py-name">ns_unreg</tt> <tt class="py-op">=</tt> <tt id="link-210" class="py-name"><a title="ClusterShell.NodeSet
810 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-210', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-211" class="py-name"><a title="ClusterShell.NodeSet
811 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-211', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
812 <a name="L551"></a><tt class="py-lineno"> 551</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt class="py-name">_engine</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.clients" class="py-name" href="#" onclick="return doclink('link-212', 'clients', 'link-139');">clients</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
813 <a name="L552"></a><tt class="py-lineno"> 552</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">registered</tt><tt class="py-op">:</tt> </tt>
814 <a name="L553"></a><tt class="py-lineno"> 553</tt> <tt class="py-line"> <tt class="py-name">ns_reg</tt><tt class="py-op">.</tt><tt id="link-213" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
815 ClusterShell.MsgTree.MsgTree.add
816 ClusterShell.NodeSet.NodeSetBase.add
817 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-213', 'add', 'link-200');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
818 <a name="L554"></a><tt class="py-lineno"> 554</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
819 <a name="L555"></a><tt class="py-lineno"> 555</tt> <tt class="py-line"> <tt class="py-name">ns_unreg</tt><tt class="py-op">.</tt><tt id="link-214" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
820 ClusterShell.MsgTree.MsgTree.add
821 ClusterShell.NodeSet.NodeSetBase.add
822 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-214', 'add', 'link-200');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
823 <a name="L556"></a><tt class="py-lineno"> 556</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ns_unreg</tt><tt class="py-op">:</tt> </tt>
824 <a name="L557"></a><tt class="py-lineno"> 557</tt> <tt class="py-line"> <tt class="py-name">pending</tt> <tt class="py-op">=</tt> <tt class="py-string">"\nclush: pending(%d): %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">ns_unreg</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">ns_unreg</tt><tt class="py-op">)</tt> </tt>
825 <a name="L558"></a><tt class="py-lineno"> 558</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
826 <a name="L559"></a><tt class="py-lineno"> 559</tt> <tt class="py-line"> <tt class="py-name">pending</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
827 <a name="L560"></a><tt class="py-lineno"> 560</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: interrupt (^C to abort task)\n"</tt> \ </tt>
828 <a name="L561"></a><tt class="py-lineno"> 561</tt> <tt class="py-line"> <tt class="py-string">"clush: in progress(%d): %s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">ns_reg</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">ns_reg</tt><tt class="py-op">,</tt> <tt class="py-name">pending</tt><tt class="py-op">)</tt> </tt>
829 <a name="L562"></a><tt class="py-lineno"> 562</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
830 <a name="L563"></a><tt class="py-lineno"> 563</tt> <tt class="py-line"> <tt class="py-name">cmdl</tt> <tt class="py-op">=</tt> <tt class="py-name">cmd</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
831 <a name="L564"></a><tt class="py-lineno"> 564</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
832 <a name="L565"></a><tt class="py-lineno"> 565</tt> <tt class="py-line"> <tt class="py-name">ns_info</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
833 <a name="L566"></a><tt class="py-lineno"> 566</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cmdl</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'+'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
834 <a name="L567"></a><tt class="py-lineno"> 567</tt> <tt class="py-line"> <tt class="py-name">ns</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
835 ClusterShell.NodeSet.NodeSetBase.update
836 ClusterShell.NodeSet.RangeSet.update
837 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-215', 'update', 'link-137');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">cmdl</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>
838 <a name="L568"></a><tt class="py-lineno"> 568</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">cmdl</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
839 <a name="L569"></a><tt class="py-lineno"> 569</tt> <tt class="py-line"> <tt class="py-name">ns</tt><tt class="py-op">.</tt><tt id="link-216" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.difference_update()=ClusterShell.NodeSet.NodeSet-class.html#difference_update,Method ClusterShell.NodeSet.NodeSetBase.difference_update()=ClusterShell.NodeSet.NodeSetBase-class.html#difference_update,Method ClusterShell.NodeSet.RangeSet.difference_update()=ClusterShell.NodeSet.RangeSet-class.html#difference_update"><a title="ClusterShell.NodeSet.NodeSet.difference_update
840 ClusterShell.NodeSet.NodeSetBase.difference_update
841 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-216', 'difference_update', 'link-216');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">cmdl</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>
842 <a name="L570"></a><tt class="py-lineno"> 570</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">cmdl</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'@'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
843 <a name="L571"></a><tt class="py-lineno"> 571</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt id="link-217" class="py-name"><a title="ClusterShell.NodeSet
844 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-217', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-name">cmdl</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>
845 <a name="L572"></a><tt class="py-lineno"> 572</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">cmdl</tt> <tt class="py-op">==</tt> <tt class="py-string">'='</tt><tt class="py-op">:</tt> </tt>
846 <a name="L573"></a><tt class="py-lineno"> 573</tt> <tt class="py-line"> <tt class="py-name">gather</tt> <tt class="py-op">=</tt> <tt class="py-keyword">not</tt> <tt class="py-name">gather</tt> </tt>
847 <a name="L574"></a><tt class="py-lineno"> 574</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">verbosity</tt> <tt class="py-op">&gt;=</tt> <tt id="link-218" class="py-name"><a title="clush.VERB_STD" class="py-name" href="#" onclick="return doclink('link-218', 'VERB_STD', 'link-37');">VERB_STD</a></tt><tt class="py-op">:</tt> </tt>
848 <a name="L575"></a><tt class="py-lineno"> 575</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">gather</tt><tt class="py-op">:</tt> </tt>
849 <a name="L576"></a><tt class="py-lineno"> 576</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">"Switching to gathered output format"</tt> </tt>
850 <a name="L577"></a><tt class="py-lineno"> 577</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
851 <a name="L578"></a><tt class="py-lineno"> 578</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">"Switching to standard output format"</tt> </tt>
852 <a name="L579"></a><tt class="py-lineno"> 579</tt> <tt class="py-line"> <tt class="py-name">ns_info</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
853 <a name="L580"></a><tt class="py-lineno"> 580</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
854 <a name="L581"></a><tt class="py-lineno"> 581</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-keyword">not</tt> <tt class="py-name">cmdl</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'?'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-comment"># if ?, just print ns_info</tt> </tt>
855 <a name="L582"></a><tt class="py-lineno"> 582</tt> <tt class="py-line"> <tt class="py-name">ns_info</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
856 <a name="L583"></a><tt class="py-lineno"> 583</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-219" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-219', 'NodeSetParseError', 'link-25');">NodeSetParseError</a></tt><tt class="py-op">:</tt> </tt>
857 <a name="L584"></a><tt class="py-lineno"> 584</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: nodeset parse error (ignoring)"</tt> </tt>
858 <a name="L585"></a><tt class="py-lineno"> 585</tt> <tt class="py-line"> </tt>
859 <a name="L586"></a><tt class="py-lineno"> 586</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ns_info</tt><tt class="py-op">:</tt> </tt>
860 <a name="L587"></a><tt class="py-lineno"> 587</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
861 <a name="L588"></a><tt class="py-lineno"> 588</tt> <tt class="py-line"> </tt>
862 <a name="L589"></a><tt class="py-lineno"> 589</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cmdl</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'!'</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
863 <a name="L590"></a><tt class="py-lineno"> 590</tt> <tt class="py-line"> <tt id="link-220" class="py-name" targets="Function clush.run_command()=clush-module.html#run_command"><a title="clush.run_command" class="py-name" href="#" onclick="return doclink('link-220', 'run_command', 'link-220');">run_command</a></tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-name">cmd</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">None</tt><tt class="py-op">,</tt> <tt class="py-name">gather</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
864 <a name="L591"></a><tt class="py-lineno"> 591</tt> <tt class="py-line"> <tt class="py-name">verbosity</tt><tt class="py-op">,</tt> <tt id="link-221" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-221', 'display', 'link-80');">display</a></tt><tt class="py-op">)</tt> </tt>
865 <a name="L592"></a><tt class="py-lineno"> 592</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">cmdl</tt> <tt class="py-op">!=</tt> <tt class="py-string">"quit"</tt><tt class="py-op">:</tt> </tt>
866 <a name="L593"></a><tt class="py-lineno"> 593</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">cmd</tt><tt class="py-op">:</tt> </tt>
867 <a name="L594"></a><tt class="py-lineno"> 594</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
868 <a name="L595"></a><tt class="py-lineno"> 595</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">readline_avail</tt><tt class="py-op">:</tt> </tt>
869 <a name="L596"></a><tt class="py-lineno"> 596</tt> <tt class="py-line"> <tt class="py-name">readline</tt><tt class="py-op">.</tt><tt class="py-name">write_history_file</tt><tt class="py-op">(</tt><tt id="link-222" class="py-name"><a title="clush.get_history_file" class="py-name" href="#" onclick="return doclink('link-222', 'get_history_file', 'link-178');">get_history_file</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
870 <a name="L597"></a><tt class="py-lineno"> 597</tt> <tt class="py-line"> <tt id="link-223" class="py-name"><a title="clush.run_command" class="py-name" href="#" onclick="return doclink('link-223', 'run_command', 'link-220');">run_command</a></tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-name">cmd</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">gather</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">verbosity</tt><tt class="py-op">,</tt> <tt id="link-224" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-224', 'display', 'link-80');">display</a></tt><tt class="py-op">)</tt> </tt>
871 <a name="L598"></a><tt class="py-lineno"> 598</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">rc</tt> </tt>
872 </div><a name="L599"></a><tt class="py-lineno"> 599</tt> <tt class="py-line"> </tt>
873 <a name="bind_stdin"></a><div id="bind_stdin-def"><a name="L600"></a><tt class="py-lineno"> 600</tt> <a class="py-toggle" href="#" id="bind_stdin-toggle" onclick="return toggle('bind_stdin');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#bind_stdin">bind_stdin</a><tt class="py-op">(</tt><tt class="py-param">worker</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
874 </div><div id="bind_stdin-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="bind_stdin-expanded"><a name="L601"></a><tt class="py-lineno"> 601</tt> <tt class="py-line"> <tt class="py-docstring">"""Create a ClusterShell stdin-reader worker bound to specified</tt> </tt>
875 <a name="L602"></a><tt class="py-lineno"> 602</tt> <tt class="py-line"><tt class="py-docstring"> worker."""</tt> </tt>
876 <a name="L603"></a><tt class="py-lineno"> 603</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-keyword">not</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">isatty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
877 <a name="L604"></a><tt class="py-lineno"> 604</tt> <tt class="py-line"> <tt class="py-comment"># Switch stdin to non blocking mode</tt> </tt>
878 <a name="L605"></a><tt class="py-lineno"> 605</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">sys</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>
879 <a name="L606"></a><tt class="py-lineno"> 606</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">sys</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_GETFL</tt><tt class="py-op">)</tt> <tt class="py-op">|</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NDELAY</tt><tt class="py-op">)</tt> </tt>
880 <a name="L607"></a><tt class="py-lineno"> 607</tt> <tt class="py-line"> </tt>
881 <a name="L608"></a><tt class="py-lineno"> 608</tt> <tt class="py-line"> <tt class="py-comment"># Create a simple worker attached to stdin in autoclose mode</tt> </tt>
882 <a name="L609"></a><tt class="py-lineno"> 609</tt> <tt class="py-line"> <tt class="py-name">worker_stdin</tt> <tt class="py-op">=</tt> <tt id="link-225" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerSimple" class="py-name" href="#" onclick="return doclink('link-225', 'WorkerSimple', 'link-33');">WorkerSimple</a></tt><tt class="py-op">(</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
883 <a name="L610"></a><tt class="py-lineno"> 610</tt> <tt class="py-line"> <tt class="py-name">handler</tt><tt class="py-op">=</tt><tt id="link-226" class="py-name" targets="Class clush.StdInputHandler=clush.StdInputHandler-class.html"><a title="clush.StdInputHandler" class="py-name" href="#" onclick="return doclink('link-226', 'StdInputHandler', 'link-226');">StdInputHandler</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
884 <a name="L611"></a><tt class="py-lineno"> 611</tt> <tt class="py-line"> </tt>
885 <a name="L612"></a><tt class="py-lineno"> 612</tt> <tt class="py-line"> <tt class="py-comment"># Add stdin worker to the same task than given worker</tt> </tt>
886 <a name="L613"></a><tt class="py-lineno"> 613</tt> <tt class="py-line"> <tt class="py-name">worker</tt><tt class="py-op">.</tt><tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-227" class="py-name" targets="Method ClusterShell.Engine.Engine._EngineTimerQ.schedule()=ClusterShell.Engine.Engine._EngineTimerQ-class.html#schedule,Method ClusterShell.Task.Task.schedule()=ClusterShell.Task.Task-class.html#schedule"><a title="ClusterShell.Engine.Engine._EngineTimerQ.schedule
887 ClusterShell.Task.Task.schedule" class="py-name" href="#" onclick="return doclink('link-227', 'schedule', 'link-227');">schedule</a></tt><tt class="py-op">(</tt><tt class="py-name">worker_stdin</tt><tt class="py-op">)</tt> </tt>
888 </div><a name="L614"></a><tt class="py-lineno"> 614</tt> <tt class="py-line"> </tt>
889 <a name="run_command"></a><div id="run_command-def"><a name="L615"></a><tt class="py-lineno"> 615</tt> <a class="py-toggle" href="#" id="run_command-toggle" onclick="return toggle('run_command');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#run_command">run_command</a><tt class="py-op">(</tt><tt class="py-param">task</tt><tt class="py-op">,</tt> <tt class="py-param">cmd</tt><tt class="py-op">,</tt> <tt class="py-param">ns</tt><tt class="py-op">,</tt> <tt class="py-param">gather</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">,</tt> <tt class="py-param">verbosity</tt><tt class="py-op">,</tt> <tt class="py-param">display</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
890 </div><div id="run_command-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="run_command-expanded"><a name="L616"></a><tt class="py-lineno"> 616</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
891 <a name="L617"></a><tt class="py-lineno"> 617</tt> <tt class="py-line"><tt class="py-docstring"> Create and run the specified command line, displaying</tt> </tt>
892 <a name="L618"></a><tt class="py-lineno"> 618</tt> <tt class="py-line"><tt class="py-docstring"> results in a dshbak way when gathering is used.</tt> </tt>
893 <a name="L619"></a><tt class="py-lineno"> 619</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
894 <a name="L620"></a><tt class="py-lineno"> 620</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-228" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-228', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_running"</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
895 <a name="L621"></a><tt class="py-lineno"> 621</tt> <tt class="py-line"> </tt>
896 <a name="L622"></a><tt class="py-lineno"> 622</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">gather</tt><tt class="py-op">:</tt> </tt>
897 <a name="L623"></a><tt class="py-lineno"> 623</tt> <tt class="py-line"> <tt class="py-name">runtimer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
898 <a name="L624"></a><tt class="py-lineno"> 624</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">verbosity</tt> <tt class="py-op">==</tt> <tt id="link-229" class="py-name"><a title="clush.VERB_STD" class="py-name" href="#" onclick="return doclink('link-229', 'VERB_STD', 'link-37');">VERB_STD</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">verbosity</tt> <tt class="py-op">==</tt> <tt id="link-230" class="py-name"><a title="clush.VERB_VERB" class="py-name" href="#" onclick="return doclink('link-230', 'VERB_VERB', 'link-38');">VERB_VERB</a></tt><tt class="py-op">:</tt> </tt>
899 <a name="L625"></a><tt class="py-lineno"> 625</tt> <tt class="py-line"> <tt class="py-comment"># Create a ClusterShell timer used to display in live the</tt> </tt>
900 <a name="L626"></a><tt class="py-lineno"> 626</tt> <tt class="py-line"> <tt class="py-comment"># number of completed commands</tt> </tt>
901 <a name="L627"></a><tt class="py-lineno"> 627</tt> <tt class="py-line"> <tt class="py-name">runtimer</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-231" class="py-name" targets="Method ClusterShell.Task.Task.timer()=ClusterShell.Task.Task-class.html#timer"><a title="ClusterShell.Task.Task.timer" class="py-name" href="#" onclick="return doclink('link-231', 'timer', 'link-231');">timer</a></tt><tt class="py-op">(</tt><tt class="py-number">2.0</tt><tt class="py-op">,</tt> <tt id="link-232" class="py-name" targets="Class clush.RunTimer=clush.RunTimer-class.html"><a title="clush.RunTimer" class="py-name" href="#" onclick="return doclink('link-232', 'RunTimer', 'link-232');">RunTimer</a></tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">interval</tt><tt class="py-op">=</tt><tt class="py-number">1.</tt><tt class="py-op">/</tt><tt class="py-number">3.</tt><tt class="py-op">,</tt> </tt>
902 <a name="L628"></a><tt class="py-lineno"> 628</tt> <tt class="py-line"> <tt class="py-name">autoclose</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
903 <a name="L629"></a><tt class="py-lineno"> 629</tt> <tt class="py-line"> <tt class="py-name">worker</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-233" class="py-name" targets="Method ClusterShell.Task.Task.shell()=ClusterShell.Task.Task-class.html#shell"><a title="ClusterShell.Task.Task.shell" class="py-name" href="#" onclick="return doclink('link-233', 'shell', 'link-233');">shell</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt><tt class="py-op">,</tt> <tt class="py-name">nodes</tt><tt class="py-op">=</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> </tt>
904 <a name="L630"></a><tt class="py-lineno"> 630</tt> <tt class="py-line"> <tt class="py-name">handler</tt><tt class="py-op">=</tt><tt id="link-234" class="py-name" targets="Class clush.GatherOutputHandler=clush.GatherOutputHandler-class.html"><a title="clush.GatherOutputHandler" class="py-name" href="#" onclick="return doclink('link-234', 'GatherOutputHandler', 'link-234');">GatherOutputHandler</a></tt><tt class="py-op">(</tt><tt id="link-235" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-235', 'display', 'link-80');">display</a></tt><tt class="py-op">,</tt> <tt class="py-name">runtimer</tt><tt class="py-op">,</tt> </tt>
905 <a name="L631"></a><tt class="py-lineno"> 631</tt> <tt class="py-line"> <tt class="py-name">ns</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
906 <a name="L632"></a><tt class="py-lineno"> 632</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
907 <a name="L633"></a><tt class="py-lineno"> 633</tt> <tt class="py-line"> <tt class="py-name">worker</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-236" class="py-name"><a title="ClusterShell.Task.Task.shell" class="py-name" href="#" onclick="return doclink('link-236', 'shell', 'link-233');">shell</a></tt><tt class="py-op">(</tt><tt class="py-name">cmd</tt><tt class="py-op">,</tt> <tt class="py-name">nodes</tt><tt class="py-op">=</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> </tt>
908 <a name="L634"></a><tt class="py-lineno"> 634</tt> <tt class="py-line"> <tt class="py-name">handler</tt><tt class="py-op">=</tt><tt id="link-237" class="py-name" targets="Class clush.DirectOutputHandler=clush.DirectOutputHandler-class.html"><a title="clush.DirectOutputHandler" class="py-name" href="#" onclick="return doclink('link-237', 'DirectOutputHandler', 'link-237');">DirectOutputHandler</a></tt><tt class="py-op">(</tt><tt id="link-238" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-238', 'display', 'link-80');">display</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
909 <a name="L635"></a><tt class="py-lineno"> 635</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
910 <a name="L636"></a><tt class="py-lineno"> 636</tt> <tt class="py-line"> </tt>
911 <a name="L637"></a><tt class="py-lineno"> 637</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-239" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-239', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_stdin_worker"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
912 <a name="L638"></a><tt class="py-lineno"> 638</tt> <tt class="py-line"> <tt id="link-240" class="py-name" targets="Function clush.bind_stdin()=clush-module.html#bind_stdin"><a title="clush.bind_stdin" class="py-name" href="#" onclick="return doclink('link-240', 'bind_stdin', 'link-240');">bind_stdin</a></tt><tt class="py-op">(</tt><tt class="py-name">worker</tt><tt class="py-op">)</tt> </tt>
913 <a name="L639"></a><tt class="py-lineno"> 639</tt> <tt class="py-line"> </tt>
914 <a name="L640"></a><tt class="py-lineno"> 640</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name" targets="Method ClusterShell.Task.Task.resume()=ClusterShell.Task.Task-class.html#resume"><a title="ClusterShell.Task.Task.resume" class="py-name" href="#" onclick="return doclink('link-241', 'resume', 'link-241');">resume</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
915 </div><a name="L641"></a><tt class="py-lineno"> 641</tt> <tt class="py-line"> </tt>
916 <a name="run_copy"></a><div id="run_copy-def"><a name="L642"></a><tt class="py-lineno"> 642</tt> <a class="py-toggle" href="#" id="run_copy-toggle" onclick="return toggle('run_copy');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#run_copy">run_copy</a><tt class="py-op">(</tt><tt class="py-param">task</tt><tt class="py-op">,</tt> <tt class="py-param">source</tt><tt class="py-op">,</tt> <tt class="py-param">dest</tt><tt class="py-op">,</tt> <tt class="py-param">ns</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">,</tt> <tt class="py-param">preserve_flag</tt><tt class="py-op">,</tt> <tt class="py-param">display</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
917 </div><div id="run_copy-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="run_copy-expanded"><a name="L643"></a><tt class="py-lineno"> 643</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
918 <a name="L644"></a><tt class="py-lineno"> 644</tt> <tt class="py-line"><tt class="py-docstring"> run copy command</tt> </tt>
919 <a name="L645"></a><tt class="py-lineno"> 645</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
920 <a name="L646"></a><tt class="py-lineno"> 646</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-242" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-242', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_running"</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
921 <a name="L647"></a><tt class="py-lineno"> 647</tt> <tt class="py-line"> </tt>
922 <a name="L648"></a><tt class="py-lineno"> 648</tt> <tt class="py-line"> <tt class="py-comment"># Source check</tt> </tt>
923 <a name="L649"></a><tt class="py-lineno"> 649</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</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">exists</tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
924 <a name="L650"></a><tt class="py-lineno"> 650</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: file \"%s\" not found"</tt> <tt class="py-op">%</tt> <tt class="py-name">source</tt> </tt>
925 <a name="L651"></a><tt class="py-lineno"> 651</tt> <tt class="py-line"> <tt id="link-243" class="py-name" targets="Function clush.clush_exit()=clush-module.html#clush_exit"><a title="clush.clush_exit" class="py-name" href="#" onclick="return doclink('link-243', 'clush_exit', 'link-243');">clush_exit</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
926 <a name="L652"></a><tt class="py-lineno"> 652</tt> <tt class="py-line"> </tt>
927 <a name="L653"></a><tt class="py-lineno"> 653</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-244" class="py-name"><a title="ClusterShell.Task.Task.copy" class="py-name" href="#" onclick="return doclink('link-244', 'copy', 'link-94');">copy</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">=</tt><tt id="link-245" class="py-name"><a title="clush.DirectOutputHandler" class="py-name" href="#" onclick="return doclink('link-245', 'DirectOutputHandler', 'link-237');">DirectOutputHandler</a></tt><tt class="py-op">(</tt><tt id="link-246" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-246', 'display', 'link-80');">display</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
928 <a name="L654"></a><tt class="py-lineno"> 654</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">=</tt><tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">preserve</tt><tt class="py-op">=</tt><tt class="py-name">preserve_flag</tt><tt class="py-op">)</tt> </tt>
929 <a name="L655"></a><tt class="py-lineno"> 655</tt> <tt class="py-line"> </tt>
930 <a name="L656"></a><tt class="py-lineno"> 656</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-247" class="py-name"><a title="ClusterShell.Task.Task.resume" class="py-name" href="#" onclick="return doclink('link-247', 'resume', 'link-241');">resume</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
931 </div><a name="L657"></a><tt class="py-lineno"> 657</tt> <tt class="py-line"> </tt>
932 <a name="clush_exit"></a><div id="clush_exit-def"><a name="L658"></a><tt class="py-lineno"> 658</tt> <a class="py-toggle" href="#" id="clush_exit-toggle" onclick="return toggle('clush_exit');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#clush_exit">clush_exit</a><tt class="py-op">(</tt><tt class="py-param">status</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
933 </div><div id="clush_exit-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="clush_exit-expanded"><a name="L659"></a><tt class="py-lineno"> 659</tt> <tt class="py-line"> <tt class="py-comment"># Flush stdio buffers</tt> </tt>
934 <a name="L660"></a><tt class="py-lineno"> 660</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">stream</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
935 <a name="L661"></a><tt class="py-lineno"> 661</tt> <tt class="py-line"> <tt class="py-name">stream</tt><tt class="py-op">.</tt><tt class="py-name">flush</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
936 <a name="L662"></a><tt class="py-lineno"> 662</tt> <tt class="py-line"> <tt class="py-comment"># Use os._exit to avoid threads cleanup</tt> </tt>
937 <a name="L663"></a><tt class="py-lineno"> 663</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">_exit</tt><tt class="py-op">(</tt><tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
938 </div><a name="L664"></a><tt class="py-lineno"> 664</tt> <tt class="py-line"> </tt>
939 <a name="clush_excepthook"></a><div id="clush_excepthook-def"><a name="L665"></a><tt class="py-lineno"> 665</tt> <a class="py-toggle" href="#" id="clush_excepthook-toggle" onclick="return toggle('clush_excepthook');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#clush_excepthook">clush_excepthook</a><tt class="py-op">(</tt><tt class="py-param">type</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">,</tt> <tt class="py-param">traceback</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
940 </div><div id="clush_excepthook-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="clush_excepthook-expanded"><a name="L666"></a><tt class="py-lineno"> 666</tt> <tt class="py-line"> <tt class="py-docstring">"""Exceptions hook for clush: this method centralizes exception</tt> </tt>
941 <a name="L667"></a><tt class="py-lineno"> 667</tt> <tt class="py-line"><tt class="py-docstring"> handling from main thread and from (possible) separate task thread.</tt> </tt>
942 <a name="L668"></a><tt class="py-lineno"> 668</tt> <tt class="py-line"><tt class="py-docstring"> This hook has to be previously installed on startup by overriding</tt> </tt>
943 <a name="L669"></a><tt class="py-lineno"> 669</tt> <tt class="py-line"><tt class="py-docstring"> sys.excepthook and task.excepthook."""</tt> </tt>
944 <a name="L670"></a><tt class="py-lineno"> 670</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
945 <a name="L671"></a><tt class="py-lineno"> 671</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">type</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> </tt>
946 <a name="L672"></a><tt class="py-lineno"> 672</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-248" class="py-name"><a title="clush.ClushConfigError" class="py-name" href="#" onclick="return doclink('link-248', 'ClushConfigError', 'link-160');">ClushConfigError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
947 <a name="L673"></a><tt class="py-lineno"> 673</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">e</tt> </tt>
948 <a name="L674"></a><tt class="py-lineno"> 674</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-249" class="py-name"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-249', 'NodeSetExternalError', 'link-24');">NodeSetExternalError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
949 <a name="L675"></a><tt class="py-lineno"> 675</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: external error:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
950 <a name="L676"></a><tt class="py-lineno"> 676</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-250" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-250', 'NodeSetParseError', 'link-25');">NodeSetParseError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
951 <a name="L677"></a><tt class="py-lineno"> 677</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"clush: parse error:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
952 <a name="L678"></a><tt class="py-lineno"> 678</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-251" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolverSourceError" class="py-name" href="#" onclick="return doclink('link-251', 'GroupResolverSourceError', 'link-5');">GroupResolverSourceError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
953 <a name="L679"></a><tt class="py-lineno"> 679</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: unknown group source: \"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-name">e</tt> </tt>
954 <a name="L680"></a><tt class="py-lineno"> 680</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-252" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-252', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
955 <a name="L681"></a><tt class="py-lineno"> 681</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: no %s upcall defined for group "</tt> \ </tt>
956 <a name="L682"></a><tt class="py-lineno"> 682</tt> <tt class="py-line"> <tt class="py-string">"source \"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">group_source</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
957 <a name="L683"></a><tt class="py-lineno"> 683</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-253" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceException" class="py-name" href="#" onclick="return doclink('link-253', 'GroupSourceException', 'link-8');">GroupSourceException</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
958 <a name="L684"></a><tt class="py-lineno"> 684</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: other group error:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
959 <a name="L685"></a><tt class="py-lineno"> 685</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">:</tt> </tt>
960 <a name="L686"></a><tt class="py-lineno"> 686</tt> <tt class="py-line"> <tt class="py-comment"># Ignore broken pipe</tt> </tt>
961 <a name="L687"></a><tt class="py-lineno"> 687</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
962 <a name="L688"></a><tt class="py-lineno"> 688</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyboardInterrupt</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
963 <a name="L689"></a><tt class="py-lineno"> 689</tt> <tt class="py-line"> <tt class="py-name">uncomp_nodes</tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-string">'uncompleted_nodes'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
964 <a name="L690"></a><tt class="py-lineno"> 690</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">uncomp_nodes</tt><tt class="py-op">:</tt> </tt>
965 <a name="L691"></a><tt class="py-lineno"> 691</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Keyboard interrupt (%s did not complete)."</tt> \ </tt>
966 <a name="L692"></a><tt class="py-lineno"> 692</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">uncomp_nodes</tt> </tt>
967 <a name="L693"></a><tt class="py-lineno"> 693</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
968 <a name="L694"></a><tt class="py-lineno"> 694</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Keyboard interrupt."</tt> </tt>
969 <a name="L695"></a><tt class="py-lineno"> 695</tt> <tt class="py-line"> <tt id="link-254" class="py-name"><a title="clush.clush_exit" class="py-name" href="#" onclick="return doclink('link-254', 'clush_exit', 'link-243');">clush_exit</a></tt><tt class="py-op">(</tt><tt class="py-number">128</tt> <tt class="py-op">+</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGINT</tt><tt class="py-op">)</tt> </tt>
970 <a name="L696"></a><tt class="py-lineno"> 696</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">value</tt><tt class="py-op">:</tt> </tt>
971 <a name="L697"></a><tt class="py-lineno"> 697</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">value</tt> </tt>
972 <a name="L698"></a><tt class="py-lineno"> 698</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">value</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">EMFILE</tt><tt class="py-op">:</tt> </tt>
973 <a name="L699"></a><tt class="py-lineno"> 699</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: current `nofile' limits: "</tt> \ </tt>
974 <a name="L700"></a><tt class="py-lineno"> 700</tt> <tt class="py-line"> <tt class="py-string">"soft=%d hard=%d"</tt> <tt class="py-op">%</tt> <tt class="py-name">resource</tt><tt class="py-op">.</tt><tt class="py-name">getrlimit</tt><tt class="py-op">(</tt><tt class="py-name">resource</tt><tt class="py-op">.</tt><tt class="py-name">RLIMIT_NOFILE</tt><tt class="py-op">)</tt> </tt>
975 <a name="L701"></a><tt class="py-lineno"> 701</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
976 <a name="L702"></a><tt class="py-lineno"> 702</tt> <tt class="py-line"> <tt class="py-comment"># Not handled</tt> </tt>
977 <a name="L703"></a><tt class="py-lineno"> 703</tt> <tt class="py-line"> <tt id="link-255" class="py-name"><a title="ClusterShell.Task.task_self" class="py-name" href="#" onclick="return doclink('link-255', 'task_self', 'link-29');">task_self</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-256" class="py-name" targets="Method ClusterShell.Task.Task.default_excepthook()=ClusterShell.Task.Task-class.html#default_excepthook"><a title="ClusterShell.Task.Task.default_excepthook" class="py-name" href="#" onclick="return doclink('link-256', 'default_excepthook', 'link-256');">default_excepthook</a></tt><tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">traceback</tt><tt class="py-op">)</tt> </tt>
978 <a name="L704"></a><tt class="py-lineno"> 704</tt> <tt class="py-line"> <tt class="py-comment"># Exit with error code 1 (generic failure)</tt> </tt>
979 <a name="L705"></a><tt class="py-lineno"> 705</tt> <tt class="py-line"> <tt id="link-257" class="py-name"><a title="clush.clush_exit" class="py-name" href="#" onclick="return doclink('link-257', 'clush_exit', 'link-243');">clush_exit</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
980 </div><a name="L706"></a><tt class="py-lineno"> 706</tt> <tt class="py-line"> </tt>
981 <a name="clush_main"></a><div id="clush_main-def"><a name="L707"></a><tt class="py-lineno"> 707</tt> <a class="py-toggle" href="#" id="clush_main-toggle" onclick="return toggle('clush_main');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="clush-module.html#clush_main">clush_main</a><tt class="py-op">(</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
982 </div><div id="clush_main-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="clush_main-expanded"><a name="L708"></a><tt class="py-lineno"> 708</tt> <tt class="py-line"> <tt class="py-docstring">"""Main clush script function"""</tt> </tt>
983 <a name="L709"></a><tt class="py-lineno"> 709</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt id="link-258" class="py-name" targets="Variable ClusterShell.Task.Task.excepthook=ClusterShell.Task.Task-class.html#excepthook"><a title="ClusterShell.Task.Task.excepthook" class="py-name" href="#" onclick="return doclink('link-258', 'excepthook', 'link-258');">excepthook</a></tt> <tt class="py-op">=</tt> <tt id="link-259" class="py-name" targets="Function clush.clush_excepthook()=clush-module.html#clush_excepthook"><a title="clush.clush_excepthook" class="py-name" href="#" onclick="return doclink('link-259', 'clush_excepthook', 'link-259');">clush_excepthook</a></tt> </tt>
984 <a name="L710"></a><tt class="py-lineno"> 710</tt> <tt class="py-line"> </tt>
985 <a name="L711"></a><tt class="py-lineno"> 711</tt> <tt class="py-line"> <tt class="py-comment"># Default values</tt> </tt>
986 <a name="L712"></a><tt class="py-lineno"> 712</tt> <tt class="py-line"> <tt class="py-name">nodeset_base</tt><tt class="py-op">,</tt> <tt class="py-name">nodeset_exclude</tt> <tt class="py-op">=</tt> <tt id="link-260" class="py-name"><a title="ClusterShell.NodeSet
987 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-260', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-261" class="py-name"><a title="ClusterShell.NodeSet
988 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-261', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
989 <a name="L713"></a><tt class="py-lineno"> 713</tt> <tt class="py-line"> </tt>
990 <a name="L714"></a><tt class="py-lineno"> 714</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
991 <a name="L715"></a><tt class="py-lineno"> 715</tt> <tt class="py-line"> <tt class="py-comment"># Argument management</tt> </tt>
992 <a name="L716"></a><tt class="py-lineno"> 716</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
993 <a name="L717"></a><tt class="py-lineno"> 717</tt> <tt class="py-line"> <tt class="py-name">usage</tt> <tt class="py-op">=</tt> <tt class="py-string">"%prog [options] command"</tt> </tt>
994 <a name="L718"></a><tt class="py-lineno"> 718</tt> <tt class="py-line"> </tt>
995 <a name="L719"></a><tt class="py-lineno"> 719</tt> <tt class="py-line"> <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">optparse</tt><tt class="py-op">.</tt><tt class="py-name">OptionParser</tt><tt class="py-op">(</tt><tt class="py-name">usage</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">=</tt><tt class="py-string">"%%prog %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">__version__</tt><tt class="py-op">)</tt> </tt>
996 <a name="L720"></a><tt class="py-lineno"> 720</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">disable_interspersed_args</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
997 <a name="L721"></a><tt class="py-lineno"> 721</tt> <tt class="py-line"> </tt>
998 <a name="L722"></a><tt class="py-lineno"> 722</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"--nostdin"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"nostdin"</tt><tt class="py-op">,</tt> </tt>
999 <a name="L723"></a><tt class="py-lineno"> 723</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"don't watch for possible input from stdin"</tt><tt class="py-op">)</tt> </tt>
1000 <a name="L724"></a><tt class="py-lineno"> 724</tt> <tt class="py-line"> </tt>
1001 <a name="L725"></a><tt class="py-lineno"> 725</tt> <tt class="py-line"> <tt class="py-comment"># Node selections</tt> </tt>
1002 <a name="L726"></a><tt class="py-lineno"> 726</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt> <tt class="py-op">=</tt> <tt class="py-name">optparse</tt><tt class="py-op">.</tt><tt class="py-name">OptionGroup</tt><tt class="py-op">(</tt><tt class="py-name">parser</tt><tt class="py-op">,</tt> <tt class="py-string">"Selecting target nodes"</tt><tt class="py-op">)</tt> </tt>
1003 <a name="L727"></a><tt class="py-lineno"> 727</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-w"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"append"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"nodes"</tt><tt class="py-op">,</tt> </tt>
1004 <a name="L728"></a><tt class="py-lineno"> 728</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"nodes where to run the command"</tt><tt class="py-op">)</tt> </tt>
1005 <a name="L729"></a><tt class="py-lineno"> 729</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-x"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"append"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"exclude"</tt><tt class="py-op">,</tt> </tt>
1006 <a name="L730"></a><tt class="py-lineno"> 730</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"exclude nodes from the node list"</tt><tt class="py-op">)</tt> </tt>
1007 <a name="L731"></a><tt class="py-lineno"> 731</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-a"</tt><tt class="py-op">,</tt> <tt class="py-string">"--all"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"nodes_all"</tt><tt class="py-op">,</tt> </tt>
1008 <a name="L732"></a><tt class="py-lineno"> 732</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"run command on all nodes"</tt><tt class="py-op">)</tt> </tt>
1009 <a name="L733"></a><tt class="py-lineno"> 733</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-g"</tt><tt class="py-op">,</tt> <tt class="py-string">"--group"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"append"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"group"</tt><tt class="py-op">,</tt> </tt>
1010 <a name="L734"></a><tt class="py-lineno"> 734</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"run command on a group of nodes"</tt><tt class="py-op">)</tt> </tt>
1011 <a name="L735"></a><tt class="py-lineno"> 735</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-X"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"append"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"exgroup"</tt><tt class="py-op">,</tt> </tt>
1012 <a name="L736"></a><tt class="py-lineno"> 736</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"exclude nodes from this group"</tt><tt class="py-op">)</tt> </tt>
1013 <a name="L737"></a><tt class="py-lineno"> 737</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option_group</tt><tt class="py-op">(</tt><tt class="py-name">optgrp</tt><tt class="py-op">)</tt> </tt>
1014 <a name="L738"></a><tt class="py-lineno"> 738</tt> <tt class="py-line"> </tt>
1015 <a name="L739"></a><tt class="py-lineno"> 739</tt> <tt class="py-line"> <tt class="py-comment"># Output behaviour</tt> </tt>
1016 <a name="L740"></a><tt class="py-lineno"> 740</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt> <tt class="py-op">=</tt> <tt class="py-name">optparse</tt><tt class="py-op">.</tt><tt class="py-name">OptionGroup</tt><tt class="py-op">(</tt><tt class="py-name">parser</tt><tt class="py-op">,</tt> <tt class="py-string">"Output behaviour"</tt><tt class="py-op">)</tt> </tt>
1017 <a name="L741"></a><tt class="py-lineno"> 741</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-q"</tt><tt class="py-op">,</tt> <tt class="py-string">"--quiet"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"quiet"</tt><tt class="py-op">,</tt> </tt>
1018 <a name="L742"></a><tt class="py-lineno"> 742</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"be quiet, print essential output only"</tt><tt class="py-op">)</tt> </tt>
1019 <a name="L743"></a><tt class="py-lineno"> 743</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-v"</tt><tt class="py-op">,</tt> <tt class="py-string">"--verbose"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"verbose"</tt><tt class="py-op">,</tt> </tt>
1020 <a name="L744"></a><tt class="py-lineno"> 744</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"be verbose, print informative messages"</tt><tt class="py-op">)</tt> </tt>
1021 <a name="L745"></a><tt class="py-lineno"> 745</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-d"</tt><tt class="py-op">,</tt> <tt class="py-string">"--debug"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> </tt>
1022 <a name="L746"></a><tt class="py-lineno"> 746</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"output more messages for debugging purpose"</tt><tt class="py-op">)</tt> </tt>
1023 <a name="L747"></a><tt class="py-lineno"> 747</tt> <tt class="py-line"> </tt>
1024 <a name="L748"></a><tt class="py-lineno"> 748</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-G"</tt><tt class="py-op">,</tt> <tt class="py-string">"--groupbase"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> </tt>
1025 <a name="L749"></a><tt class="py-lineno"> 749</tt> <tt class="py-line"> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"groupbase"</tt><tt class="py-op">,</tt> <tt id="link-262" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-262', 'default', 'link-91');">default</a></tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"do not display "</tt> \ </tt>
1026 <a name="L750"></a><tt class="py-lineno"> 750</tt> <tt class="py-line"> <tt class="py-string">"group source prefix"</tt><tt class="py-op">)</tt> </tt>
1027 <a name="L751"></a><tt class="py-lineno"> 751</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-L"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"line_mode"</tt><tt class="py-op">,</tt> </tt>
1028 <a name="L752"></a><tt class="py-lineno"> 752</tt> <tt class="py-line"> <tt id="link-263" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-263', 'default', 'link-91');">default</a></tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"disable header block and order "</tt> \ </tt>
1029 <a name="L753"></a><tt class="py-lineno"> 753</tt> <tt class="py-line"> <tt class="py-string">"output by nodes"</tt><tt class="py-op">)</tt> </tt>
1030 <a name="L754"></a><tt class="py-lineno"> 754</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-N"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_false"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"label"</tt><tt class="py-op">,</tt> <tt id="link-264" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-264', 'default', 'link-91');">default</a></tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
1031 <a name="L755"></a><tt class="py-lineno"> 755</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"disable labeling of command line"</tt><tt class="py-op">)</tt> </tt>
1032 <a name="L756"></a><tt class="py-lineno"> 756</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-S"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"maxrc"</tt><tt class="py-op">,</tt> </tt>
1033 <a name="L757"></a><tt class="py-lineno"> 757</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"return the largest of command return codes"</tt><tt class="py-op">)</tt> </tt>
1034 <a name="L758"></a><tt class="py-lineno"> 758</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-b"</tt><tt class="py-op">,</tt> <tt class="py-string">"--dshbak"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"gather"</tt><tt class="py-op">,</tt> </tt>
1035 <a name="L759"></a><tt class="py-lineno"> 759</tt> <tt class="py-line"> <tt id="link-265" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-265', 'default', 'link-91');">default</a></tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"display gathered results in a "</tt> \ </tt>
1036 <a name="L760"></a><tt class="py-lineno"> 760</tt> <tt class="py-line"> <tt class="py-string">"dshbak-like way"</tt><tt class="py-op">)</tt> </tt>
1037 <a name="L761"></a><tt class="py-lineno"> 761</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-B"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"gatherall"</tt><tt class="py-op">,</tt> </tt>
1038 <a name="L762"></a><tt class="py-lineno"> 762</tt> <tt class="py-line"> <tt id="link-266" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-266', 'default', 'link-91');">default</a></tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"like -b but including standard "</tt> \ </tt>
1039 <a name="L763"></a><tt class="py-lineno"> 763</tt> <tt class="py-line"> <tt class="py-string">"error"</tt><tt class="py-op">)</tt> </tt>
1040 <a name="L764"></a><tt class="py-lineno"> 764</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-r"</tt><tt class="py-op">,</tt> <tt class="py-string">"--regroup"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"regroup"</tt><tt class="py-op">,</tt> </tt>
1041 <a name="L765"></a><tt class="py-lineno"> 765</tt> <tt class="py-line"> <tt id="link-267" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-267', 'default', 'link-91');">default</a></tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"fold nodeset using node groups"</tt><tt class="py-op">)</tt> </tt>
1042 <a name="L766"></a><tt class="py-lineno"> 766</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-s"</tt><tt class="py-op">,</tt> <tt class="py-string">"--groupsource"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> </tt>
1043 <a name="L767"></a><tt class="py-lineno"> 767</tt> <tt class="py-line"> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"groupsource"</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"optional groups.conf(5) "</tt> \ </tt>
1044 <a name="L768"></a><tt class="py-lineno"> 768</tt> <tt class="py-line"> <tt class="py-string">"group source to use"</tt><tt class="py-op">)</tt> </tt>
1045 <a name="L769"></a><tt class="py-lineno"> 769</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option_group</tt><tt class="py-op">(</tt><tt class="py-name">optgrp</tt><tt class="py-op">)</tt> </tt>
1046 <a name="L770"></a><tt class="py-lineno"> 770</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"--color"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"whencolor"</tt><tt class="py-op">,</tt> </tt>
1047 <a name="L771"></a><tt class="py-lineno"> 771</tt> <tt class="py-line"> <tt class="py-name">choices</tt><tt class="py-op">=</tt><tt id="link-268" class="py-name"><a title="clubak.WHENCOLOR_CHOICES
1048 clush.WHENCOLOR_CHOICES" class="py-name" href="#" onclick="return doclink('link-268', 'WHENCOLOR_CHOICES', 'link-40');">WHENCOLOR_CHOICES</a></tt><tt class="py-op">,</tt> </tt>
1049 <a name="L772"></a><tt class="py-lineno"> 772</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"whether to use ANSI colors (never, always or auto)"</tt><tt class="py-op">)</tt> </tt>
1050 <a name="L773"></a><tt class="py-lineno"> 773</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option_group</tt><tt class="py-op">(</tt><tt class="py-name">optgrp</tt><tt class="py-op">)</tt> </tt>
1051 <a name="L774"></a><tt class="py-lineno"> 774</tt> <tt class="py-line"> </tt>
1052 <a name="L775"></a><tt class="py-lineno"> 775</tt> <tt class="py-line"> <tt class="py-comment"># Copy</tt> </tt>
1053 <a name="L776"></a><tt class="py-lineno"> 776</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt> <tt class="py-op">=</tt> <tt class="py-name">optparse</tt><tt class="py-op">.</tt><tt class="py-name">OptionGroup</tt><tt class="py-op">(</tt><tt class="py-name">parser</tt><tt class="py-op">,</tt> <tt class="py-string">"File copying"</tt><tt class="py-op">)</tt> </tt>
1054 <a name="L777"></a><tt class="py-lineno"> 777</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-c"</tt><tt class="py-op">,</tt> <tt class="py-string">"--copy"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"source_path"</tt><tt class="py-op">,</tt> </tt>
1055 <a name="L778"></a><tt class="py-lineno"> 778</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"copy local file or directory to the nodes"</tt><tt class="py-op">)</tt> </tt>
1056 <a name="L779"></a><tt class="py-lineno"> 779</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"--dest"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"dest_path"</tt><tt class="py-op">,</tt> </tt>
1057 <a name="L780"></a><tt class="py-lineno"> 780</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"destination file or directory on the nodes"</tt><tt class="py-op">)</tt> </tt>
1058 <a name="L781"></a><tt class="py-lineno"> 781</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-p"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store_true"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"preserve_flag"</tt><tt class="py-op">,</tt> </tt>
1059 <a name="L782"></a><tt class="py-lineno"> 782</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"preserve modification times and modes"</tt><tt class="py-op">)</tt> </tt>
1060 <a name="L783"></a><tt class="py-lineno"> 783</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option_group</tt><tt class="py-op">(</tt><tt class="py-name">optgrp</tt><tt class="py-op">)</tt> </tt>
1061 <a name="L784"></a><tt class="py-lineno"> 784</tt> <tt class="py-line"> </tt>
1062 <a name="L785"></a><tt class="py-lineno"> 785</tt> <tt class="py-line"> <tt class="py-comment"># Ssh options</tt> </tt>
1063 <a name="L786"></a><tt class="py-lineno"> 786</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt> <tt class="py-op">=</tt> <tt class="py-name">optparse</tt><tt class="py-op">.</tt><tt class="py-name">OptionGroup</tt><tt class="py-op">(</tt><tt class="py-name">parser</tt><tt class="py-op">,</tt> <tt class="py-string">"Ssh options"</tt><tt class="py-op">)</tt> </tt>
1064 <a name="L787"></a><tt class="py-lineno"> 787</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-f"</tt><tt class="py-op">,</tt> <tt class="py-string">"--fanout"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"fanout"</tt><tt class="py-op">,</tt> </tt>
1065 <a name="L788"></a><tt class="py-lineno"> 788</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"use a specified fanout"</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">=</tt><tt class="py-string">"int"</tt><tt class="py-op">)</tt> </tt>
1066 <a name="L789"></a><tt class="py-lineno"> 789</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-l"</tt><tt class="py-op">,</tt> <tt class="py-string">"--user"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"user"</tt><tt class="py-op">,</tt> </tt>
1067 <a name="L790"></a><tt class="py-lineno"> 790</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"execute remote command as user"</tt><tt class="py-op">)</tt> </tt>
1068 <a name="L791"></a><tt class="py-lineno"> 791</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-o"</tt><tt class="py-op">,</tt> <tt class="py-string">"--options"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"options"</tt><tt class="py-op">,</tt> </tt>
1069 <a name="L792"></a><tt class="py-lineno"> 792</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"can be used to give ssh options"</tt><tt class="py-op">)</tt> </tt>
1070 <a name="L793"></a><tt class="py-lineno"> 793</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-t"</tt><tt class="py-op">,</tt> <tt class="py-string">"--connect_timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> </tt>
1071 <a name="L794"></a><tt class="py-lineno"> 794</tt> <tt class="py-line"> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"connect_timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"limit time to connect to "</tt> \ </tt>
1072 <a name="L795"></a><tt class="py-lineno"> 795</tt> <tt class="py-line"> <tt class="py-string">"a node"</tt> <tt class="py-op">,</tt><tt class="py-name">type</tt><tt class="py-op">=</tt><tt class="py-string">"float"</tt><tt class="py-op">)</tt> </tt>
1073 <a name="L796"></a><tt class="py-lineno"> 796</tt> <tt class="py-line"> <tt class="py-name">optgrp</tt><tt class="py-op">.</tt><tt class="py-name">add_option</tt><tt class="py-op">(</tt><tt class="py-string">"-u"</tt><tt class="py-op">,</tt> <tt class="py-string">"--command_timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">action</tt><tt class="py-op">=</tt><tt class="py-string">"store"</tt><tt class="py-op">,</tt> <tt class="py-name">dest</tt><tt class="py-op">=</tt><tt class="py-string">"command_timeout"</tt><tt class="py-op">,</tt> </tt>
1074 <a name="L797"></a><tt class="py-lineno"> 797</tt> <tt class="py-line"> <tt class="py-name">help</tt><tt class="py-op">=</tt><tt class="py-string">"limit time for command to run on the node"</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">=</tt><tt class="py-string">"float"</tt><tt class="py-op">)</tt> </tt>
1075 <a name="L798"></a><tt class="py-lineno"> 798</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">add_option_group</tt><tt class="py-op">(</tt><tt class="py-name">optgrp</tt><tt class="py-op">)</tt> </tt>
1076 <a name="L799"></a><tt class="py-lineno"> 799</tt> <tt class="py-line"> </tt>
1077 <a name="L800"></a><tt class="py-lineno"> 800</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">options</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">parser</tt><tt class="py-op">.</tt><tt class="py-name">parse_args</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1078 <a name="L801"></a><tt class="py-lineno"> 801</tt> <tt class="py-line"> </tt>
1079 <a name="L802"></a><tt class="py-lineno"> 802</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
1080 <a name="L803"></a><tt class="py-lineno"> 803</tt> <tt class="py-line"> <tt class="py-comment"># Load config file</tt> </tt>
1081 <a name="L804"></a><tt class="py-lineno"> 804</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
1082 <a name="L805"></a><tt class="py-lineno"> 805</tt> <tt class="py-line"> <tt class="py-name">config</tt> <tt class="py-op">=</tt> <tt id="link-269" class="py-name"><a title="clush.ClushConfig" class="py-name" href="#" onclick="return doclink('link-269', 'ClushConfig', 'link-150');">ClushConfig</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1083 <a name="L806"></a><tt class="py-lineno"> 806</tt> <tt class="py-line"> </tt>
1084 <a name="L807"></a><tt class="py-lineno"> 807</tt> <tt class="py-line"> <tt class="py-comment"># Apply command line overrides</tt> </tt>
1085 <a name="L808"></a><tt class="py-lineno"> 808</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">quiet</tt><tt class="py-op">:</tt> </tt>
1086 <a name="L809"></a><tt class="py-lineno"> 809</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-270" class="py-name" targets="Method clush.ClushConfig.set_main()=clush.ClushConfig-class.html#set_main"><a title="clush.ClushConfig.set_main" class="py-name" href="#" onclick="return doclink('link-270', 'set_main', 'link-270');">set_main</a></tt><tt class="py-op">(</tt><tt class="py-string">"verbosity"</tt><tt class="py-op">,</tt> <tt id="link-271" class="py-name"><a title="clush.VERB_QUIET" class="py-name" href="#" onclick="return doclink('link-271', 'VERB_QUIET', 'link-36');">VERB_QUIET</a></tt><tt class="py-op">)</tt> </tt>
1087 <a name="L810"></a><tt class="py-lineno"> 810</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">verbose</tt><tt class="py-op">:</tt> </tt>
1088 <a name="L811"></a><tt class="py-lineno"> 811</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-272" class="py-name"><a title="clush.ClushConfig.set_main" class="py-name" href="#" onclick="return doclink('link-272', 'set_main', 'link-270');">set_main</a></tt><tt class="py-op">(</tt><tt class="py-string">"verbosity"</tt><tt class="py-op">,</tt> <tt id="link-273" class="py-name"><a title="clush.VERB_VERB" class="py-name" href="#" onclick="return doclink('link-273', 'VERB_VERB', 'link-38');">VERB_VERB</a></tt><tt class="py-op">)</tt> </tt>
1089 <a name="L812"></a><tt class="py-lineno"> 812</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">:</tt> </tt>
1090 <a name="L813"></a><tt class="py-lineno"> 813</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-274" class="py-name"><a title="clush.ClushConfig.set_main" class="py-name" href="#" onclick="return doclink('link-274', 'set_main', 'link-270');">set_main</a></tt><tt class="py-op">(</tt><tt class="py-string">"verbosity"</tt><tt class="py-op">,</tt> <tt id="link-275" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-275', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
1091 <a name="L814"></a><tt class="py-lineno"> 814</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">fanout</tt><tt class="py-op">:</tt> </tt>
1092 <a name="L815"></a><tt class="py-lineno"> 815</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-276" class="py-name"><a title="clush.ClushConfig.set_main" class="py-name" href="#" onclick="return doclink('link-276', 'set_main', 'link-270');">set_main</a></tt><tt class="py-op">(</tt><tt class="py-string">"fanout"</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">fanout</tt><tt class="py-op">)</tt> </tt>
1093 <a name="L816"></a><tt class="py-lineno"> 816</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">user</tt><tt class="py-op">:</tt> </tt>
1094 <a name="L817"></a><tt class="py-lineno"> 817</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-277" class="py-name"><a title="clush.ClushConfig.set_main" class="py-name" href="#" onclick="return doclink('link-277', 'set_main', 'link-270');">set_main</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_user"</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
1095 <a name="L818"></a><tt class="py-lineno"> 818</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">options</tt><tt class="py-op">:</tt> </tt>
1096 <a name="L819"></a><tt class="py-lineno"> 819</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-278" class="py-name"><a title="clush.ClushConfig.set_main" class="py-name" href="#" onclick="return doclink('link-278', 'set_main', 'link-270');">set_main</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_options"</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">options</tt><tt class="py-op">)</tt> </tt>
1097 <a name="L820"></a><tt class="py-lineno"> 820</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">connect_timeout</tt><tt class="py-op">:</tt> </tt>
1098 <a name="L821"></a><tt class="py-lineno"> 821</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-279" class="py-name"><a title="clush.ClushConfig.set_main" class="py-name" href="#" onclick="return doclink('link-279', 'set_main', 'link-270');">set_main</a></tt><tt class="py-op">(</tt><tt class="py-string">"connect_timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">connect_timeout</tt><tt class="py-op">)</tt> </tt>
1099 <a name="L822"></a><tt class="py-lineno"> 822</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">command_timeout</tt><tt class="py-op">:</tt> </tt>
1100 <a name="L823"></a><tt class="py-lineno"> 823</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-280" class="py-name"><a title="clush.ClushConfig.set_main" class="py-name" href="#" onclick="return doclink('link-280', 'set_main', 'link-270');">set_main</a></tt><tt class="py-op">(</tt><tt class="py-string">"command_timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">command_timeout</tt><tt class="py-op">)</tt> </tt>
1101 <a name="L824"></a><tt class="py-lineno"> 824</tt> <tt class="py-line"> </tt>
1102 <a name="L825"></a><tt class="py-lineno"> 825</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
1103 <a name="L826"></a><tt class="py-lineno"> 826</tt> <tt class="py-line"> <tt class="py-comment"># Compute the nodeset</tt> </tt>
1104 <a name="L827"></a><tt class="py-lineno"> 827</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
1105 <a name="L828"></a><tt class="py-lineno"> 828</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt><tt class="py-op">:</tt> </tt>
1106 <a name="L829"></a><tt class="py-lineno"> 829</tt> <tt class="py-line"> <tt class="py-name">nodeset_base</tt> <tt class="py-op">=</tt> <tt id="link-281" class="py-name"><a title="ClusterShell.NodeSet
1107 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-281', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-282" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
1108 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-282', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">nodes</tt><tt class="py-op">)</tt> </tt>
1109 <a name="L830"></a><tt class="py-lineno"> 830</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">exclude</tt><tt class="py-op">:</tt> </tt>
1110 <a name="L831"></a><tt class="py-lineno"> 831</tt> <tt class="py-line"> <tt class="py-name">nodeset_exclude</tt> <tt class="py-op">=</tt> <tt id="link-283" class="py-name"><a title="ClusterShell.NodeSet
1111 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-283', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-284" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
1112 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-284', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">exclude</tt><tt class="py-op">)</tt> </tt>
1113 <a name="L832"></a><tt class="py-lineno"> 832</tt> <tt class="py-line"> </tt>
1114 <a name="L833"></a><tt class="py-lineno"> 833</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt><tt class="py-op">:</tt> </tt>
1115 <a name="L834"></a><tt class="py-lineno"> 834</tt> <tt class="py-line"> <tt class="py-comment"># Be sure -a/g -s source work as espected.</tt> </tt>
1116 <a name="L835"></a><tt class="py-lineno"> 835</tt> <tt class="py-line"> <tt id="link-285" class="py-name"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-285', 'STD_GROUP_RESOLVER', 'link-21');">STD_GROUP_RESOLVER</a></tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt> </tt>
1117 <a name="L836"></a><tt class="py-lineno"> 836</tt> <tt class="py-line"> </tt>
1118 <a name="L837"></a><tt class="py-lineno"> 837</tt> <tt class="py-line"> <tt class="py-comment"># Do we have nodes group?</tt> </tt>
1119 <a name="L838"></a><tt class="py-lineno"> 838</tt> <tt class="py-line"> <tt class="py-name">task</tt> <tt class="py-op">=</tt> <tt id="link-286" class="py-name"><a title="ClusterShell.Task.task_self" class="py-name" href="#" onclick="return doclink('link-286', 'task_self', 'link-29');">task_self</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1120 <a name="L839"></a><tt class="py-lineno"> 839</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-287" class="py-name" targets="Method ClusterShell.Task.Task.set_info()=ClusterShell.Task.Task-class.html#set_info"><a title="ClusterShell.Task.Task.set_info" class="py-name" href="#" onclick="return doclink('link-287', 'set_info', 'link-287');">set_info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-288" class="py-name"><a title="clush.ClushConfig.get_verbosity" class="py-name" href="#" onclick="return doclink('link-288', 'get_verbosity', 'link-153');">get_verbosity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
1121 <a name="L840"></a><tt class="py-lineno"> 840</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-289" class="py-name"><a title="clush.ClushConfig.get_verbosity" class="py-name" href="#" onclick="return doclink('link-289', 'get_verbosity', 'link-153');">get_verbosity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
1122 <a name="L841"></a><tt class="py-lineno"> 841</tt> <tt class="py-line"> <tt id="link-290" class="py-name"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-290', 'STD_GROUP_RESOLVER', 'link-21');">STD_GROUP_RESOLVER</a></tt><tt class="py-op">.</tt><tt id="link-291" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.set_verbosity()=ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity"><a title="ClusterShell.NodeUtils.GroupResolver.set_verbosity" class="py-name" href="#" onclick="return doclink('link-291', 'set_verbosity', 'link-291');">set_verbosity</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
1123 <a name="L842"></a><tt class="py-lineno"> 842</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">nodes_all</tt><tt class="py-op">:</tt> </tt>
1124 <a name="L843"></a><tt class="py-lineno"> 843</tt> <tt class="py-line"> <tt class="py-name">all_nodeset</tt> <tt class="py-op">=</tt> <tt id="link-292" class="py-name"><a title="ClusterShell.NodeSet
1125 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-292', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-293" class="py-name" targets="Class Method ClusterShell.NodeSet.NodeSet.fromall()=ClusterShell.NodeSet.NodeSet-class.html#fromall"><a title="ClusterShell.NodeSet.NodeSet.fromall" class="py-name" href="#" onclick="return doclink('link-293', 'fromall', 'link-293');">fromall</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1126 <a name="L844"></a><tt class="py-lineno"> 844</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-294" class="py-name"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-294', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-295" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-295', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">,</tt> \ </tt>
1127 <a name="L845"></a><tt class="py-lineno"> 845</tt> <tt class="py-line"> <tt class="py-string">"Adding nodes from option -a: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">all_nodeset</tt><tt class="py-op">)</tt> </tt>
1128 <a name="L846"></a><tt class="py-lineno"> 846</tt> <tt class="py-line"> <tt class="py-name">nodeset_base</tt><tt class="py-op">.</tt><tt id="link-296" class="py-name"><a title="ClusterShell.Engine.Engine.Engine.add
1129 ClusterShell.MsgTree.MsgTree.add
1130 ClusterShell.NodeSet.NodeSetBase.add
1131 ClusterShell.NodeSet.RangeSet.add" class="py-name" href="#" onclick="return doclink('link-296', 'add', 'link-200');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">all_nodeset</tt><tt class="py-op">)</tt> </tt>
1132 <a name="L847"></a><tt class="py-lineno"> 847</tt> <tt class="py-line"> </tt>
1133 <a name="L848"></a><tt class="py-lineno"> 848</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">:</tt> </tt>
1134 <a name="L849"></a><tt class="py-lineno"> 849</tt> <tt class="py-line"> <tt class="py-name">grp_nodeset</tt> <tt class="py-op">=</tt> <tt id="link-297" class="py-name"><a title="ClusterShell.NodeSet
1135 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-297', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-298" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
1136 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-298', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">,</tt> </tt>
1137 <a name="L850"></a><tt class="py-lineno"> 850</tt> <tt class="py-line"> <tt class="py-name">resolver</tt><tt class="py-op">=</tt><tt id="link-299" class="py-name"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-299', 'NOGROUP_RESOLVER', 'link-20');">NOGROUP_RESOLVER</a></tt><tt class="py-op">)</tt> </tt>
1138 <a name="L851"></a><tt class="py-lineno"> 851</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">grp</tt> <tt class="py-keyword">in</tt> <tt class="py-name">grp_nodeset</tt><tt class="py-op">:</tt> </tt>
1139 <a name="L852"></a><tt class="py-lineno"> 852</tt> <tt class="py-line"> <tt class="py-name">addingrp</tt> <tt class="py-op">=</tt> <tt id="link-300" class="py-name"><a title="ClusterShell.NodeSet
1140 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-300', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-string">"@"</tt> <tt class="py-op">+</tt> <tt class="py-name">grp</tt><tt class="py-op">)</tt> </tt>
1141 <a name="L853"></a><tt class="py-lineno"> 853</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-301" class="py-name"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-301', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-302" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-302', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">,</tt> \ </tt>
1142 <a name="L854"></a><tt class="py-lineno"> 854</tt> <tt class="py-line"> <tt class="py-string">"Adding nodes from option -g %s: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">grp</tt><tt class="py-op">,</tt> <tt class="py-name">addingrp</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1143 <a name="L855"></a><tt class="py-lineno"> 855</tt> <tt class="py-line"> <tt class="py-name">nodeset_base</tt><tt class="py-op">.</tt><tt id="link-303" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1144 ClusterShell.NodeSet.NodeSetBase.update
1145 ClusterShell.NodeSet.RangeSet.update
1146 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-303', 'update', 'link-137');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">addingrp</tt><tt class="py-op">)</tt> </tt>
1147 <a name="L856"></a><tt class="py-lineno"> 856</tt> <tt class="py-line"> </tt>
1148 <a name="L857"></a><tt class="py-lineno"> 857</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">exgroup</tt><tt class="py-op">:</tt> </tt>
1149 <a name="L858"></a><tt class="py-lineno"> 858</tt> <tt class="py-line"> <tt class="py-name">grp_nodeset</tt> <tt class="py-op">=</tt> <tt id="link-304" class="py-name"><a title="ClusterShell.NodeSet
1150 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-304', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-305" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.fromlist
1151 ClusterShell.NodeSet.RangeSet.fromlist" class="py-name" href="#" onclick="return doclink('link-305', 'fromlist', 'link-75');">fromlist</a></tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">exgroup</tt><tt class="py-op">,</tt> </tt>
1152 <a name="L859"></a><tt class="py-lineno"> 859</tt> <tt class="py-line"> <tt class="py-name">resolver</tt><tt class="py-op">=</tt><tt id="link-306" class="py-name"><a title="ClusterShell.NodeSet.NOGROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-306', 'NOGROUP_RESOLVER', 'link-20');">NOGROUP_RESOLVER</a></tt><tt class="py-op">)</tt> </tt>
1153 <a name="L860"></a><tt class="py-lineno"> 860</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">grp</tt> <tt class="py-keyword">in</tt> <tt class="py-name">grp_nodeset</tt><tt class="py-op">:</tt> </tt>
1154 <a name="L861"></a><tt class="py-lineno"> 861</tt> <tt class="py-line"> <tt class="py-name">removingrp</tt> <tt class="py-op">=</tt> <tt id="link-307" class="py-name"><a title="ClusterShell.NodeSet
1155 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-307', 'NodeSet', 'link-16');">NodeSet</a></tt><tt class="py-op">(</tt><tt class="py-string">"@"</tt> <tt class="py-op">+</tt> <tt class="py-name">grp</tt><tt class="py-op">)</tt> </tt>
1156 <a name="L862"></a><tt class="py-lineno"> 862</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-308" class="py-name"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-308', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-309" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-309', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">,</tt> \ </tt>
1157 <a name="L863"></a><tt class="py-lineno"> 863</tt> <tt class="py-line"> <tt class="py-string">"Excluding nodes from option -X %s: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">grp</tt><tt class="py-op">,</tt> <tt class="py-name">removingrp</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1158 <a name="L864"></a><tt class="py-lineno"> 864</tt> <tt class="py-line"> <tt class="py-name">nodeset_exclude</tt><tt class="py-op">.</tt><tt id="link-310" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
1159 ClusterShell.NodeSet.NodeSetBase.update
1160 ClusterShell.NodeSet.RangeSet.update
1161 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-310', 'update', 'link-137');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">removingrp</tt><tt class="py-op">)</tt> </tt>
1162 <a name="L865"></a><tt class="py-lineno"> 865</tt> <tt class="py-line"> </tt>
1163 <a name="L866"></a><tt class="py-lineno"> 866</tt> <tt class="py-line"> <tt class="py-comment"># Do we have an exclude list? (-x ...)</tt> </tt>
1164 <a name="L867"></a><tt class="py-lineno"> 867</tt> <tt class="py-line"> <tt class="py-name">nodeset_base</tt><tt class="py-op">.</tt><tt id="link-311" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.difference_update
1165 ClusterShell.NodeSet.NodeSetBase.difference_update
1166 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-311', 'difference_update', 'link-216');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">nodeset_exclude</tt><tt class="py-op">)</tt> </tt>
1167 <a name="L868"></a><tt class="py-lineno"> 868</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">nodeset_base</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
1168 <a name="L869"></a><tt class="py-lineno"> 869</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-312" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple.error()=ClusterShell.Worker.Worker.WorkerSimple-class.html#error"><a title="ClusterShell.Worker.Worker.WorkerSimple.error" class="py-name" href="#" onclick="return doclink('link-312', 'error', 'link-312');">error</a></tt><tt class="py-op">(</tt><tt class="py-string">'No node to run on.'</tt><tt class="py-op">)</tt> </tt>
1169 <a name="L870"></a><tt class="py-lineno"> 870</tt> <tt class="py-line"> </tt>
1170 <a name="L871"></a><tt class="py-lineno"> 871</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-313" class="py-name"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-313', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-314" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-314', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Final NodeSet: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">nodeset_base</tt><tt class="py-op">)</tt> </tt>
1171 <a name="L872"></a><tt class="py-lineno"> 872</tt> <tt class="py-line"> </tt>
1172 <a name="L873"></a><tt class="py-lineno"> 873</tt> <tt class="py-line"> <tt class="py-comment"># Make soft fd limit the max.</tt> </tt>
1173 <a name="L874"></a><tt class="py-lineno"> 874</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-315" class="py-name" targets="Method clush.ClushConfig.max_fdlimit()=clush.ClushConfig-class.html#max_fdlimit"><a title="clush.ClushConfig.max_fdlimit" class="py-name" href="#" onclick="return doclink('link-315', 'max_fdlimit', 'link-315');">max_fdlimit</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1174 <a name="L875"></a><tt class="py-lineno"> 875</tt> <tt class="py-line"> </tt>
1175 <a name="L876"></a><tt class="py-lineno"> 876</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
1176 <a name="L877"></a><tt class="py-lineno"> 877</tt> <tt class="py-line"> <tt class="py-comment"># Task management</tt> </tt>
1177 <a name="L878"></a><tt class="py-lineno"> 878</tt> <tt class="py-line"> <tt class="py-comment">#</tt> </tt>
1178 <a name="L879"></a><tt class="py-lineno"> 879</tt> <tt class="py-line"> <tt class="py-name">interactive</tt> <tt class="py-op">=</tt> <tt class="py-keyword">not</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">source_path</tt> </tt>
1179 <a name="L880"></a><tt class="py-lineno"> 880</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">nostdin</tt> <tt class="py-keyword">and</tt> <tt class="py-name">interactive</tt><tt class="py-op">:</tt> </tt>
1180 <a name="L881"></a><tt class="py-lineno"> 881</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-316" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerSimple.error" class="py-name" href="#" onclick="return doclink('link-316', 'error', 'link-312');">error</a></tt><tt class="py-op">(</tt><tt class="py-string">"illegal option `--nostdin' in interactive mode"</tt><tt class="py-op">)</tt> </tt>
1181 <a name="L882"></a><tt class="py-lineno"> 882</tt> <tt class="py-line"> </tt>
1182 <a name="L883"></a><tt class="py-lineno"> 883</tt> <tt class="py-line"> <tt class="py-name">user_interaction</tt> <tt class="py-op">=</tt> <tt class="py-keyword">not</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">nostdin</tt> <tt class="py-keyword">and</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">isatty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> \ </tt>
1183 <a name="L884"></a><tt class="py-lineno"> 884</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">isatty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1184 <a name="L885"></a><tt class="py-lineno"> 885</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-317" class="py-name"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-317', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-318" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-318', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">,</tt> <tt class="py-string">"User interaction: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">user_interaction</tt><tt class="py-op">)</tt> </tt>
1185 <a name="L886"></a><tt class="py-lineno"> 886</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">user_interaction</tt><tt class="py-op">:</tt> </tt>
1186 <a name="L887"></a><tt class="py-lineno"> 887</tt> <tt class="py-line"> <tt class="py-comment"># Standard input is a terminal and we want to perform some user</tt> </tt>
1187 <a name="L888"></a><tt class="py-lineno"> 888</tt> <tt class="py-line"> <tt class="py-comment"># interactions in the main thread (using blocking calls), so</tt> </tt>
1188 <a name="L889"></a><tt class="py-lineno"> 889</tt> <tt class="py-line"> <tt class="py-comment"># we run cluster commands in a new ClusterShell Task (a new</tt> </tt>
1189 <a name="L890"></a><tt class="py-lineno"> 890</tt> <tt class="py-line"> <tt class="py-comment"># thread is created).</tt> </tt>
1190 <a name="L891"></a><tt class="py-lineno"> 891</tt> <tt class="py-line"> <tt class="py-name">task</tt> <tt class="py-op">=</tt> <tt id="link-319" class="py-name"><a title="ClusterShell.Task
1191 ClusterShell.Task.Task" class="py-name" href="#" onclick="return doclink('link-319', 'Task', 'link-27');">Task</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1192 <a name="L892"></a><tt class="py-lineno"> 892</tt> <tt class="py-line"> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">signal</tt><tt class="py-op">(</tt><tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGUSR1</tt><tt class="py-op">,</tt> <tt id="link-320" class="py-name" targets="Function clush.signal_handler()=clush-module.html#signal_handler"><a title="clush.signal_handler" class="py-name" href="#" onclick="return doclink('link-320', 'signal_handler', 'link-320');">signal_handler</a></tt><tt class="py-op">)</tt> </tt>
1193 <a name="L893"></a><tt class="py-lineno"> 893</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-321" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-321', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_handle_SIGUSR1"</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
1194 <a name="L894"></a><tt class="py-lineno"> 894</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1195 <a name="L895"></a><tt class="py-lineno"> 895</tt> <tt class="py-line"> <tt class="py-comment"># Perform everything in main thread.</tt> </tt>
1196 <a name="L896"></a><tt class="py-lineno"> 896</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-322" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-322', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_handle_SIGUSR1"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
1197 <a name="L897"></a><tt class="py-lineno"> 897</tt> <tt class="py-line"> </tt>
1198 <a name="L898"></a><tt class="py-lineno"> 898</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-323" class="py-name"><a title="ClusterShell.Task.Task.excepthook" class="py-name" href="#" onclick="return doclink('link-323', 'excepthook', 'link-258');">excepthook</a></tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt id="link-324" class="py-name"><a title="ClusterShell.Task.Task.excepthook" class="py-name" href="#" onclick="return doclink('link-324', 'excepthook', 'link-258');">excepthook</a></tt> </tt>
1199 <a name="L899"></a><tt class="py-lineno"> 899</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-325" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-325', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_stdin_worker"</tt><tt class="py-op">,</tt> <tt class="py-keyword">not</tt> <tt class="py-op">(</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">isatty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
1200 <a name="L900"></a><tt class="py-lineno"> 900</tt> <tt class="py-line"> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">nostdin</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1201 <a name="L901"></a><tt class="py-lineno"> 901</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-326" class="py-name"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-326', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-327" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-327', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Create STDIN worker: %s"</tt> <tt class="py-op">%</tt> \ </tt>
1202 <a name="L902"></a><tt class="py-lineno"> 902</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-328" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-328', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_stdin_worker"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1203 <a name="L903"></a><tt class="py-lineno"> 903</tt> <tt class="py-line"> </tt>
1204 <a name="L904"></a><tt class="py-lineno"> 904</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-329" class="py-name"><a title="ClusterShell.Task.Task.set_info" class="py-name" href="#" onclick="return doclink('link-329', 'set_info', 'link-287');">set_info</a></tt><tt class="py-op">(</tt><tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-330" class="py-name"><a title="clush.ClushConfig.get_verbosity" class="py-name" href="#" onclick="return doclink('link-330', 'get_verbosity', 'link-153');">get_verbosity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt id="link-331" class="py-name"><a title="clush.VERB_DEBUG" class="py-name" href="#" onclick="return doclink('link-331', 'VERB_DEBUG', 'link-39');">VERB_DEBUG</a></tt><tt class="py-op">)</tt> </tt>
1205 <a name="L905"></a><tt class="py-lineno"> 905</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-332" class="py-name"><a title="ClusterShell.Task.Task.set_info" class="py-name" href="#" onclick="return doclink('link-332', 'set_info', 'link-287');">set_info</a></tt><tt class="py-op">(</tt><tt class="py-string">"fanout"</tt><tt class="py-op">,</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-333" class="py-name" targets="Method clush.ClushConfig.get_fanout()=clush.ClushConfig-class.html#get_fanout"><a title="clush.ClushConfig.get_fanout" class="py-name" href="#" onclick="return doclink('link-333', 'get_fanout', 'link-333');">get_fanout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1206 <a name="L906"></a><tt class="py-lineno"> 906</tt> <tt class="py-line"> </tt>
1207 <a name="L907"></a><tt class="py-lineno"> 907</tt> <tt class="py-line"> <tt class="py-name">ssh_user</tt> <tt class="py-op">=</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-334" class="py-name" targets="Method clush.ClushConfig.get_ssh_user()=clush.ClushConfig-class.html#get_ssh_user"><a title="clush.ClushConfig.get_ssh_user" class="py-name" href="#" onclick="return doclink('link-334', 'get_ssh_user', 'link-334');">get_ssh_user</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1208 <a name="L908"></a><tt class="py-lineno"> 908</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ssh_user</tt><tt class="py-op">:</tt> </tt>
1209 <a name="L909"></a><tt class="py-lineno"> 909</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-335" class="py-name"><a title="ClusterShell.Task.Task.set_info" class="py-name" href="#" onclick="return doclink('link-335', 'set_info', 'link-287');">set_info</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_user"</tt><tt class="py-op">,</tt> <tt class="py-name">ssh_user</tt><tt class="py-op">)</tt> </tt>
1210 <a name="L910"></a><tt class="py-lineno"> 910</tt> <tt class="py-line"> <tt class="py-name">ssh_path</tt> <tt class="py-op">=</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-336" class="py-name" targets="Method clush.ClushConfig.get_ssh_path()=clush.ClushConfig-class.html#get_ssh_path"><a title="clush.ClushConfig.get_ssh_path" class="py-name" href="#" onclick="return doclink('link-336', 'get_ssh_path', 'link-336');">get_ssh_path</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1211 <a name="L911"></a><tt class="py-lineno"> 911</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ssh_path</tt><tt class="py-op">:</tt> </tt>
1212 <a name="L912"></a><tt class="py-lineno"> 912</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-337" class="py-name"><a title="ClusterShell.Task.Task.set_info" class="py-name" href="#" onclick="return doclink('link-337', 'set_info', 'link-287');">set_info</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_path"</tt><tt class="py-op">,</tt> <tt class="py-name">ssh_path</tt><tt class="py-op">)</tt> </tt>
1213 <a name="L913"></a><tt class="py-lineno"> 913</tt> <tt class="py-line"> <tt class="py-name">ssh_options</tt> <tt class="py-op">=</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-338" class="py-name" targets="Method clush.ClushConfig.get_ssh_options()=clush.ClushConfig-class.html#get_ssh_options"><a title="clush.ClushConfig.get_ssh_options" class="py-name" href="#" onclick="return doclink('link-338', 'get_ssh_options', 'link-338');">get_ssh_options</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1214 <a name="L914"></a><tt class="py-lineno"> 914</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ssh_options</tt><tt class="py-op">:</tt> </tt>
1215 <a name="L915"></a><tt class="py-lineno"> 915</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-339" class="py-name"><a title="ClusterShell.Task.Task.set_info" class="py-name" href="#" onclick="return doclink('link-339', 'set_info', 'link-287');">set_info</a></tt><tt class="py-op">(</tt><tt class="py-string">"ssh_options"</tt><tt class="py-op">,</tt> <tt class="py-name">ssh_options</tt><tt class="py-op">)</tt> </tt>
1216 <a name="L916"></a><tt class="py-lineno"> 916</tt> <tt class="py-line"> </tt>
1217 <a name="L917"></a><tt class="py-lineno"> 917</tt> <tt class="py-line"> <tt class="py-comment"># Set detailed timeout values</tt> </tt>
1218 <a name="L918"></a><tt class="py-lineno"> 918</tt> <tt class="py-line"> <tt class="py-name">connect_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-340" class="py-name" targets="Method clush.ClushConfig.get_connect_timeout()=clush.ClushConfig-class.html#get_connect_timeout"><a title="clush.ClushConfig.get_connect_timeout" class="py-name" href="#" onclick="return doclink('link-340', 'get_connect_timeout', 'link-340');">get_connect_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1219 <a name="L919"></a><tt class="py-lineno"> 919</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-341" class="py-name"><a title="ClusterShell.Task.Task.set_info" class="py-name" href="#" onclick="return doclink('link-341', 'set_info', 'link-287');">set_info</a></tt><tt class="py-op">(</tt><tt class="py-string">"connect_timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">connect_timeout</tt><tt class="py-op">)</tt> </tt>
1220 <a name="L920"></a><tt class="py-lineno"> 920</tt> <tt class="py-line"> <tt class="py-name">command_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-342" class="py-name" targets="Method clush.ClushConfig.get_command_timeout()=clush.ClushConfig-class.html#get_command_timeout"><a title="clush.ClushConfig.get_command_timeout" class="py-name" href="#" onclick="return doclink('link-342', 'get_command_timeout', 'link-342');">get_command_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1221 <a name="L921"></a><tt class="py-lineno"> 921</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-343" class="py-name"><a title="ClusterShell.Task.Task.set_info" class="py-name" href="#" onclick="return doclink('link-343', 'set_info', 'link-287');">set_info</a></tt><tt class="py-op">(</tt><tt class="py-string">"command_timeout"</tt><tt class="py-op">,</tt> <tt class="py-name">command_timeout</tt><tt class="py-op">)</tt> </tt>
1222 <a name="L922"></a><tt class="py-lineno"> 922</tt> <tt class="py-line"> </tt>
1223 <a name="L923"></a><tt class="py-lineno"> 923</tt> <tt class="py-line"> <tt class="py-name">gather</tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">gatherall</tt> <tt class="py-keyword">or</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">gather</tt> </tt>
1224 <a name="L924"></a><tt class="py-lineno"> 924</tt> <tt class="py-line"> <tt class="py-comment"># Enable stdout/stderr separation</tt> </tt>
1225 <a name="L925"></a><tt class="py-lineno"> 925</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-344" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-344', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"stderr"</tt><tt class="py-op">,</tt> <tt class="py-keyword">not</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">gatherall</tt><tt class="py-op">)</tt> </tt>
1226 <a name="L926"></a><tt class="py-lineno"> 926</tt> <tt class="py-line"> </tt>
1227 <a name="L927"></a><tt class="py-lineno"> 927</tt> <tt class="py-line"> <tt class="py-comment"># Disable MsgTree buffering if not gathering outputs</tt> </tt>
1228 <a name="L928"></a><tt class="py-lineno"> 928</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-345" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-345', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"stdout_msgtree"</tt><tt class="py-op">,</tt> <tt class="py-name">gather</tt><tt class="py-op">)</tt> </tt>
1229 <a name="L929"></a><tt class="py-lineno"> 929</tt> <tt class="py-line"> <tt class="py-comment"># Always disable stderr MsgTree buffering</tt> </tt>
1230 <a name="L930"></a><tt class="py-lineno"> 930</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-346" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-346', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"stderr_msgtree"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
1231 <a name="L931"></a><tt class="py-lineno"> 931</tt> <tt class="py-line"> </tt>
1232 <a name="L932"></a><tt class="py-lineno"> 932</tt> <tt class="py-line"> <tt class="py-comment"># Set timeout at worker level when command_timeout is defined.</tt> </tt>
1233 <a name="L933"></a><tt class="py-lineno"> 933</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command_timeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1234 <a name="L934"></a><tt class="py-lineno"> 934</tt> <tt class="py-line"> <tt class="py-name">timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">command_timeout</tt> </tt>
1235 <a name="L935"></a><tt class="py-lineno"> 935</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1236 <a name="L936"></a><tt class="py-lineno"> 936</tt> <tt class="py-line"> <tt class="py-name">timeout</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
1237 <a name="L937"></a><tt class="py-lineno"> 937</tt> <tt class="py-line"> </tt>
1238 <a name="L938"></a><tt class="py-lineno"> 938</tt> <tt class="py-line"> <tt class="py-comment"># Configure task custom status</tt> </tt>
1239 <a name="L939"></a><tt class="py-lineno"> 939</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-347" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-347', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_interactive"</tt><tt class="py-op">,</tt> <tt class="py-name">interactive</tt><tt class="py-op">)</tt> </tt>
1240 <a name="L940"></a><tt class="py-lineno"> 940</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-348" class="py-name"><a title="ClusterShell.Task.Task.set_default" class="py-name" href="#" onclick="return doclink('link-348', 'set_default', 'link-90');">set_default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_running"</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
1241 <a name="L941"></a><tt class="py-lineno"> 941</tt> <tt class="py-line"> </tt>
1242 <a name="L942"></a><tt class="py-lineno"> 942</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">source_path</tt><tt class="py-op">:</tt> </tt>
1243 <a name="L943"></a><tt class="py-lineno"> 943</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">dest_path</tt><tt class="py-op">:</tt> </tt>
1244 <a name="L944"></a><tt class="py-lineno"> 944</tt> <tt class="py-line"> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">dest_path</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">dirname</tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">source_path</tt><tt class="py-op">)</tt> </tt>
1245 <a name="L945"></a><tt class="py-lineno"> 945</tt> <tt class="py-line"> <tt class="py-name">op</tt> <tt class="py-op">=</tt> <tt class="py-string">"copy source=%s dest=%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">source_path</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">dest_path</tt><tt class="py-op">)</tt> </tt>
1246 <a name="L946"></a><tt class="py-lineno"> 946</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1247 <a name="L947"></a><tt class="py-lineno"> 947</tt> <tt class="py-line"> <tt class="py-name">op</tt> <tt class="py-op">=</tt> <tt class="py-string">"command=\"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt id="link-349" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-349', 'join', 'link-177');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
1248 <a name="L948"></a><tt class="py-lineno"> 948</tt> <tt class="py-line"> </tt>
1249 <a name="L949"></a><tt class="py-lineno"> 949</tt> <tt class="py-line"> <tt class="py-comment"># print debug values (fanout value is get from the config object and not task</tt> </tt>
1250 <a name="L950"></a><tt class="py-lineno"> 950</tt> <tt class="py-line"> <tt class="py-comment"># itself as set_info() is an asynchronous call.</tt> </tt>
1251 <a name="L951"></a><tt class="py-lineno"> 951</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-350" class="py-name"><a title="clush.ClushConfig.verbose_print" class="py-name" href="#" onclick="return doclink('link-350', 'verbose_print', 'link-155');">verbose_print</a></tt><tt class="py-op">(</tt><tt id="link-351" class="py-name"><a title="clush.VERB_VERB" class="py-name" href="#" onclick="return doclink('link-351', 'VERB_VERB', 'link-38');">VERB_VERB</a></tt><tt class="py-op">,</tt> <tt class="py-string">"clush: nodeset=%s fanout=%d [timeout conn=%.1f "</tt> \ </tt>
1252 <a name="L952"></a><tt class="py-lineno"> 952</tt> <tt class="py-line"> <tt class="py-string">"cmd=%.1f] %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">nodeset_base</tt><tt class="py-op">,</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-352" class="py-name"><a title="clush.ClushConfig.get_fanout" class="py-name" href="#" onclick="return doclink('link-352', 'get_fanout', 'link-333');">get_fanout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
1253 <a name="L953"></a><tt class="py-lineno"> 953</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-353" class="py-name" targets="Method ClusterShell.Task.Task.info()=ClusterShell.Task.Task-class.html#info"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-353', 'info', 'link-353');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"connect_timeout"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
1254 <a name="L954"></a><tt class="py-lineno"> 954</tt> <tt class="py-line"> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-354" class="py-name"><a title="ClusterShell.Task.Task.info" class="py-name" href="#" onclick="return doclink('link-354', 'info', 'link-353');">info</a></tt><tt class="py-op">(</tt><tt class="py-string">"command_timeout"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">op</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1255 <a name="L955"></a><tt class="py-lineno"> 955</tt> <tt class="py-line"> </tt>
1256 <a name="L956"></a><tt class="py-lineno"> 956</tt> <tt class="py-line"> <tt class="py-comment"># Should we use ANSI colors for nodes?</tt> </tt>
1257 <a name="L957"></a><tt class="py-lineno"> 957</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">whencolor</tt><tt class="py-op">:</tt> </tt>
1258 <a name="L958"></a><tt class="py-lineno"> 958</tt> <tt class="py-line"> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">whencolor</tt> <tt class="py-op">=</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-355" class="py-name" targets="Method clush.ClushConfig.get_color()=clush.ClushConfig-class.html#get_color"><a title="clush.ClushConfig.get_color" class="py-name" href="#" onclick="return doclink('link-355', 'get_color', 'link-355');">get_color</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1259 <a name="L959"></a><tt class="py-lineno"> 959</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">whencolor</tt> <tt class="py-op">==</tt> <tt class="py-string">"auto"</tt><tt class="py-op">:</tt> </tt>
1260 <a name="L960"></a><tt class="py-lineno"> 960</tt> <tt class="py-line"> <tt class="py-name">color</tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">isatty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">gatherall</tt> <tt class="py-keyword">or</tt> \ </tt>
1261 <a name="L961"></a><tt class="py-lineno"> 961</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">.</tt><tt class="py-name">isatty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1262 <a name="L962"></a><tt class="py-lineno"> 962</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1263 <a name="L963"></a><tt class="py-lineno"> 963</tt> <tt class="py-line"> <tt class="py-name">color</tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">whencolor</tt> <tt class="py-op">==</tt> <tt class="py-string">"always"</tt> </tt>
1264 <a name="L964"></a><tt class="py-lineno"> 964</tt> <tt class="py-line"> </tt>
1265 <a name="L965"></a><tt class="py-lineno"> 965</tt> <tt class="py-line"> <tt class="py-comment"># Create and configure display object.</tt> </tt>
1266 <a name="L966"></a><tt class="py-lineno"> 966</tt> <tt class="py-line"> <tt id="link-356" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-356', 'display', 'link-80');">display</a></tt> <tt class="py-op">=</tt> <tt id="link-357" class="py-name" targets="Class clubak.Display=clubak.Display-class.html,Class clush.Display=clush.Display-class.html"><a title="clubak.Display
1267 clush.Display" class="py-name" href="#" onclick="return doclink('link-357', 'Display', 'link-357');">Display</a></tt><tt class="py-op">(</tt><tt class="py-name">color</tt><tt class="py-op">)</tt> </tt>
1268 <a name="L967"></a><tt class="py-lineno"> 967</tt> <tt class="py-line"> <tt id="link-358" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-358', 'display', 'link-80');">display</a></tt><tt class="py-op">.</tt><tt id="link-359" class="py-name"><a title="clubak.Display.line_mode
1269 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-359', 'line_mode', 'link-51');">line_mode</a></tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt id="link-360" class="py-name"><a title="clubak.Display.line_mode
1270 clush.Display.line_mode" class="py-name" href="#" onclick="return doclink('link-360', 'line_mode', 'link-51');">line_mode</a></tt> </tt>
1271 <a name="L968"></a><tt class="py-lineno"> 968</tt> <tt class="py-line"> <tt id="link-361" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-361', 'display', 'link-80');">display</a></tt><tt class="py-op">.</tt><tt class="py-name">label</tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">label</tt> </tt>
1272 <a name="L969"></a><tt class="py-lineno"> 969</tt> <tt class="py-line"> <tt id="link-362" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-362', 'display', 'link-80');">display</a></tt><tt class="py-op">.</tt><tt id="link-363" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-363', 'regroup', 'link-45');">regroup</a></tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt id="link-364" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-364', 'regroup', 'link-45');">regroup</a></tt> </tt>
1273 <a name="L970"></a><tt class="py-lineno"> 970</tt> <tt class="py-line"> <tt id="link-365" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-365', 'display', 'link-80');">display</a></tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">groupsource</tt> </tt>
1274 <a name="L971"></a><tt class="py-lineno"> 971</tt> <tt class="py-line"> <tt id="link-366" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-366', 'display', 'link-80');">display</a></tt><tt class="py-op">.</tt><tt class="py-name">noprefix</tt> <tt class="py-op">=</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">groupbase</tt> </tt>
1275 <a name="L972"></a><tt class="py-lineno"> 972</tt> <tt class="py-line"> </tt>
1276 <a name="L973"></a><tt class="py-lineno"> 973</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-367" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-367', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_interactive"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1277 <a name="L974"></a><tt class="py-lineno"> 974</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">source_path</tt><tt class="py-op">:</tt> </tt>
1278 <a name="L975"></a><tt class="py-lineno"> 975</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">args</tt><tt class="py-op">:</tt> </tt>
1279 <a name="L976"></a><tt class="py-lineno"> 976</tt> <tt class="py-line"> <tt id="link-368" class="py-name" targets="Function clush.run_copy()=clush-module.html#run_copy"><a title="clush.run_copy" class="py-name" href="#" onclick="return doclink('link-368', 'run_copy', 'link-368');">run_copy</a></tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">source_path</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">dest_path</tt><tt class="py-op">,</tt> </tt>
1280 <a name="L977"></a><tt class="py-lineno"> 977</tt> <tt class="py-line"> <tt class="py-name">nodeset_base</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">preserve_flag</tt><tt class="py-op">,</tt> <tt id="link-369" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-369', 'display', 'link-80');">display</a></tt><tt class="py-op">)</tt> </tt>
1281 <a name="L978"></a><tt class="py-lineno"> 978</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1282 <a name="L979"></a><tt class="py-lineno"> 979</tt> <tt class="py-line"> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt id="link-370" class="py-name"><a title="ClusterShell.Worker.Worker.WorkerSimple.error" class="py-name" href="#" onclick="return doclink('link-370', 'error', 'link-312');">error</a></tt><tt class="py-op">(</tt><tt class="py-string">"please use `--dest' to specify a different "</tt> \ </tt>
1283 <a name="L980"></a><tt class="py-lineno"> 980</tt> <tt class="py-line"> <tt class="py-string">"destination"</tt><tt class="py-op">)</tt> </tt>
1284 <a name="L981"></a><tt class="py-lineno"> 981</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
1285 <a name="L982"></a><tt class="py-lineno"> 982</tt> <tt class="py-line"> <tt id="link-371" class="py-name"><a title="clush.run_command" class="py-name" href="#" onclick="return doclink('link-371', 'run_command', 'link-220');">run_command</a></tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt id="link-372" class="py-name"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-372', 'join', 'link-177');">join</a></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">nodeset_base</tt><tt class="py-op">,</tt> <tt class="py-name">gather</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> </tt>
1286 <a name="L983"></a><tt class="py-lineno"> 983</tt> <tt class="py-line"> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-373" class="py-name"><a title="clush.ClushConfig.get_verbosity" class="py-name" href="#" onclick="return doclink('link-373', 'get_verbosity', 'link-153');">get_verbosity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-374" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-374', 'display', 'link-80');">display</a></tt><tt class="py-op">)</tt> </tt>
1287 <a name="L984"></a><tt class="py-lineno"> 984</tt> <tt class="py-line"> </tt>
1288 <a name="L985"></a><tt class="py-lineno"> 985</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">user_interaction</tt><tt class="py-op">:</tt> </tt>
1289 <a name="L986"></a><tt class="py-lineno"> 986</tt> <tt class="py-line"> <tt id="link-375" class="py-name" targets="Function clush.ttyloop()=clush-module.html#ttyloop"><a title="clush.ttyloop" class="py-name" href="#" onclick="return doclink('link-375', 'ttyloop', 'link-375');">ttyloop</a></tt><tt class="py-op">(</tt><tt class="py-name">task</tt><tt class="py-op">,</tt> <tt class="py-name">nodeset_base</tt><tt class="py-op">,</tt> <tt class="py-name">gather</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">config</tt><tt class="py-op">.</tt><tt id="link-376" class="py-name"><a title="clush.ClushConfig.get_verbosity" class="py-name" href="#" onclick="return doclink('link-376', 'get_verbosity', 'link-153');">get_verbosity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-377" class="py-name"><a title="clubak.display" class="py-name" href="#" onclick="return doclink('link-377', 'display', 'link-80');">display</a></tt><tt class="py-op">)</tt> </tt>
1290 <a name="L987"></a><tt class="py-lineno"> 987</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-378" class="py-name"><a title="ClusterShell.Task.Task.default" class="py-name" href="#" onclick="return doclink('link-378', 'default', 'link-91');">default</a></tt><tt class="py-op">(</tt><tt class="py-string">"USER_interactive"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1291 <a name="L988"></a><tt class="py-lineno"> 988</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: interactive mode requires a tty"</tt> </tt>
1292 <a name="L989"></a><tt class="py-lineno"> 989</tt> <tt class="py-line"> <tt id="link-379" class="py-name"><a title="clush.clush_exit" class="py-name" href="#" onclick="return doclink('link-379', 'clush_exit', 'link-243');">clush_exit</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
1293 <a name="L990"></a><tt class="py-lineno"> 990</tt> <tt class="py-line"> </tt>
1294 <a name="L991"></a><tt class="py-lineno"> 991</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
1295 <a name="L992"></a><tt class="py-lineno"> 992</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">.</tt><tt class="py-name">maxrc</tt><tt class="py-op">:</tt> </tt>
1296 <a name="L993"></a><tt class="py-lineno"> 993</tt> <tt class="py-line"> <tt class="py-comment"># Instead of clush return code, return commands retcode</tt> </tt>
1297 <a name="L994"></a><tt class="py-lineno"> 994</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-380" class="py-name" targets="Method ClusterShell.Task.Task.max_retcode()=ClusterShell.Task.Task-class.html#max_retcode"><a title="ClusterShell.Task.Task.max_retcode" class="py-name" href="#" onclick="return doclink('link-380', 'max_retcode', 'link-380');">max_retcode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1298 <a name="L995"></a><tt class="py-lineno"> 995</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">task</tt><tt class="py-op">.</tt><tt id="link-381" class="py-name"><a title="ClusterShell.Task.Task.num_timeout
1299 ClusterShell.Worker.Worker.DistantWorker.num_timeout" class="py-name" href="#" onclick="return doclink('link-381', 'num_timeout', 'link-131');">num_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
1300 <a name="L996"></a><tt class="py-lineno"> 996</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt class="py-number">255</tt> </tt>
1301 <a name="L997"></a><tt class="py-lineno"> 997</tt> <tt class="py-line"> <tt id="link-382" class="py-name"><a title="clush.clush_exit" class="py-name" href="#" onclick="return doclink('link-382', 'clush_exit', 'link-243');">clush_exit</a></tt><tt class="py-op">(</tt><tt class="py-name">rc</tt><tt class="py-op">)</tt> </tt>
1302 </div><a name="L998"></a><tt class="py-lineno"> 998</tt> <tt class="py-line"> </tt>
1303 <a name="L999"></a><tt class="py-lineno"> 999</tt> <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
1304 <a name="L1000"></a><tt class="py-lineno">1000</tt> <tt class="py-line"> <tt id="link-383" class="py-name" targets="Function clush.clush_main()=clush-module.html#clush_main"><a title="clush.clush_main" class="py-name" href="#" onclick="return doclink('link-383', 'clush_main', 'link-383');">clush_main</a></tt><tt class="py-op">(</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">)</tt> </tt>
1305 <a name="L1001"></a><tt class="py-lineno">1001</tt> <tt class="py-line"> </tt><script type="text/javascript">
1306 <!--
1307 expandto(location.href);
1308 // -->
1309 </script>
1310 </pre>
1311 <br />
1312 <!-- ==================== NAVIGATION BAR ==================== -->
1313 <table class="navbar" border="0" width="100%" cellpadding="0"
1314 bgcolor="#a0c0ff" cellspacing="0">
1315 <tr valign="middle">
1316
1317 <!-- Tree link -->
1318 <th>&nbsp;&nbsp;&nbsp;<a
1319 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
1320
1321 <!-- Index link -->
1322 <th>&nbsp;&nbsp;&nbsp;<a
1323 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
1324
1325 <!-- Help link -->
1326 <th>&nbsp;&nbsp;&nbsp;<a
1327 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
1328
1329 <!-- Project homepage -->
1330 <th class="navbar" align="right" width="100%">
1331 <table border="0" cellpadding="0" cellspacing="0">
1332 <tr><th class="navbar" align="center"
1333 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
1334 </tr></table></th>
1335 </tr>
1336 </table>
1337 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
1338 <tr>
1339 <td align="left" class="footer">
1340 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:23 2010
1341 </td>
1342 <td align="right" class="footer">
1343 <a target="mainFrame" href="http://epydoc.sourceforge.net"
1344 >http://epydoc.sourceforge.net</a>
1345 </td>
1346 </tr>
1347 </table>
1348
1349 <script type="text/javascript">
1350 <!--
1351 // Private objects are initially displayed (because if
1352 // javascript is turned off then we want them to be
1353 // visible); but by default, we want to hide them. So hide
1354 // them unless we have a cookie that says to show them.
1355 checkCookie();
1356 // -->
1357 </script>
1358 </body>
1359 </html>
+0
-630
doc/epydoc/html/clush.ClushConfig-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush.ClushConfig</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clush-module.html">Module&nbsp;clush</a> ::
42 Class&nbsp;ClushConfig
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clush.ClushConfig-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class ClushConfig</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html#ClushConfig">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clush_cl" name="uml_class_diagram_for_clush_cl">
62 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#main_defaults" title="clush.ClushConfig.main_defaults" alt="" coords="56,479,267,497"/>
63 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#__init__" title="clush.ClushConfig.__init__" alt="" coords="56,500,267,519"/>
64 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#verbose_print" title="clush.ClushConfig.verbose_print" alt="" coords="56,519,267,537"/>
65 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#max_fdlimit" title="Make open file descriptors soft limit the max." alt="" coords="56,537,267,556"/>
66 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#set_main" title="clush.ClushConfig.set_main" alt="" coords="56,556,267,575"/>
67 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#getint" title="clush.ClushConfig.getint" alt="" coords="56,575,267,593"/>
68 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#getfloat" title="clush.ClushConfig.getfloat" alt="" coords="56,593,267,612"/>
69 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#get_color" title="clush.ClushConfig.get_color" alt="" coords="56,612,267,631"/>
70 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#get_verbosity" title="clush.ClushConfig.get_verbosity" alt="" coords="56,631,267,649"/>
71 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#get_fanout" title="clush.ClushConfig.get_fanout" alt="" coords="56,649,267,668"/>
72 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#get_connect_timeout" title="clush.ClushConfig.get_connect_timeout" alt="" coords="56,668,267,687"/>
73 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#get_command_timeout" title="clush.ClushConfig.get_command_timeout" alt="" coords="56,687,267,705"/>
74 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#get_ssh_user" title="clush.ClushConfig.get_ssh_user" alt="" coords="56,705,267,724"/>
75 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#get_ssh_path" title="clush.ClushConfig.get_ssh_path" alt="" coords="56,724,267,743"/>
76 <area shape="rect" id="node254" href="clush.ClushConfig-class.html#get_ssh_options" title="clush.ClushConfig.get_ssh_options" alt="" coords="56,743,267,761"/>
77 <area shape="rect" id="node1" href="clush.ClushConfig-class.html" title="Config class for clush (specialized ConfigParser)" alt="" coords="44,454,279,767"/>
78 <area shape="rect" id="node255" href="javascript:void(0);" title="Get an option value for a given section." alt="" coords="17,391,305,409"/>
79 <area shape="rect" id="node255" href="javascript:void(0);" title="Return a list of tuples with (name, value) for each option in the section." alt="" coords="17,409,305,428"/>
80 <area shape="rect" id="node2" href="javascript:void(0);" title="ConfigParser.ConfigParser" alt="" coords="5,358,317,434"/>
81 <area shape="rect" id="node256" href="javascript:void(0);" title="ConfigParser.RawConfigParser.SECTCRE" alt="" coords="53,31,268,49"/>
82 <area shape="rect" id="node256" href="javascript:void(0);" title="ConfigParser.RawConfigParser.OPTCRE" alt="" coords="53,49,268,68"/>
83 <area shape="rect" id="node256" href="javascript:void(0);" title="ConfigParser.RawConfigParser.defaults" alt="" coords="53,71,268,89"/>
84 <area shape="rect" id="node256" href="javascript:void(0);" title="Return a list of section names, excluding [DEFAULT]" alt="" coords="53,89,268,108"/>
85 <area shape="rect" id="node256" href="javascript:void(0);" title="Create a new section in the configuration." alt="" coords="53,108,268,127"/>
86 <area shape="rect" id="node256" href="javascript:void(0);" title="Indicate whether the named section is present in the configuration." alt="" coords="53,127,268,145"/>
87 <area shape="rect" id="node256" href="javascript:void(0);" title="Return a list of option names for the given section name." alt="" coords="53,145,268,164"/>
88 <area shape="rect" id="node256" href="javascript:void(0);" title="Read and parse a filename or a list of filenames." alt="" coords="53,164,268,183"/>
89 <area shape="rect" id="node256" href="javascript:void(0);" title="Like read() but the argument must be a file&#45;like object." alt="" coords="53,183,268,201"/>
90 <area shape="rect" id="node256" href="javascript:void(0);" title="ConfigParser.RawConfigParser.getboolean" alt="" coords="53,201,268,220"/>
91 <area shape="rect" id="node256" href="javascript:void(0);" title="ConfigParser.RawConfigParser.optionxform" alt="" coords="53,220,268,239"/>
92 <area shape="rect" id="node256" href="javascript:void(0);" title="Check for the existence of a given option in a given section." alt="" coords="53,239,268,257"/>
93 <area shape="rect" id="node256" href="javascript:void(0);" title="Set an option." alt="" coords="53,257,268,276"/>
94 <area shape="rect" id="node256" href="javascript:void(0);" title="Write an .ini&#45;format representation of the configuration state." alt="" coords="53,276,268,295"/>
95 <area shape="rect" id="node256" href="javascript:void(0);" title="Remove an option." alt="" coords="53,295,268,313"/>
96 <area shape="rect" id="node256" href="javascript:void(0);" title="Remove a file section." alt="" coords="53,313,268,332"/>
97 <area shape="rect" id="node3" href="javascript:void(0);" title="ConfigParser.RawConfigParser" alt="" coords="41,6,279,338"/>
98 </map>
99 <img src="uml_class_diagram_for_clush_cl.png" alt='' usemap="#uml_class_diagram_for_clush_cl" ismap="ismap" class="graph-without-title" />
100 </center>
101 </center>
102 <hr />
103 <p>Config class for clush (specialized ConfigParser)</p>
104
105 <!-- ==================== INSTANCE METHODS ==================== -->
106 <a name="section-InstanceMethods"></a>
107 <table class="summary" border="1" cellpadding="3"
108 cellspacing="0" width="100%" bgcolor="white">
109 <tr bgcolor="#70b0f0" class="table-header">
110 <td colspan="2" class="table-header">
111 <table border="0" cellpadding="0" cellspacing="0" width="100%">
112 <tr valign="top">
113 <td align="left"><span class="table-header">Instance Methods</span></td>
114 <td align="right" valign="top"
115 ><span class="options">[<a href="#section-InstanceMethods"
116 class="privatelink" onclick="toggle_private();"
117 >hide private</a>]</span></td>
118 </tr>
119 </table>
120 </td>
121 </tr>
122 <tr>
123 <td width="15%" align="right" valign="top" class="summary">
124 <span class="summary-type">&nbsp;</span>
125 </td><td class="summary">
126 <table width="100%" cellpadding="0" cellspacing="0" border="0">
127 <tr>
128 <td><span class="summary-sig"><a href="clush.ClushConfig-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span></td>
129 <td align="right" valign="top">
130 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.__init__">source&nbsp;code</a></span>
131
132 </td>
133 </tr>
134 </table>
135
136 </td>
137 </tr>
138 <tr>
139 <td width="15%" align="right" valign="top" class="summary">
140 <span class="summary-type">&nbsp;</span>
141 </td><td class="summary">
142 <table width="100%" cellpadding="0" cellspacing="0" border="0">
143 <tr>
144 <td><span class="summary-sig"><a name="verbose_print"></a><span class="summary-sig-name">verbose_print</span>(<span class="summary-sig-arg">self</span>,
145 <span class="summary-sig-arg">level</span>,
146 <span class="summary-sig-arg">message</span>)</span></td>
147 <td align="right" valign="top">
148 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.verbose_print">source&nbsp;code</a></span>
149
150 </td>
151 </tr>
152 </table>
153
154 </td>
155 </tr>
156 <tr>
157 <td width="15%" align="right" valign="top" class="summary">
158 <span class="summary-type">&nbsp;</span>
159 </td><td class="summary">
160 <table width="100%" cellpadding="0" cellspacing="0" border="0">
161 <tr>
162 <td><span class="summary-sig"><a name="max_fdlimit"></a><span class="summary-sig-name">max_fdlimit</span>(<span class="summary-sig-arg">self</span>)</span><br />
163 Make open file descriptors soft limit the max.</td>
164 <td align="right" valign="top">
165 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.max_fdlimit">source&nbsp;code</a></span>
166
167 </td>
168 </tr>
169 </table>
170
171 </td>
172 </tr>
173 <tr>
174 <td width="15%" align="right" valign="top" class="summary">
175 <span class="summary-type">&nbsp;</span>
176 </td><td class="summary">
177 <table width="100%" cellpadding="0" cellspacing="0" border="0">
178 <tr>
179 <td><span class="summary-sig"><a name="set_main"></a><span class="summary-sig-name">set_main</span>(<span class="summary-sig-arg">self</span>,
180 <span class="summary-sig-arg">option</span>,
181 <span class="summary-sig-arg">value</span>)</span></td>
182 <td align="right" valign="top">
183 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.set_main">source&nbsp;code</a></span>
184
185 </td>
186 </tr>
187 </table>
188
189 </td>
190 </tr>
191 <tr>
192 <td width="15%" align="right" valign="top" class="summary">
193 <span class="summary-type">&nbsp;</span>
194 </td><td class="summary">
195 <table width="100%" cellpadding="0" cellspacing="0" border="0">
196 <tr>
197 <td><span class="summary-sig"><a href="clush.ClushConfig-class.html#getint" class="summary-sig-name">getint</a>(<span class="summary-sig-arg">self</span>,
198 <span class="summary-sig-arg">section</span>,
199 <span class="summary-sig-arg">option</span>)</span></td>
200 <td align="right" valign="top">
201 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.getint">source&nbsp;code</a></span>
202
203 </td>
204 </tr>
205 </table>
206
207 </td>
208 </tr>
209 <tr>
210 <td width="15%" align="right" valign="top" class="summary">
211 <span class="summary-type">&nbsp;</span>
212 </td><td class="summary">
213 <table width="100%" cellpadding="0" cellspacing="0" border="0">
214 <tr>
215 <td><span class="summary-sig"><a href="clush.ClushConfig-class.html#getfloat" class="summary-sig-name">getfloat</a>(<span class="summary-sig-arg">self</span>,
216 <span class="summary-sig-arg">section</span>,
217 <span class="summary-sig-arg">option</span>)</span></td>
218 <td align="right" valign="top">
219 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.getfloat">source&nbsp;code</a></span>
220
221 </td>
222 </tr>
223 </table>
224
225 </td>
226 </tr>
227 <tr class="private">
228 <td width="15%" align="right" valign="top" class="summary">
229 <span class="summary-type">&nbsp;</span>
230 </td><td class="summary">
231 <table width="100%" cellpadding="0" cellspacing="0" border="0">
232 <tr>
233 <td><span class="summary-sig"><a name="_get_optional"></a><span class="summary-sig-name">_get_optional</span>(<span class="summary-sig-arg">self</span>,
234 <span class="summary-sig-arg">section</span>,
235 <span class="summary-sig-arg">option</span>)</span></td>
236 <td align="right" valign="top">
237 <span class="codelink"><a href="clush-pysrc.html#ClushConfig._get_optional">source&nbsp;code</a></span>
238
239 </td>
240 </tr>
241 </table>
242
243 </td>
244 </tr>
245 <tr>
246 <td width="15%" align="right" valign="top" class="summary">
247 <span class="summary-type">&nbsp;</span>
248 </td><td class="summary">
249 <table width="100%" cellpadding="0" cellspacing="0" border="0">
250 <tr>
251 <td><span class="summary-sig"><a name="get_color"></a><span class="summary-sig-name">get_color</span>(<span class="summary-sig-arg">self</span>)</span></td>
252 <td align="right" valign="top">
253 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.get_color">source&nbsp;code</a></span>
254
255 </td>
256 </tr>
257 </table>
258
259 </td>
260 </tr>
261 <tr>
262 <td width="15%" align="right" valign="top" class="summary">
263 <span class="summary-type">&nbsp;</span>
264 </td><td class="summary">
265 <table width="100%" cellpadding="0" cellspacing="0" border="0">
266 <tr>
267 <td><span class="summary-sig"><a name="get_verbosity"></a><span class="summary-sig-name">get_verbosity</span>(<span class="summary-sig-arg">self</span>)</span></td>
268 <td align="right" valign="top">
269 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.get_verbosity">source&nbsp;code</a></span>
270
271 </td>
272 </tr>
273 </table>
274
275 </td>
276 </tr>
277 <tr>
278 <td width="15%" align="right" valign="top" class="summary">
279 <span class="summary-type">&nbsp;</span>
280 </td><td class="summary">
281 <table width="100%" cellpadding="0" cellspacing="0" border="0">
282 <tr>
283 <td><span class="summary-sig"><a name="get_fanout"></a><span class="summary-sig-name">get_fanout</span>(<span class="summary-sig-arg">self</span>)</span></td>
284 <td align="right" valign="top">
285 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.get_fanout">source&nbsp;code</a></span>
286
287 </td>
288 </tr>
289 </table>
290
291 </td>
292 </tr>
293 <tr>
294 <td width="15%" align="right" valign="top" class="summary">
295 <span class="summary-type">&nbsp;</span>
296 </td><td class="summary">
297 <table width="100%" cellpadding="0" cellspacing="0" border="0">
298 <tr>
299 <td><span class="summary-sig"><a name="get_connect_timeout"></a><span class="summary-sig-name">get_connect_timeout</span>(<span class="summary-sig-arg">self</span>)</span></td>
300 <td align="right" valign="top">
301 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.get_connect_timeout">source&nbsp;code</a></span>
302
303 </td>
304 </tr>
305 </table>
306
307 </td>
308 </tr>
309 <tr>
310 <td width="15%" align="right" valign="top" class="summary">
311 <span class="summary-type">&nbsp;</span>
312 </td><td class="summary">
313 <table width="100%" cellpadding="0" cellspacing="0" border="0">
314 <tr>
315 <td><span class="summary-sig"><a name="get_command_timeout"></a><span class="summary-sig-name">get_command_timeout</span>(<span class="summary-sig-arg">self</span>)</span></td>
316 <td align="right" valign="top">
317 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.get_command_timeout">source&nbsp;code</a></span>
318
319 </td>
320 </tr>
321 </table>
322
323 </td>
324 </tr>
325 <tr>
326 <td width="15%" align="right" valign="top" class="summary">
327 <span class="summary-type">&nbsp;</span>
328 </td><td class="summary">
329 <table width="100%" cellpadding="0" cellspacing="0" border="0">
330 <tr>
331 <td><span class="summary-sig"><a name="get_ssh_user"></a><span class="summary-sig-name">get_ssh_user</span>(<span class="summary-sig-arg">self</span>)</span></td>
332 <td align="right" valign="top">
333 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.get_ssh_user">source&nbsp;code</a></span>
334
335 </td>
336 </tr>
337 </table>
338
339 </td>
340 </tr>
341 <tr>
342 <td width="15%" align="right" valign="top" class="summary">
343 <span class="summary-type">&nbsp;</span>
344 </td><td class="summary">
345 <table width="100%" cellpadding="0" cellspacing="0" border="0">
346 <tr>
347 <td><span class="summary-sig"><a name="get_ssh_path"></a><span class="summary-sig-name">get_ssh_path</span>(<span class="summary-sig-arg">self</span>)</span></td>
348 <td align="right" valign="top">
349 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.get_ssh_path">source&nbsp;code</a></span>
350
351 </td>
352 </tr>
353 </table>
354
355 </td>
356 </tr>
357 <tr>
358 <td width="15%" align="right" valign="top" class="summary">
359 <span class="summary-type">&nbsp;</span>
360 </td><td class="summary">
361 <table width="100%" cellpadding="0" cellspacing="0" border="0">
362 <tr>
363 <td><span class="summary-sig"><a name="get_ssh_options"></a><span class="summary-sig-name">get_ssh_options</span>(<span class="summary-sig-arg">self</span>)</span></td>
364 <td align="right" valign="top">
365 <span class="codelink"><a href="clush-pysrc.html#ClushConfig.get_ssh_options">source&nbsp;code</a></span>
366
367 </td>
368 </tr>
369 </table>
370
371 </td>
372 </tr>
373 <tr>
374 <td colspan="2" class="summary">
375 <p class="indent-wrapped-lines"><b>Inherited from <code>ConfigParser.ConfigParser</code></b>:
376 <code>get</code>,
377 <code>items</code>
378 </p>
379 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code>ConfigParser.ConfigParser</code></b> (private):
380 <code>_interpolate</code>,
381 <code>_interpolation_replace</code>
382 </p></div>
383 <p class="indent-wrapped-lines"><b>Inherited from <code>ConfigParser.RawConfigParser</code></b>:
384 <code>add_section</code>,
385 <code>defaults</code>,
386 <code>getboolean</code>,
387 <code>has_option</code>,
388 <code>has_section</code>,
389 <code>options</code>,
390 <code>optionxform</code>,
391 <code>read</code>,
392 <code>readfp</code>,
393 <code>remove_option</code>,
394 <code>remove_section</code>,
395 <code>sections</code>,
396 <code>set</code>,
397 <code>write</code>
398 </p>
399 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code>ConfigParser.RawConfigParser</code></b> (private):
400 <code>_get</code>,
401 <code>_read</code>
402 </p></div>
403 </td>
404 </tr>
405 </table>
406 <!-- ==================== CLASS VARIABLES ==================== -->
407 <a name="section-ClassVariables"></a>
408 <table class="summary" border="1" cellpadding="3"
409 cellspacing="0" width="100%" bgcolor="white">
410 <tr bgcolor="#70b0f0" class="table-header">
411 <td colspan="2" class="table-header">
412 <table border="0" cellpadding="0" cellspacing="0" width="100%">
413 <tr valign="top">
414 <td align="left"><span class="table-header">Class Variables</span></td>
415 <td align="right" valign="top"
416 ><span class="options">[<a href="#section-ClassVariables"
417 class="privatelink" onclick="toggle_private();"
418 >hide private</a>]</span></td>
419 </tr>
420 </table>
421 </td>
422 </tr>
423 <tr>
424 <td width="15%" align="right" valign="top" class="summary">
425 <span class="summary-type">&nbsp;</span>
426 </td><td class="summary">
427 <a href="clush.ClushConfig-class.html#main_defaults" class="summary-name">main_defaults</a> = <code title="{'color': 'never',
428 'command_timeout': '0',
429 'connect_timeout': '30',
430 'fanout': '64',
431 'history_size': '100',
432 'verbosity': '1'}"><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">color</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">never</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">command_timeout</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">0</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">co</code><code class="variable-ellipsis">...</code></code>
433 </td>
434 </tr>
435 <tr>
436 <td colspan="2" class="summary">
437 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code>ConfigParser.ConfigParser</code></b> (private):
438 <code>_KEYCRE</code>
439 </p></div>
440 <p class="indent-wrapped-lines"><b>Inherited from <code>ConfigParser.RawConfigParser</code></b>:
441 <code>OPTCRE</code>,
442 <code>SECTCRE</code>
443 </p>
444 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code>ConfigParser.RawConfigParser</code></b> (private):
445 <code>_boolean_states</code>
446 </p></div>
447 </td>
448 </tr>
449 </table>
450 <!-- ==================== METHOD DETAILS ==================== -->
451 <a name="section-MethodDetails"></a>
452 <table class="details" border="1" cellpadding="3"
453 cellspacing="0" width="100%" bgcolor="white">
454 <tr bgcolor="#70b0f0" class="table-header">
455 <td colspan="2" class="table-header">
456 <table border="0" cellpadding="0" cellspacing="0" width="100%">
457 <tr valign="top">
458 <td align="left"><span class="table-header">Method Details</span></td>
459 <td align="right" valign="top"
460 ><span class="options">[<a href="#section-MethodDetails"
461 class="privatelink" onclick="toggle_private();"
462 >hide private</a>]</span></td>
463 </tr>
464 </table>
465 </td>
466 </tr>
467 </table>
468 <a name="__init__"></a>
469 <div>
470 <table class="details" border="1" cellpadding="3"
471 cellspacing="0" width="100%" bgcolor="white">
472 <tr><td>
473 <table width="100%" cellpadding="0" cellspacing="0" border="0">
474 <tr valign="top"><td>
475 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
476 <br /><em class="fname">(Constructor)</em>
477 </h3>
478 </td><td align="right" valign="top"
479 ><span class="codelink"><a href="clush-pysrc.html#ClushConfig.__init__">source&nbsp;code</a></span>&nbsp;
480 </td>
481 </tr></table>
482
483
484 <dl class="fields">
485 <dt>Overrides:
486 ConfigParser.RawConfigParser.__init__
487 </dt>
488 </dl>
489 </td></tr></table>
490 </div>
491 <a name="getint"></a>
492 <div>
493 <table class="details" border="1" cellpadding="3"
494 cellspacing="0" width="100%" bgcolor="white">
495 <tr><td>
496 <table width="100%" cellpadding="0" cellspacing="0" border="0">
497 <tr valign="top"><td>
498 <h3 class="epydoc"><span class="sig"><span class="sig-name">getint</span>(<span class="sig-arg">self</span>,
499 <span class="sig-arg">section</span>,
500 <span class="sig-arg">option</span>)</span>
501 </h3>
502 </td><td align="right" valign="top"
503 ><span class="codelink"><a href="clush-pysrc.html#ClushConfig.getint">source&nbsp;code</a></span>&nbsp;
504 </td>
505 </tr></table>
506
507
508 <dl class="fields">
509 <dt>Overrides:
510 ConfigParser.RawConfigParser.getint
511 </dt>
512 </dl>
513 </td></tr></table>
514 </div>
515 <a name="getfloat"></a>
516 <div>
517 <table class="details" border="1" cellpadding="3"
518 cellspacing="0" width="100%" bgcolor="white">
519 <tr><td>
520 <table width="100%" cellpadding="0" cellspacing="0" border="0">
521 <tr valign="top"><td>
522 <h3 class="epydoc"><span class="sig"><span class="sig-name">getfloat</span>(<span class="sig-arg">self</span>,
523 <span class="sig-arg">section</span>,
524 <span class="sig-arg">option</span>)</span>
525 </h3>
526 </td><td align="right" valign="top"
527 ><span class="codelink"><a href="clush-pysrc.html#ClushConfig.getfloat">source&nbsp;code</a></span>&nbsp;
528 </td>
529 </tr></table>
530
531
532 <dl class="fields">
533 <dt>Overrides:
534 ConfigParser.RawConfigParser.getfloat
535 </dt>
536 </dl>
537 </td></tr></table>
538 </div>
539 <br />
540 <!-- ==================== CLASS VARIABLE DETAILS ==================== -->
541 <a name="section-ClassVariableDetails"></a>
542 <table class="details" border="1" cellpadding="3"
543 cellspacing="0" width="100%" bgcolor="white">
544 <tr bgcolor="#70b0f0" class="table-header">
545 <td colspan="2" class="table-header">
546 <table border="0" cellpadding="0" cellspacing="0" width="100%">
547 <tr valign="top">
548 <td align="left"><span class="table-header">Class Variable Details</span></td>
549 <td align="right" valign="top"
550 ><span class="options">[<a href="#section-ClassVariableDetails"
551 class="privatelink" onclick="toggle_private();"
552 >hide private</a>]</span></td>
553 </tr>
554 </table>
555 </td>
556 </tr>
557 </table>
558 <a name="main_defaults"></a>
559 <div>
560 <table class="details" border="1" cellpadding="3"
561 cellspacing="0" width="100%" bgcolor="white">
562 <tr><td>
563 <h3 class="epydoc">main_defaults</h3>
564
565 <dl class="fields">
566 </dl>
567 <dl class="fields">
568 <dt>Value:</dt>
569 <dd><table><tr><td><pre class="variable">
570 <code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">color</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">never</code><code class="variable-quote">'</code><code class="variable-op">,</code>
571 <code class="variable-quote">'</code><code class="variable-string">command_timeout</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">0</code><code class="variable-quote">'</code><code class="variable-op">,</code>
572 <code class="variable-quote">'</code><code class="variable-string">connect_timeout</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">30</code><code class="variable-quote">'</code><code class="variable-op">,</code>
573 <code class="variable-quote">'</code><code class="variable-string">fanout</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">64</code><code class="variable-quote">'</code><code class="variable-op">,</code>
574 <code class="variable-quote">'</code><code class="variable-string">history_size</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">100</code><code class="variable-quote">'</code><code class="variable-op">,</code>
575 <code class="variable-quote">'</code><code class="variable-string">verbosity</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">1</code><code class="variable-quote">'</code><code class="variable-group">}</code>
576 </pre></td></tr></table>
577 </dd>
578 </dl>
579 </td></tr></table>
580 </div>
581 <br />
582 <!-- ==================== NAVIGATION BAR ==================== -->
583 <table class="navbar" border="0" width="100%" cellpadding="0"
584 bgcolor="#a0c0ff" cellspacing="0">
585 <tr valign="middle">
586
587 <!-- Tree link -->
588 <th>&nbsp;&nbsp;&nbsp;<a
589 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
590
591 <!-- Index link -->
592 <th>&nbsp;&nbsp;&nbsp;<a
593 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
594
595 <!-- Help link -->
596 <th>&nbsp;&nbsp;&nbsp;<a
597 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
598
599 <!-- Project homepage -->
600 <th class="navbar" align="right" width="100%">
601 <table border="0" cellpadding="0" cellspacing="0">
602 <tr><th class="navbar" align="center"
603 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
604 </tr></table></th>
605 </tr>
606 </table>
607 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
608 <tr>
609 <td align="left" class="footer">
610 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
611 </td>
612 <td align="right" class="footer">
613 <a target="mainFrame" href="http://epydoc.sourceforge.net"
614 >http://epydoc.sourceforge.net</a>
615 </td>
616 </tr>
617 </table>
618
619 <script type="text/javascript">
620 <!--
621 // Private objects are initially displayed (because if
622 // javascript is turned off then we want them to be
623 // visible); but by default, we want to hide them. So hide
624 // them unless we have a cookie that says to show them.
625 checkCookie();
626 // -->
627 </script>
628 </body>
629 </html>
+0
-314
doc/epydoc/html/clush.ClushConfigError-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush.ClushConfigError</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clush-module.html">Module&nbsp;clush</a> ::
42 Class&nbsp;ClushConfigError
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clush.ClushConfigError-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class ClushConfigError</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html#ClushConfigError">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clush_cl_2" name="uml_class_diagram_for_clush_cl_2">
62 <area shape="rect" id="node257" href="clush.ClushConfigError-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,375,225,393"/>
63 <area shape="rect" id="node257" href="clush.ClushConfigError-class.html#__str__" title="str(x)" alt="" coords="17,393,225,412"/>
64 <area shape="rect" id="node1" href="clush.ClushConfigError-class.html" title="Exception used by ClushConfig to report an error." alt="" coords="5,342,237,418"/>
65 <area shape="rect" id="node258" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="57,297,184,316"/>
66 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="45,265,195,322"/>
67 <area shape="rect" id="node259" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="43,31,200,49"/>
68 <area shape="rect" id="node259" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="43,49,200,68"/>
69 <area shape="rect" id="node259" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="43,71,200,89"/>
70 <area shape="rect" id="node259" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="43,89,200,108"/>
71 <area shape="rect" id="node259" href="javascript:void(0);" title="x[y]" alt="" coords="43,108,200,127"/>
72 <area shape="rect" id="node259" href="javascript:void(0);" title="x[i:j]" alt="" coords="43,127,200,145"/>
73 <area shape="rect" id="node259" href="javascript:void(0);" title="helper for pickle" alt="" coords="43,145,200,164"/>
74 <area shape="rect" id="node259" href="javascript:void(0);" title="repr(x)" alt="" coords="43,164,200,183"/>
75 <area shape="rect" id="node259" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="43,183,200,201"/>
76 <area shape="rect" id="node259" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="43,201,200,220"/>
77 <area shape="rect" id="node259" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="43,220,200,239"/>
78 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="31,6,212,245"/>
79 </map>
80 <img src="uml_class_diagram_for_clush_cl_2.png" alt='' usemap="#uml_class_diagram_for_clush_cl_2" ismap="ismap" class="graph-without-title" />
81 </center>
82 </center>
83 <hr />
84 <p>Exception used by ClushConfig to report an error.</p>
85
86 <!-- ==================== INSTANCE METHODS ==================== -->
87 <a name="section-InstanceMethods"></a>
88 <table class="summary" border="1" cellpadding="3"
89 cellspacing="0" width="100%" bgcolor="white">
90 <tr bgcolor="#70b0f0" class="table-header">
91 <td colspan="2" class="table-header">
92 <table border="0" cellpadding="0" cellspacing="0" width="100%">
93 <tr valign="top">
94 <td align="left"><span class="table-header">Instance Methods</span></td>
95 <td align="right" valign="top"
96 ><span class="options">[<a href="#section-InstanceMethods"
97 class="privatelink" onclick="toggle_private();"
98 >hide private</a>]</span></td>
99 </tr>
100 </table>
101 </td>
102 </tr>
103 <tr>
104 <td width="15%" align="right" valign="top" class="summary">
105 <span class="summary-type">&nbsp;</span>
106 </td><td class="summary">
107 <table width="100%" cellpadding="0" cellspacing="0" border="0">
108 <tr>
109 <td><span class="summary-sig"><a href="clush.ClushConfigError-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
110 <span class="summary-sig-arg">section</span>,
111 <span class="summary-sig-arg">option</span>,
112 <span class="summary-sig-arg">msg</span>)</span><br />
113 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
114 <td align="right" valign="top">
115 <span class="codelink"><a href="clush-pysrc.html#ClushConfigError.__init__">source&nbsp;code</a></span>
116
117 </td>
118 </tr>
119 </table>
120
121 </td>
122 </tr>
123 <tr>
124 <td width="15%" align="right" valign="top" class="summary">
125 <span class="summary-type">&nbsp;</span>
126 </td><td class="summary">
127 <table width="100%" cellpadding="0" cellspacing="0" border="0">
128 <tr>
129 <td><span class="summary-sig"><a href="clush.ClushConfigError-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
130 str(x)</td>
131 <td align="right" valign="top">
132 <span class="codelink"><a href="clush-pysrc.html#ClushConfigError.__str__">source&nbsp;code</a></span>
133
134 </td>
135 </tr>
136 </table>
137
138 </td>
139 </tr>
140 <tr>
141 <td colspan="2" class="summary">
142 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
143 <code>__new__</code>
144 </p>
145 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
146 <code>__delattr__</code>,
147 <code>__getattribute__</code>,
148 <code>__getitem__</code>,
149 <code>__getslice__</code>,
150 <code>__reduce__</code>,
151 <code>__repr__</code>,
152 <code>__setattr__</code>,
153 <code>__setstate__</code>,
154 <code>__unicode__</code>
155 </p>
156 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
157 <code>__format__</code>,
158 <code>__hash__</code>,
159 <code>__reduce_ex__</code>,
160 <code>__sizeof__</code>,
161 <code>__subclasshook__</code>
162 </p>
163 </td>
164 </tr>
165 </table>
166 <!-- ==================== PROPERTIES ==================== -->
167 <a name="section-Properties"></a>
168 <table class="summary" border="1" cellpadding="3"
169 cellspacing="0" width="100%" bgcolor="white">
170 <tr bgcolor="#70b0f0" class="table-header">
171 <td colspan="2" class="table-header">
172 <table border="0" cellpadding="0" cellspacing="0" width="100%">
173 <tr valign="top">
174 <td align="left"><span class="table-header">Properties</span></td>
175 <td align="right" valign="top"
176 ><span class="options">[<a href="#section-Properties"
177 class="privatelink" onclick="toggle_private();"
178 >hide private</a>]</span></td>
179 </tr>
180 </table>
181 </td>
182 </tr>
183 <tr>
184 <td colspan="2" class="summary">
185 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
186 <code>args</code>,
187 <code>message</code>
188 </p>
189 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
190 <code>__class__</code>
191 </p>
192 </td>
193 </tr>
194 </table>
195 <!-- ==================== METHOD DETAILS ==================== -->
196 <a name="section-MethodDetails"></a>
197 <table class="details" border="1" cellpadding="3"
198 cellspacing="0" width="100%" bgcolor="white">
199 <tr bgcolor="#70b0f0" class="table-header">
200 <td colspan="2" class="table-header">
201 <table border="0" cellpadding="0" cellspacing="0" width="100%">
202 <tr valign="top">
203 <td align="left"><span class="table-header">Method Details</span></td>
204 <td align="right" valign="top"
205 ><span class="options">[<a href="#section-MethodDetails"
206 class="privatelink" onclick="toggle_private();"
207 >hide private</a>]</span></td>
208 </tr>
209 </table>
210 </td>
211 </tr>
212 </table>
213 <a name="__init__"></a>
214 <div>
215 <table class="details" border="1" cellpadding="3"
216 cellspacing="0" width="100%" bgcolor="white">
217 <tr><td>
218 <table width="100%" cellpadding="0" cellspacing="0" border="0">
219 <tr valign="top"><td>
220 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
221 <span class="sig-arg">section</span>,
222 <span class="sig-arg">option</span>,
223 <span class="sig-arg">msg</span>)</span>
224 <br /><em class="fname">(Constructor)</em>
225 </h3>
226 </td><td align="right" valign="top"
227 ><span class="codelink"><a href="clush-pysrc.html#ClushConfigError.__init__">source&nbsp;code</a></span>&nbsp;
228 </td>
229 </tr></table>
230
231 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
232 signature</p>
233 <dl class="fields">
234 <dt>Overrides:
235 object.__init__
236 <dd><em class="note">(inherited documentation)</em></dd>
237 </dt>
238 </dl>
239 </td></tr></table>
240 </div>
241 <a name="__str__"></a>
242 <div>
243 <table class="details" border="1" cellpadding="3"
244 cellspacing="0" width="100%" bgcolor="white">
245 <tr><td>
246 <table width="100%" cellpadding="0" cellspacing="0" border="0">
247 <tr valign="top"><td>
248 <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
249 <br /><em class="fname">(Informal representation operator)</em>
250 </h3>
251 </td><td align="right" valign="top"
252 ><span class="codelink"><a href="clush-pysrc.html#ClushConfigError.__str__">source&nbsp;code</a></span>&nbsp;
253 </td>
254 </tr></table>
255
256 <p>str(x)</p>
257 <dl class="fields">
258 <dt>Overrides:
259 object.__str__
260 <dd><em class="note">(inherited documentation)</em></dd>
261 </dt>
262 </dl>
263 </td></tr></table>
264 </div>
265 <br />
266 <!-- ==================== NAVIGATION BAR ==================== -->
267 <table class="navbar" border="0" width="100%" cellpadding="0"
268 bgcolor="#a0c0ff" cellspacing="0">
269 <tr valign="middle">
270
271 <!-- Tree link -->
272 <th>&nbsp;&nbsp;&nbsp;<a
273 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
274
275 <!-- Index link -->
276 <th>&nbsp;&nbsp;&nbsp;<a
277 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
278
279 <!-- Help link -->
280 <th>&nbsp;&nbsp;&nbsp;<a
281 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
282
283 <!-- Project homepage -->
284 <th class="navbar" align="right" width="100%">
285 <table border="0" cellpadding="0" cellspacing="0">
286 <tr><th class="navbar" align="center"
287 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
288 </tr></table></th>
289 </tr>
290 </table>
291 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
292 <tr>
293 <td align="left" class="footer">
294 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
295 </td>
296 <td align="right" class="footer">
297 <a target="mainFrame" href="http://epydoc.sourceforge.net"
298 >http://epydoc.sourceforge.net</a>
299 </td>
300 </tr>
301 </table>
302
303 <script type="text/javascript">
304 <!--
305 // Private objects are initially displayed (because if
306 // javascript is turned off then we want them to be
307 // visible); but by default, we want to hide them. So hide
308 // them unless we have a cookie that says to show them.
309 checkCookie();
310 // -->
311 </script>
312 </body>
313 </html>
+0
-475
doc/epydoc/html/clush.DirectOutputHandler-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush.DirectOutputHandler</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clush-module.html">Module&nbsp;clush</a> ::
42 Class&nbsp;DirectOutputHandler
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clush.DirectOutputHandler-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class DirectOutputHandler</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clush_di" name="uml_class_diagram_for_clush_di">
62 <area shape="rect" id="node260" href="clush.DirectOutputHandler-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="40,172,188,191"/>
63 <area shape="rect" id="node260" href="clush.DirectOutputHandler-class.html#ev_read" title="Called to indicate that a worker has data to read." alt="" coords="40,191,188,209"/>
64 <area shape="rect" id="node260" href="clush.DirectOutputHandler-class.html#ev_error" title="Called to indicate that a worker has error to read (on stderr)." alt="" coords="40,209,188,228"/>
65 <area shape="rect" id="node260" href="clush.DirectOutputHandler-class.html#ev_hup" title="Called to indicate that a worker&#39;s connection has been closed." alt="" coords="40,228,188,247"/>
66 <area shape="rect" id="node260" href="clush.DirectOutputHandler-class.html#ev_timeout" title="Called to indicate that a worker has timed out (worker timeout only)." alt="" coords="40,247,188,265"/>
67 <area shape="rect" id="node260" href="clush.DirectOutputHandler-class.html#ev_close" title="Called to indicate that a worker has just finished (it may already have &#160;failed on timeout)." alt="" coords="40,265,188,284"/>
68 <area shape="rect" id="node1" href="clush.DirectOutputHandler-class.html" title="Direct output event handler class." alt="" coords="28,139,199,290"/>
69 <area shape="rect" id="node261" href="ClusterShell.Event.EventHandler-class.html#ev_start" title="Called to indicate that a worker has just started." alt="" coords="17,39,212,57"/>
70 <area shape="rect" id="node261" href="ClusterShell.Event.EventHandler-class.html#ev_written" title="Called to indicate that writing has been done." alt="" coords="17,57,212,76"/>
71 <area shape="rect" id="node261" href="ClusterShell.Event.EventHandler-class.html#ev_msg" title="Handle port message." alt="" coords="17,76,212,95"/>
72 <area shape="rect" id="node261" href="ClusterShell.Event.EventHandler-class.html#ev_timer" title="Handle firing timer." alt="" coords="17,95,212,113"/>
73 <area shape="rect" id="node2" href="ClusterShell.Event.EventHandler-class.html" title="Base class EventHandler." alt="" coords="5,6,224,119"/>
74 </map>
75 <img src="uml_class_diagram_for_clush_di.png" alt='' usemap="#uml_class_diagram_for_clush_di" ismap="ismap" class="graph-without-title" />
76 </center>
77 </center>
78 <hr />
79 <p>Direct output event handler class.</p>
80
81 <!-- ==================== INSTANCE METHODS ==================== -->
82 <a name="section-InstanceMethods"></a>
83 <table class="summary" border="1" cellpadding="3"
84 cellspacing="0" width="100%" bgcolor="white">
85 <tr bgcolor="#70b0f0" class="table-header">
86 <td colspan="2" class="table-header">
87 <table border="0" cellpadding="0" cellspacing="0" width="100%">
88 <tr valign="top">
89 <td align="left"><span class="table-header">Instance Methods</span></td>
90 <td align="right" valign="top"
91 ><span class="options">[<a href="#section-InstanceMethods"
92 class="privatelink" onclick="toggle_private();"
93 >hide private</a>]</span></td>
94 </tr>
95 </table>
96 </td>
97 </tr>
98 <tr>
99 <td width="15%" align="right" valign="top" class="summary">
100 <span class="summary-type">&nbsp;</span>
101 </td><td class="summary">
102 <table width="100%" cellpadding="0" cellspacing="0" border="0">
103 <tr>
104 <td><span class="summary-sig"><a href="clush.DirectOutputHandler-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
105 <span class="summary-sig-arg">display</span>)</span><br />
106 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
107 <td align="right" valign="top">
108 <span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.__init__">source&nbsp;code</a></span>
109
110 </td>
111 </tr>
112 </table>
113
114 </td>
115 </tr>
116 <tr>
117 <td width="15%" align="right" valign="top" class="summary">
118 <span class="summary-type">&nbsp;</span>
119 </td><td class="summary">
120 <table width="100%" cellpadding="0" cellspacing="0" border="0">
121 <tr>
122 <td><span class="summary-sig"><a href="clush.DirectOutputHandler-class.html#ev_read" class="summary-sig-name">ev_read</a>(<span class="summary-sig-arg">self</span>,
123 <span class="summary-sig-arg">worker</span>)</span><br />
124 Called to indicate that a worker has data to read.</td>
125 <td align="right" valign="top">
126 <span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_read">source&nbsp;code</a></span>
127
128 </td>
129 </tr>
130 </table>
131
132 </td>
133 </tr>
134 <tr>
135 <td width="15%" align="right" valign="top" class="summary">
136 <span class="summary-type">&nbsp;</span>
137 </td><td class="summary">
138 <table width="100%" cellpadding="0" cellspacing="0" border="0">
139 <tr>
140 <td><span class="summary-sig"><a href="clush.DirectOutputHandler-class.html#ev_error" class="summary-sig-name">ev_error</a>(<span class="summary-sig-arg">self</span>,
141 <span class="summary-sig-arg">worker</span>)</span><br />
142 Called to indicate that a worker has error to read (on stderr).</td>
143 <td align="right" valign="top">
144 <span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_error">source&nbsp;code</a></span>
145
146 </td>
147 </tr>
148 </table>
149
150 </td>
151 </tr>
152 <tr>
153 <td width="15%" align="right" valign="top" class="summary">
154 <span class="summary-type">&nbsp;</span>
155 </td><td class="summary">
156 <table width="100%" cellpadding="0" cellspacing="0" border="0">
157 <tr>
158 <td><span class="summary-sig"><a href="clush.DirectOutputHandler-class.html#ev_hup" class="summary-sig-name">ev_hup</a>(<span class="summary-sig-arg">self</span>,
159 <span class="summary-sig-arg">worker</span>)</span><br />
160 Called to indicate that a worker's connection has been closed.</td>
161 <td align="right" valign="top">
162 <span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_hup">source&nbsp;code</a></span>
163
164 </td>
165 </tr>
166 </table>
167
168 </td>
169 </tr>
170 <tr>
171 <td width="15%" align="right" valign="top" class="summary">
172 <span class="summary-type">&nbsp;</span>
173 </td><td class="summary">
174 <table width="100%" cellpadding="0" cellspacing="0" border="0">
175 <tr>
176 <td><span class="summary-sig"><a href="clush.DirectOutputHandler-class.html#ev_timeout" class="summary-sig-name">ev_timeout</a>(<span class="summary-sig-arg">self</span>,
177 <span class="summary-sig-arg">worker</span>)</span><br />
178 Called to indicate that a worker has timed out (worker timeout only).</td>
179 <td align="right" valign="top">
180 <span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_timeout">source&nbsp;code</a></span>
181
182 </td>
183 </tr>
184 </table>
185
186 </td>
187 </tr>
188 <tr>
189 <td width="15%" align="right" valign="top" class="summary">
190 <span class="summary-type">&nbsp;</span>
191 </td><td class="summary">
192 <table width="100%" cellpadding="0" cellspacing="0" border="0">
193 <tr>
194 <td><span class="summary-sig"><a href="clush.DirectOutputHandler-class.html#ev_close" class="summary-sig-name">ev_close</a>(<span class="summary-sig-arg">self</span>,
195 <span class="summary-sig-arg">worker</span>)</span><br />
196 Called to indicate that a worker has just finished (it may already
197 have failed on timeout).</td>
198 <td align="right" valign="top">
199 <span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_close">source&nbsp;code</a></span>
200
201 </td>
202 </tr>
203 </table>
204
205 </td>
206 </tr>
207 <tr>
208 <td colspan="2" class="summary">
209 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></code></b>:
210 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_msg">ev_msg</a></code>,
211 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_start">ev_start</a></code>,
212 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_timer">ev_timer</a></code>,
213 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_written">ev_written</a></code>
214 </p>
215 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></code></b> (private):
216 <code><a href="ClusterShell.Event.EventHandler-class.html#_invoke" onclick="show_private();">_invoke</a></code>
217 </p></div>
218 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
219 <code>__delattr__</code>,
220 <code>__format__</code>,
221 <code>__getattribute__</code>,
222 <code>__hash__</code>,
223 <code>__new__</code>,
224 <code>__reduce__</code>,
225 <code>__reduce_ex__</code>,
226 <code>__repr__</code>,
227 <code>__setattr__</code>,
228 <code>__sizeof__</code>,
229 <code>__str__</code>,
230 <code>__subclasshook__</code>
231 </p>
232 </td>
233 </tr>
234 </table>
235 <!-- ==================== PROPERTIES ==================== -->
236 <a name="section-Properties"></a>
237 <table class="summary" border="1" cellpadding="3"
238 cellspacing="0" width="100%" bgcolor="white">
239 <tr bgcolor="#70b0f0" class="table-header">
240 <td colspan="2" class="table-header">
241 <table border="0" cellpadding="0" cellspacing="0" width="100%">
242 <tr valign="top">
243 <td align="left"><span class="table-header">Properties</span></td>
244 <td align="right" valign="top"
245 ><span class="options">[<a href="#section-Properties"
246 class="privatelink" onclick="toggle_private();"
247 >hide private</a>]</span></td>
248 </tr>
249 </table>
250 </td>
251 </tr>
252 <tr>
253 <td colspan="2" class="summary">
254 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
255 <code>__class__</code>
256 </p>
257 </td>
258 </tr>
259 </table>
260 <!-- ==================== METHOD DETAILS ==================== -->
261 <a name="section-MethodDetails"></a>
262 <table class="details" border="1" cellpadding="3"
263 cellspacing="0" width="100%" bgcolor="white">
264 <tr bgcolor="#70b0f0" class="table-header">
265 <td colspan="2" class="table-header">
266 <table border="0" cellpadding="0" cellspacing="0" width="100%">
267 <tr valign="top">
268 <td align="left"><span class="table-header">Method Details</span></td>
269 <td align="right" valign="top"
270 ><span class="options">[<a href="#section-MethodDetails"
271 class="privatelink" onclick="toggle_private();"
272 >hide private</a>]</span></td>
273 </tr>
274 </table>
275 </td>
276 </tr>
277 </table>
278 <a name="__init__"></a>
279 <div>
280 <table class="details" border="1" cellpadding="3"
281 cellspacing="0" width="100%" bgcolor="white">
282 <tr><td>
283 <table width="100%" cellpadding="0" cellspacing="0" border="0">
284 <tr valign="top"><td>
285 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
286 <span class="sig-arg">display</span>)</span>
287 <br /><em class="fname">(Constructor)</em>
288 </h3>
289 </td><td align="right" valign="top"
290 ><span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.__init__">source&nbsp;code</a></span>&nbsp;
291 </td>
292 </tr></table>
293
294 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
295 signature</p>
296 <dl class="fields">
297 <dt>Overrides:
298 object.__init__
299 <dd><em class="note">(inherited documentation)</em></dd>
300 </dt>
301 </dl>
302 </td></tr></table>
303 </div>
304 <a name="ev_read"></a>
305 <div>
306 <table class="details" border="1" cellpadding="3"
307 cellspacing="0" width="100%" bgcolor="white">
308 <tr><td>
309 <table width="100%" cellpadding="0" cellspacing="0" border="0">
310 <tr valign="top"><td>
311 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_read</span>(<span class="sig-arg">self</span>,
312 <span class="sig-arg">worker</span>)</span>
313 </h3>
314 </td><td align="right" valign="top"
315 ><span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_read">source&nbsp;code</a></span>&nbsp;
316 </td>
317 </tr></table>
318
319 <p>Called to indicate that a worker has data to read.</p>
320 <dl class="fields">
321 <dt>Overrides:
322 <a href="ClusterShell.Event.EventHandler-class.html#ev_read">ClusterShell.Event.EventHandler.ev_read</a>
323 <dd><em class="note">(inherited documentation)</em></dd>
324 </dt>
325 </dl>
326 </td></tr></table>
327 </div>
328 <a name="ev_error"></a>
329 <div>
330 <table class="details" border="1" cellpadding="3"
331 cellspacing="0" width="100%" bgcolor="white">
332 <tr><td>
333 <table width="100%" cellpadding="0" cellspacing="0" border="0">
334 <tr valign="top"><td>
335 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_error</span>(<span class="sig-arg">self</span>,
336 <span class="sig-arg">worker</span>)</span>
337 </h3>
338 </td><td align="right" valign="top"
339 ><span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_error">source&nbsp;code</a></span>&nbsp;
340 </td>
341 </tr></table>
342
343 <p>Called to indicate that a worker has error to read (on stderr).</p>
344 <dl class="fields">
345 <dt>Overrides:
346 <a href="ClusterShell.Event.EventHandler-class.html#ev_error">ClusterShell.Event.EventHandler.ev_error</a>
347 <dd><em class="note">(inherited documentation)</em></dd>
348 </dt>
349 </dl>
350 </td></tr></table>
351 </div>
352 <a name="ev_hup"></a>
353 <div>
354 <table class="details" border="1" cellpadding="3"
355 cellspacing="0" width="100%" bgcolor="white">
356 <tr><td>
357 <table width="100%" cellpadding="0" cellspacing="0" border="0">
358 <tr valign="top"><td>
359 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_hup</span>(<span class="sig-arg">self</span>,
360 <span class="sig-arg">worker</span>)</span>
361 </h3>
362 </td><td align="right" valign="top"
363 ><span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_hup">source&nbsp;code</a></span>&nbsp;
364 </td>
365 </tr></table>
366
367 <p>Called to indicate that a worker's connection has been closed.</p>
368 <dl class="fields">
369 <dt>Overrides:
370 <a href="ClusterShell.Event.EventHandler-class.html#ev_hup">ClusterShell.Event.EventHandler.ev_hup</a>
371 <dd><em class="note">(inherited documentation)</em></dd>
372 </dt>
373 </dl>
374 </td></tr></table>
375 </div>
376 <a name="ev_timeout"></a>
377 <div>
378 <table class="details" border="1" cellpadding="3"
379 cellspacing="0" width="100%" bgcolor="white">
380 <tr><td>
381 <table width="100%" cellpadding="0" cellspacing="0" border="0">
382 <tr valign="top"><td>
383 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_timeout</span>(<span class="sig-arg">self</span>,
384 <span class="sig-arg">worker</span>)</span>
385 </h3>
386 </td><td align="right" valign="top"
387 ><span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_timeout">source&nbsp;code</a></span>&nbsp;
388 </td>
389 </tr></table>
390
391 <p>Called to indicate that a worker has timed out (worker timeout
392 only).</p>
393 <dl class="fields">
394 <dt>Overrides:
395 <a href="ClusterShell.Event.EventHandler-class.html#ev_timeout">ClusterShell.Event.EventHandler.ev_timeout</a>
396 <dd><em class="note">(inherited documentation)</em></dd>
397 </dt>
398 </dl>
399 </td></tr></table>
400 </div>
401 <a name="ev_close"></a>
402 <div>
403 <table class="details" border="1" cellpadding="3"
404 cellspacing="0" width="100%" bgcolor="white">
405 <tr><td>
406 <table width="100%" cellpadding="0" cellspacing="0" border="0">
407 <tr valign="top"><td>
408 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_close</span>(<span class="sig-arg">self</span>,
409 <span class="sig-arg">worker</span>)</span>
410 </h3>
411 </td><td align="right" valign="top"
412 ><span class="codelink"><a href="clush-pysrc.html#DirectOutputHandler.ev_close">source&nbsp;code</a></span>&nbsp;
413 </td>
414 </tr></table>
415
416 <p>Called to indicate that a worker has just finished (it may already
417 have failed on timeout).</p>
418 <dl class="fields">
419 <dt>Overrides:
420 <a href="ClusterShell.Event.EventHandler-class.html#ev_close">ClusterShell.Event.EventHandler.ev_close</a>
421 <dd><em class="note">(inherited documentation)</em></dd>
422 </dt>
423 </dl>
424 </td></tr></table>
425 </div>
426 <br />
427 <!-- ==================== NAVIGATION BAR ==================== -->
428 <table class="navbar" border="0" width="100%" cellpadding="0"
429 bgcolor="#a0c0ff" cellspacing="0">
430 <tr valign="middle">
431
432 <!-- Tree link -->
433 <th>&nbsp;&nbsp;&nbsp;<a
434 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
435
436 <!-- Index link -->
437 <th>&nbsp;&nbsp;&nbsp;<a
438 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
439
440 <!-- Help link -->
441 <th>&nbsp;&nbsp;&nbsp;<a
442 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
443
444 <!-- Project homepage -->
445 <th class="navbar" align="right" width="100%">
446 <table border="0" cellpadding="0" cellspacing="0">
447 <tr><th class="navbar" align="center"
448 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
449 </tr></table></th>
450 </tr>
451 </table>
452 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
453 <tr>
454 <td align="left" class="footer">
455 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
456 </td>
457 <td align="right" class="footer">
458 <a target="mainFrame" href="http://epydoc.sourceforge.net"
459 >http://epydoc.sourceforge.net</a>
460 </td>
461 </tr>
462 </table>
463
464 <script type="text/javascript">
465 <!--
466 // Private objects are initially displayed (because if
467 // javascript is turned off then we want them to be
468 // visible); but by default, we want to hide them. So hide
469 // them unless we have a cookie that says to show them.
470 checkCookie();
471 // -->
472 </script>
473 </body>
474 </html>
+0
-480
doc/epydoc/html/clush.Display-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush.Display</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clush-module.html">Module&nbsp;clush</a> ::
42 Class&nbsp;Display
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clush.Display-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class Display</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html#Display">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clush_di_2" name="uml_class_diagram_for_clush_di_2">
62 <area shape="rect" id="node262" href="clush.Display-class.html#COLOR_STDOUT_FMT" title="clush.Display.COLOR_STDOUT_FMT" alt="" coords="17,31,221,49"/>
63 <area shape="rect" id="node262" href="clush.Display-class.html#COLOR_STDERR_FMT" title="clush.Display.COLOR_STDERR_FMT" alt="" coords="17,49,221,68"/>
64 <area shape="rect" id="node262" href="clush.Display-class.html#SEP" title="clush.Display.SEP" alt="" coords="17,68,221,87"/>
65 <area shape="rect" id="node262" href="clush.Display-class.html#line_mode" title="clush.Display.line_mode" alt="" coords="17,87,221,105"/>
66 <area shape="rect" id="node262" href="clush.Display-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,108,221,127"/>
67 <area shape="rect" id="node262" href="clush.Display-class.html#print_line" title="Display a line with optional label." alt="" coords="17,127,221,145"/>
68 <area shape="rect" id="node262" href="clush.Display-class.html#print_line_error" title="Display an error line with optional label." alt="" coords="17,145,221,164"/>
69 <area shape="rect" id="node262" href="clush.Display-class.html#print_gather" title="Generic method for displaying nodeset/content according to current object &#160;settings." alt="" coords="17,164,221,183"/>
70 <area shape="rect" id="node1" href="clush.Display-class.html" title="Output display class for clush script." alt="" coords="5,6,232,189"/>
71 </map>
72 <img src="uml_class_diagram_for_clush_di_2.png" alt='' usemap="#uml_class_diagram_for_clush_di_2" ismap="ismap" class="graph-without-title" />
73 </center>
74 </center>
75 <hr />
76 <p>Output display class for clush script.</p>
77
78 <!-- ==================== INSTANCE METHODS ==================== -->
79 <a name="section-InstanceMethods"></a>
80 <table class="summary" border="1" cellpadding="3"
81 cellspacing="0" width="100%" bgcolor="white">
82 <tr bgcolor="#70b0f0" class="table-header">
83 <td colspan="2" class="table-header">
84 <table border="0" cellpadding="0" cellspacing="0" width="100%">
85 <tr valign="top">
86 <td align="left"><span class="table-header">Instance Methods</span></td>
87 <td align="right" valign="top"
88 ><span class="options">[<a href="#section-InstanceMethods"
89 class="privatelink" onclick="toggle_private();"
90 >hide private</a>]</span></td>
91 </tr>
92 </table>
93 </td>
94 </tr>
95 <tr>
96 <td width="15%" align="right" valign="top" class="summary">
97 <span class="summary-type">&nbsp;</span>
98 </td><td class="summary">
99 <table width="100%" cellpadding="0" cellspacing="0" border="0">
100 <tr>
101 <td><span class="summary-sig"><a href="clush.Display-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
102 <span class="summary-sig-arg">color</span>=<span class="summary-sig-default">True</span>)</span><br />
103 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
104 <td align="right" valign="top">
105 <span class="codelink"><a href="clush-pysrc.html#Display.__init__">source&nbsp;code</a></span>
106
107 </td>
108 </tr>
109 </table>
110
111 </td>
112 </tr>
113 <tr class="private">
114 <td width="15%" align="right" valign="top" class="summary">
115 <span class="summary-type">&nbsp;</span>
116 </td><td class="summary">
117 <table width="100%" cellpadding="0" cellspacing="0" border="0">
118 <tr>
119 <td><span class="summary-sig"><a name="_getlmode"></a><span class="summary-sig-name">_getlmode</span>(<span class="summary-sig-arg">self</span>)</span></td>
120 <td align="right" valign="top">
121 <span class="codelink"><a href="clush-pysrc.html#Display._getlmode">source&nbsp;code</a></span>
122
123 </td>
124 </tr>
125 </table>
126
127 </td>
128 </tr>
129 <tr class="private">
130 <td width="15%" align="right" valign="top" class="summary">
131 <span class="summary-type">&nbsp;</span>
132 </td><td class="summary">
133 <table width="100%" cellpadding="0" cellspacing="0" border="0">
134 <tr>
135 <td><span class="summary-sig"><a name="_setlmode"></a><span class="summary-sig-name">_setlmode</span>(<span class="summary-sig-arg">self</span>,
136 <span class="summary-sig-arg">value</span>)</span></td>
137 <td align="right" valign="top">
138 <span class="codelink"><a href="clush-pysrc.html#Display._setlmode">source&nbsp;code</a></span>
139
140 </td>
141 </tr>
142 </table>
143
144 </td>
145 </tr>
146 <tr class="private">
147 <td width="15%" align="right" valign="top" class="summary">
148 <span class="summary-type">&nbsp;</span>
149 </td><td class="summary">
150 <table width="100%" cellpadding="0" cellspacing="0" border="0">
151 <tr>
152 <td><span class="summary-sig"><a name="_format_header"></a><span class="summary-sig-name">_format_header</span>(<span class="summary-sig-arg">self</span>,
153 <span class="summary-sig-arg">nodeset</span>)</span><br />
154 Format nodeset-based header.</td>
155 <td align="right" valign="top">
156 <span class="codelink"><a href="clush-pysrc.html#Display._format_header">source&nbsp;code</a></span>
157
158 </td>
159 </tr>
160 </table>
161
162 </td>
163 </tr>
164 <tr>
165 <td width="15%" align="right" valign="top" class="summary">
166 <span class="summary-type">&nbsp;</span>
167 </td><td class="summary">
168 <table width="100%" cellpadding="0" cellspacing="0" border="0">
169 <tr>
170 <td><span class="summary-sig"><a name="print_line"></a><span class="summary-sig-name">print_line</span>(<span class="summary-sig-arg">self</span>,
171 <span class="summary-sig-arg">nodeset</span>,
172 <span class="summary-sig-arg">line</span>)</span><br />
173 Display a line with optional label.</td>
174 <td align="right" valign="top">
175 <span class="codelink"><a href="clush-pysrc.html#Display.print_line">source&nbsp;code</a></span>
176
177 </td>
178 </tr>
179 </table>
180
181 </td>
182 </tr>
183 <tr>
184 <td width="15%" align="right" valign="top" class="summary">
185 <span class="summary-type">&nbsp;</span>
186 </td><td class="summary">
187 <table width="100%" cellpadding="0" cellspacing="0" border="0">
188 <tr>
189 <td><span class="summary-sig"><a name="print_line_error"></a><span class="summary-sig-name">print_line_error</span>(<span class="summary-sig-arg">self</span>,
190 <span class="summary-sig-arg">nodeset</span>,
191 <span class="summary-sig-arg">line</span>)</span><br />
192 Display an error line with optional label.</td>
193 <td align="right" valign="top">
194 <span class="codelink"><a href="clush-pysrc.html#Display.print_line_error">source&nbsp;code</a></span>
195
196 </td>
197 </tr>
198 </table>
199
200 </td>
201 </tr>
202 <tr>
203 <td width="15%" align="right" valign="top" class="summary">
204 <span class="summary-type">&nbsp;</span>
205 </td><td class="summary">
206 <table width="100%" cellpadding="0" cellspacing="0" border="0">
207 <tr>
208 <td><span class="summary-sig"><a name="print_gather"></a><span class="summary-sig-name">print_gather</span>(<span class="summary-sig-arg">self</span>,
209 <span class="summary-sig-arg">nodeset</span>,
210 <span class="summary-sig-arg">obj</span>)</span><br />
211 Generic method for displaying nodeset/content according to current
212 object settings.</td>
213 <td align="right" valign="top">
214 <span class="codelink"><a href="clush-pysrc.html#Display.print_gather">source&nbsp;code</a></span>
215
216 </td>
217 </tr>
218 </table>
219
220 </td>
221 </tr>
222 <tr class="private">
223 <td width="15%" align="right" valign="top" class="summary">
224 <span class="summary-type">&nbsp;</span>
225 </td><td class="summary">
226 <table width="100%" cellpadding="0" cellspacing="0" border="0">
227 <tr>
228 <td><span class="summary-sig"><a name="_print_buffer"></a><span class="summary-sig-name">_print_buffer</span>(<span class="summary-sig-arg">self</span>,
229 <span class="summary-sig-arg">nodeset</span>,
230 <span class="summary-sig-arg">content</span>)</span><br />
231 Display a dshbak-like header block and content.</td>
232 <td align="right" valign="top">
233 <span class="codelink"><a href="clush-pysrc.html#Display._print_buffer">source&nbsp;code</a></span>
234
235 </td>
236 </tr>
237 </table>
238
239 </td>
240 </tr>
241 <tr class="private">
242 <td width="15%" align="right" valign="top" class="summary">
243 <span class="summary-type">&nbsp;</span>
244 </td><td class="summary">
245 <table width="100%" cellpadding="0" cellspacing="0" border="0">
246 <tr>
247 <td><span class="summary-sig"><a name="_print_lines"></a><span class="summary-sig-name">_print_lines</span>(<span class="summary-sig-arg">self</span>,
248 <span class="summary-sig-arg">nodeset</span>,
249 <span class="summary-sig-arg">msg</span>)</span><br />
250 Display a MsgTree buffer by line with prefixed header.</td>
251 <td align="right" valign="top">
252 <span class="codelink"><a href="clush-pysrc.html#Display._print_lines">source&nbsp;code</a></span>
253
254 </td>
255 </tr>
256 </table>
257
258 </td>
259 </tr>
260 <tr>
261 <td colspan="2" class="summary">
262 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
263 <code>__delattr__</code>,
264 <code>__format__</code>,
265 <code>__getattribute__</code>,
266 <code>__hash__</code>,
267 <code>__new__</code>,
268 <code>__reduce__</code>,
269 <code>__reduce_ex__</code>,
270 <code>__repr__</code>,
271 <code>__setattr__</code>,
272 <code>__sizeof__</code>,
273 <code>__str__</code>,
274 <code>__subclasshook__</code>
275 </p>
276 </td>
277 </tr>
278 </table>
279 <!-- ==================== CLASS VARIABLES ==================== -->
280 <a name="section-ClassVariables"></a>
281 <table class="summary" border="1" cellpadding="3"
282 cellspacing="0" width="100%" bgcolor="white">
283 <tr bgcolor="#70b0f0" class="table-header">
284 <td colspan="2" class="table-header">
285 <table border="0" cellpadding="0" cellspacing="0" width="100%">
286 <tr valign="top">
287 <td align="left"><span class="table-header">Class Variables</span></td>
288 <td align="right" valign="top"
289 ><span class="options">[<a href="#section-ClassVariables"
290 class="privatelink" onclick="toggle_private();"
291 >hide private</a>]</span></td>
292 </tr>
293 </table>
294 </td>
295 </tr>
296 <tr>
297 <td width="15%" align="right" valign="top" class="summary">
298 <span class="summary-type">&nbsp;</span>
299 </td><td class="summary">
300 <a name="COLOR_STDOUT_FMT"></a><span class="summary-name">COLOR_STDOUT_FMT</span> = <code title="'\x1b[34m%s\x1b[0m'"><code class="variable-quote">'</code><code class="variable-string">\x1b[34m%s\x1b[0m</code><code class="variable-quote">'</code></code>
301 </td>
302 </tr>
303 <tr>
304 <td width="15%" align="right" valign="top" class="summary">
305 <span class="summary-type">&nbsp;</span>
306 </td><td class="summary">
307 <a name="COLOR_STDERR_FMT"></a><span class="summary-name">COLOR_STDERR_FMT</span> = <code title="'\x1b[31m%s\x1b[0m'"><code class="variable-quote">'</code><code class="variable-string">\x1b[31m%s\x1b[0m</code><code class="variable-quote">'</code></code>
308 </td>
309 </tr>
310 <tr>
311 <td width="15%" align="right" valign="top" class="summary">
312 <span class="summary-type">&nbsp;</span>
313 </td><td class="summary">
314 <a name="SEP"></a><span class="summary-name">SEP</span> = <code title="'---------------'"><code class="variable-quote">'</code><code class="variable-string">---------------</code><code class="variable-quote">'</code></code>
315 </td>
316 </tr>
317 </table>
318 <!-- ==================== PROPERTIES ==================== -->
319 <a name="section-Properties"></a>
320 <table class="summary" border="1" cellpadding="3"
321 cellspacing="0" width="100%" bgcolor="white">
322 <tr bgcolor="#70b0f0" class="table-header">
323 <td colspan="2" class="table-header">
324 <table border="0" cellpadding="0" cellspacing="0" width="100%">
325 <tr valign="top">
326 <td align="left"><span class="table-header">Properties</span></td>
327 <td align="right" valign="top"
328 ><span class="options">[<a href="#section-Properties"
329 class="privatelink" onclick="toggle_private();"
330 >hide private</a>]</span></td>
331 </tr>
332 </table>
333 </td>
334 </tr>
335 <tr>
336 <td width="15%" align="right" valign="top" class="summary">
337 <span class="summary-type">&nbsp;</span>
338 </td><td class="summary">
339 <a href="clush.Display-class.html#line_mode" class="summary-name">line_mode</a>
340 </td>
341 </tr>
342 <tr>
343 <td colspan="2" class="summary">
344 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
345 <code>__class__</code>
346 </p>
347 </td>
348 </tr>
349 </table>
350 <!-- ==================== METHOD DETAILS ==================== -->
351 <a name="section-MethodDetails"></a>
352 <table class="details" border="1" cellpadding="3"
353 cellspacing="0" width="100%" bgcolor="white">
354 <tr bgcolor="#70b0f0" class="table-header">
355 <td colspan="2" class="table-header">
356 <table border="0" cellpadding="0" cellspacing="0" width="100%">
357 <tr valign="top">
358 <td align="left"><span class="table-header">Method Details</span></td>
359 <td align="right" valign="top"
360 ><span class="options">[<a href="#section-MethodDetails"
361 class="privatelink" onclick="toggle_private();"
362 >hide private</a>]</span></td>
363 </tr>
364 </table>
365 </td>
366 </tr>
367 </table>
368 <a name="__init__"></a>
369 <div>
370 <table class="details" border="1" cellpadding="3"
371 cellspacing="0" width="100%" bgcolor="white">
372 <tr><td>
373 <table width="100%" cellpadding="0" cellspacing="0" border="0">
374 <tr valign="top"><td>
375 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
376 <span class="sig-arg">color</span>=<span class="sig-default">True</span>)</span>
377 <br /><em class="fname">(Constructor)</em>
378 </h3>
379 </td><td align="right" valign="top"
380 ><span class="codelink"><a href="clush-pysrc.html#Display.__init__">source&nbsp;code</a></span>&nbsp;
381 </td>
382 </tr></table>
383
384 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
385 signature</p>
386 <dl class="fields">
387 <dt>Overrides:
388 object.__init__
389 <dd><em class="note">(inherited documentation)</em></dd>
390 </dt>
391 </dl>
392 </td></tr></table>
393 </div>
394 <br />
395 <!-- ==================== PROPERTY DETAILS ==================== -->
396 <a name="section-PropertyDetails"></a>
397 <table class="details" border="1" cellpadding="3"
398 cellspacing="0" width="100%" bgcolor="white">
399 <tr bgcolor="#70b0f0" class="table-header">
400 <td colspan="2" class="table-header">
401 <table border="0" cellpadding="0" cellspacing="0" width="100%">
402 <tr valign="top">
403 <td align="left"><span class="table-header">Property Details</span></td>
404 <td align="right" valign="top"
405 ><span class="options">[<a href="#section-PropertyDetails"
406 class="privatelink" onclick="toggle_private();"
407 >hide private</a>]</span></td>
408 </tr>
409 </table>
410 </td>
411 </tr>
412 </table>
413 <a name="line_mode"></a>
414 <div>
415 <table class="details" border="1" cellpadding="3"
416 cellspacing="0" width="100%" bgcolor="white">
417 <tr><td>
418 <h3 class="epydoc">line_mode</h3>
419
420 <dl class="fields">
421 <dt>Get Method:</dt>
422 <dd class="value"><span class="summary-sig"><a href="clush.Display-class.html#_getlmode" class="summary-sig-name" onclick="show_private();">_getlmode</a>(<span class="summary-sig-arg">self</span>)</span>
423 </dd>
424 <dt>Set Method:</dt>
425 <dd class="value"><span class="summary-sig"><a href="clush.Display-class.html#_setlmode" class="summary-sig-name" onclick="show_private();">_setlmode</a>(<span class="summary-sig-arg">self</span>,
426 <span class="summary-sig-arg">value</span>)</span>
427 </dd>
428 </dl>
429 </td></tr></table>
430 </div>
431 <br />
432 <!-- ==================== NAVIGATION BAR ==================== -->
433 <table class="navbar" border="0" width="100%" cellpadding="0"
434 bgcolor="#a0c0ff" cellspacing="0">
435 <tr valign="middle">
436
437 <!-- Tree link -->
438 <th>&nbsp;&nbsp;&nbsp;<a
439 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
440
441 <!-- Index link -->
442 <th>&nbsp;&nbsp;&nbsp;<a
443 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
444
445 <!-- Help link -->
446 <th>&nbsp;&nbsp;&nbsp;<a
447 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
448
449 <!-- Project homepage -->
450 <th class="navbar" align="right" width="100%">
451 <table border="0" cellpadding="0" cellspacing="0">
452 <tr><th class="navbar" align="center"
453 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
454 </tr></table></th>
455 </tr>
456 </table>
457 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
458 <tr>
459 <td align="left" class="footer">
460 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
461 </td>
462 <td align="right" class="footer">
463 <a target="mainFrame" href="http://epydoc.sourceforge.net"
464 >http://epydoc.sourceforge.net</a>
465 </td>
466 </tr>
467 </table>
468
469 <script type="text/javascript">
470 <!--
471 // Private objects are initially displayed (because if
472 // javascript is turned off then we want them to be
473 // visible); but by default, we want to hide them. So hide
474 // them unless we have a cookie that says to show them.
475 checkCookie();
476 // -->
477 </script>
478 </body>
479 </html>
+0
-454
doc/epydoc/html/clush.GatherOutputHandler-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush.GatherOutputHandler</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clush-module.html">Module&nbsp;clush</a> ::
42 Class&nbsp;GatherOutputHandler
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clush.GatherOutputHandler-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class GatherOutputHandler</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clush_ga" name="uml_class_diagram_for_clush_ga">
62 <area shape="rect" id="node263" href="clush.GatherOutputHandler-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="17,191,245,209"/>
63 <area shape="rect" id="node263" href="clush.GatherOutputHandler-class.html#ev_read" title="Called to indicate that a worker has data to read." alt="" coords="17,209,245,228"/>
64 <area shape="rect" id="node263" href="clush.GatherOutputHandler-class.html#ev_error" title="Called to indicate that a worker has error to read (on stderr)." alt="" coords="17,228,245,247"/>
65 <area shape="rect" id="node263" href="clush.GatherOutputHandler-class.html#ev_hup" title="Called to indicate that a worker&#39;s connection has been closed." alt="" coords="17,247,245,265"/>
66 <area shape="rect" id="node263" href="clush.GatherOutputHandler-class.html#ev_close" title="Called to indicate that a worker has just finished (it may already have &#160;failed on timeout)." alt="" coords="17,265,245,284"/>
67 <area shape="rect" id="node1" href="clush.GatherOutputHandler-class.html" title="Gathered output event handler class." alt="" coords="5,158,256,290"/>
68 <area shape="rect" id="node264" href="ClusterShell.Event.EventHandler-class.html#ev_start" title="Called to indicate that a worker has just started." alt="" coords="35,39,229,57"/>
69 <area shape="rect" id="node264" href="ClusterShell.Event.EventHandler-class.html#ev_written" title="Called to indicate that writing has been done." alt="" coords="35,57,229,76"/>
70 <area shape="rect" id="node264" href="ClusterShell.Event.EventHandler-class.html#ev_timeout" title="Called to indicate that a worker has timed out (worker timeout only)." alt="" coords="35,76,229,95"/>
71 <area shape="rect" id="node264" href="ClusterShell.Event.EventHandler-class.html#ev_msg" title="Handle port message." alt="" coords="35,95,229,113"/>
72 <area shape="rect" id="node264" href="ClusterShell.Event.EventHandler-class.html#ev_timer" title="Handle firing timer." alt="" coords="35,113,229,132"/>
73 <area shape="rect" id="node2" href="ClusterShell.Event.EventHandler-class.html" title="Base class EventHandler." alt="" coords="23,6,241,138"/>
74 </map>
75 <img src="uml_class_diagram_for_clush_ga.png" alt='' usemap="#uml_class_diagram_for_clush_ga" ismap="ismap" class="graph-without-title" />
76 </center>
77 </center>
78 <hr />
79 <p>Gathered output event handler class.</p>
80
81 <!-- ==================== INSTANCE METHODS ==================== -->
82 <a name="section-InstanceMethods"></a>
83 <table class="summary" border="1" cellpadding="3"
84 cellspacing="0" width="100%" bgcolor="white">
85 <tr bgcolor="#70b0f0" class="table-header">
86 <td colspan="2" class="table-header">
87 <table border="0" cellpadding="0" cellspacing="0" width="100%">
88 <tr valign="top">
89 <td align="left"><span class="table-header">Instance Methods</span></td>
90 <td align="right" valign="top"
91 ><span class="options">[<a href="#section-InstanceMethods"
92 class="privatelink" onclick="toggle_private();"
93 >hide private</a>]</span></td>
94 </tr>
95 </table>
96 </td>
97 </tr>
98 <tr>
99 <td width="15%" align="right" valign="top" class="summary">
100 <span class="summary-type">&nbsp;</span>
101 </td><td class="summary">
102 <table width="100%" cellpadding="0" cellspacing="0" border="0">
103 <tr>
104 <td><span class="summary-sig"><a href="clush.GatherOutputHandler-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
105 <span class="summary-sig-arg">display</span>,
106 <span class="summary-sig-arg">runtimer</span>,
107 <span class="summary-sig-arg">nodes</span>)</span><br />
108 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
109 <td align="right" valign="top">
110 <span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.__init__">source&nbsp;code</a></span>
111
112 </td>
113 </tr>
114 </table>
115
116 </td>
117 </tr>
118 <tr>
119 <td width="15%" align="right" valign="top" class="summary">
120 <span class="summary-type">&nbsp;</span>
121 </td><td class="summary">
122 <table width="100%" cellpadding="0" cellspacing="0" border="0">
123 <tr>
124 <td><span class="summary-sig"><a href="clush.GatherOutputHandler-class.html#ev_read" class="summary-sig-name">ev_read</a>(<span class="summary-sig-arg">self</span>,
125 <span class="summary-sig-arg">worker</span>)</span><br />
126 Called to indicate that a worker has data to read.</td>
127 <td align="right" valign="top">
128 <span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.ev_read">source&nbsp;code</a></span>
129
130 </td>
131 </tr>
132 </table>
133
134 </td>
135 </tr>
136 <tr>
137 <td width="15%" align="right" valign="top" class="summary">
138 <span class="summary-type">&nbsp;</span>
139 </td><td class="summary">
140 <table width="100%" cellpadding="0" cellspacing="0" border="0">
141 <tr>
142 <td><span class="summary-sig"><a href="clush.GatherOutputHandler-class.html#ev_error" class="summary-sig-name">ev_error</a>(<span class="summary-sig-arg">self</span>,
143 <span class="summary-sig-arg">worker</span>)</span><br />
144 Called to indicate that a worker has error to read (on stderr).</td>
145 <td align="right" valign="top">
146 <span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.ev_error">source&nbsp;code</a></span>
147
148 </td>
149 </tr>
150 </table>
151
152 </td>
153 </tr>
154 <tr>
155 <td width="15%" align="right" valign="top" class="summary">
156 <span class="summary-type">&nbsp;</span>
157 </td><td class="summary">
158 <table width="100%" cellpadding="0" cellspacing="0" border="0">
159 <tr>
160 <td><span class="summary-sig"><a href="clush.GatherOutputHandler-class.html#ev_hup" class="summary-sig-name">ev_hup</a>(<span class="summary-sig-arg">self</span>,
161 <span class="summary-sig-arg">worker</span>)</span><br />
162 Called to indicate that a worker's connection has been closed.</td>
163 <td align="right" valign="top">
164 <span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.ev_hup">source&nbsp;code</a></span>
165
166 </td>
167 </tr>
168 </table>
169
170 </td>
171 </tr>
172 <tr class="private">
173 <td width="15%" align="right" valign="top" class="summary">
174 <span class="summary-type">&nbsp;</span>
175 </td><td class="summary">
176 <table width="100%" cellpadding="0" cellspacing="0" border="0">
177 <tr>
178 <td><span class="summary-sig"><a name="_live_line"></a><span class="summary-sig-name">_live_line</span>(<span class="summary-sig-arg">self</span>,
179 <span class="summary-sig-arg">worker</span>)</span></td>
180 <td align="right" valign="top">
181 <span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler._live_line">source&nbsp;code</a></span>
182
183 </td>
184 </tr>
185 </table>
186
187 </td>
188 </tr>
189 <tr>
190 <td width="15%" align="right" valign="top" class="summary">
191 <span class="summary-type">&nbsp;</span>
192 </td><td class="summary">
193 <table width="100%" cellpadding="0" cellspacing="0" border="0">
194 <tr>
195 <td><span class="summary-sig"><a href="clush.GatherOutputHandler-class.html#ev_close" class="summary-sig-name">ev_close</a>(<span class="summary-sig-arg">self</span>,
196 <span class="summary-sig-arg">worker</span>)</span><br />
197 Called to indicate that a worker has just finished (it may already
198 have failed on timeout).</td>
199 <td align="right" valign="top">
200 <span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.ev_close">source&nbsp;code</a></span>
201
202 </td>
203 </tr>
204 </table>
205
206 </td>
207 </tr>
208 <tr>
209 <td colspan="2" class="summary">
210 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></code></b>:
211 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_msg">ev_msg</a></code>,
212 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_start">ev_start</a></code>,
213 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_timeout">ev_timeout</a></code>,
214 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_timer">ev_timer</a></code>,
215 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_written">ev_written</a></code>
216 </p>
217 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></code></b> (private):
218 <code><a href="ClusterShell.Event.EventHandler-class.html#_invoke" onclick="show_private();">_invoke</a></code>
219 </p></div>
220 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
221 <code>__delattr__</code>,
222 <code>__format__</code>,
223 <code>__getattribute__</code>,
224 <code>__hash__</code>,
225 <code>__new__</code>,
226 <code>__reduce__</code>,
227 <code>__reduce_ex__</code>,
228 <code>__repr__</code>,
229 <code>__setattr__</code>,
230 <code>__sizeof__</code>,
231 <code>__str__</code>,
232 <code>__subclasshook__</code>
233 </p>
234 </td>
235 </tr>
236 </table>
237 <!-- ==================== PROPERTIES ==================== -->
238 <a name="section-Properties"></a>
239 <table class="summary" border="1" cellpadding="3"
240 cellspacing="0" width="100%" bgcolor="white">
241 <tr bgcolor="#70b0f0" class="table-header">
242 <td colspan="2" class="table-header">
243 <table border="0" cellpadding="0" cellspacing="0" width="100%">
244 <tr valign="top">
245 <td align="left"><span class="table-header">Properties</span></td>
246 <td align="right" valign="top"
247 ><span class="options">[<a href="#section-Properties"
248 class="privatelink" onclick="toggle_private();"
249 >hide private</a>]</span></td>
250 </tr>
251 </table>
252 </td>
253 </tr>
254 <tr>
255 <td colspan="2" class="summary">
256 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
257 <code>__class__</code>
258 </p>
259 </td>
260 </tr>
261 </table>
262 <!-- ==================== METHOD DETAILS ==================== -->
263 <a name="section-MethodDetails"></a>
264 <table class="details" border="1" cellpadding="3"
265 cellspacing="0" width="100%" bgcolor="white">
266 <tr bgcolor="#70b0f0" class="table-header">
267 <td colspan="2" class="table-header">
268 <table border="0" cellpadding="0" cellspacing="0" width="100%">
269 <tr valign="top">
270 <td align="left"><span class="table-header">Method Details</span></td>
271 <td align="right" valign="top"
272 ><span class="options">[<a href="#section-MethodDetails"
273 class="privatelink" onclick="toggle_private();"
274 >hide private</a>]</span></td>
275 </tr>
276 </table>
277 </td>
278 </tr>
279 </table>
280 <a name="__init__"></a>
281 <div>
282 <table class="details" border="1" cellpadding="3"
283 cellspacing="0" width="100%" bgcolor="white">
284 <tr><td>
285 <table width="100%" cellpadding="0" cellspacing="0" border="0">
286 <tr valign="top"><td>
287 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
288 <span class="sig-arg">display</span>,
289 <span class="sig-arg">runtimer</span>,
290 <span class="sig-arg">nodes</span>)</span>
291 <br /><em class="fname">(Constructor)</em>
292 </h3>
293 </td><td align="right" valign="top"
294 ><span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.__init__">source&nbsp;code</a></span>&nbsp;
295 </td>
296 </tr></table>
297
298 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
299 signature</p>
300 <dl class="fields">
301 <dt>Overrides:
302 object.__init__
303 <dd><em class="note">(inherited documentation)</em></dd>
304 </dt>
305 </dl>
306 </td></tr></table>
307 </div>
308 <a name="ev_read"></a>
309 <div>
310 <table class="details" border="1" cellpadding="3"
311 cellspacing="0" width="100%" bgcolor="white">
312 <tr><td>
313 <table width="100%" cellpadding="0" cellspacing="0" border="0">
314 <tr valign="top"><td>
315 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_read</span>(<span class="sig-arg">self</span>,
316 <span class="sig-arg">worker</span>)</span>
317 </h3>
318 </td><td align="right" valign="top"
319 ><span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.ev_read">source&nbsp;code</a></span>&nbsp;
320 </td>
321 </tr></table>
322
323 <p>Called to indicate that a worker has data to read.</p>
324 <dl class="fields">
325 <dt>Overrides:
326 <a href="ClusterShell.Event.EventHandler-class.html#ev_read">ClusterShell.Event.EventHandler.ev_read</a>
327 <dd><em class="note">(inherited documentation)</em></dd>
328 </dt>
329 </dl>
330 </td></tr></table>
331 </div>
332 <a name="ev_error"></a>
333 <div>
334 <table class="details" border="1" cellpadding="3"
335 cellspacing="0" width="100%" bgcolor="white">
336 <tr><td>
337 <table width="100%" cellpadding="0" cellspacing="0" border="0">
338 <tr valign="top"><td>
339 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_error</span>(<span class="sig-arg">self</span>,
340 <span class="sig-arg">worker</span>)</span>
341 </h3>
342 </td><td align="right" valign="top"
343 ><span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.ev_error">source&nbsp;code</a></span>&nbsp;
344 </td>
345 </tr></table>
346
347 <p>Called to indicate that a worker has error to read (on stderr).</p>
348 <dl class="fields">
349 <dt>Overrides:
350 <a href="ClusterShell.Event.EventHandler-class.html#ev_error">ClusterShell.Event.EventHandler.ev_error</a>
351 <dd><em class="note">(inherited documentation)</em></dd>
352 </dt>
353 </dl>
354 </td></tr></table>
355 </div>
356 <a name="ev_hup"></a>
357 <div>
358 <table class="details" border="1" cellpadding="3"
359 cellspacing="0" width="100%" bgcolor="white">
360 <tr><td>
361 <table width="100%" cellpadding="0" cellspacing="0" border="0">
362 <tr valign="top"><td>
363 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_hup</span>(<span class="sig-arg">self</span>,
364 <span class="sig-arg">worker</span>)</span>
365 </h3>
366 </td><td align="right" valign="top"
367 ><span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.ev_hup">source&nbsp;code</a></span>&nbsp;
368 </td>
369 </tr></table>
370
371 <p>Called to indicate that a worker's connection has been closed.</p>
372 <dl class="fields">
373 <dt>Overrides:
374 <a href="ClusterShell.Event.EventHandler-class.html#ev_hup">ClusterShell.Event.EventHandler.ev_hup</a>
375 <dd><em class="note">(inherited documentation)</em></dd>
376 </dt>
377 </dl>
378 </td></tr></table>
379 </div>
380 <a name="ev_close"></a>
381 <div>
382 <table class="details" border="1" cellpadding="3"
383 cellspacing="0" width="100%" bgcolor="white">
384 <tr><td>
385 <table width="100%" cellpadding="0" cellspacing="0" border="0">
386 <tr valign="top"><td>
387 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_close</span>(<span class="sig-arg">self</span>,
388 <span class="sig-arg">worker</span>)</span>
389 </h3>
390 </td><td align="right" valign="top"
391 ><span class="codelink"><a href="clush-pysrc.html#GatherOutputHandler.ev_close">source&nbsp;code</a></span>&nbsp;
392 </td>
393 </tr></table>
394
395 <p>Called to indicate that a worker has just finished (it may already
396 have failed on timeout).</p>
397 <dl class="fields">
398 <dt>Overrides:
399 <a href="ClusterShell.Event.EventHandler-class.html#ev_close">ClusterShell.Event.EventHandler.ev_close</a>
400 <dd><em class="note">(inherited documentation)</em></dd>
401 </dt>
402 </dl>
403 </td></tr></table>
404 </div>
405 <br />
406 <!-- ==================== NAVIGATION BAR ==================== -->
407 <table class="navbar" border="0" width="100%" cellpadding="0"
408 bgcolor="#a0c0ff" cellspacing="0">
409 <tr valign="middle">
410
411 <!-- Tree link -->
412 <th>&nbsp;&nbsp;&nbsp;<a
413 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
414
415 <!-- Index link -->
416 <th>&nbsp;&nbsp;&nbsp;<a
417 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
418
419 <!-- Help link -->
420 <th>&nbsp;&nbsp;&nbsp;<a
421 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
422
423 <!-- Project homepage -->
424 <th class="navbar" align="right" width="100%">
425 <table border="0" cellpadding="0" cellspacing="0">
426 <tr><th class="navbar" align="center"
427 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
428 </tr></table></th>
429 </tr>
430 </table>
431 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
432 <tr>
433 <td align="left" class="footer">
434 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
435 </td>
436 <td align="right" class="footer">
437 <a target="mainFrame" href="http://epydoc.sourceforge.net"
438 >http://epydoc.sourceforge.net</a>
439 </td>
440 </tr>
441 </table>
442
443 <script type="text/javascript">
444 <!--
445 // Private objects are initially displayed (because if
446 // javascript is turned off then we want them to be
447 // visible); but by default, we want to hide them. So hide
448 // them unless we have a cookie that says to show them.
449 checkCookie();
450 // -->
451 </script>
452 </body>
453 </html>
+0
-381
doc/epydoc/html/clush.RunTimer-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush.RunTimer</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clush-module.html">Module&nbsp;clush</a> ::
42 Class&nbsp;RunTimer
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clush.RunTimer-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class RunTimer</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html#RunTimer">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clush_ru" name="uml_class_diagram_for_clush_ru">
62 <area shape="rect" id="node265" href="clush.RunTimer-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="40,247,188,265"/>
63 <area shape="rect" id="node265" href="clush.RunTimer-class.html#ev_timer" title="Handle firing timer." alt="" coords="40,265,188,284"/>
64 <area shape="rect" id="node265" href="clush.RunTimer-class.html#set_dirty" title="clush.RunTimer.set_dirty" alt="" coords="40,284,188,303"/>
65 <area shape="rect" id="node265" href="clush.RunTimer-class.html#erase_line" title="clush.RunTimer.erase_line" alt="" coords="40,303,188,321"/>
66 <area shape="rect" id="node265" href="clush.RunTimer-class.html#update" title="clush.RunTimer.update" alt="" coords="40,321,188,340"/>
67 <area shape="rect" id="node265" href="clush.RunTimer-class.html#finalize" title="clush.RunTimer.finalize" alt="" coords="40,340,188,359"/>
68 <area shape="rect" id="node1" href="clush.RunTimer-class.html" title="clush.RunTimer" alt="" coords="28,214,199,365"/>
69 <area shape="rect" id="node266" href="ClusterShell.Event.EventHandler-class.html#ev_start" title="Called to indicate that a worker has just started." alt="" coords="17,39,212,57"/>
70 <area shape="rect" id="node266" href="ClusterShell.Event.EventHandler-class.html#ev_read" title="Called to indicate that a worker has data to read." alt="" coords="17,57,212,76"/>
71 <area shape="rect" id="node266" href="ClusterShell.Event.EventHandler-class.html#ev_error" title="Called to indicate that a worker has error to read (on stderr)." alt="" coords="17,76,212,95"/>
72 <area shape="rect" id="node266" href="ClusterShell.Event.EventHandler-class.html#ev_written" title="Called to indicate that writing has been done." alt="" coords="17,95,212,113"/>
73 <area shape="rect" id="node266" href="ClusterShell.Event.EventHandler-class.html#ev_hup" title="Called to indicate that a worker&#39;s connection has been closed." alt="" coords="17,113,212,132"/>
74 <area shape="rect" id="node266" href="ClusterShell.Event.EventHandler-class.html#ev_timeout" title="Called to indicate that a worker has timed out (worker timeout only)." alt="" coords="17,132,212,151"/>
75 <area shape="rect" id="node266" href="ClusterShell.Event.EventHandler-class.html#ev_close" title="Called to indicate that a worker has just finished (it may already have &#160;failed on timeout)." alt="" coords="17,151,212,169"/>
76 <area shape="rect" id="node266" href="ClusterShell.Event.EventHandler-class.html#ev_msg" title="Handle port message." alt="" coords="17,169,212,188"/>
77 <area shape="rect" id="node2" href="ClusterShell.Event.EventHandler-class.html" title="Base class EventHandler." alt="" coords="5,6,224,194"/>
78 </map>
79 <img src="uml_class_diagram_for_clush_ru.png" alt='' usemap="#uml_class_diagram_for_clush_ru" ismap="ismap" class="graph-without-title" />
80 </center>
81 </center>
82 <hr />
83 <!-- ==================== INSTANCE METHODS ==================== -->
84 <a name="section-InstanceMethods"></a>
85 <table class="summary" border="1" cellpadding="3"
86 cellspacing="0" width="100%" bgcolor="white">
87 <tr bgcolor="#70b0f0" class="table-header">
88 <td colspan="2" class="table-header">
89 <table border="0" cellpadding="0" cellspacing="0" width="100%">
90 <tr valign="top">
91 <td align="left"><span class="table-header">Instance Methods</span></td>
92 <td align="right" valign="top"
93 ><span class="options">[<a href="#section-InstanceMethods"
94 class="privatelink" onclick="toggle_private();"
95 >hide private</a>]</span></td>
96 </tr>
97 </table>
98 </td>
99 </tr>
100 <tr>
101 <td width="15%" align="right" valign="top" class="summary">
102 <span class="summary-type">&nbsp;</span>
103 </td><td class="summary">
104 <table width="100%" cellpadding="0" cellspacing="0" border="0">
105 <tr>
106 <td><span class="summary-sig"><a href="clush.RunTimer-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
107 <span class="summary-sig-arg">task</span>,
108 <span class="summary-sig-arg">total</span>)</span><br />
109 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
110 <td align="right" valign="top">
111 <span class="codelink"><a href="clush-pysrc.html#RunTimer.__init__">source&nbsp;code</a></span>
112
113 </td>
114 </tr>
115 </table>
116
117 </td>
118 </tr>
119 <tr>
120 <td width="15%" align="right" valign="top" class="summary">
121 <span class="summary-type">&nbsp;</span>
122 </td><td class="summary">
123 <table width="100%" cellpadding="0" cellspacing="0" border="0">
124 <tr>
125 <td><span class="summary-sig"><a href="clush.RunTimer-class.html#ev_timer" class="summary-sig-name">ev_timer</a>(<span class="summary-sig-arg">self</span>,
126 <span class="summary-sig-arg">timer</span>)</span><br />
127 Handle firing timer.</td>
128 <td align="right" valign="top">
129 <span class="codelink"><a href="clush-pysrc.html#RunTimer.ev_timer">source&nbsp;code</a></span>
130
131 </td>
132 </tr>
133 </table>
134
135 </td>
136 </tr>
137 <tr>
138 <td width="15%" align="right" valign="top" class="summary">
139 <span class="summary-type">&nbsp;</span>
140 </td><td class="summary">
141 <table width="100%" cellpadding="0" cellspacing="0" border="0">
142 <tr>
143 <td><span class="summary-sig"><a name="set_dirty"></a><span class="summary-sig-name">set_dirty</span>(<span class="summary-sig-arg">self</span>)</span></td>
144 <td align="right" valign="top">
145 <span class="codelink"><a href="clush-pysrc.html#RunTimer.set_dirty">source&nbsp;code</a></span>
146
147 </td>
148 </tr>
149 </table>
150
151 </td>
152 </tr>
153 <tr>
154 <td width="15%" align="right" valign="top" class="summary">
155 <span class="summary-type">&nbsp;</span>
156 </td><td class="summary">
157 <table width="100%" cellpadding="0" cellspacing="0" border="0">
158 <tr>
159 <td><span class="summary-sig"><a name="erase_line"></a><span class="summary-sig-name">erase_line</span>(<span class="summary-sig-arg">self</span>)</span></td>
160 <td align="right" valign="top">
161 <span class="codelink"><a href="clush-pysrc.html#RunTimer.erase_line">source&nbsp;code</a></span>
162
163 </td>
164 </tr>
165 </table>
166
167 </td>
168 </tr>
169 <tr>
170 <td width="15%" align="right" valign="top" class="summary">
171 <span class="summary-type">&nbsp;</span>
172 </td><td class="summary">
173 <table width="100%" cellpadding="0" cellspacing="0" border="0">
174 <tr>
175 <td><span class="summary-sig"><a name="update"></a><span class="summary-sig-name">update</span>(<span class="summary-sig-arg">self</span>)</span></td>
176 <td align="right" valign="top">
177 <span class="codelink"><a href="clush-pysrc.html#RunTimer.update">source&nbsp;code</a></span>
178
179 </td>
180 </tr>
181 </table>
182
183 </td>
184 </tr>
185 <tr>
186 <td width="15%" align="right" valign="top" class="summary">
187 <span class="summary-type">&nbsp;</span>
188 </td><td class="summary">
189 <table width="100%" cellpadding="0" cellspacing="0" border="0">
190 <tr>
191 <td><span class="summary-sig"><a name="finalize"></a><span class="summary-sig-name">finalize</span>(<span class="summary-sig-arg">self</span>,
192 <span class="summary-sig-arg">cr</span>)</span></td>
193 <td align="right" valign="top">
194 <span class="codelink"><a href="clush-pysrc.html#RunTimer.finalize">source&nbsp;code</a></span>
195
196 </td>
197 </tr>
198 </table>
199
200 </td>
201 </tr>
202 <tr>
203 <td colspan="2" class="summary">
204 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></code></b>:
205 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_close">ev_close</a></code>,
206 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_error">ev_error</a></code>,
207 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_hup">ev_hup</a></code>,
208 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_msg">ev_msg</a></code>,
209 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_read">ev_read</a></code>,
210 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_start">ev_start</a></code>,
211 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_timeout">ev_timeout</a></code>,
212 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_written">ev_written</a></code>
213 </p>
214 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></code></b> (private):
215 <code><a href="ClusterShell.Event.EventHandler-class.html#_invoke" onclick="show_private();">_invoke</a></code>
216 </p></div>
217 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
218 <code>__delattr__</code>,
219 <code>__format__</code>,
220 <code>__getattribute__</code>,
221 <code>__hash__</code>,
222 <code>__new__</code>,
223 <code>__reduce__</code>,
224 <code>__reduce_ex__</code>,
225 <code>__repr__</code>,
226 <code>__setattr__</code>,
227 <code>__sizeof__</code>,
228 <code>__str__</code>,
229 <code>__subclasshook__</code>
230 </p>
231 </td>
232 </tr>
233 </table>
234 <!-- ==================== PROPERTIES ==================== -->
235 <a name="section-Properties"></a>
236 <table class="summary" border="1" cellpadding="3"
237 cellspacing="0" width="100%" bgcolor="white">
238 <tr bgcolor="#70b0f0" class="table-header">
239 <td colspan="2" class="table-header">
240 <table border="0" cellpadding="0" cellspacing="0" width="100%">
241 <tr valign="top">
242 <td align="left"><span class="table-header">Properties</span></td>
243 <td align="right" valign="top"
244 ><span class="options">[<a href="#section-Properties"
245 class="privatelink" onclick="toggle_private();"
246 >hide private</a>]</span></td>
247 </tr>
248 </table>
249 </td>
250 </tr>
251 <tr>
252 <td colspan="2" class="summary">
253 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
254 <code>__class__</code>
255 </p>
256 </td>
257 </tr>
258 </table>
259 <!-- ==================== METHOD DETAILS ==================== -->
260 <a name="section-MethodDetails"></a>
261 <table class="details" border="1" cellpadding="3"
262 cellspacing="0" width="100%" bgcolor="white">
263 <tr bgcolor="#70b0f0" class="table-header">
264 <td colspan="2" class="table-header">
265 <table border="0" cellpadding="0" cellspacing="0" width="100%">
266 <tr valign="top">
267 <td align="left"><span class="table-header">Method Details</span></td>
268 <td align="right" valign="top"
269 ><span class="options">[<a href="#section-MethodDetails"
270 class="privatelink" onclick="toggle_private();"
271 >hide private</a>]</span></td>
272 </tr>
273 </table>
274 </td>
275 </tr>
276 </table>
277 <a name="__init__"></a>
278 <div>
279 <table class="details" border="1" cellpadding="3"
280 cellspacing="0" width="100%" bgcolor="white">
281 <tr><td>
282 <table width="100%" cellpadding="0" cellspacing="0" border="0">
283 <tr valign="top"><td>
284 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
285 <span class="sig-arg">task</span>,
286 <span class="sig-arg">total</span>)</span>
287 <br /><em class="fname">(Constructor)</em>
288 </h3>
289 </td><td align="right" valign="top"
290 ><span class="codelink"><a href="clush-pysrc.html#RunTimer.__init__">source&nbsp;code</a></span>&nbsp;
291 </td>
292 </tr></table>
293
294 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
295 signature</p>
296 <dl class="fields">
297 <dt>Overrides:
298 object.__init__
299 <dd><em class="note">(inherited documentation)</em></dd>
300 </dt>
301 </dl>
302 </td></tr></table>
303 </div>
304 <a name="ev_timer"></a>
305 <div>
306 <table class="details" border="1" cellpadding="3"
307 cellspacing="0" width="100%" bgcolor="white">
308 <tr><td>
309 <table width="100%" cellpadding="0" cellspacing="0" border="0">
310 <tr valign="top"><td>
311 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_timer</span>(<span class="sig-arg">self</span>,
312 <span class="sig-arg">timer</span>)</span>
313 </h3>
314 </td><td align="right" valign="top"
315 ><span class="codelink"><a href="clush-pysrc.html#RunTimer.ev_timer">source&nbsp;code</a></span>&nbsp;
316 </td>
317 </tr></table>
318
319 <p>Handle firing timer.</p>
320 <dl class="fields">
321 <dt>Parameters:</dt>
322 <dd><ul class="nomargin-top">
323 <li><strong class="pname"><code>timer</code></strong> - The timer that is firing.</li>
324 </ul></dd>
325 <dt>Overrides:
326 <a href="ClusterShell.Event.EventHandler-class.html#ev_timer">ClusterShell.Event.EventHandler.ev_timer</a>
327 <dd><em class="note">(inherited documentation)</em></dd>
328 </dt>
329 </dl>
330 </td></tr></table>
331 </div>
332 <br />
333 <!-- ==================== NAVIGATION BAR ==================== -->
334 <table class="navbar" border="0" width="100%" cellpadding="0"
335 bgcolor="#a0c0ff" cellspacing="0">
336 <tr valign="middle">
337
338 <!-- Tree link -->
339 <th>&nbsp;&nbsp;&nbsp;<a
340 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
341
342 <!-- Index link -->
343 <th>&nbsp;&nbsp;&nbsp;<a
344 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
345
346 <!-- Help link -->
347 <th>&nbsp;&nbsp;&nbsp;<a
348 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
349
350 <!-- Project homepage -->
351 <th class="navbar" align="right" width="100%">
352 <table border="0" cellpadding="0" cellspacing="0">
353 <tr><th class="navbar" align="center"
354 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
355 </tr></table></th>
356 </tr>
357 </table>
358 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
359 <tr>
360 <td align="left" class="footer">
361 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
362 </td>
363 <td align="right" class="footer">
364 <a target="mainFrame" href="http://epydoc.sourceforge.net"
365 >http://epydoc.sourceforge.net</a>
366 </td>
367 </tr>
368 </table>
369
370 <script type="text/javascript">
371 <!--
372 // Private objects are initially displayed (because if
373 // javascript is turned off then we want them to be
374 // visible); but by default, we want to hide them. So hide
375 // them unless we have a cookie that says to show them.
376 checkCookie();
377 // -->
378 </script>
379 </body>
380 </html>
+0
-351
doc/epydoc/html/clush.StdInputHandler-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush.StdInputHandler</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clush-module.html">Module&nbsp;clush</a> ::
42 Class&nbsp;StdInputHandler
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clush.StdInputHandler-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class StdInputHandler</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html#StdInputHandler">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clush_st" name="uml_class_diagram_for_clush_st">
62 <area shape="rect" id="node267" href="clush.StdInputHandler-class.html#__init__" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="47,228,183,247"/>
63 <area shape="rect" id="node267" href="clush.StdInputHandler-class.html#ev_read" title="Called to indicate that a worker has data to read." alt="" coords="47,247,183,265"/>
64 <area shape="rect" id="node267" href="clush.StdInputHandler-class.html#ev_close" title="Called to indicate that a worker has just finished (it may already have &#160;failed on timeout)." alt="" coords="47,265,183,284"/>
65 <area shape="rect" id="node1" href="clush.StdInputHandler-class.html" title="Standard input event handler class." alt="" coords="35,195,195,290"/>
66 <area shape="rect" id="node268" href="ClusterShell.Event.EventHandler-class.html#ev_start" title="Called to indicate that a worker has just started." alt="" coords="17,39,212,57"/>
67 <area shape="rect" id="node268" href="ClusterShell.Event.EventHandler-class.html#ev_error" title="Called to indicate that a worker has error to read (on stderr)." alt="" coords="17,57,212,76"/>
68 <area shape="rect" id="node268" href="ClusterShell.Event.EventHandler-class.html#ev_written" title="Called to indicate that writing has been done." alt="" coords="17,76,212,95"/>
69 <area shape="rect" id="node268" href="ClusterShell.Event.EventHandler-class.html#ev_hup" title="Called to indicate that a worker&#39;s connection has been closed." alt="" coords="17,95,212,113"/>
70 <area shape="rect" id="node268" href="ClusterShell.Event.EventHandler-class.html#ev_timeout" title="Called to indicate that a worker has timed out (worker timeout only)." alt="" coords="17,113,212,132"/>
71 <area shape="rect" id="node268" href="ClusterShell.Event.EventHandler-class.html#ev_msg" title="Handle port message." alt="" coords="17,132,212,151"/>
72 <area shape="rect" id="node268" href="ClusterShell.Event.EventHandler-class.html#ev_timer" title="Handle firing timer." alt="" coords="17,151,212,169"/>
73 <area shape="rect" id="node2" href="ClusterShell.Event.EventHandler-class.html" title="Base class EventHandler." alt="" coords="5,6,224,175"/>
74 </map>
75 <img src="uml_class_diagram_for_clush_st.png" alt='' usemap="#uml_class_diagram_for_clush_st" ismap="ismap" class="graph-without-title" />
76 </center>
77 </center>
78 <hr />
79 <p>Standard input event handler class.</p>
80
81 <!-- ==================== INSTANCE METHODS ==================== -->
82 <a name="section-InstanceMethods"></a>
83 <table class="summary" border="1" cellpadding="3"
84 cellspacing="0" width="100%" bgcolor="white">
85 <tr bgcolor="#70b0f0" class="table-header">
86 <td colspan="2" class="table-header">
87 <table border="0" cellpadding="0" cellspacing="0" width="100%">
88 <tr valign="top">
89 <td align="left"><span class="table-header">Instance Methods</span></td>
90 <td align="right" valign="top"
91 ><span class="options">[<a href="#section-InstanceMethods"
92 class="privatelink" onclick="toggle_private();"
93 >hide private</a>]</span></td>
94 </tr>
95 </table>
96 </td>
97 </tr>
98 <tr>
99 <td width="15%" align="right" valign="top" class="summary">
100 <span class="summary-type">&nbsp;</span>
101 </td><td class="summary">
102 <table width="100%" cellpadding="0" cellspacing="0" border="0">
103 <tr>
104 <td><span class="summary-sig"><a href="clush.StdInputHandler-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
105 <span class="summary-sig-arg">worker</span>)</span><br />
106 x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td>
107 <td align="right" valign="top">
108 <span class="codelink"><a href="clush-pysrc.html#StdInputHandler.__init__">source&nbsp;code</a></span>
109
110 </td>
111 </tr>
112 </table>
113
114 </td>
115 </tr>
116 <tr>
117 <td width="15%" align="right" valign="top" class="summary">
118 <span class="summary-type">&nbsp;</span>
119 </td><td class="summary">
120 <table width="100%" cellpadding="0" cellspacing="0" border="0">
121 <tr>
122 <td><span class="summary-sig"><a href="clush.StdInputHandler-class.html#ev_read" class="summary-sig-name">ev_read</a>(<span class="summary-sig-arg">self</span>,
123 <span class="summary-sig-arg">worker</span>)</span><br />
124 Called to indicate that a worker has data to read.</td>
125 <td align="right" valign="top">
126 <span class="codelink"><a href="clush-pysrc.html#StdInputHandler.ev_read">source&nbsp;code</a></span>
127
128 </td>
129 </tr>
130 </table>
131
132 </td>
133 </tr>
134 <tr>
135 <td width="15%" align="right" valign="top" class="summary">
136 <span class="summary-type">&nbsp;</span>
137 </td><td class="summary">
138 <table width="100%" cellpadding="0" cellspacing="0" border="0">
139 <tr>
140 <td><span class="summary-sig"><a href="clush.StdInputHandler-class.html#ev_close" class="summary-sig-name">ev_close</a>(<span class="summary-sig-arg">self</span>,
141 <span class="summary-sig-arg">worker</span>)</span><br />
142 Called to indicate that a worker has just finished (it may already
143 have failed on timeout).</td>
144 <td align="right" valign="top">
145 <span class="codelink"><a href="clush-pysrc.html#StdInputHandler.ev_close">source&nbsp;code</a></span>
146
147 </td>
148 </tr>
149 </table>
150
151 </td>
152 </tr>
153 <tr>
154 <td colspan="2" class="summary">
155 <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></code></b>:
156 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_error">ev_error</a></code>,
157 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_hup">ev_hup</a></code>,
158 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_msg">ev_msg</a></code>,
159 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_start">ev_start</a></code>,
160 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_timeout">ev_timeout</a></code>,
161 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_timer">ev_timer</a></code>,
162 <code><a href="ClusterShell.Event.EventHandler-class.html#ev_written">ev_written</a></code>
163 </p>
164 <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="ClusterShell.Event.EventHandler-class.html">ClusterShell.Event.EventHandler</a></code></b> (private):
165 <code><a href="ClusterShell.Event.EventHandler-class.html#_invoke" onclick="show_private();">_invoke</a></code>
166 </p></div>
167 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
168 <code>__delattr__</code>,
169 <code>__format__</code>,
170 <code>__getattribute__</code>,
171 <code>__hash__</code>,
172 <code>__new__</code>,
173 <code>__reduce__</code>,
174 <code>__reduce_ex__</code>,
175 <code>__repr__</code>,
176 <code>__setattr__</code>,
177 <code>__sizeof__</code>,
178 <code>__str__</code>,
179 <code>__subclasshook__</code>
180 </p>
181 </td>
182 </tr>
183 </table>
184 <!-- ==================== PROPERTIES ==================== -->
185 <a name="section-Properties"></a>
186 <table class="summary" border="1" cellpadding="3"
187 cellspacing="0" width="100%" bgcolor="white">
188 <tr bgcolor="#70b0f0" class="table-header">
189 <td colspan="2" class="table-header">
190 <table border="0" cellpadding="0" cellspacing="0" width="100%">
191 <tr valign="top">
192 <td align="left"><span class="table-header">Properties</span></td>
193 <td align="right" valign="top"
194 ><span class="options">[<a href="#section-Properties"
195 class="privatelink" onclick="toggle_private();"
196 >hide private</a>]</span></td>
197 </tr>
198 </table>
199 </td>
200 </tr>
201 <tr>
202 <td colspan="2" class="summary">
203 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
204 <code>__class__</code>
205 </p>
206 </td>
207 </tr>
208 </table>
209 <!-- ==================== METHOD DETAILS ==================== -->
210 <a name="section-MethodDetails"></a>
211 <table class="details" border="1" cellpadding="3"
212 cellspacing="0" width="100%" bgcolor="white">
213 <tr bgcolor="#70b0f0" class="table-header">
214 <td colspan="2" class="table-header">
215 <table border="0" cellpadding="0" cellspacing="0" width="100%">
216 <tr valign="top">
217 <td align="left"><span class="table-header">Method Details</span></td>
218 <td align="right" valign="top"
219 ><span class="options">[<a href="#section-MethodDetails"
220 class="privatelink" onclick="toggle_private();"
221 >hide private</a>]</span></td>
222 </tr>
223 </table>
224 </td>
225 </tr>
226 </table>
227 <a name="__init__"></a>
228 <div>
229 <table class="details" border="1" cellpadding="3"
230 cellspacing="0" width="100%" bgcolor="white">
231 <tr><td>
232 <table width="100%" cellpadding="0" cellspacing="0" border="0">
233 <tr valign="top"><td>
234 <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
235 <span class="sig-arg">worker</span>)</span>
236 <br /><em class="fname">(Constructor)</em>
237 </h3>
238 </td><td align="right" valign="top"
239 ><span class="codelink"><a href="clush-pysrc.html#StdInputHandler.__init__">source&nbsp;code</a></span>&nbsp;
240 </td>
241 </tr></table>
242
243 <p>x.__init__(...) initializes x; see x.__class__.__doc__ for
244 signature</p>
245 <dl class="fields">
246 <dt>Overrides:
247 object.__init__
248 <dd><em class="note">(inherited documentation)</em></dd>
249 </dt>
250 </dl>
251 </td></tr></table>
252 </div>
253 <a name="ev_read"></a>
254 <div>
255 <table class="details" border="1" cellpadding="3"
256 cellspacing="0" width="100%" bgcolor="white">
257 <tr><td>
258 <table width="100%" cellpadding="0" cellspacing="0" border="0">
259 <tr valign="top"><td>
260 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_read</span>(<span class="sig-arg">self</span>,
261 <span class="sig-arg">worker</span>)</span>
262 </h3>
263 </td><td align="right" valign="top"
264 ><span class="codelink"><a href="clush-pysrc.html#StdInputHandler.ev_read">source&nbsp;code</a></span>&nbsp;
265 </td>
266 </tr></table>
267
268 <p>Called to indicate that a worker has data to read.</p>
269 <dl class="fields">
270 <dt>Overrides:
271 <a href="ClusterShell.Event.EventHandler-class.html#ev_read">ClusterShell.Event.EventHandler.ev_read</a>
272 <dd><em class="note">(inherited documentation)</em></dd>
273 </dt>
274 </dl>
275 </td></tr></table>
276 </div>
277 <a name="ev_close"></a>
278 <div>
279 <table class="details" border="1" cellpadding="3"
280 cellspacing="0" width="100%" bgcolor="white">
281 <tr><td>
282 <table width="100%" cellpadding="0" cellspacing="0" border="0">
283 <tr valign="top"><td>
284 <h3 class="epydoc"><span class="sig"><span class="sig-name">ev_close</span>(<span class="sig-arg">self</span>,
285 <span class="sig-arg">worker</span>)</span>
286 </h3>
287 </td><td align="right" valign="top"
288 ><span class="codelink"><a href="clush-pysrc.html#StdInputHandler.ev_close">source&nbsp;code</a></span>&nbsp;
289 </td>
290 </tr></table>
291
292 <p>Called to indicate that a worker has just finished (it may already
293 have failed on timeout).</p>
294 <dl class="fields">
295 <dt>Overrides:
296 <a href="ClusterShell.Event.EventHandler-class.html#ev_close">ClusterShell.Event.EventHandler.ev_close</a>
297 <dd><em class="note">(inherited documentation)</em></dd>
298 </dt>
299 </dl>
300 </td></tr></table>
301 </div>
302 <br />
303 <!-- ==================== NAVIGATION BAR ==================== -->
304 <table class="navbar" border="0" width="100%" cellpadding="0"
305 bgcolor="#a0c0ff" cellspacing="0">
306 <tr valign="middle">
307
308 <!-- Tree link -->
309 <th>&nbsp;&nbsp;&nbsp;<a
310 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
311
312 <!-- Index link -->
313 <th>&nbsp;&nbsp;&nbsp;<a
314 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
315
316 <!-- Help link -->
317 <th>&nbsp;&nbsp;&nbsp;<a
318 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
319
320 <!-- Project homepage -->
321 <th class="navbar" align="right" width="100%">
322 <table border="0" cellpadding="0" cellspacing="0">
323 <tr><th class="navbar" align="center"
324 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
325 </tr></table></th>
326 </tr>
327 </table>
328 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
329 <tr>
330 <td align="left" class="footer">
331 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
332 </td>
333 <td align="right" class="footer">
334 <a target="mainFrame" href="http://epydoc.sourceforge.net"
335 >http://epydoc.sourceforge.net</a>
336 </td>
337 </tr>
338 </table>
339
340 <script type="text/javascript">
341 <!--
342 // Private objects are initially displayed (because if
343 // javascript is turned off then we want them to be
344 // visible); but by default, we want to hide them. So hide
345 // them unless we have a cookie that says to show them.
346 checkCookie();
347 // -->
348 </script>
349 </body>
350 </html>
+0
-208
doc/epydoc/html/clush.UpdatePromptException-class.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush.UpdatePromptException</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 <a href="clush-module.html">Module&nbsp;clush</a> ::
42 Class&nbsp;UpdatePromptException
43 </span>
44 </td>
45 <td>
46 <table cellpadding="0" cellspacing="0">
47 <!-- hide/show private -->
48 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
49 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
50 <tr><td align="right"><span class="options"
51 >[<a href="frames.html" target="_top">frames</a
52 >]&nbsp;|&nbsp;<a href="clush.UpdatePromptException-class.html"
53 target="_top">no&nbsp;frames</a>]</span></td></tr>
54 </table>
55 </td>
56 </tr>
57 </table>
58 <!-- ==================== CLASS DESCRIPTION ==================== -->
59 <h1 class="epydoc">Class UpdatePromptException</h1><p class="nomargin-top"><span class="codelink"><a href="clush-pysrc.html#UpdatePromptException">source&nbsp;code</a></span></p>
60 <center>
61 <center> <map id="uml_class_diagram_for_clush_up" name="uml_class_diagram_for_clush_up">
62 <area shape="rect" id="node1" href="clush.UpdatePromptException-class.html" title="Exception used by the signal handler" alt="" coords="12,379,180,423"/>
63 <area shape="rect" id="node270" href="javascript:void(0);" title="x.__init__(...) initializes x; see x.__class__.__doc__ for signature" alt="" coords="32,316,159,335"/>
64 <area shape="rect" id="node270" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="32,335,159,353"/>
65 <area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="20,283,169,359"/>
66 <area shape="rect" id="node271" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,175,49"/>
67 <area shape="rect" id="node271" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,175,68"/>
68 <area shape="rect" id="node271" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,175,89"/>
69 <area shape="rect" id="node271" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,175,108"/>
70 <area shape="rect" id="node271" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,175,127"/>
71 <area shape="rect" id="node271" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,175,145"/>
72 <area shape="rect" id="node271" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,175,164"/>
73 <area shape="rect" id="node271" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,175,183"/>
74 <area shape="rect" id="node271" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,175,201"/>
75 <area shape="rect" id="node271" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,175,220"/>
76 <area shape="rect" id="node271" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,175,239"/>
77 <area shape="rect" id="node271" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,175,257"/>
78 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,187,263"/>
79 </map>
80 <img src="uml_class_diagram_for_clush_up.png" alt='' usemap="#uml_class_diagram_for_clush_up" ismap="ismap" class="graph-without-title" />
81 </center>
82 </center>
83 <hr />
84 <p>Exception used by the signal handler</p>
85
86 <!-- ==================== INSTANCE METHODS ==================== -->
87 <a name="section-InstanceMethods"></a>
88 <table class="summary" border="1" cellpadding="3"
89 cellspacing="0" width="100%" bgcolor="white">
90 <tr bgcolor="#70b0f0" class="table-header">
91 <td colspan="2" class="table-header">
92 <table border="0" cellpadding="0" cellspacing="0" width="100%">
93 <tr valign="top">
94 <td align="left"><span class="table-header">Instance Methods</span></td>
95 <td align="right" valign="top"
96 ><span class="options">[<a href="#section-InstanceMethods"
97 class="privatelink" onclick="toggle_private();"
98 >hide private</a>]</span></td>
99 </tr>
100 </table>
101 </td>
102 </tr>
103 <tr>
104 <td colspan="2" class="summary">
105 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
106 <code>__init__</code>,
107 <code>__new__</code>
108 </p>
109 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
110 <code>__delattr__</code>,
111 <code>__getattribute__</code>,
112 <code>__getitem__</code>,
113 <code>__getslice__</code>,
114 <code>__reduce__</code>,
115 <code>__repr__</code>,
116 <code>__setattr__</code>,
117 <code>__setstate__</code>,
118 <code>__str__</code>,
119 <code>__unicode__</code>
120 </p>
121 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
122 <code>__format__</code>,
123 <code>__hash__</code>,
124 <code>__reduce_ex__</code>,
125 <code>__sizeof__</code>,
126 <code>__subclasshook__</code>
127 </p>
128 </td>
129 </tr>
130 </table>
131 <!-- ==================== PROPERTIES ==================== -->
132 <a name="section-Properties"></a>
133 <table class="summary" border="1" cellpadding="3"
134 cellspacing="0" width="100%" bgcolor="white">
135 <tr bgcolor="#70b0f0" class="table-header">
136 <td colspan="2" class="table-header">
137 <table border="0" cellpadding="0" cellspacing="0" width="100%">
138 <tr valign="top">
139 <td align="left"><span class="table-header">Properties</span></td>
140 <td align="right" valign="top"
141 ><span class="options">[<a href="#section-Properties"
142 class="privatelink" onclick="toggle_private();"
143 >hide private</a>]</span></td>
144 </tr>
145 </table>
146 </td>
147 </tr>
148 <tr>
149 <td colspan="2" class="summary">
150 <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
151 <code>args</code>,
152 <code>message</code>
153 </p>
154 <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
155 <code>__class__</code>
156 </p>
157 </td>
158 </tr>
159 </table>
160 <!-- ==================== NAVIGATION BAR ==================== -->
161 <table class="navbar" border="0" width="100%" cellpadding="0"
162 bgcolor="#a0c0ff" cellspacing="0">
163 <tr valign="middle">
164
165 <!-- Tree link -->
166 <th>&nbsp;&nbsp;&nbsp;<a
167 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
168
169 <!-- Index link -->
170 <th>&nbsp;&nbsp;&nbsp;<a
171 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
172
173 <!-- Help link -->
174 <th>&nbsp;&nbsp;&nbsp;<a
175 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
176
177 <!-- Project homepage -->
178 <th class="navbar" align="right" width="100%">
179 <table border="0" cellpadding="0" cellspacing="0">
180 <tr><th class="navbar" align="center"
181 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
182 </tr></table></th>
183 </tr>
184 </table>
185 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
186 <tr>
187 <td align="left" class="footer">
188 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
189 </td>
190 <td align="right" class="footer">
191 <a target="mainFrame" href="http://epydoc.sourceforge.net"
192 >http://epydoc.sourceforge.net</a>
193 </td>
194 </tr>
195 </table>
196
197 <script type="text/javascript">
198 <!--
199 // Private objects are initially displayed (because if
200 // javascript is turned off then we want them to be
201 // visible); but by default, we want to hide them. So hide
202 // them unless we have a cookie that says to show them.
203 checkCookie();
204 // -->
205 </script>
206 </body>
207 </html>
doc/epydoc/html/crarr.png less more
Binary diff not shown
+0
-322
doc/epydoc/html/epydoc.css less more
0
1
2 /* Epydoc CSS Stylesheet
3 *
4 * This stylesheet can be used to customize the appearance of epydoc's
5 * HTML output.
6 *
7 */
8
9 /* Default Colors & Styles
10 * - Set the default foreground & background color with 'body'; and
11 * link colors with 'a:link' and 'a:visited'.
12 * - Use bold for decision list terms.
13 * - The heading styles defined here are used for headings *within*
14 * docstring descriptions. All headings used by epydoc itself use
15 * either class='epydoc' or class='toc' (CSS styles for both
16 * defined below).
17 */
18 body { background: #ffffff; color: #000000; }
19 p { margin-top: 0.5em; margin-bottom: 0.5em; }
20 a:link { color: #0000ff; }
21 a:visited { color: #204080; }
22 dt { font-weight: bold; }
23 h1 { font-size: +140%; font-style: italic;
24 font-weight: bold; }
25 h2 { font-size: +125%; font-style: italic;
26 font-weight: bold; }
27 h3 { font-size: +110%; font-style: italic;
28 font-weight: normal; }
29 code { font-size: 100%; }
30 /* N.B.: class, not pseudoclass */
31 a.link { font-family: monospace; }
32
33 /* Page Header & Footer
34 * - The standard page header consists of a navigation bar (with
35 * pointers to standard pages such as 'home' and 'trees'); a
36 * breadcrumbs list, which can be used to navigate to containing
37 * classes or modules; options links, to show/hide private
38 * variables and to show/hide frames; and a page title (using
39 * <h1>). The page title may be followed by a link to the
40 * corresponding source code (using 'span.codelink').
41 * - The footer consists of a navigation bar, a timestamp, and a
42 * pointer to epydoc's homepage.
43 */
44 h1.epydoc { margin: 0; font-size: +140%; font-weight: bold; }
45 h2.epydoc { font-size: +130%; font-weight: bold; }
46 h3.epydoc { font-size: +115%; font-weight: bold;
47 margin-top: 0.2em; }
48 td h3.epydoc { font-size: +115%; font-weight: bold;
49 margin-bottom: 0; }
50 table.navbar { background: #a0c0ff; color: #000000;
51 border: 2px groove #c0d0d0; }
52 table.navbar table { color: #000000; }
53 th.navbar-select { background: #70b0ff;
54 color: #000000; }
55 table.navbar a { text-decoration: none; }
56 table.navbar a:link { color: #0000ff; }
57 table.navbar a:visited { color: #204080; }
58 span.breadcrumbs { font-size: 85%; font-weight: bold; }
59 span.options { font-size: 70%; }
60 span.codelink { font-size: 85%; }
61 td.footer { font-size: 85%; }
62
63 /* Table Headers
64 * - Each summary table and details section begins with a 'header'
65 * row. This row contains a section title (marked by
66 * 'span.table-header') as well as a show/hide private link
67 * (marked by 'span.options', defined above).
68 * - Summary tables that contain user-defined groups mark those
69 * groups using 'group header' rows.
70 */
71 td.table-header { background: #70b0ff; color: #000000;
72 border: 1px solid #608090; }
73 td.table-header table { color: #000000; }
74 td.table-header table a:link { color: #0000ff; }
75 td.table-header table a:visited { color: #204080; }
76 span.table-header { font-size: 120%; font-weight: bold; }
77 th.group-header { background: #c0e0f8; color: #000000;
78 text-align: left; font-style: italic;
79 font-size: 115%;
80 border: 1px solid #608090; }
81
82 /* Summary Tables (functions, variables, etc)
83 * - Each object is described by a single row of the table with
84 * two cells. The left cell gives the object's type, and is
85 * marked with 'code.summary-type'. The right cell gives the
86 * object's name and a summary description.
87 * - CSS styles for the table's header and group headers are
88 * defined above, under 'Table Headers'
89 */
90 table.summary { border-collapse: collapse;
91 background: #e8f0f8; color: #000000;
92 border: 1px solid #608090;
93 margin-bottom: 0.5em; }
94 td.summary { border: 1px solid #608090; }
95 code.summary-type { font-size: 85%; }
96 table.summary a:link { color: #0000ff; }
97 table.summary a:visited { color: #204080; }
98
99
100 /* Details Tables (functions, variables, etc)
101 * - Each object is described in its own div.
102 * - A single-row summary table w/ table-header is used as
103 * a header for each details section (CSS style for table-header
104 * is defined above, under 'Table Headers').
105 */
106 table.details { border-collapse: collapse;
107 background: #e8f0f8; color: #000000;
108 border: 1px solid #608090;
109 margin: .2em 0 0 0; }
110 table.details table { color: #000000; }
111 table.details a:link { color: #0000ff; }
112 table.details a:visited { color: #204080; }
113
114 /* Fields */
115 dl.fields { margin-left: 2em; margin-top: 1em;
116 margin-bottom: 1em; }
117 dl.fields dd ul { margin-left: 0em; padding-left: 0em; }
118 dl.fields dd ul li ul { margin-left: 2em; padding-left: 0em; }
119 div.fields { margin-left: 2em; }
120 div.fields p { margin-bottom: 0.5em; }
121
122 /* Index tables (identifier index, term index, etc)
123 * - link-index is used for indices containing lists of links
124 * (namely, the identifier index & term index).
125 * - index-where is used in link indices for the text indicating
126 * the container/source for each link.
127 * - metadata-index is used for indices containing metadata
128 * extracted from fields (namely, the bug index & todo index).
129 */
130 table.link-index { border-collapse: collapse;
131 background: #e8f0f8; color: #000000;
132 border: 1px solid #608090; }
133 td.link-index { border-width: 0px; }
134 table.link-index a:link { color: #0000ff; }
135 table.link-index a:visited { color: #204080; }
136 span.index-where { font-size: 70%; }
137 table.metadata-index { border-collapse: collapse;
138 background: #e8f0f8; color: #000000;
139 border: 1px solid #608090;
140 margin: .2em 0 0 0; }
141 td.metadata-index { border-width: 1px; border-style: solid; }
142 table.metadata-index a:link { color: #0000ff; }
143 table.metadata-index a:visited { color: #204080; }
144
145 /* Function signatures
146 * - sig* is used for the signature in the details section.
147 * - .summary-sig* is used for the signature in the summary
148 * table, and when listing property accessor functions.
149 * */
150 .sig-name { color: #006080; }
151 .sig-arg { color: #008060; }
152 .sig-default { color: #602000; }
153 .summary-sig { font-family: monospace; }
154 .summary-sig-name { color: #006080; font-weight: bold; }
155 table.summary a.summary-sig-name:link
156 { color: #006080; font-weight: bold; }
157 table.summary a.summary-sig-name:visited
158 { color: #006080; font-weight: bold; }
159 .summary-sig-arg { color: #006040; }
160 .summary-sig-default { color: #501800; }
161
162 /* Subclass list
163 */
164 ul.subclass-list { display: inline; }
165 ul.subclass-list li { display: inline; }
166
167 /* To render variables, classes etc. like functions */
168 table.summary .summary-name { color: #006080; font-weight: bold;
169 font-family: monospace; }
170 table.summary
171 a.summary-name:link { color: #006080; font-weight: bold;
172 font-family: monospace; }
173 table.summary
174 a.summary-name:visited { color: #006080; font-weight: bold;
175 font-family: monospace; }
176
177 /* Variable values
178 * - In the 'variable details' sections, each varaible's value is
179 * listed in a 'pre.variable' box. The width of this box is
180 * restricted to 80 chars; if the value's repr is longer than
181 * this it will be wrapped, using a backslash marked with
182 * class 'variable-linewrap'. If the value's repr is longer
183 * than 3 lines, the rest will be ellided; and an ellipsis
184 * marker ('...' marked with 'variable-ellipsis') will be used.
185 * - If the value is a string, its quote marks will be marked
186 * with 'variable-quote'.
187 * - If the variable is a regexp, it is syntax-highlighted using
188 * the re* CSS classes.
189 */
190 pre.variable { padding: .5em; margin: 0;
191 background: #dce4ec; color: #000000;
192 border: 1px solid #708890; }
193 .variable-linewrap { color: #604000; font-weight: bold; }
194 .variable-ellipsis { color: #604000; font-weight: bold; }
195 .variable-quote { color: #604000; font-weight: bold; }
196 .variable-group { color: #008000; font-weight: bold; }
197 .variable-op { color: #604000; font-weight: bold; }
198 .variable-string { color: #006030; }
199 .variable-unknown { color: #a00000; font-weight: bold; }
200 .re { color: #000000; }
201 .re-char { color: #006030; }
202 .re-op { color: #600000; }
203 .re-group { color: #003060; }
204 .re-ref { color: #404040; }
205
206 /* Base tree
207 * - Used by class pages to display the base class hierarchy.
208 */
209 pre.base-tree { font-size: 80%; margin: 0; }
210
211 /* Frames-based table of contents headers
212 * - Consists of two frames: one for selecting modules; and
213 * the other listing the contents of the selected module.
214 * - h1.toc is used for each frame's heading
215 * - h2.toc is used for subheadings within each frame.
216 */
217 h1.toc { text-align: center; font-size: 105%;
218 margin: 0; font-weight: bold;
219 padding: 0; }
220 h2.toc { font-size: 100%; font-weight: bold;
221 margin: 0.5em 0 0 -0.3em; }
222
223 /* Syntax Highlighting for Source Code
224 * - doctest examples are displayed in a 'pre.py-doctest' block.
225 * If the example is in a details table entry, then it will use
226 * the colors specified by the 'table pre.py-doctest' line.
227 * - Source code listings are displayed in a 'pre.py-src' block.
228 * Each line is marked with 'span.py-line' (used to draw a line
229 * down the left margin, separating the code from the line
230 * numbers). Line numbers are displayed with 'span.py-lineno'.
231 * The expand/collapse block toggle button is displayed with
232 * 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
233 * modify the font size of the text.)
234 * - If a source code page is opened with an anchor, then the
235 * corresponding code block will be highlighted. The code
236 * block's header is highlighted with 'py-highlight-hdr'; and
237 * the code block's body is highlighted with 'py-highlight'.
238 * - The remaining py-* classes are used to perform syntax
239 * highlighting (py-string for string literals, py-name for names,
240 * etc.)
241 */
242 pre.py-doctest { padding: .5em; margin: 1em;
243 background: #e8f0f8; color: #000000;
244 border: 1px solid #708890; }
245 table pre.py-doctest { background: #dce4ec;
246 color: #000000; }
247 pre.py-src { border: 2px solid #000000;
248 background: #f0f0f0; color: #000000; }
249 .py-line { border-left: 2px solid #000000;
250 margin-left: .2em; padding-left: .4em; }
251 .py-lineno { font-style: italic; font-size: 90%;
252 padding-left: .5em; }
253 a.py-toggle { text-decoration: none; }
254 div.py-highlight-hdr { border-top: 2px solid #000000;
255 border-bottom: 2px solid #000000;
256 background: #d8e8e8; }
257 div.py-highlight { border-bottom: 2px solid #000000;
258 background: #d0e0e0; }
259 .py-prompt { color: #005050; font-weight: bold;}
260 .py-more { color: #005050; font-weight: bold;}
261 .py-string { color: #006030; }
262 .py-comment { color: #003060; }
263 .py-keyword { color: #600000; }
264 .py-output { color: #404040; }
265 .py-name { color: #000050; }
266 .py-name:link { color: #000050 !important; }
267 .py-name:visited { color: #000050 !important; }
268 .py-number { color: #005000; }
269 .py-defname { color: #000060; font-weight: bold; }
270 .py-def-name { color: #000060; font-weight: bold; }
271 .py-base-class { color: #000060; }
272 .py-param { color: #000060; }
273 .py-docstring { color: #006030; }
274 .py-decorator { color: #804020; }
275 /* Use this if you don't want links to names underlined: */
276 /*a.py-name { text-decoration: none; }*/
277
278 /* Graphs & Diagrams
279 * - These CSS styles are used for graphs & diagrams generated using
280 * Graphviz dot. 'img.graph-without-title' is used for bare
281 * diagrams (to remove the border created by making the image
282 * clickable).
283 */
284 img.graph-without-title { border: none; }
285 img.graph-with-title { border: 1px solid #000000; }
286 span.graph-title { font-weight: bold; }
287 span.graph-caption { }
288
289 /* General-purpose classes
290 * - 'p.indent-wrapped-lines' defines a paragraph whose first line
291 * is not indented, but whose subsequent lines are.
292 * - The 'nomargin-top' class is used to remove the top margin (e.g.
293 * from lists). The 'nomargin' class is used to remove both the
294 * top and bottom margin (but not the left or right margin --
295 * for lists, that would cause the bullets to disappear.)
296 */
297 p.indent-wrapped-lines { padding: 0 0 0 7em; text-indent: -7em;
298 margin: 0; }
299 .nomargin-top { margin-top: 0; }
300 .nomargin { margin-top: 0; margin-bottom: 0; }
301
302 /* HTML Log */
303 div.log-block { padding: 0; margin: .5em 0 .5em 0;
304 background: #e8f0f8; color: #000000;
305 border: 1px solid #000000; }
306 div.log-error { padding: .1em .3em .1em .3em; margin: 4px;
307 background: #ffb0b0; color: #000000;
308 border: 1px solid #000000; }
309 div.log-warning { padding: .1em .3em .1em .3em; margin: 4px;
310 background: #ffffb0; color: #000000;
311 border: 1px solid #000000; }
312 div.log-info { padding: .1em .3em .1em .3em; margin: 4px;
313 background: #b0ffb0; color: #000000;
314 border: 1px solid #000000; }
315 h2.log-hdr { background: #70b0ff; color: #000000;
316 margin: 0; padding: 0em 0.5em 0em 0.5em;
317 border-bottom: 1px solid #000000; font-size: 110%; }
318 p.log { font-weight: bold; margin: .5em 0 .5em 0; }
319 tr.opt-changed { color: #000000; font-weight: bold; }
320 tr.opt-default { color: #606060; }
321 pre.log { margin: 0; padding: 0; padding-left: 1em; }
+0
-293
doc/epydoc/html/epydoc.js less more
0 function toggle_private() {
1 // Search for any private/public links on this page. Store
2 // their old text in "cmd," so we will know what action to
3 // take; and change their text to the opposite action.
4 var cmd = "?";
5 var elts = document.getElementsByTagName("a");
6 for(var i=0; i<elts.length; i++) {
7 if (elts[i].className == "privatelink") {
8 cmd = elts[i].innerHTML;
9 elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
10 "hide&nbsp;private":"show&nbsp;private");
11 }
12 }
13 // Update all DIVs containing private objects.
14 var elts = document.getElementsByTagName("div");
15 for(var i=0; i<elts.length; i++) {
16 if (elts[i].className == "private") {
17 elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
18 }
19 else if (elts[i].className == "public") {
20 elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
21 }
22 }
23 // Update all table rows containing private objects. Note, we
24 // use "" instead of "block" becaue IE & firefox disagree on what
25 // this should be (block vs table-row), and "" just gives the
26 // default for both browsers.
27 var elts = document.getElementsByTagName("tr");
28 for(var i=0; i<elts.length; i++) {
29 if (elts[i].className == "private") {
30 elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
31 }
32 }
33 // Update all list items containing private objects.
34 var elts = document.getElementsByTagName("li");
35 for(var i=0; i<elts.length; i++) {
36 if (elts[i].className == "private") {
37 elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
38 "none":"");
39 }
40 }
41 // Update all list items containing private objects.
42 var elts = document.getElementsByTagName("ul");
43 for(var i=0; i<elts.length; i++) {
44 if (elts[i].className == "private") {
45 elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
46 }
47 }
48 // Set a cookie to remember the current option.
49 document.cookie = "EpydocPrivate="+cmd;
50 }
51 function show_private() {
52 var elts = document.getElementsByTagName("a");
53 for(var i=0; i<elts.length; i++) {
54 if (elts[i].className == "privatelink") {
55 cmd = elts[i].innerHTML;
56 if (cmd && cmd.substr(0,4)=="show")
57 toggle_private();
58 }
59 }
60 }
61 function getCookie(name) {
62 var dc = document.cookie;
63 var prefix = name + "=";
64 var begin = dc.indexOf("; " + prefix);
65 if (begin == -1) {
66 begin = dc.indexOf(prefix);
67 if (begin != 0) return null;
68 } else
69 { begin += 2; }
70 var end = document.cookie.indexOf(";", begin);
71 if (end == -1)
72 { end = dc.length; }
73 return unescape(dc.substring(begin + prefix.length, end));
74 }
75 function setFrame(url1, url2) {
76 parent.frames[1].location.href = url1;
77 parent.frames[2].location.href = url2;
78 }
79 function checkCookie() {
80 var cmd=getCookie("EpydocPrivate");
81 if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
82 toggle_private();
83 }
84 function toggleCallGraph(id) {
85 var elt = document.getElementById(id);
86 if (elt.style.display == "none")
87 elt.style.display = "block";
88 else
89 elt.style.display = "none";
90 }
91 function expand(id) {
92 var elt = document.getElementById(id+"-expanded");
93 if (elt) elt.style.display = "block";
94 var elt = document.getElementById(id+"-expanded-linenums");
95 if (elt) elt.style.display = "block";
96 var elt = document.getElementById(id+"-collapsed");
97 if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
98 var elt = document.getElementById(id+"-collapsed-linenums");
99 if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
100 var elt = document.getElementById(id+"-toggle");
101 if (elt) { elt.innerHTML = "-"; }
102 }
103
104 function collapse(id) {
105 var elt = document.getElementById(id+"-expanded");
106 if (elt) elt.style.display = "none";
107 var elt = document.getElementById(id+"-expanded-linenums");
108 if (elt) elt.style.display = "none";
109 var elt = document.getElementById(id+"-collapsed-linenums");
110 if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
111 var elt = document.getElementById(id+"-toggle");
112 if (elt) { elt.innerHTML = "+"; }
113 var elt = document.getElementById(id+"-collapsed");
114 if (elt) {
115 elt.style.display = "block";
116
117 var indent = elt.getAttribute("indent");
118 var pad = elt.getAttribute("pad");
119 var s = "<tt class='py-lineno'>";
120 for (var i=0; i<pad.length; i++) { s += "&nbsp;" }
121 s += "</tt>";
122 s += "&nbsp;&nbsp;<tt class='py-line'>";
123 for (var i=0; i<indent.length; i++) { s += "&nbsp;" }
124 s += "<a href='#' onclick='expand(\"" + id;
125 s += "\");return false'>...</a></tt><br />";
126 elt.innerHTML = s;
127 }
128 }
129
130 function toggle(id) {
131 elt = document.getElementById(id+"-toggle");
132 if (elt.innerHTML == "-")
133 collapse(id);
134 else
135 expand(id);
136 return false;
137 }
138
139 function highlight(id) {
140 var elt = document.getElementById(id+"-def");
141 if (elt) elt.className = "py-highlight-hdr";
142 var elt = document.getElementById(id+"-expanded");
143 if (elt) elt.className = "py-highlight";
144 var elt = document.getElementById(id+"-collapsed");
145 if (elt) elt.className = "py-highlight";
146 }
147
148 function num_lines(s) {
149 var n = 1;
150 var pos = s.indexOf("\n");
151 while ( pos > 0) {
152 n += 1;
153 pos = s.indexOf("\n", pos+1);
154 }
155 return n;
156 }
157
158 // Collapse all blocks that mave more than `min_lines` lines.
159 function collapse_all(min_lines) {
160 var elts = document.getElementsByTagName("div");
161 for (var i=0; i<elts.length; i++) {
162 var elt = elts[i];
163 var split = elt.id.indexOf("-");
164 if (split > 0)
165 if (elt.id.substring(split, elt.id.length) == "-expanded")
166 if (num_lines(elt.innerHTML) > min_lines)
167 collapse(elt.id.substring(0, split));
168 }
169 }
170
171 function expandto(href) {
172 var start = href.indexOf("#")+1;
173 if (start != 0 && start != href.length) {
174 if (href.substring(start, href.length) != "-") {
175 collapse_all(4);
176 pos = href.indexOf(".", start);
177 while (pos != -1) {
178 var id = href.substring(start, pos);
179 expand(id);
180 pos = href.indexOf(".", pos+1);
181 }
182 var id = href.substring(start, href.length);
183 expand(id);
184 highlight(id);
185 }
186 }
187 }
188
189 function kill_doclink(id) {
190 var parent = document.getElementById(id);
191 parent.removeChild(parent.childNodes.item(0));
192 }
193 function auto_kill_doclink(ev) {
194 if (!ev) var ev = window.event;
195 if (!this.contains(ev.toElement)) {
196 var parent = document.getElementById(this.parentID);
197 parent.removeChild(parent.childNodes.item(0));
198 }
199 }
200
201 function doclink(id, name, targets_id) {
202 var elt = document.getElementById(id);
203
204 // If we already opened the box, then destroy it.
205 // (This case should never occur, but leave it in just in case.)
206 if (elt.childNodes.length > 1) {
207 elt.removeChild(elt.childNodes.item(0));
208 }
209 else {
210 // The outer box: relative + inline positioning.
211 var box1 = document.createElement("div");
212 box1.style.position = "relative";
213 box1.style.display = "inline";
214 box1.style.top = 0;
215 box1.style.left = 0;
216
217 // A shadow for fun
218 var shadow = document.createElement("div");
219 shadow.style.position = "absolute";
220 shadow.style.left = "-1.3em";
221 shadow.style.top = "-1.3em";
222 shadow.style.background = "#404040";
223
224 // The inner box: absolute positioning.
225 var box2 = document.createElement("div");
226 box2.style.position = "relative";
227 box2.style.border = "1px solid #a0a0a0";
228 box2.style.left = "-.2em";
229 box2.style.top = "-.2em";
230 box2.style.background = "white";
231 box2.style.padding = ".3em .4em .3em .4em";
232 box2.style.fontStyle = "normal";
233 box2.onmouseout=auto_kill_doclink;
234 box2.parentID = id;
235
236 // Get the targets
237 var targets_elt = document.getElementById(targets_id);
238 var targets = targets_elt.getAttribute("targets");
239 var links = "";
240 target_list = targets.split(",");
241 for (var i=0; i<target_list.length; i++) {
242 var target = target_list[i].split("=");
243 links += "<li><a href='" + target[1] +
244 "' style='text-decoration:none'>" +
245 target[0] + "</a></li>";
246 }
247
248 // Put it all together.
249 elt.insertBefore(box1, elt.childNodes.item(0));
250 //box1.appendChild(box2);
251 box1.appendChild(shadow);
252 shadow.appendChild(box2);
253 box2.innerHTML =
254 "Which <b>"+name+"</b> do you want to see documentation for?" +
255 "<ul style='margin-bottom: 0;'>" +
256 links +
257 "<li><a href='#' style='text-decoration:none' " +
258 "onclick='kill_doclink(\""+id+"\");return false;'>"+
259 "<i>None of the above</i></a></li></ul>";
260 }
261 return false;
262 }
263
264 function get_anchor() {
265 var href = location.href;
266 var start = href.indexOf("#")+1;
267 if ((start != 0) && (start != href.length))
268 return href.substring(start, href.length);
269 }
270 function redirect_url(dottedName) {
271 // Scan through each element of the "pages" list, and check
272 // if "name" matches with any of them.
273 for (var i=0; i<pages.length; i++) {
274
275 // Each page has the form "<pagename>-m" or "<pagename>-c";
276 // extract the <pagename> portion & compare it to dottedName.
277 var pagename = pages[i].substring(0, pages[i].length-2);
278 if (pagename == dottedName.substring(0,pagename.length)) {
279
280 // We've found a page that matches `dottedName`;
281 // construct its URL, using leftover `dottedName`
282 // content to form an anchor.
283 var pagetype = pages[i].charAt(pages[i].length-1);
284 var url = pagename + ((pagetype=="m")?"-module.html":
285 "-class.html");
286 if (dottedName.length > pagename.length)
287 url += "#" + dottedName.substring(pagename.length+1,
288 dottedName.length);
289 return url;
290 }
291 }
292 }
+0
-17
doc/epydoc/html/frames.html less more
0 <?xml version="1.0" encoding="iso-8859-1"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
2 "DTD/xhtml1-frameset.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title> ClusterShell </title>
6 </head>
7 <frameset cols="20%,80%">
8 <frameset rows="30%,70%">
9 <frame src="toc.html" name="moduleListFrame"
10 id="moduleListFrame" />
11 <frame src="toc-everything.html" name="moduleFrame"
12 id="moduleFrame" />
13 </frameset>
14 <frame src="module-tree.html" name="mainFrame" id="mainFrame" />
15 </frameset>
16 </html>
+0
-272
doc/epydoc/html/help.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Help</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th bgcolor="#70b0f0" class="navbar-select"
27 >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">&nbsp;</td>
40 <td>
41 <table cellpadding="0" cellspacing="0">
42 <!-- hide/show private -->
43 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
44 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
45 <tr><td align="right"><span class="options"
46 >[<a href="frames.html" target="_top">frames</a
47 >]&nbsp;|&nbsp;<a href="help.html"
48 target="_top">no&nbsp;frames</a>]</span></td></tr>
49 </table>
50 </td>
51 </tr>
52 </table>
53
54 <h1 class="epydoc"> API Documentation </h1>
55
56 <p> This document contains the API (Application Programming Interface)
57 documentation for ClusterShell. Documentation for the Python
58 objects defined by the project is divided into separate pages for each
59 package, module, and class. The API documentation also includes two
60 pages containing information about the project as a whole: a trees
61 page, and an index page. </p>
62
63 <h2> Object Documentation </h2>
64
65 <p>Each <strong>Package Documentation</strong> page contains: </p>
66 <ul>
67 <li> A description of the package. </li>
68 <li> A list of the modules and sub-packages contained by the
69 package. </li>
70 <li> A summary of the classes defined by the package. </li>
71 <li> A summary of the functions defined by the package. </li>
72 <li> A summary of the variables defined by the package. </li>
73 <li> A detailed description of each function defined by the
74 package. </li>
75 <li> A detailed description of each variable defined by the
76 package. </li>
77 </ul>
78
79 <p>Each <strong>Module Documentation</strong> page contains:</p>
80 <ul>
81 <li> A description of the module. </li>
82 <li> A summary of the classes defined by the module. </li>
83 <li> A summary of the functions defined by the module. </li>
84 <li> A summary of the variables defined by the module. </li>
85 <li> A detailed description of each function defined by the
86 module. </li>
87 <li> A detailed description of each variable defined by the
88 module. </li>
89 </ul>
90
91 <p>Each <strong>Class Documentation</strong> page contains: </p>
92 <ul>
93 <li> A class inheritance diagram. </li>
94 <li> A list of known subclasses. </li>
95 <li> A description of the class. </li>
96 <li> A summary of the methods defined by the class. </li>
97 <li> A summary of the instance variables defined by the class. </li>
98 <li> A summary of the class (static) variables defined by the
99 class. </li>
100 <li> A detailed description of each method defined by the
101 class. </li>
102 <li> A detailed description of each instance variable defined by the
103 class. </li>
104 <li> A detailed description of each class (static) variable defined
105 by the class. </li>
106 </ul>
107
108 <h2> Project Documentation </h2>
109
110 <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
111 <ul>
112 <li> The <em>module hierarchy</em> lists every package and module, with
113 modules grouped into packages. At the top level, and within each
114 package, modules and sub-packages are listed alphabetically. </li>
115 <li> The <em>class hierarchy</em> lists every class, grouped by base
116 class. If a class has more than one base class, then it will be
117 listed under each base class. At the top level, and under each base
118 class, classes are listed alphabetically. </li>
119 </ul>
120
121 <p> The <strong>Index</strong> page contains indices of terms and
122 identifiers: </p>
123 <ul>
124 <li> The <em>term index</em> lists every term indexed by any object's
125 documentation. For each term, the index provides links to each
126 place where the term is indexed. </li>
127 <li> The <em>identifier index</em> lists the (short) name of every package,
128 module, class, method, function, variable, and parameter. For each
129 identifier, the index provides a short description, and a link to
130 its documentation. </li>
131 </ul>
132
133 <h2> The Table of Contents </h2>
134
135 <p> The table of contents occupies the two frames on the left side of
136 the window. The upper-left frame displays the <em>project
137 contents</em>, and the lower-left frame displays the <em>module
138 contents</em>: </p>
139
140 <table class="help summary" border="1" cellspacing="0" cellpadding="3">
141 <tr style="height: 30%">
142 <td align="center" style="font-size: small">
143 Project<br />Contents<hr />...</td>
144 <td align="center" style="font-size: small" rowspan="2" width="70%">
145 API<br />Documentation<br />Frame<br /><br /><br />
146 </td>
147 </tr>
148 <tr>
149 <td align="center" style="font-size: small">
150 Module<br />Contents<hr />&nbsp;<br />...<br />&nbsp;
151 </td>
152 </tr>
153 </table><br />
154
155 <p> The <strong>project contents frame</strong> contains a list of all packages
156 and modules that are defined by the project. Clicking on an entry
157 will display its contents in the module contents frame. Clicking on a
158 special entry, labeled "Everything," will display the contents of
159 the entire project. </p>
160
161 <p> The <strong>module contents frame</strong> contains a list of every
162 submodule, class, type, exception, function, and variable defined by a
163 module or package. Clicking on an entry will display its
164 documentation in the API documentation frame. Clicking on the name of
165 the module, at the top of the frame, will display the documentation
166 for the module itself. </p>
167
168 <p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
169 navigation bar can be used to control whether the table of contents is
170 displayed or not. </p>
171
172 <h2> The Navigation Bar </h2>
173
174 <p> A navigation bar is located at the top and bottom of every page.
175 It indicates what type of page you are currently viewing, and allows
176 you to go to related pages. The following table describes the labels
177 on the navigation bar. Note that not some labels (such as
178 [Parent]) are not displayed on all pages. </p>
179
180 <table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
181 <tr class="summary">
182 <th>Label</th>
183 <th>Highlighted when...</th>
184 <th>Links to...</th>
185 </tr>
186 <tr><td valign="top"><strong>[Parent]</strong></td>
187 <td valign="top"><em>(never highlighted)</em></td>
188 <td valign="top"> the parent of the current package </td></tr>
189 <tr><td valign="top"><strong>[Package]</strong></td>
190 <td valign="top">viewing a package</td>
191 <td valign="top">the package containing the current object
192 </td></tr>
193 <tr><td valign="top"><strong>[Module]</strong></td>
194 <td valign="top">viewing a module</td>
195 <td valign="top">the module containing the current object
196 </td></tr>
197 <tr><td valign="top"><strong>[Class]</strong></td>
198 <td valign="top">viewing a class </td>
199 <td valign="top">the class containing the current object</td></tr>
200 <tr><td valign="top"><strong>[Trees]</strong></td>
201 <td valign="top">viewing the trees page</td>
202 <td valign="top"> the trees page </td></tr>
203 <tr><td valign="top"><strong>[Index]</strong></td>
204 <td valign="top">viewing the index page</td>
205 <td valign="top"> the index page </td></tr>
206 <tr><td valign="top"><strong>[Help]</strong></td>
207 <td valign="top">viewing the help page</td>
208 <td valign="top"> the help page </td></tr>
209 </table>
210
211 <p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
212 the top navigation bar can be used to control whether documentation
213 for private objects is displayed. Private objects are usually defined
214 as objects whose (short) names begin with a single underscore, but do
215 not end with an underscore. For example, "<code>_x</code>",
216 "<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
217 are private objects; but "<code>re.sub</code>",
218 "<code>__init__</code>", and "<code>type_</code>" are not. However,
219 if a module defines the "<code>__all__</code>" variable, then its
220 contents are used to decide which objects are private. </p>
221
222 <p> A timestamp below the bottom navigation bar indicates when each
223 page was last updated. </p>
224 <!-- ==================== NAVIGATION BAR ==================== -->
225 <table class="navbar" border="0" width="100%" cellpadding="0"
226 bgcolor="#a0c0ff" cellspacing="0">
227 <tr valign="middle">
228
229 <!-- Tree link -->
230 <th>&nbsp;&nbsp;&nbsp;<a
231 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
232
233 <!-- Index link -->
234 <th>&nbsp;&nbsp;&nbsp;<a
235 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
236
237 <!-- Help link -->
238 <th bgcolor="#70b0f0" class="navbar-select"
239 >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
240
241 <!-- Project homepage -->
242 <th class="navbar" align="right" width="100%">
243 <table border="0" cellpadding="0" cellspacing="0">
244 <tr><th class="navbar" align="center"
245 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
246 </tr></table></th>
247 </tr>
248 </table>
249 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
250 <tr>
251 <td align="left" class="footer">
252 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
253 </td>
254 <td align="right" class="footer">
255 <a target="mainFrame" href="http://epydoc.sourceforge.net"
256 >http://epydoc.sourceforge.net</a>
257 </td>
258 </tr>
259 </table>
260
261 <script type="text/javascript">
262 <!--
263 // Private objects are initially displayed (because if
264 // javascript is turned off then we want them to be
265 // visible); but by default, we want to hide them. So hide
266 // them unless we have a cookie that says to show them.
267 checkCookie();
268 // -->
269 </script>
270 </body>
271 </html>
+0
-1993
doc/epydoc/html/identifier-index.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Identifier Index</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th bgcolor="#70b0f0" class="navbar-select"
23 >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">&nbsp;</td>
40 <td>
41 <table cellpadding="0" cellspacing="0">
42 <!-- hide/show private -->
43 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
44 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
45 <tr><td align="right"><span class="options"
46 >[<a href="frames.html" target="_top">frames</a
47 >]&nbsp;|&nbsp;<a href="identifier-index.html"
48 target="_top">no&nbsp;frames</a>]</span></td></tr>
49 </table>
50 </td>
51 </tr>
52 </table>
53 <table border="0" width="100%">
54 <tr valign="bottom"><td>
55 <h1 class="epydoc">Identifier Index</h1>
56 </td><td>
57 [
58 <a href="#A">A</a>
59 <a href="#B">B</a>
60 <a href="#C">C</a>
61 <a href="#D">D</a>
62 <a href="#E">E</a>
63 <a href="#F">F</a>
64 <a href="#G">G</a>
65 <a href="#H">H</a>
66 <a href="#I">I</a>
67 <a href="#J">J</a>
68 <a href="#K">K</a>
69 <a href="#L">L</a>
70 <a href="#M">M</a>
71 <a href="#N">N</a>
72 <a href="#O">O</a>
73 <a href="#P">P</a>
74 Q
75 <a href="#R">R</a>
76 <a href="#S">S</a>
77 <a href="#T">T</a>
78 <a href="#U">U</a>
79 <a href="#V">V</a>
80 <a href="#W">W</a>
81 X
82 Y
83 Z
84 <a href="#_">_</a>
85 ]
86 </td></table>
87 <table border="0" width="100%">
88 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="A">A</a></h2></td>
89 <td valign="top">
90 <table class="link-index" width="100%" border="1">
91 <tr>
92 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#abort">abort()</a><br />
93 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
94 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#add_range">add_range()</a><br />
95 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
96 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#arm">arm()</a><br />
97 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html" onclick="show_private();">_EngineTimerCase</a>)</span></td>
98 </tr>
99 <tr>
100 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#abort">abort()</a><br />
101 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
102 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#add_source">add_source()</a><br />
103 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
104 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#armed">armed()</a><br />
105 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html" onclick="show_private();">_EngineTimerCase</a>)</span></td>
106 </tr>
107 <tr>
108 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#add">add()</a><br />
109 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
110 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#add_timer">add_timer()</a><br />
111 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
112 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task._SuspendCondition-class.html#atomic_dec">atomic_dec()</a><br />
113 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task._SuspendCondition-class.html" onclick="show_private();">_SuspendCondition</a>)</span></td>
114 </tr>
115 <tr>
116 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#add">add()</a><br />
117 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
118 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#all_nodes">all_nodes()</a><br />
119 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
120 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task._SuspendCondition-class.html#atomic_inc">atomic_inc()</a><br />
121 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task._SuspendCondition-class.html" onclick="show_private();">_SuspendCondition</a>)</span></td>
122 </tr>
123 <tr>
124 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#add">add()</a><br />
125 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
126 <td width="33%" class="link-index"><a href="ClusterShell.Task.AlreadyRunningError-class.html">AlreadyRunningError</a><br />
127 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
128 <td width="33%" class="link-index">&nbsp;</td>
129 </tr>
130 <tr>
131 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#add">add()</a><br />
132 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
133 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#append">append()</a><br />
134 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
135 <td width="33%" class="link-index">&nbsp;</td>
136 </tr>
137 </table>
138 </td></tr>
139 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="B">B</a></h2></td>
140 <td valign="top">
141 <table class="link-index" width="100%" border="1">
142 <tr>
143 <td width="33%" class="link-index"><a href="clush-module.html#bind_stdin">bind_stdin()</a><br />
144 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
145 <td width="33%" class="link-index"><a href="clush-module.html#bufnodeset_cmp">bufnodeset_cmp()</a><br />
146 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
147 <td width="33%" class="link-index">&nbsp;</td>
148 </tr>
149 <tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
150 </table>
151 </td></tr>
152 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td>
153 <td valign="top">
154 <table class="link-index" width="100%" border="1">
155 <tr>
156 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#clear">clear()</a><br />
157 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
158 <td width="33%" class="link-index"><a href="clubak-module.html#clubak">clubak()</a><br />
159 <span class="index-where">(in&nbsp;<a href="clubak-module.html">clubak</a>)</span></td>
160 <td width="33%" class="link-index"><a href="ClusterShell-module.html">ClusterShell</a></td>
161 </tr>
162 <tr>
163 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#clear">clear()</a><br />
164 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
165 <td width="33%" class="link-index"><a href="clush-module.html">clush</a></td>
166 <td width="33%" class="link-index"><a href="clubak.Display-class.html#COLOR_STDERR_FMT">COLOR_STDERR_FMT</a><br />
167 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
168 </tr>
169 <tr>
170 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#clear">clear()</a><br />
171 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
172 <td width="33%" class="link-index"><a href="clush-module.html#clush_excepthook">clush_excepthook()</a><br />
173 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
174 <td width="33%" class="link-index"><a href="clush.Display-class.html#COLOR_STDERR_FMT">COLOR_STDERR_FMT</a><br />
175 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
176 </tr>
177 <tr>
178 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#clear">clear()</a><br />
179 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
180 <td width="33%" class="link-index"><a href="clush-module.html#clush_exit">clush_exit()</a><br />
181 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
182 <td width="33%" class="link-index"><a href="clubak.Display-class.html#COLOR_STDOUT_FMT">COLOR_STDOUT_FMT</a><br />
183 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
184 </tr>
185 <tr>
186 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#clear">clear()</a><br />
187 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
188 <td width="33%" class="link-index"><a href="clush-module.html#clush_main">clush_main()</a><br />
189 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
190 <td width="33%" class="link-index"><a href="clush.Display-class.html#COLOR_STDOUT_FMT">COLOR_STDOUT_FMT</a><br />
191 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
192 </tr>
193 <tr>
194 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#clients">clients()</a><br />
195 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
196 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html">ClushConfig</a><br />
197 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
198 <td width="33%" class="link-index"><a href="nodeset-module.html#compute_nodeset">compute_nodeset()</a><br />
199 <span class="index-where">(in&nbsp;<a href="nodeset-module.html">nodeset</a>)</span></td>
200 </tr>
201 <tr>
202 <td width="33%" class="link-index"><a href="clubak-module.html">clubak</a></td>
203 <td width="33%" class="link-index"><a href="clush.ClushConfigError-class.html">ClushConfigError</a><br />
204 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
205 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#copy">copy()</a><br />
206 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
207 </tr>
208 </table>
209 </td></tr>
210 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="D">D</a></h2></td>
211 <td valign="top">
212 <table class="link-index" width="100%" border="1">
213 <tr>
214 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#DEF_GROUPS_CONFIG">DEF_GROUPS_CONFIG</a><br />
215 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
216 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#difference">difference()</a><br />
217 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
218 <td width="33%" class="link-index"><a href="clubak.Display-class.html">Display</a><br />
219 <span class="index-where">(in&nbsp;<a href="clubak-module.html">clubak</a>)</span></td>
220 </tr>
221 <tr>
222 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#DEF_STD_GROUP_RESOLVER">DEF_STD_GROUP_RESOLVER</a><br />
223 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
224 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#difference_update">difference_update()</a><br />
225 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
226 <td width="33%" class="link-index"><a href="clush.Display-class.html">Display</a><br />
227 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
228 </tr>
229 <tr>
230 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#default">default()</a><br />
231 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
232 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#difference_update">difference_update()</a><br />
233 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
234 <td width="33%" class="link-index"><a href="clubak-module.html#display">display()</a><br />
235 <span class="index-where">(in&nbsp;<a href="clubak-module.html">clubak</a>)</span></td>
236 </tr>
237 <tr>
238 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#default_excepthook">default_excepthook()</a><br />
239 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
240 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#difference_update">difference_update()</a><br />
241 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
242 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a><br />
243 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a>)</span></td>
244 </tr>
245 <tr>
246 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#did_timeout">did_timeout()</a><br />
247 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
248 <td width="33%" class="link-index"><a href="clush.DirectOutputHandler-class.html">DirectOutputHandler</a><br />
249 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
250 <td width="33%" class="link-index">&nbsp;</td>
251 </tr>
252 <tr>
253 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#difference">difference()</a><br />
254 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
255 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#disarm">disarm()</a><br />
256 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html" onclick="show_private();">_EngineTimerCase</a>)</span></td>
257 <td width="33%" class="link-index">&nbsp;</td>
258 </tr>
259 </table>
260 </td></tr>
261 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="E">E</a></h2></td>
262 <td valign="top">
263 <table class="link-index" width="100%" border="1">
264 <tr>
265 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#E_ANY">E_ANY</a><br />
266 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
267 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html">EnginePoll</a><br />
268 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Poll-module.html">ClusterShell.Engine.Poll</a>)</span></td>
269 <td width="33%" class="link-index"><a href="clush.GatherOutputHandler-class.html#ev_hup">ev_hup()</a><br />
270 <span class="index-where">(in&nbsp;<a href="clush.GatherOutputHandler-class.html">GatherOutputHandler</a>)</span></td>
271 </tr>
272 <tr>
273 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#E_ERROR">E_ERROR</a><br />
274 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
275 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a><br />
276 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a>)</span></td>
277 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_msg">ev_msg()</a><br />
278 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
279 </tr>
280 <tr>
281 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#E_READ">E_READ</a><br />
282 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
283 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Factory.PreferredEngine-class.html#engines">engines</a><br />
284 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Factory.PreferredEngine-class.html">PreferredEngine</a>)</span></td>
285 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task._SyncMsgHandler-class.html#ev_msg">ev_msg()</a><br />
286 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task._SyncMsgHandler-class.html" onclick="show_private();">_SyncMsgHandler</a>)</span></td>
287 </tr>
288 <tr>
289 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#E_WRITE">E_WRITE</a><br />
290 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
291 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html">EngineTimeoutException</a><br />
292 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
293 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_read">ev_read()</a><br />
294 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
295 </tr>
296 <tr>
297 <td width="33%" class="link-index"><a href="ClusterShell.Engine-module.html">Engine</a><br />
298 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
299 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineTimer-class.html">EngineTimer</a><br />
300 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
301 <td width="33%" class="link-index"><a href="clush.DirectOutputHandler-class.html#ev_read">ev_read()</a><br />
302 <span class="index-where">(in&nbsp;<a href="clush.DirectOutputHandler-class.html">DirectOutputHandler</a>)</span></td>
303 </tr>
304 <tr>
305 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine-module.html">Engine</a><br />
306 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine-module.html">ClusterShell.Engine</a>)</span></td>
307 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll-module.html">EPoll</a><br />
308 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine-module.html">ClusterShell.Engine</a>)</span></td>
309 <td width="33%" class="link-index"><a href="clush.GatherOutputHandler-class.html#ev_read">ev_read()</a><br />
310 <span class="index-where">(in&nbsp;<a href="clush.GatherOutputHandler-class.html">GatherOutputHandler</a>)</span></td>
311 </tr>
312 <tr>
313 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a><br />
314 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
315 <td width="33%" class="link-index"><a href="clush.RunTimer-class.html#erase_line">erase_line()</a><br />
316 <span class="index-where">(in&nbsp;<a href="clush.RunTimer-class.html">RunTimer</a>)</span></td>
317 <td width="33%" class="link-index"><a href="clush.StdInputHandler-class.html#ev_read">ev_read()</a><br />
318 <span class="index-where">(in&nbsp;<a href="clush.StdInputHandler-class.html">StdInputHandler</a>)</span></td>
319 </tr>
320 <tr>
321 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineAbortException-class.html">EngineAbortException</a><br />
322 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
323 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error">error()</a><br />
324 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
325 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_start">ev_start()</a><br />
326 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
327 </tr>
328 <tr>
329 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html">EngineAlreadyRunningError</a><br />
330 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
331 <td width="33%" class="link-index"><a href="nodeset-module.html#error_exit">error_exit()</a><br />
332 <span class="index-where">(in&nbsp;<a href="nodeset-module.html">nodeset</a>)</span></td>
333 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_timeout">ev_timeout()</a><br />
334 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
335 </tr>
336 <tr>
337 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a><br />
338 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
339 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#error_fileno">error_fileno()</a><br />
340 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
341 <td width="33%" class="link-index"><a href="clush.DirectOutputHandler-class.html#ev_timeout">ev_timeout()</a><br />
342 <span class="index-where">(in&nbsp;<a href="clush.DirectOutputHandler-class.html">DirectOutputHandler</a>)</span></td>
343 </tr>
344 <tr>
345 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient-module.html">EngineClient</a><br />
346 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker-module.html">ClusterShell.Worker</a>)</span></td>
347 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#error_fileno">error_fileno()</a><br />
348 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
349 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_timer">ev_timer()</a><br />
350 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
351 </tr>
352 <tr>
353 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a><br />
354 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a>)</span></td>
355 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_close">ev_close()</a><br />
356 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
357 <td width="33%" class="link-index"><a href="clush.RunTimer-class.html#ev_timer">ev_timer()</a><br />
358 <span class="index-where">(in&nbsp;<a href="clush.RunTimer-class.html">RunTimer</a>)</span></td>
359 </tr>
360 <tr>
361 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html">EngineClientEOF</a><br />
362 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a>)</span></td>
363 <td width="33%" class="link-index"><a href="clush.DirectOutputHandler-class.html#ev_close">ev_close()</a><br />
364 <span class="index-where">(in&nbsp;<a href="clush.DirectOutputHandler-class.html">DirectOutputHandler</a>)</span></td>
365 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_written">ev_written()</a><br />
366 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
367 </tr>
368 <tr>
369 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClientError-class.html">EngineClientError</a><br />
370 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a>)</span></td>
371 <td width="33%" class="link-index"><a href="clush.GatherOutputHandler-class.html#ev_close">ev_close()</a><br />
372 <span class="index-where">(in&nbsp;<a href="clush.GatherOutputHandler-class.html">GatherOutputHandler</a>)</span></td>
373 <td width="33%" class="link-index"><a href="ClusterShell.Event-module.html">Event</a><br />
374 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
375 </tr>
376 <tr>
377 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClientException-class.html">EngineClientException</a><br />
378 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a>)</span></td>
379 <td width="33%" class="link-index"><a href="clush.StdInputHandler-class.html#ev_close">ev_close()</a><br />
380 <span class="index-where">(in&nbsp;<a href="clush.StdInputHandler-class.html">StdInputHandler</a>)</span></td>
381 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a><br />
382 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event-module.html">ClusterShell.Event</a>)</span></td>
383 </tr>
384 <tr>
385 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html">EngineClientNotSupportedError</a><br />
386 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a>)</span></td>
387 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_error">ev_error()</a><br />
388 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
389 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#excepthook">excepthook</a><br />
390 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
391 </tr>
392 <tr>
393 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">EngineEPoll</a><br />
394 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.EPoll-module.html">ClusterShell.Engine.EPoll</a>)</span></td>
395 <td width="33%" class="link-index"><a href="clush.DirectOutputHandler-class.html#ev_error">ev_error()</a><br />
396 <span class="index-where">(in&nbsp;<a href="clush.DirectOutputHandler-class.html">DirectOutputHandler</a>)</span></td>
397 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#exited">exited()</a><br />
398 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
399 </tr>
400 <tr>
401 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineException-class.html">EngineException</a><br />
402 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
403 <td width="33%" class="link-index"><a href="clush.GatherOutputHandler-class.html#ev_error">ev_error()</a><br />
404 <span class="index-where">(in&nbsp;<a href="clush.GatherOutputHandler-class.html">GatherOutputHandler</a>)</span></td>
405 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#expand">expand()</a><br />
406 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
407 </tr>
408 <tr>
409 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html">EngineIllegalOperationError</a><br />
410 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
411 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#ev_hup">ev_hup()</a><br />
412 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
413 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#expired">expired()</a><br />
414 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
415 </tr>
416 <tr>
417 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html">EngineNotSupportedError</a><br />
418 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
419 <td width="33%" class="link-index"><a href="clush.DirectOutputHandler-class.html#ev_hup">ev_hup()</a><br />
420 <span class="index-where">(in&nbsp;<a href="clush.DirectOutputHandler-class.html">DirectOutputHandler</a>)</span></td>
421 <td width="33%" class="link-index">&nbsp;</td>
422 </tr>
423 </table>
424 </td></tr>
425 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="F">F</a></h2></td>
426 <td valign="top">
427 <table class="link-index" width="100%" border="1">
428 <tr>
429 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Factory-module.html">Factory</a><br />
430 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine-module.html">ClusterShell.Engine</a>)</span></td>
431 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_buffers">flush_buffers()</a><br />
432 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
433 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#fromlist">fromlist()</a><br />
434 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
435 </tr>
436 <tr>
437 <td width="33%" class="link-index"><a href="clush.RunTimer-class.html#finalize">finalize()</a><br />
438 <span class="index-where">(in&nbsp;<a href="clush.RunTimer-class.html">RunTimer</a>)</span></td>
439 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#flush_errors">flush_errors()</a><br />
440 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
441 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#fromlist">fromlist()</a><br />
442 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
443 </tr>
444 <tr>
445 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#fire">fire()</a><br />
446 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
447 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#flush_errors">flush_errors()</a><br />
448 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
449 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#fromone">fromone()</a><br />
450 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
451 </tr>
452 <tr>
453 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#fire_timers">fire_timers()</a><br />
454 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
455 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#fold">fold()</a><br />
456 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
457 <td width="33%" class="link-index">&nbsp;</td>
458 </tr>
459 <tr>
460 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#flush_buffers">flush_buffers()</a><br />
461 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
462 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#fromall">fromall()</a><br />
463 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
464 <td width="33%" class="link-index">&nbsp;</td>
465 </tr>
466 </table>
467 </td></tr>
468 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="G">G</a></h2></td>
469 <td valign="top">
470 <table class="link-index" width="100%" border="1">
471 <tr>
472 <td width="33%" class="link-index"><a href="clush.GatherOutputHandler-class.html">GatherOutputHandler</a><br />
473 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
474 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#get_ssh_path">get_ssh_path()</a><br />
475 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
476 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html">GroupResolverConfig</a><br />
477 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
478 </tr>
479 <tr>
480 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#get">get()</a><br />
481 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
482 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#get_ssh_user">get_ssh_user()</a><br />
483 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
484 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html">GroupResolverConfigError</a><br />
485 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
486 </tr>
487 <tr>
488 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#get">get()</a><br />
489 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html" onclick="show_private();">_Msg</a>)</span></td>
490 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#get_verbosity">get_verbosity()</a><br />
491 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
492 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolverError-class.html">GroupResolverError</a><br />
493 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
494 </tr>
495 <tr>
496 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#get_color">get_color()</a><br />
497 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
498 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#getfloat">getfloat()</a><br />
499 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
500 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html">GroupResolverSourceError</a><br />
501 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
502 </tr>
503 <tr>
504 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#get_command_timeout">get_command_timeout()</a><br />
505 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
506 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#getint">getint()</a><br />
507 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
508 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a><br />
509 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
510 </tr>
511 <tr>
512 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#get_connect_timeout">get_connect_timeout()</a><br />
513 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
514 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#group_nodes">group_nodes()</a><br />
515 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
516 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSourceException-class.html">GroupSourceException</a><br />
517 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
518 </tr>
519 <tr>
520 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#get_fanout">get_fanout()</a><br />
521 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
522 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#grouplist">grouplist()</a><br />
523 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
524 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html">GroupSourceNoUpcall</a><br />
525 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
526 </tr>
527 <tr>
528 <td width="33%" class="link-index"><a href="clush-module.html#get_history_file">get_history_file()</a><br />
529 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
530 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#grouplist">grouplist()</a><br />
531 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
532 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html">GroupSourceQueryFailed</a><br />
533 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
534 </tr>
535 <tr>
536 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#get_ssh_options">get_ssh_options()</a><br />
537 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
538 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a><br />
539 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
540 <td width="33%" class="link-index">&nbsp;</td>
541 </tr>
542 </table>
543 </td></tr>
544 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="H">H</a></h2></td>
545 <td valign="top">
546 <table class="link-index" width="100%" border="1">
547 <tr>
548 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#has_node_groups">has_node_groups()</a><br />
549 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
550 <td width="33%" class="link-index">&nbsp;</td>
551 <td width="33%" class="link-index">&nbsp;</td>
552 </tr>
553 <tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
554 </table>
555 </td></tr>
556 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="I">I</a></h2></td>
557 <td valign="top">
558 <table class="link-index" width="100%" border="1">
559 <tr>
560 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#identifier">identifier</a><br />
561 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">EngineEPoll</a>)</span></td>
562 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#invalidate">invalidate()</a><br />
563 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
564 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_buffers">iter_buffers()</a><br />
565 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
566 </tr>
567 <tr>
568 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#identifier">identifier</a><br />
569 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
570 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#is_valid">is_valid()</a><br />
571 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a>)</span></td>
572 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#iter_errors">iter_errors()</a><br />
573 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
574 </tr>
575 <tr>
576 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#identifier">identifier</a><br />
577 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Poll.EnginePoll-class.html">EnginePoll</a>)</span></td>
578 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#issubset">issubset()</a><br />
579 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
580 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_errors">iter_errors()</a><br />
581 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
582 </tr>
583 <tr>
584 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#info">info()</a><br />
585 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
586 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#issubset">issubset()</a><br />
587 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
588 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#iter_keys_timeout">iter_keys_timeout()</a><br />
589 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
590 </tr>
591 <tr>
592 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#intersection">intersection()</a><br />
593 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
594 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#issubset">issubset()</a><br />
595 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
596 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_keys_timeout">iter_keys_timeout()</a><br />
597 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
598 </tr>
599 <tr>
600 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#intersection">intersection()</a><br />
601 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
602 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#issuperset">issuperset()</a><br />
603 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
604 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_buffers">iter_node_buffers()</a><br />
605 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
606 </tr>
607 <tr>
608 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#intersection_update">intersection_update()</a><br />
609 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
610 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#issuperset">issuperset()</a><br />
611 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
612 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_errors">iter_node_errors()</a><br />
613 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
614 </tr>
615 <tr>
616 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#intersection_update">intersection_update()</a><br />
617 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
618 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#issuperset">issuperset()</a><br />
619 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
620 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_node_retcodes">iter_node_retcodes()</a><br />
621 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
622 </tr>
623 <tr>
624 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#intersection_update">intersection_update()</a><br />
625 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
626 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#items">items()</a><br />
627 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
628 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#iter_retcodes">iter_retcodes()</a><br />
629 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
630 </tr>
631 <tr>
632 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#invalidate">invalidate()</a><br />
633 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a>)</span></td>
634 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#iter_buffers">iter_buffers()</a><br />
635 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
636 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#iter_retcodes">iter_retcodes()</a><br />
637 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
638 </tr>
639 </table>
640 </td></tr>
641 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="J">J</a></h2></td>
642 <td valign="top">
643 <table class="link-index" width="100%" border="1">
644 <tr>
645 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#join">join()</a><br />
646 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
647 <td width="33%" class="link-index">&nbsp;</td>
648 <td width="33%" class="link-index">&nbsp;</td>
649 </tr>
650 <tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
651 </table>
652 </td></tr>
653 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="K">K</a></h2></td>
654 <td valign="top">
655 <table class="link-index" width="100%" border="1">
656 <tr>
657 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#key_buffer">key_buffer()</a><br />
658 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
659 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#key_retcode">key_retcode()</a><br />
660 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
661 <td width="33%" class="link-index">&nbsp;</td>
662 </tr>
663 <tr>
664 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#key_error">key_error()</a><br />
665 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
666 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#keys">keys()</a><br />
667 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
668 <td width="33%" class="link-index">&nbsp;</td>
669 </tr>
670 </table>
671 </td></tr>
672 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="L">L</a></h2></td>
673 <td valign="top">
674 <table class="link-index" width="100%" border="1">
675 <tr>
676 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_error">last_error()</a><br />
677 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
678 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_read">last_read()</a><br />
679 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
680 <td width="33%" class="link-index"><a href="clubak.Display-class.html#line_mode">line_mode</a><br />
681 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
682 </tr>
683 <tr>
684 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#last_error">last_error()</a><br />
685 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
686 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#last_read">last_read()</a><br />
687 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
688 <td width="33%" class="link-index"><a href="clush.Display-class.html#line_mode">line_mode</a><br />
689 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
690 </tr>
691 <tr>
692 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_error">last_error()</a><br />
693 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
694 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#last_read">last_read()</a><br />
695 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
696 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#lines">lines()</a><br />
697 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
698 </tr>
699 <tr>
700 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_node">last_node()</a><br />
701 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
702 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#last_retcode">last_retcode()</a><br />
703 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
704 <td width="33%" class="link-index">&nbsp;</td>
705 </tr>
706 </table>
707 </td></tr>
708 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="M">M</a></h2></td>
709 <td valign="top">
710 <table class="link-index" width="100%" border="1">
711 <tr>
712 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#main_defaults">main_defaults</a><br />
713 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
714 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#messages">messages()</a><br />
715 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
716 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree-module.html">MsgTree</a><br />
717 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
718 </tr>
719 <tr>
720 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#max_fdlimit">max_fdlimit()</a><br />
721 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
722 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#modify">modify()</a><br />
723 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
724 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a><br />
725 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree-module.html">ClusterShell.MsgTree</a>)</span></td>
726 </tr>
727 <tr>
728 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#max_retcode">max_retcode()</a><br />
729 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
730 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#msg">msg()</a><br />
731 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a>)</span></td>
732 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a><br />
733 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree-module.html">ClusterShell.MsgTree</a>)</span></td>
734 </tr>
735 <tr>
736 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#message">message()</a><br />
737 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
738 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#msg_send">msg_send()</a><br />
739 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a>)</span></td>
740 <td width="33%" class="link-index">&nbsp;</td>
741 </tr>
742 </table>
743 </td></tr>
744 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td>
745 <td valign="top">
746 <table class="link-index" width="100%" border="1">
747 <tr>
748 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#nextfire_delay">nextfire_delay()</a><br />
749 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
750 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a><br />
751 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
752 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetParseError-class.html">NodeSetParseError</a><br />
753 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
754 </tr>
755 <tr>
756 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_buffer">node_buffer()</a><br />
757 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
758 <td width="33%" class="link-index"><a href="nodeset-module.html">nodeset</a></td>
759 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html">NodeSetParseRangeError</a><br />
760 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
761 </tr>
762 <tr>
763 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_error">node_error()</a><br />
764 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
765 <td width="33%" class="link-index"><a href="clubak-module.html#nodeset_cmp">nodeset_cmp()</a><br />
766 <span class="index-where">(in&nbsp;<a href="clubak-module.html">clubak</a>)</span></td>
767 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils-module.html">NodeUtils</a><br />
768 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
769 </tr>
770 <tr>
771 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#node_groups">node_groups()</a><br />
772 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
773 <td width="33%" class="link-index"><a href="clush-module.html#nodeset_cmp">nodeset_cmp()</a><br />
774 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
775 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#NOGROUP_RESOLVER">NOGROUP_RESOLVER</a><br />
776 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
777 </tr>
778 <tr>
779 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#node_retcode">node_retcode()</a><br />
780 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
781 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a><br />
782 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
783 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task._SuspendCondition-class.html#notify_all">notify_all()</a><br />
784 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task._SuspendCondition-class.html" onclick="show_private();">_SuspendCondition</a>)</span></td>
785 </tr>
786 <tr>
787 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeGroupBase-class.html">NodeGroupBase</a><br />
788 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
789 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetException-class.html">NodeSetException</a><br />
790 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
791 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#num_timeout">num_timeout()</a><br />
792 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
793 </tr>
794 <tr>
795 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html">NodeSet</a><br />
796 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
797 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetExternalError-class.html">NodeSetExternalError</a><br />
798 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
799 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#num_timeout">num_timeout()</a><br />
800 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
801 </tr>
802 </table>
803 </td></tr>
804 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="O">O</a></h2></td>
805 <td valign="top">
806 <table class="link-index" width="100%" border="1">
807 <tr>
808 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#OP_CODES">OP_CODES</a><br />
809 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a>)</span></td>
810 <td width="33%" class="link-index">&nbsp;</td>
811 <td width="33%" class="link-index">&nbsp;</td>
812 </tr>
813 <tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
814 </table>
815 </td></tr>
816 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td>
817 <td valign="top">
818 <table class="link-index" width="100%" border="1">
819 <tr>
820 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#parse">parse()</a><br />
821 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a>)</span></td>
822 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll-module.html">Poll</a><br />
823 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine-module.html">ClusterShell.Engine</a>)</span></td>
824 <td width="33%" class="link-index"><a href="clush.Display-class.html#print_gather">print_gather()</a><br />
825 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
826 </tr>
827 <tr>
828 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_group">parse_group()</a><br />
829 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a>)</span></td>
830 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Popen-module.html">Popen</a><br />
831 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker-module.html">ClusterShell.Worker</a>)</span></td>
832 <td width="33%" class="link-index"><a href="clubak.Display-class.html#print_line">print_line()</a><br />
833 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
834 </tr>
835 <tr>
836 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_group_string">parse_group_string()</a><br />
837 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a>)</span></td>
838 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#port">port()</a><br />
839 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
840 <td width="33%" class="link-index"><a href="clush.Display-class.html#print_line">print_line()</a><br />
841 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
842 </tr>
843 <tr>
844 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#parse_string">parse_string()</a><br />
845 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a>)</span></td>
846 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#ports">ports()</a><br />
847 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
848 <td width="33%" class="link-index"><a href="clubak.Display-class.html#print_line_error">print_line_error()</a><br />
849 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
850 </tr>
851 <tr>
852 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a><br />
853 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
854 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Factory.PreferredEngine-class.html">PreferredEngine</a><br />
855 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Factory-module.html">ClusterShell.Engine.Factory</a>)</span></td>
856 <td width="33%" class="link-index"><a href="clush.Display-class.html#print_line_error">print_line_error()</a><br />
857 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
858 </tr>
859 <tr>
860 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh-module.html">Pdsh</a><br />
861 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker-module.html">ClusterShell.Worker</a>)</span></td>
862 <td width="33%" class="link-index"><a href="clubak.Display-class.html#print_gather">print_gather()</a><br />
863 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
864 <td width="33%" class="link-index"><a href="nodeset-module.html#process_stdin">process_stdin()</a><br />
865 <span class="index-where">(in&nbsp;<a href="nodeset-module.html">nodeset</a>)</span></td>
866 </tr>
867 </table>
868 </td></tr>
869 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="R">R</a></h2></td>
870 <td valign="top">
871 <table class="link-index" width="100%" border="1">
872 <tr>
873 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a><br />
874 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
875 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#remove">remove()</a><br />
876 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
877 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#run">run()</a><br />
878 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
879 </tr>
880 <tr>
881 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSetException-class.html">RangeSetException</a><br />
882 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
883 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#remove">remove()</a><br />
884 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
885 <td width="33%" class="link-index"><a href="clush-module.html#run_command">run_command()</a><br />
886 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
887 </tr>
888 <tr>
889 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSetPaddingError-class.html">RangeSetPaddingError</a><br />
890 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
891 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#remove">remove()</a><br />
892 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
893 <td width="33%" class="link-index"><a href="clush-module.html#run_copy">run_copy()</a><br />
894 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
895 </tr>
896 <tr>
897 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSetParseError-class.html">RangeSetParseError</a><br />
898 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
899 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#remove_timer">remove_timer()</a><br />
900 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
901 <td width="33%" class="link-index"><a href="nodeset-module.html#run_nodeset">run_nodeset()</a><br />
902 <span class="index-where">(in&nbsp;<a href="nodeset-module.html">nodeset</a>)</span></td>
903 </tr>
904 <tr>
905 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#read">read()</a><br />
906 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
907 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#reschedule">reschedule()</a><br />
908 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
909 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#runloop">runloop()</a><br />
910 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">EngineEPoll</a>)</span></td>
911 </tr>
912 <tr>
913 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#reader_fileno">reader_fileno()</a><br />
914 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
915 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_all">resolv_all()</a><br />
916 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a>)</span></td>
917 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#runloop">runloop()</a><br />
918 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
919 </tr>
920 <tr>
921 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#reader_fileno">reader_fileno()</a><br />
922 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
923 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_list">resolv_list()</a><br />
924 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a>)</span></td>
925 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#runloop">runloop()</a><br />
926 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Poll.EnginePoll-class.html">EnginePoll</a>)</span></td>
927 </tr>
928 <tr>
929 <td width="33%" class="link-index"><a href="clush-module.html#readline_setup">readline_setup()</a><br />
930 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
931 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_map">resolv_map()</a><br />
932 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a>)</span></td>
933 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#running">running()</a><br />
934 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
935 </tr>
936 <tr>
937 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#register">register()</a><br />
938 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
939 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSource-class.html#resolv_reverse">resolv_reverse()</a><br />
940 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a>)</span></td>
941 <td width="33%" class="link-index"><a href="clush.RunTimer-class.html">RunTimer</a><br />
942 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
943 </tr>
944 <tr>
945 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#regroup">regroup()</a><br />
946 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
947 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#resume">resume()</a><br />
948 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
949 <td width="33%" class="link-index">&nbsp;</td>
950 </tr>
951 <tr>
952 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#remove">remove()</a><br />
953 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
954 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html#retcode">retcode()</a><br />
955 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Popen.WorkerPopen-class.html">WorkerPopen</a>)</span></td>
956 <td width="33%" class="link-index">&nbsp;</td>
957 </tr>
958 </table>
959 </td></tr>
960 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="S">S</a></h2></td>
961 <td valign="top">
962 <table class="link-index" width="100%" border="1">
963 <tr>
964 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#schedule">schedule()</a><br />
965 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
966 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#set_reading_error">set_reading_error()</a><br />
967 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
968 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Ssh-class.html">Ssh</a><br />
969 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh-module.html">ClusterShell.Worker.Ssh</a>)</span></td>
970 </tr>
971 <tr>
972 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#schedule">schedule()</a><br />
973 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
974 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity">set_verbosity()</a><br />
975 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
976 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#start_all">start_all()</a><br />
977 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
978 </tr>
979 <tr>
980 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Scp-class.html">Scp</a><br />
981 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh-module.html">ClusterShell.Worker.Ssh</a>)</span></td>
982 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#set_write_eof">set_write_eof()</a><br />
983 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a>)</span></td>
984 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#start_ports">start_ports()</a><br />
985 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
986 </tr>
987 <tr>
988 <td width="33%" class="link-index"><a href="clubak.Display-class.html#SEP">SEP</a><br />
989 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
990 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_write_eof">set_write_eof()</a><br />
991 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
992 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#STD_GROUP_RESOLVER">STD_GROUP_RESOLVER</a><br />
993 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
994 </tr>
995 <tr>
996 <td width="33%" class="link-index"><a href="clush.Display-class.html#SEP">SEP</a><br />
997 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
998 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#set_writing">set_writing()</a><br />
999 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1000 <td width="33%" class="link-index"><a href="clush.StdInputHandler-class.html">StdInputHandler</a><br />
1001 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1002 </tr>
1003 <tr>
1004 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#set_default">set_default()</a><br />
1005 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1006 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#shell">shell()</a><br />
1007 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1008 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#suspend">suspend()</a><br />
1009 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1010 </tr>
1011 <tr>
1012 <td width="33%" class="link-index"><a href="clush.RunTimer-class.html#set_dirty">set_dirty()</a><br />
1013 <span class="index-where">(in&nbsp;<a href="clush.RunTimer-class.html">RunTimer</a>)</span></td>
1014 <td width="33%" class="link-index"><a href="clush-module.html#signal_handler">signal_handler()</a><br />
1015 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1016 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference">symmetric_difference()</a><br />
1017 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1018 </tr>
1019 <tr>
1020 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#set_events">set_events()</a><br />
1021 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1022 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#snoop_ports">snoop_ports()</a><br />
1023 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1024 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference">symmetric_difference()</a><br />
1025 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1026 </tr>
1027 <tr>
1028 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#set_info">set_info()</a><br />
1029 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1030 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#sources">sources()</a><br />
1031 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
1032 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#symmetric_difference_update">symmetric_difference_update()</a><br />
1033 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
1034 </tr>
1035 <tr>
1036 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#set_key">set_key()</a><br />
1037 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1038 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#sources">sources()</a><br />
1039 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html">GroupResolverConfig</a>)</span></td>
1040 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference_update">symmetric_difference_update()</a><br />
1041 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1042 </tr>
1043 <tr>
1044 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#set_main">set_main()</a><br />
1045 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
1046 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#split">split()</a><br />
1047 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
1048 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference_update">symmetric_difference_update()</a><br />
1049 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1050 </tr>
1051 <tr>
1052 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#set_nextfire">set_nextfire()</a><br />
1053 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a>)</span></td>
1054 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#split">split()</a><br />
1055 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1056 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#sync">sync()</a><br />
1057 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html" onclick="show_private();">_Msg</a>)</span></td>
1058 </tr>
1059 <tr>
1060 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#set_reading">set_reading()</a><br />
1061 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1062 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh-module.html">Ssh</a><br />
1063 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker-module.html">ClusterShell.Worker</a>)</span></td>
1064 <td width="33%" class="link-index">&nbsp;</td>
1065 </tr>
1066 </table>
1067 </td></tr>
1068 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="T">T</a></h2></td>
1069 <td valign="top">
1070 <table class="link-index" width="100%" border="1">
1071 <tr>
1072 <td width="33%" class="link-index"><a href="ClusterShell.Task-module.html">Task</a><br />
1073 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
1074 <td width="33%" class="link-index"><a href="ClusterShell.Task-module.html#task_wait">task_wait()</a><br />
1075 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1076 <td width="33%" class="link-index"><a href="ClusterShell.Task.TimeoutError-class.html">TimeoutError</a><br />
1077 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1078 </tr>
1079 <tr>
1080 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html">Task</a><br />
1081 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1082 <td width="33%" class="link-index"><a href="ClusterShell.Task.TaskError-class.html">TaskError</a><br />
1083 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1084 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#timer">timer()</a><br />
1085 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1086 </tr>
1087 <tr>
1088 <td width="33%" class="link-index"><a href="ClusterShell.Task-module.html#task_cleanup">task_cleanup()</a><br />
1089 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1090 <td width="33%" class="link-index"><a href="ClusterShell.Task.TaskException-class.html">TaskException</a><br />
1091 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1092 <td width="33%" class="link-index"><a href="clush-module.html#ttyloop">ttyloop()</a><br />
1093 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1094 </tr>
1095 <tr>
1096 <td width="33%" class="link-index"><a href="ClusterShell.Task-module.html#task_self">task_self()</a><br />
1097 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1098 <td width="33%" class="link-index"><a href="ClusterShell.Task.TaskMsgTreeError-class.html">TaskMsgTreeError</a><br />
1099 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1100 <td width="33%" class="link-index">&nbsp;</td>
1101 </tr>
1102 <tr>
1103 <td width="33%" class="link-index"><a href="ClusterShell.Task-module.html#task_terminate">task_terminate()</a><br />
1104 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1105 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task.tasksyncmethod-class.html">tasksyncmethod</a><br />
1106 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1107 <td width="33%" class="link-index">&nbsp;</td>
1108 </tr>
1109 </table>
1110 </td></tr>
1111 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td>
1112 <td valign="top">
1113 <table class="link-index" width="100%" border="1">
1114 <tr>
1115 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#union">union()</a><br />
1116 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1117 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#unregister_writer">unregister_writer()</a><br />
1118 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1119 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#update">update()</a><br />
1120 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1121 </tr>
1122 <tr>
1123 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#union">union()</a><br />
1124 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1125 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#update">update()</a><br />
1126 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
1127 <td width="33%" class="link-index"><a href="clush.RunTimer-class.html#update">update()</a><br />
1128 <span class="index-where">(in&nbsp;<a href="clush.RunTimer-class.html">RunTimer</a>)</span></td>
1129 </tr>
1130 <tr>
1131 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#unregister">unregister()</a><br />
1132 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1133 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#update">update()</a><br />
1134 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1135 <td width="33%" class="link-index"><a href="clush.UpdatePromptException-class.html">UpdatePromptException</a><br />
1136 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1137 </tr>
1138 </table>
1139 </td></tr>
1140 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="V">V</a></h2></td>
1141 <td valign="top">
1142 <table class="link-index" width="100%" border="1">
1143 <tr>
1144 <td width="33%" class="link-index"><a href="clush-module.html#VERB_DEBUG">VERB_DEBUG</a><br />
1145 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1146 <td width="33%" class="link-index"><a href="clush-module.html#VERB_STD">VERB_STD</a><br />
1147 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1148 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#verbose_print">verbose_print()</a><br />
1149 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
1150 </tr>
1151 <tr>
1152 <td width="33%" class="link-index"><a href="clush-module.html#VERB_QUIET">VERB_QUIET</a><br />
1153 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1154 <td width="33%" class="link-index"><a href="clush-module.html#VERB_VERB">VERB_VERB</a><br />
1155 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1156 <td width="33%" class="link-index">&nbsp;</td>
1157 </tr>
1158 </table>
1159 </td></tr>
1160 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="W">W</a></h2></td>
1161 <td valign="top">
1162 <table class="link-index" width="100%" border="1">
1163 <tr>
1164 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#wait">wait()</a><br />
1165 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1166 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a><br />
1167 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a>)</span></td>
1168 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a><br />
1169 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh-module.html">ClusterShell.Worker.Ssh</a>)</span></td>
1170 </tr>
1171 <tr>
1172 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task._SuspendCondition-class.html#wait_check">wait_check()</a><br />
1173 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task._SuspendCondition-class.html" onclick="show_private();">_SuspendCondition</a>)</span></td>
1174 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html">WorkerBadArgumentError</a><br />
1175 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a>)</span></td>
1176 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#write">write()</a><br />
1177 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1178 </tr>
1179 <tr>
1180 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#walk">walk()</a><br />
1181 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
1182 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerError-class.html">WorkerError</a><br />
1183 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a>)</span></td>
1184 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#write">write()</a><br />
1185 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a>)</span></td>
1186 </tr>
1187 <tr>
1188 <td width="33%" class="link-index"><a href="clubak-module.html#WHENCOLOR_CHOICES">WHENCOLOR_CHOICES</a><br />
1189 <span class="index-where">(in&nbsp;<a href="clubak-module.html">clubak</a>)</span></td>
1190 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerException-class.html">WorkerException</a><br />
1191 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a>)</span></td>
1192 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#write">write()</a><br />
1193 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1194 </tr>
1195 <tr>
1196 <td width="33%" class="link-index"><a href="clush-module.html#WHENCOLOR_CHOICES">WHENCOLOR_CHOICES</a><br />
1197 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1198 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a><br />
1199 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh-module.html">ClusterShell.Worker.Pdsh</a>)</span></td>
1200 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#writer_fileno">writer_fileno()</a><br />
1201 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1202 </tr>
1203 <tr>
1204 <td width="33%" class="link-index"><a href="ClusterShell.Worker-module.html">Worker</a><br />
1205 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
1206 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html">WorkerPopen</a><br />
1207 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Popen-module.html">ClusterShell.Worker.Popen</a>)</span></td>
1208 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#writer_fileno">writer_fileno()</a><br />
1209 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1210 </tr>
1211 <tr>
1212 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker-module.html">Worker</a><br />
1213 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker-module.html">ClusterShell.Worker</a>)</span></td>
1214 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a><br />
1215 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a>)</span></td>
1216 <td width="33%" class="link-index">&nbsp;</td>
1217 </tr>
1218 </table>
1219 </td></tr>
1220 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
1221 <td valign="top">
1222 <table class="link-index" width="100%" border="1">
1223 <tr>
1224 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__and__">__and__()</a><br />
1225 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1226 <td width="33%" class="link-index"><a href="ClusterShell.Event-module.html#__package__">__package__</a><br />
1227 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event-module.html">ClusterShell.Event</a>)</span></td>
1228 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_modify_specific">_modify_specific()</a><br />
1229 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">EngineEPoll</a>)</span></td>
1230 </tr>
1231 <tr>
1232 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__and__">__and__()</a><br />
1233 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1234 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree-module.html#__package__">__package__</a><br />
1235 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree-module.html">ClusterShell.MsgTree</a>)</span></td>
1236 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#_modify_specific">_modify_specific()</a><br />
1237 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1238 </tr>
1239 <tr>
1240 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task.tasksyncmethod-class.html#__call__">__call__()</a><br />
1241 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task.tasksyncmethod-class.html">tasksyncmethod</a>)</span></td>
1242 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#__package__">__package__</a><br />
1243 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
1244 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#_modify_specific">_modify_specific()</a><br />
1245 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Poll.EnginePoll-class.html">EnginePoll</a>)</span></td>
1246 </tr>
1247 <tr>
1248 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__cmp__">__cmp__()</a><br />
1249 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html" onclick="show_private();">_EngineTimerCase</a>)</span></td>
1250 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils-module.html#__package__">__package__</a><br />
1251 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a>)</span></td>
1252 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html">_Msg</a><br />
1253 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a>)</span></td>
1254 </tr>
1255 <tr>
1256 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__contains__">__contains__()</a><br />
1257 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1258 <td width="33%" class="link-index"><a href="ClusterShell.Task-module.html#__package__">__package__</a><br />
1259 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1260 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_msg_add">_msg_add()</a><br />
1261 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1262 </tr>
1263 <tr>
1264 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__contains__">__contains__()</a><br />
1265 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1266 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient-module.html#__package__">__package__</a><br />
1267 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a>)</span></td>
1268 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_msg_by_source">_msg_by_source()</a><br />
1269 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1270 </tr>
1271 <tr>
1272 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#__eq__">__eq__()</a><br />
1273 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
1274 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh-module.html#__package__">__package__</a><br />
1275 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh-module.html">ClusterShell.Worker.Pdsh</a>)</span></td>
1276 <td width="33%" class="link-index"><a href="ClusterShell-module.html#_n">_n</a><br />
1277 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
1278 </tr>
1279 <tr>
1280 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__eq__">__eq__()</a><br />
1281 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1282 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Popen-module.html#__package__">__package__</a><br />
1283 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Popen-module.html">ClusterShell.Worker.Popen</a>)</span></td>
1284 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#_next_op">_next_op()</a><br />
1285 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a>)</span></td>
1286 </tr>
1287 <tr>
1288 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__eq__">__eq__()</a><br />
1289 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1290 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh-module.html#__package__">__package__</a><br />
1291 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh-module.html">ClusterShell.Worker.Ssh</a>)</span></td>
1292 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_num_timeout_by_worker">_num_timeout_by_worker()</a><br />
1293 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1294 </tr>
1295 <tr>
1296 <td width="33%" class="link-index"><a href="ClusterShell.Task._TaskMsgTree-class.html#__getattr__">__getattr__()</a><br />
1297 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task._TaskMsgTree-class.html" onclick="show_private();">_TaskMsgTree</a>)</span></td>
1298 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker-module.html#__package__">__package__</a><br />
1299 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a>)</span></td>
1300 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_errmsgline">_on_errmsgline()</a><br />
1301 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1302 </tr>
1303 <tr>
1304 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#__getitem__">__getitem__()</a><br />
1305 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
1306 <td width="33%" class="link-index"><a href="ClusterShell.Worker-module.html#__package__">__package__</a><br />
1307 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker-module.html">ClusterShell.Worker</a>)</span></td>
1308 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_msgline">_on_msgline()</a><br />
1309 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1310 </tr>
1311 <tr>
1312 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#__getitem__">__getitem__()</a><br />
1313 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
1314 <td width="33%" class="link-index"><a href="ClusterShell-module.html#__package__">__package__</a><br />
1315 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
1316 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_errline">_on_node_errline()</a><br />
1317 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
1318 </tr>
1319 <tr>
1320 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__getitem__">__getitem__()</a><br />
1321 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1322 <td width="33%" class="link-index"><a href="clubak-module.html#__package__">__package__</a><br />
1323 <span class="index-where">(in&nbsp;<a href="clubak-module.html">clubak</a>)</span></td>
1324 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_msgline">_on_node_msgline()</a><br />
1325 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
1326 </tr>
1327 <tr>
1328 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__getitem__">__getitem__()</a><br />
1329 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1330 <td width="33%" class="link-index"><a href="clush-module.html#__package__">__package__</a><br />
1331 <span class="index-where">(in&nbsp;<a href="clush-module.html">clush</a>)</span></td>
1332 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_on_node_rc">_on_node_rc()</a><br />
1333 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1334 </tr>
1335 <tr>
1336 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#__getslice__">__getslice__()</a><br />
1337 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
1338 <td width="33%" class="link-index"><a href="nodeset-module.html#__package__">__package__</a><br />
1339 <span class="index-where">(in&nbsp;<a href="nodeset-module.html">nodeset</a>)</span></td>
1340 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_rc">_on_node_rc()</a><br />
1341 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a>)</span></td>
1342 </tr>
1343 <tr>
1344 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__getslice__">__getslice__()</a><br />
1345 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1346 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#__setstate__">__setstate__()</a><br />
1347 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
1348 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_rc">_on_node_rc()</a><br />
1349 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
1350 </tr>
1351 <tr>
1352 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#__getstate__">__getstate__()</a><br />
1353 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
1354 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__str__">__str__()</a><br />
1355 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1356 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_on_node_timeout">_on_node_timeout()</a><br />
1357 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a>)</span></td>
1358 </tr>
1359 <tr>
1360 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__gt__">__gt__()</a><br />
1361 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1362 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__str__">__str__()</a><br />
1363 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1364 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_node_timeout">_on_node_timeout()</a><br />
1365 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
1366 </tr>
1367 <tr>
1368 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__gt__">__gt__()</a><br />
1369 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1370 <td width="33%" class="link-index"><a href="clush.ClushConfigError-class.html#__str__">__str__()</a><br />
1371 <span class="index-where">(in&nbsp;<a href="clush.ClushConfigError-class.html">ClushConfigError</a>)</span></td>
1372 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html#_on_rc">_on_rc()</a><br />
1373 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Popen.WorkerPopen-class.html">WorkerPopen</a>)</span></td>
1374 </tr>
1375 <tr>
1376 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__iand__">__iand__()</a><br />
1377 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1378 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__sub__">__sub__()</a><br />
1379 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1380 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#_on_start">_on_start()</a><br />
1381 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
1382 </tr>
1383 <tr>
1384 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__iand__">__iand__()</a><br />
1385 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1386 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__sub__">__sub__()</a><br />
1387 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1388 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_on_timeout">_on_timeout()</a><br />
1389 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1390 </tr>
1391 <tr>
1392 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#__init__">__init__()</a><br />
1393 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">EngineEPoll</a>)</span></td>
1394 <td width="33%" class="link-index"><a href="ClusterShell-module.html#__url__">__url__</a><br />
1395 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
1396 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_parse_line">_parse_line()</a><br />
1397 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1398 </tr>
1399 <tr>
1400 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#__init__">__init__()</a><br />
1401 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1402 <td width="33%" class="link-index"><a href="ClusterShell-module.html#__version_info__">__version_info__</a><br />
1403 <span class="index-where">(in&nbsp;<a href="ClusterShell-module.html">ClusterShell</a>)</span></td>
1404 <td width="33%" class="link-index"><a href="clubak.Display-class.html#_print_buffer">_print_buffer()</a><br />
1405 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
1406 </tr>
1407 <tr>
1408 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineAbortException-class.html#__init__">__init__()</a><br />
1409 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineAbortException-class.html">EngineAbortException</a>)</span></td>
1410 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__xor__">__xor__()</a><br />
1411 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1412 <td width="33%" class="link-index"><a href="clush.Display-class.html#_print_buffer">_print_buffer()</a><br />
1413 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
1414 </tr>
1415 <tr>
1416 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#__init__">__init__()</a><br />
1417 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a>)</span></td>
1418 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__xor__">__xor__()</a><br />
1419 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1420 <td width="33%" class="link-index"><a href="clubak.Display-class.html#_print_lines">_print_lines()</a><br />
1421 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
1422 </tr>
1423 <tr>
1424 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineTimer-class.html#__init__">__init__()</a><br />
1425 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineTimer-class.html">EngineTimer</a>)</span></td>
1426 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_abort">_abort()</a><br />
1427 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1428 <td width="33%" class="link-index"><a href="clush.Display-class.html#_print_lines">_print_lines()</a><br />
1429 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
1430 </tr>
1431 <tr>
1432 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html#__init__">__init__()</a><br />
1433 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html" onclick="show_private();">_EngineTimerCase</a>)</span></td>
1434 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeGroupBase-class.html#_add">_add()</a><br />
1435 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeGroupBase-class.html">NodeGroupBase</a>)</span></td>
1436 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_rc_by_source">_rc_by_source()</a><br />
1437 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1438 </tr>
1439 <tr>
1440 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#__init__">__init__()</a><br />
1441 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
1442 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_add">_add()</a><br />
1443 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1444 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_rc_iter_by_key">_rc_iter_by_key()</a><br />
1445 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1446 </tr>
1447 <tr>
1448 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#__init__">__init__()</a><br />
1449 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Poll.EnginePoll-class.html">EnginePoll</a>)</span></td>
1450 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_add_port">_add_port()</a><br />
1451 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1452 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_rc_iter_by_worker">_rc_iter_by_worker()</a><br />
1453 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1454 </tr>
1455 <tr>
1456 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#__init__">__init__()</a><br />
1457 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
1458 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_add_range_exfold">_add_range_exfold()</a><br />
1459 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1460 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_rc_set">_rc_set()</a><br />
1461 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1462 </tr>
1463 <tr>
1464 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#__init__">__init__()</a><br />
1465 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
1466 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_binary_sanity_check">_binary_sanity_check()</a><br />
1467 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1468 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_read">_read()</a><br />
1469 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1470 </tr>
1471 <tr>
1472 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#__init__">__init__()</a><br />
1473 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
1474 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_binary_sanity_check">_binary_sanity_check()</a><br />
1475 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1476 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_read">_read()</a><br />
1477 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a>)</span></td>
1478 </tr>
1479 <tr>
1480 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__init__">__init__()</a><br />
1481 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1482 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_call_tree_matcher">_call_tree_matcher()</a><br />
1483 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1484 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_read">_read()</a><br />
1485 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1486 </tr>
1487 <tr>
1488 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetParseError-class.html#__init__">__init__()</a><br />
1489 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetParseError-class.html">NodeSetParseError</a>)</span></td>
1490 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_check_fini">_check_fini()</a><br />
1491 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a>)</span></td>
1492 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerr">_readerr()</a><br />
1493 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1494 </tr>
1495 <tr>
1496 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html#__init__">__init__()</a><br />
1497 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html">NodeSetParseRangeError</a>)</span></td>
1498 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close">_close()</a><br />
1499 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1500 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_readerr">_readerr()</a><br />
1501 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1502 </tr>
1503 <tr>
1504 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#__init__">__init__()</a><br />
1505 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a>)</span></td>
1506 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_close">_close()</a><br />
1507 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a>)</span></td>
1508 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readerrlines">_readerrlines()</a><br />
1509 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1510 </tr>
1511 <tr>
1512 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__init__">__init__()</a><br />
1513 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1514 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_close">_close()</a><br />
1515 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1516 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_readlines">_readlines()</a><br />
1517 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1518 </tr>
1519 <tr>
1520 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSetPaddingError-class.html#__init__">__init__()</a><br />
1521 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSetPaddingError-class.html">RangeSetPaddingError</a>)</span></td>
1522 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html#_close">_close()</a><br />
1523 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Popen.WorkerPopen-class.html">WorkerPopen</a>)</span></td>
1524 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_register_specific">_register_specific()</a><br />
1525 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">EngineEPoll</a>)</span></td>
1526 </tr>
1527 <tr>
1528 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSetParseError-class.html#__init__">__init__()</a><br />
1529 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSetParseError-class.html">RangeSetParseError</a>)</span></td>
1530 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_close">_close()</a><br />
1531 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.Ssh-class.html">Ssh</a>)</span></td>
1532 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#_register_specific">_register_specific()</a><br />
1533 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1534 </tr>
1535 <tr>
1536 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#__init__">__init__()</a><br />
1537 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
1538 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_close">_close()</a><br />
1539 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1540 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#_register_specific">_register_specific()</a><br />
1541 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Poll.EnginePoll-class.html">EnginePoll</a>)</span></td>
1542 </tr>
1543 <tr>
1544 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#__init__">__init__()</a><br />
1545 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html">GroupResolverConfig</a>)</span></td>
1546 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_close_writer">_close_writer()</a><br />
1547 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1548 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#_remove">_remove()</a><br />
1549 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1550 </tr>
1551 <tr>
1552 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSource-class.html#__init__">__init__()</a><br />
1553 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a>)</span></td>
1554 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_contains">_contains()</a><br />
1555 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1556 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_remove_port">_remove_port()</a><br />
1557 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1558 </tr>
1559 <tr>
1560 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSourceException-class.html#__init__">__init__()</a><br />
1561 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupSourceException-class.html">GroupSourceException</a>)</span></td>
1562 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_contains_with_padding">_contains_with_padding()</a><br />
1563 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1564 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_reset">_reset()</a><br />
1565 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1566 </tr>
1567 <tr>
1568 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task._SuspendCondition-class.html#__init__">__init__()</a><br />
1569 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task._SuspendCondition-class.html" onclick="show_private();">_SuspendCondition</a>)</span></td>
1570 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#_debug">_debug()</a><br />
1571 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1572 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_resume">_resume()</a><br />
1573 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1574 </tr>
1575 <tr>
1576 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#__init__">__init__()</a><br />
1577 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1578 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#_depth">_depth()</a><br />
1579 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
1580 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_resume_thread">_resume_thread()</a><br />
1581 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1582 </tr>
1583 <tr>
1584 <td width="33%" class="link-index"><a href="ClusterShell.Task._TaskMsgTree-class.html#__init__">__init__()</a><br />
1585 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task._TaskMsgTree-class.html" onclick="show_private();">_TaskMsgTree</a>)</span></td>
1586 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#_dequeue_disarmed">_dequeue_disarmed()</a><br />
1587 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
1588 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_run">_run()</a><br />
1589 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1590 </tr>
1591 <tr>
1592 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#__init__">__init__()</a><br />
1593 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1594 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_engine_clients">_engine_clients()</a><br />
1595 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1596 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.ParsingEngine-class.html#_scan_string">_scan_string()</a><br />
1597 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.ParsingEngine-class.html">ParsingEngine</a>)</span></td>
1598 </tr>
1599 <tr>
1600 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html#__init__">__init__()</a><br />
1601 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html" onclick="show_private();">_Msg</a>)</span></td>
1602 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#_engine_clients">_engine_clients()</a><br />
1603 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a>)</span></td>
1604 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_set_engine">_set_engine()</a><br />
1605 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a>)</span></td>
1606 </tr>
1607 <tr>
1608 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#__init__">__init__()</a><br />
1609 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a>)</span></td>
1610 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#_engine_clients">_engine_clients()</a><br />
1611 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
1612 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading">_set_reading()</a><br />
1613 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1614 </tr>
1615 <tr>
1616 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#__init__">__init__()</a><br />
1617 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1618 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_engine_clients">_engine_clients()</a><br />
1619 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1620 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_reading_error">_set_reading_error()</a><br />
1621 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1622 </tr>
1623 <tr>
1624 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html#__init__">__init__()</a><br />
1625 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Popen.WorkerPopen-class.html">WorkerPopen</a>)</span></td>
1626 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html">_EngineTimerCase</a><br />
1627 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
1628 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#_set_task">_set_task()</a><br />
1629 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
1630 </tr>
1631 <tr>
1632 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Scp-class.html#__init__">__init__()</a><br />
1633 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.Scp-class.html">Scp</a>)</span></td>
1634 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html">_EngineTimerQ</a><br />
1635 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
1636 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_write_eof">_set_write_eof()</a><br />
1637 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1638 </tr>
1639 <tr>
1640 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#__init__">__init__()</a><br />
1641 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.Ssh-class.html">Ssh</a>)</span></td>
1642 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_errmsg_add">_errmsg_add()</a><br />
1643 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1644 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_set_writing">_set_writing()</a><br />
1645 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1646 </tr>
1647 <tr>
1648 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html#__init__">__init__()</a><br />
1649 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.WorkerSsh-class.html">WorkerSsh</a>)</span></td>
1650 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_errmsg_by_source">_errmsg_by_source()</a><br />
1651 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1652 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_setexcepthook">_setexcepthook()</a><br />
1653 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1654 </tr>
1655 <tr>
1656 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.DistantWorker-class.html#__init__">__init__()</a><br />
1657 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.DistantWorker-class.html">DistantWorker</a>)</span></td>
1658 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_exec_nonblock">_exec_nonblock()</a><br />
1659 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1660 <td width="33%" class="link-index"><a href="clubak.Display-class.html#_setlmode">_setlmode()</a><br />
1661 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
1662 </tr>
1663 <tr>
1664 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#__init__">__init__()</a><br />
1665 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
1666 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_expand">_expand()</a><br />
1667 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1668 <td width="33%" class="link-index"><a href="clush.Display-class.html#_setlmode">_setlmode()</a><br />
1669 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
1670 </tr>
1671 <tr>
1672 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#__init__">__init__()</a><br />
1673 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1674 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#_fd2client">_fd2client()</a><br />
1675 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1676 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#_shift">_shift()</a><br />
1677 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
1678 </tr>
1679 <tr>
1680 <td width="33%" class="link-index"><a href="clubak.Display-class.html#__init__">__init__()</a><br />
1681 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
1682 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSet-class.html#_find_groups">_find_groups()</a><br />
1683 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSet-class.html">NodeSet</a>)</span></td>
1684 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#_source">_source()</a><br />
1685 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
1686 </tr>
1687 <tr>
1688 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#__init__">__init__()</a><br />
1689 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
1690 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html#_fire">_fire()</a><br />
1691 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html">EngineBaseTimer</a>)</span></td>
1692 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html#_source">_source()</a><br />
1693 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolverConfig-class.html">GroupResolverConfig</a>)</span></td>
1694 </tr>
1695 <tr>
1696 <td width="33%" class="link-index"><a href="clush.ClushConfigError-class.html#__init__">__init__()</a><br />
1697 <span class="index-where">(in&nbsp;<a href="clush.ClushConfigError-class.html">ClushConfigError</a>)</span></td>
1698 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.EngineTimer-class.html#_fire">_fire()</a><br />
1699 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.EngineTimer-class.html">EngineTimer</a>)</span></td>
1700 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_start">_start()</a><br />
1701 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1702 </tr>
1703 <tr>
1704 <td width="33%" class="link-index"><a href="clush.DirectOutputHandler-class.html#__init__">__init__()</a><br />
1705 <span class="index-where">(in&nbsp;<a href="clush.DirectOutputHandler-class.html">DirectOutputHandler</a>)</span></td>
1706 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_fire">_fire()</a><br />
1707 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1708 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_start">_start()</a><br />
1709 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a>)</span></td>
1710 </tr>
1711 <tr>
1712 <td width="33%" class="link-index"><a href="clush.Display-class.html#__init__">__init__()</a><br />
1713 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
1714 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_flush_buffers_by_worker">_flush_buffers_by_worker()</a><br />
1715 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1716 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_start">_start()</a><br />
1717 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1718 </tr>
1719 <tr>
1720 <td width="33%" class="link-index"><a href="clush.GatherOutputHandler-class.html#__init__">__init__()</a><br />
1721 <span class="index-where">(in&nbsp;<a href="clush.GatherOutputHandler-class.html">GatherOutputHandler</a>)</span></td>
1722 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_flush_errors_by_worker">_flush_errors_by_worker()</a><br />
1723 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1724 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Popen.WorkerPopen-class.html#_start">_start()</a><br />
1725 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Popen.WorkerPopen-class.html">WorkerPopen</a>)</span></td>
1726 </tr>
1727 <tr>
1728 <td width="33%" class="link-index"><a href="clush.RunTimer-class.html#__init__">__init__()</a><br />
1729 <span class="index-where">(in&nbsp;<a href="clush.RunTimer-class.html">RunTimer</a>)</span></td>
1730 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_fold">_fold()</a><br />
1731 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1732 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Scp-class.html#_start">_start()</a><br />
1733 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.Scp-class.html">Scp</a>)</span></td>
1734 </tr>
1735 <tr>
1736 <td width="33%" class="link-index"><a href="clush.StdInputHandler-class.html#__init__">__init__()</a><br />
1737 <span class="index-where">(in&nbsp;<a href="clush.StdInputHandler-class.html">StdInputHandler</a>)</span></td>
1738 <td width="33%" class="link-index"><a href="clubak.Display-class.html#_format_header">_format_header()</a><br />
1739 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
1740 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_start">_start()</a><br />
1741 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.Ssh-class.html">Ssh</a>)</span></td>
1742 </tr>
1743 <tr>
1744 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ior__">__ior__()</a><br />
1745 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1746 <td width="33%" class="link-index"><a href="clush.Display-class.html#_format_header">_format_header()</a><br />
1747 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
1748 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_start">_start()</a><br />
1749 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1750 </tr>
1751 <tr>
1752 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__ior__">__ior__()</a><br />
1753 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1754 <td width="33%" class="link-index"><a href="clush.ClushConfig-class.html#_get_optional">_get_optional()</a><br />
1755 <span class="index-where">(in&nbsp;<a href="clush.ClushConfig-class.html">ClushConfig</a>)</span></td>
1756 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_std_default">_std_default</a><br />
1757 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1758 </tr>
1759 <tr>
1760 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__isub__">__isub__()</a><br />
1761 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1762 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_getexcepthook">_getexcepthook()</a><br />
1763 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1764 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_std_info">_std_info</a><br />
1765 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1766 </tr>
1767 <tr>
1768 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__isub__">__isub__()</a><br />
1769 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1770 <td width="33%" class="link-index"><a href="clubak.Display-class.html#_getlmode">_getlmode()</a><br />
1771 <span class="index-where">(in&nbsp;<a href="clubak.Display-class.html">Display</a>)</span></td>
1772 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_sub_exfold">_sub_exfold()</a><br />
1773 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1774 </tr>
1775 <tr>
1776 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#__iter__">__iter__()</a><br />
1777 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
1778 <td width="33%" class="link-index"><a href="clush.Display-class.html#_getlmode">_getlmode()</a><br />
1779 <span class="index-where">(in&nbsp;<a href="clush.Display-class.html">Display</a>)</span></td>
1780 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_suspend_wait">_suspend_wait()</a><br />
1781 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1782 </tr>
1783 <tr>
1784 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__iter__">__iter__()</a><br />
1785 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1786 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_error">_handle_error()</a><br />
1787 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1788 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task._SuspendCondition-class.html">_SuspendCondition</a><br />
1789 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1790 </tr>
1791 <tr>
1792 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__iter__">__iter__()</a><br />
1793 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1794 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_error">_handle_error()</a><br />
1795 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1796 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task._SyncMsgHandler-class.html">_SyncMsgHandler</a><br />
1797 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1798 </tr>
1799 <tr>
1800 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__ixor__">__ixor__()</a><br />
1801 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1802 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_handle_error">_handle_error()</a><br />
1803 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.Ssh-class.html">Ssh</a>)</span></td>
1804 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#_task_bound_check">_task_bound_check()</a><br />
1805 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
1806 </tr>
1807 <tr>
1808 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__ixor__">__ixor__()</a><br />
1809 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1810 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_error">_handle_error()</a><br />
1811 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1812 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_task_lock">_task_lock</a><br />
1813 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1814 </tr>
1815 <tr>
1816 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html#__len__">__len__()</a><br />
1817 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine._EngineTimerQ-class.html" onclick="show_private();">_EngineTimerQ</a>)</span></td>
1818 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_read">_handle_read()</a><br />
1819 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1820 <td width="33%" class="link-index"><a href="ClusterShell.Task-module.html#_task_print_debug">_task_print_debug()</a><br />
1821 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1822 </tr>
1823 <tr>
1824 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTree-class.html#__len__">__len__()</a><br />
1825 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTree-class.html">MsgTree</a>)</span></td>
1826 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EnginePort-class.html#_handle_read">_handle_read()</a><br />
1827 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EnginePort-class.html">EnginePort</a>)</span></td>
1828 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_taskid_max">_taskid_max</a><br />
1829 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1830 </tr>
1831 <tr>
1832 <td width="33%" class="link-index"><a href="ClusterShell.MsgTree.MsgTreeElem-class.html#__len__">__len__()</a><br />
1833 <span class="index-where">(in&nbsp;<a href="ClusterShell.MsgTree.MsgTreeElem-class.html">MsgTreeElem</a>)</span></td>
1834 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html#_handle_read">_handle_read()</a><br />
1835 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html">WorkerPdsh</a>)</span></td>
1836 <td width="33%" class="link-index"><a href="ClusterShell.Task._TaskMsgTree-class.html">_TaskMsgTree</a><br />
1837 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task-module.html">ClusterShell.Task</a>)</span></td>
1838 </tr>
1839 <tr>
1840 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__len__">__len__()</a><br />
1841 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1842 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Ssh.Ssh-class.html#_handle_read">_handle_read()</a><br />
1843 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Ssh.Ssh-class.html">Ssh</a>)</span></td>
1844 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_tasks">_tasks</a><br />
1845 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1846 </tr>
1847 <tr>
1848 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__len__">__len__()</a><br />
1849 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1850 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.WorkerSimple-class.html#_handle_read">_handle_read()</a><br />
1851 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.WorkerSimple-class.html">WorkerSimple</a>)</span></td>
1852 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_terminate">_terminate()</a><br />
1853 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1854 </tr>
1855 <tr>
1856 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__lt__">__lt__()</a><br />
1857 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1858 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_handle_write">_handle_write()</a><br />
1859 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1860 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet-module.html#_test">_test()</a><br />
1861 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a>)</span></td>
1862 </tr>
1863 <tr>
1864 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__lt__">__lt__()</a><br />
1865 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1866 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_intersect_exfold">_intersect_exfold()</a><br />
1867 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1868 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_thread_start">_thread_start()</a><br />
1869 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1870 </tr>
1871 <tr>
1872 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Factory.PreferredEngine-class.html#__new__">__new__()</a><br />
1873 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Factory.PreferredEngine-class.html">PreferredEngine</a>)</span></td>
1874 <td width="33%" class="link-index"><a href="ClusterShell.Event.EventHandler-class.html#_invoke">_invoke()</a><br />
1875 <span class="index-where">(in&nbsp;<a href="ClusterShell.Event.EventHandler-class.html">EventHandler</a>)</span></td>
1876 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_timeout_add">_timeout_add()</a><br />
1877 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1878 </tr>
1879 <tr>
1880 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#__new__">__new__()</a><br />
1881 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1882 <td width="33%" class="link-index"><a href="ClusterShell.Worker.Worker.Worker-class.html#_invoke">_invoke()</a><br />
1883 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.Worker.Worker-class.html">Worker</a>)</span></td>
1884 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html#_unregister_specific">_unregister_specific()</a><br />
1885 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.EPoll.EngineEPoll-class.html">EngineEPoll</a>)</span></td>
1886 </tr>
1887 <tr>
1888 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#__or__">__or__()</a><br />
1889 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1890 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_is_task_self">_is_task_self()</a><br />
1891 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1892 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine.Engine-class.html#_unregister_specific">_unregister_specific()</a><br />
1893 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine.Engine-class.html">Engine</a>)</span></td>
1894 </tr>
1895 <tr>
1896 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#__or__">__or__()</a><br />
1897 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1898 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_iter">_iter()</a><br />
1899 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1900 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll.EnginePoll-class.html#_unregister_specific">_unregister_specific()</a><br />
1901 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Poll.EnginePoll-class.html">EnginePoll</a>)</span></td>
1902 </tr>
1903 <tr>
1904 <td width="33%" class="link-index"><a href="ClusterShell.Engine.EPoll-module.html#__package__">__package__</a><br />
1905 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.EPoll-module.html">ClusterShell.Engine.EPoll</a>)</span></td>
1906 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_iter_keys_timeout_by_worker">_iter_keys_timeout_by_worker()</a><br />
1907 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1908 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSource-class.html#_upcall_read">_upcall_read()</a><br />
1909 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a>)</span></td>
1910 </tr>
1911 <tr>
1912 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Engine-module.html#__package__">__package__</a><br />
1913 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a>)</span></td>
1914 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.NodeSetBase-class.html#_iterbase">_iterbase()</a><br />
1915 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.NodeSetBase-class.html">NodeSetBase</a>)</span></td>
1916 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupSource-class.html#_verbose_print">_verbose_print()</a><br />
1917 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupSource-class.html">GroupSource</a>)</span></td>
1918 </tr>
1919 <tr>
1920 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Factory-module.html#__package__">__package__</a><br />
1921 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Factory-module.html">ClusterShell.Engine.Factory</a>)</span></td>
1922 <td width="33%" class="link-index"><a href="ClusterShell.Task.Task-class.html#_krc_iter_by_worker">_krc_iter_by_worker()</a><br />
1923 <span class="index-where">(in&nbsp;<a href="ClusterShell.Task.Task-class.html">Task</a>)</span></td>
1924 <td width="33%" class="link-index"><a href="ClusterShell.Worker.EngineClient.EngineClient-class.html#_write">_write()</a><br />
1925 <span class="index-where">(in&nbsp;<a href="ClusterShell.Worker.EngineClient.EngineClient-class.html">EngineClient</a>)</span></td>
1926 </tr>
1927 <tr>
1928 <td width="33%" class="link-index"><a href="ClusterShell.Engine.Poll-module.html#__package__">__package__</a><br />
1929 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine.Poll-module.html">ClusterShell.Engine.Poll</a>)</span></td>
1930 <td width="33%" class="link-index"><a href="ClusterShell.NodeUtils.GroupResolver-class.html#_list">_list()</a><br />
1931 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeUtils.GroupResolver-class.html">GroupResolver</a>)</span></td>
1932 <td width="33%" class="link-index"><a href="ClusterShell.NodeSet.RangeSet-class.html#_xor_exfold">_xor_exfold()</a><br />
1933 <span class="index-where">(in&nbsp;<a href="ClusterShell.NodeSet.RangeSet-class.html">RangeSet</a>)</span></td>
1934 </tr>
1935 <tr>
1936 <td width="33%" class="link-index"><a href="ClusterShell.Engine-module.html#__package__">__package__</a><br />
1937 <span class="index-where">(in&nbsp;<a href="ClusterShell.Engine-module.html">ClusterShell.Engine</a>)</span></td>
1938 <td width="33%" class="link-index"><a href="clush.GatherOutputHandler-class.html#_live_line">_live_line()</a><br />
1939 <span class="index-where">(in&nbsp;<a href="clush.GatherOutputHandler-class.html">GatherOutputHandler</a>)</span></td>
1940 <td width="33%" class="link-index">&nbsp;</td>
1941 </tr>
1942 </table>
1943 </td></tr>
1944 </table>
1945 <br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
1946 <table class="navbar" border="0" width="100%" cellpadding="0"
1947 bgcolor="#a0c0ff" cellspacing="0">
1948 <tr valign="middle">
1949
1950 <!-- Tree link -->
1951 <th>&nbsp;&nbsp;&nbsp;<a
1952 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
1953
1954 <!-- Index link -->
1955 <th bgcolor="#70b0f0" class="navbar-select"
1956 >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
1957
1958 <!-- Help link -->
1959 <th>&nbsp;&nbsp;&nbsp;<a
1960 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
1961
1962 <!-- Project homepage -->
1963 <th class="navbar" align="right" width="100%">
1964 <table border="0" cellpadding="0" cellspacing="0">
1965 <tr><th class="navbar" align="center"
1966 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
1967 </tr></table></th>
1968 </tr>
1969 </table>
1970 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
1971 <tr>
1972 <td align="left" class="footer">
1973 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
1974 </td>
1975 <td align="right" class="footer">
1976 <a target="mainFrame" href="http://epydoc.sourceforge.net"
1977 >http://epydoc.sourceforge.net</a>
1978 </td>
1979 </tr>
1980 </table>
1981
1982 <script type="text/javascript">
1983 <!--
1984 // Private objects are initially displayed (because if
1985 // javascript is turned off then we want them to be
1986 // visible); but by default, we want to hide them. So hide
1987 // them unless we have a cookie that says to show them.
1988 checkCookie();
1989 // -->
1990 </script>
1991 </body>
1992 </html>
+0
-17
doc/epydoc/html/index.html less more
0 <?xml version="1.0" encoding="iso-8859-1"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
2 "DTD/xhtml1-frameset.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title> ClusterShell </title>
6 </head>
7 <frameset cols="20%,80%">
8 <frameset rows="30%,70%">
9 <frame src="toc.html" name="moduleListFrame"
10 id="moduleListFrame" />
11 <frame src="toc-everything.html" name="moduleFrame"
12 id="moduleFrame" />
13 </frameset>
14 <frame src="module-tree.html" name="mainFrame" id="mainFrame" />
15 </frameset>
16 </html>
+0
-140
doc/epydoc/html/module-tree.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Module Hierarchy</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th bgcolor="#70b0f0" class="navbar-select"
19 >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">&nbsp;</td>
40 <td>
41 <table cellpadding="0" cellspacing="0">
42 <!-- hide/show private -->
43 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
44 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
45 <tr><td align="right"><span class="options"
46 >[<a href="frames.html" target="_top">frames</a
47 >]&nbsp;|&nbsp;<a href="module-tree.html"
48 target="_top">no&nbsp;frames</a>]</span></td></tr>
49 </table>
50 </td>
51 </tr>
52 </table>
53 <center><b>
54 [ <a href="module-tree.html">Module Hierarchy</a>
55 | <a href="class-tree.html">Class Hierarchy</a> ]
56 </b></center><br />
57 <h1 class="epydoc">Module Hierarchy</h1>
58 <ul class="nomargin-top">
59 <li> <strong class="uidlink"><a href="ClusterShell-module.html">ClusterShell</a></strong>: <em class="summary">ClusterShell Python Library</em>
60 <ul>
61 <li> <strong class="uidlink"><a href="ClusterShell.Engine-module.html">ClusterShell.Engine</a></strong>
62 <ul>
63 <li> <strong class="uidlink"><a href="ClusterShell.Engine.EPoll-module.html">ClusterShell.Engine.EPoll</a></strong>: <em class="summary">A ClusterShell Engine using epoll, an I/O event notification
64 facility.</em> </li>
65 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Engine-module.html">ClusterShell.Engine.Engine</a></strong>: <em class="summary">Interface of underlying Task's Engine.</em> </li>
66 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Factory-module.html">ClusterShell.Engine.Factory</a></strong>: <em class="summary">Engine Factory to select the best working event engine for the
67 current version of Python and Operating System.</em> </li>
68 <li> <strong class="uidlink"><a href="ClusterShell.Engine.Poll-module.html">ClusterShell.Engine.Poll</a></strong>: <em class="summary">A poll() based ClusterShell Engine.</em> </li>
69 </ul>
70 </li>
71 <li> <strong class="uidlink"><a href="ClusterShell.Event-module.html">ClusterShell.Event</a></strong>: <em class="summary">Event handler support</em> </li>
72 <li> <strong class="uidlink"><a href="ClusterShell.MsgTree-module.html">ClusterShell.MsgTree</a></strong>: <em class="summary">MsgTree</em> </li>
73 <li> <strong class="uidlink"><a href="ClusterShell.NodeSet-module.html">ClusterShell.NodeSet</a></strong>: <em class="summary">Cluster node set module.</em> </li>
74 <li> <strong class="uidlink"><a href="ClusterShell.NodeUtils-module.html">ClusterShell.NodeUtils</a></strong>: <em class="summary">Cluster nodes utility module</em> </li>
75 <li> <strong class="uidlink"><a href="ClusterShell.Task-module.html">ClusterShell.Task</a></strong>: <em class="summary">ClusterShell Task module.</em> </li>
76 <li> <strong class="uidlink"><a href="ClusterShell.Worker-module.html">ClusterShell.Worker</a></strong>
77 <ul>
78 <li> <strong class="uidlink"><a href="ClusterShell.Worker.EngineClient-module.html">ClusterShell.Worker.EngineClient</a></strong>: <em class="summary">EngineClient</em> </li>
79 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Pdsh-module.html">ClusterShell.Worker.Pdsh</a></strong>: <em class="summary">WorkerPdsh</em> </li>
80 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Popen-module.html">ClusterShell.Worker.Popen</a></strong>: <em class="summary">WorkerPopen</em> </li>
81 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Ssh-module.html">ClusterShell.Worker.Ssh</a></strong>: <em class="summary">ClusterShell Ssh/Scp support</em> </li>
82 <li> <strong class="uidlink"><a href="ClusterShell.Worker.Worker-module.html">ClusterShell.Worker.Worker</a></strong>: <em class="summary">ClusterShell worker interface.</em> </li>
83 </ul>
84 </li>
85 </ul>
86 </li>
87 <li> <strong class="uidlink"><a href="clubak-module.html">clubak</a></strong>: <em class="summary">clubak formats clush/dsh/pdsh output for humans.</em> </li>
88 <li> <strong class="uidlink"><a href="clush-module.html">clush</a></strong>: <em class="summary">Utility program to run commands on a cluster using the ClusterShell
89 library.</em> </li>
90 <li> <strong class="uidlink"><a href="nodeset-module.html">nodeset</a></strong>: <em class="summary">Usage: nodeset [COMMAND] [OPTIONS] [ns1 [-ixX] ns2|...]</em> </li>
91 </ul>
92 <!-- ==================== NAVIGATION BAR ==================== -->
93 <table class="navbar" border="0" width="100%" cellpadding="0"
94 bgcolor="#a0c0ff" cellspacing="0">
95 <tr valign="middle">
96
97 <!-- Tree link -->
98 <th bgcolor="#70b0f0" class="navbar-select"
99 >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
100
101 <!-- Index link -->
102 <th>&nbsp;&nbsp;&nbsp;<a
103 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
104
105 <!-- Help link -->
106 <th>&nbsp;&nbsp;&nbsp;<a
107 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
108
109 <!-- Project homepage -->
110 <th class="navbar" align="right" width="100%">
111 <table border="0" cellpadding="0" cellspacing="0">
112 <tr><th class="navbar" align="center"
113 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
114 </tr></table></th>
115 </tr>
116 </table>
117 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
118 <tr>
119 <td align="left" class="footer">
120 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
121 </td>
122 <td align="right" class="footer">
123 <a target="mainFrame" href="http://epydoc.sourceforge.net"
124 >http://epydoc.sourceforge.net</a>
125 </td>
126 </tr>
127 </table>
128
129 <script type="text/javascript">
130 <!--
131 // Private objects are initially displayed (because if
132 // javascript is turned off then we want them to be
133 // visible); but by default, we want to hide them. So hide
134 // them unless we have a cookie that says to show them.
135 checkCookie();
136 // -->
137 </script>
138 </body>
139 </html>
+0
-278
doc/epydoc/html/nodeset-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>nodeset</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 Module&nbsp;nodeset
42 </span>
43 </td>
44 <td>
45 <table cellpadding="0" cellspacing="0">
46 <!-- hide/show private -->
47 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49 <tr><td align="right"><span class="options"
50 >[<a href="frames.html" target="_top">frames</a
51 >]&nbsp;|&nbsp;<a href="nodeset-module.html"
52 target="_top">no&nbsp;frames</a>]</span></td></tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 <!-- ==================== MODULE DESCRIPTION ==================== -->
58 <h1 class="epydoc">Module nodeset</h1><p class="nomargin-top"><span class="codelink"><a href="nodeset-pysrc.html">source&nbsp;code</a></span></p>
59 <pre class="literalblock">
60
61 Usage: nodeset [COMMAND] [OPTIONS] [ns1 [-ixX] ns2|...]
62
63 Commands:
64 --count, -c &lt;nodeset&gt; [nodeset ...]
65 Return the number of nodes in nodesets.
66 --expand, -e &lt;nodeset&gt; [nodeset ...]
67 Expand nodesets to separate nodes.
68 --fold, -f &lt;nodeset&gt; [nodeset ...]
69 Compact/fold nodesets (or separate nodes) into one nodeset.
70 --list, -l
71 List node groups (see --groupsource).
72 --regroup, -r &lt;nodeset&gt; [nodeset ...]
73 Fold nodes using node groups (see --groupsource).
74 --groupsources
75 List all configured group sources (see groups.conf(5)).
76 Options:
77 --all, -a
78 Call external node groups support to display all nodes.
79 --autostep=&lt;number&gt;
80 Specify auto step threshold number when folding nodesets.
81 If not specified, auto step is disabled.
82 Example: autostep=4, &quot;node2 node4 node6&quot; folds in node[2,4,6]
83 autostep=3, &quot;node2 node4 node6&quot; folds in node[2-6/2]
84 --help, -h
85 This help page.
86 --quiet, -q
87 Quiet mode, hide any parse error messages (on stderr).
88 --rangeset, -R
89 Switch to RangeSet instead of NodeSet. Useful when working on
90 numerical cluster ranges, eg. 1,5,18-31.
91 --groupsource, -s &lt;GroupSource&gt;
92 Specify group source (ie. section to use in groups.conf(5)).
93 --groupbase, -G
94 Do not display group source prefix (always &quot;@groupname&quot;).
95 --separator=&lt;string&gt;, -S &lt;string&gt;
96 Specify separator string for expanding nodesets (default: ' ').
97 --version, -v
98 Show ClusterShell version and exit.
99 Operations (default is union):
100 The default operation is the union of node or nodeset.
101 --exclude=&lt;nodeset&gt;, -x &lt;nodeset&gt;
102 Exclude provided node or nodeset.
103 --intersection, -i
104 Calculate nodesets intersection.
105 --xor, -X
106 Calculate symmetric difference (XOR) between two nodesets.
107
108 </pre>
109
110 <hr />
111 <div class="fields"> <p><strong>Version:</strong>
112 1.3
113 </p>
114 </div><!-- ==================== FUNCTIONS ==================== -->
115 <a name="section-Functions"></a>
116 <table class="summary" border="1" cellpadding="3"
117 cellspacing="0" width="100%" bgcolor="white">
118 <tr bgcolor="#70b0f0" class="table-header">
119 <td colspan="2" class="table-header">
120 <table border="0" cellpadding="0" cellspacing="0" width="100%">
121 <tr valign="top">
122 <td align="left"><span class="table-header">Functions</span></td>
123 <td align="right" valign="top"
124 ><span class="options">[<a href="#section-Functions"
125 class="privatelink" onclick="toggle_private();"
126 >hide private</a>]</span></td>
127 </tr>
128 </table>
129 </td>
130 </tr>
131 <tr>
132 <td width="15%" align="right" valign="top" class="summary">
133 <span class="summary-type">&nbsp;</span>
134 </td><td class="summary">
135 <table width="100%" cellpadding="0" cellspacing="0" border="0">
136 <tr>
137 <td><span class="summary-sig"><a name="process_stdin"></a><span class="summary-sig-name">process_stdin</span>(<span class="summary-sig-arg">xset</span>,
138 <span class="summary-sig-arg">autostep</span>)</span><br />
139 Process standard input and populate xset.</td>
140 <td align="right" valign="top">
141 <span class="codelink"><a href="nodeset-pysrc.html#process_stdin">source&nbsp;code</a></span>
142
143 </td>
144 </tr>
145 </table>
146
147 </td>
148 </tr>
149 <tr>
150 <td width="15%" align="right" valign="top" class="summary">
151 <span class="summary-type">&nbsp;</span>
152 </td><td class="summary">
153 <table width="100%" cellpadding="0" cellspacing="0" border="0">
154 <tr>
155 <td><span class="summary-sig"><a name="compute_nodeset"></a><span class="summary-sig-name">compute_nodeset</span>(<span class="summary-sig-arg">xset</span>,
156 <span class="summary-sig-arg">args</span>,
157 <span class="summary-sig-arg">autostep</span>)</span><br />
158 Apply operations and operands from args on xset, an initial RangeSet
159 or NodeSet.</td>
160 <td align="right" valign="top">
161 <span class="codelink"><a href="nodeset-pysrc.html#compute_nodeset">source&nbsp;code</a></span>
162
163 </td>
164 </tr>
165 </table>
166
167 </td>
168 </tr>
169 <tr>
170 <td width="15%" align="right" valign="top" class="summary">
171 <span class="summary-type">&nbsp;</span>
172 </td><td class="summary">
173 <table width="100%" cellpadding="0" cellspacing="0" border="0">
174 <tr>
175 <td><span class="summary-sig"><a name="error_exit"></a><span class="summary-sig-name">error_exit</span>(<span class="summary-sig-arg">progname</span>,
176 <span class="summary-sig-arg">message</span>,
177 <span class="summary-sig-arg">status</span>=<span class="summary-sig-default">1</span>)</span></td>
178 <td align="right" valign="top">
179 <span class="codelink"><a href="nodeset-pysrc.html#error_exit">source&nbsp;code</a></span>
180
181 </td>
182 </tr>
183 </table>
184
185 </td>
186 </tr>
187 <tr>
188 <td width="15%" align="right" valign="top" class="summary">
189 <span class="summary-type">&nbsp;</span>
190 </td><td class="summary">
191 <table width="100%" cellpadding="0" cellspacing="0" border="0">
192 <tr>
193 <td><span class="summary-sig"><a name="run_nodeset"></a><span class="summary-sig-name">run_nodeset</span>(<span class="summary-sig-arg">args</span>)</span><br />
194 Main script function.</td>
195 <td align="right" valign="top">
196 <span class="codelink"><a href="nodeset-pysrc.html#run_nodeset">source&nbsp;code</a></span>
197
198 </td>
199 </tr>
200 </table>
201
202 </td>
203 </tr>
204 </table>
205 <!-- ==================== VARIABLES ==================== -->
206 <a name="section-Variables"></a>
207 <table class="summary" border="1" cellpadding="3"
208 cellspacing="0" width="100%" bgcolor="white">
209 <tr bgcolor="#70b0f0" class="table-header">
210 <td colspan="2" class="table-header">
211 <table border="0" cellpadding="0" cellspacing="0" width="100%">
212 <tr valign="top">
213 <td align="left"><span class="table-header">Variables</span></td>
214 <td align="right" valign="top"
215 ><span class="options">[<a href="#section-Variables"
216 class="privatelink" onclick="toggle_private();"
217 >hide private</a>]</span></td>
218 </tr>
219 </table>
220 </td>
221 </tr>
222 <tr>
223 <td width="15%" align="right" valign="top" class="summary">
224 <span class="summary-type">&nbsp;</span>
225 </td><td class="summary">
226 <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="None">None</code>
227 </td>
228 </tr>
229 </table>
230 <!-- ==================== NAVIGATION BAR ==================== -->
231 <table class="navbar" border="0" width="100%" cellpadding="0"
232 bgcolor="#a0c0ff" cellspacing="0">
233 <tr valign="middle">
234
235 <!-- Tree link -->
236 <th>&nbsp;&nbsp;&nbsp;<a
237 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
238
239 <!-- Index link -->
240 <th>&nbsp;&nbsp;&nbsp;<a
241 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
242
243 <!-- Help link -->
244 <th>&nbsp;&nbsp;&nbsp;<a
245 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
246
247 <!-- Project homepage -->
248 <th class="navbar" align="right" width="100%">
249 <table border="0" cellpadding="0" cellspacing="0">
250 <tr><th class="navbar" align="center"
251 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
252 </tr></table></th>
253 </tr>
254 </table>
255 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
256 <tr>
257 <td align="left" class="footer">
258 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:16 2010
259 </td>
260 <td align="right" class="footer">
261 <a target="mainFrame" href="http://epydoc.sourceforge.net"
262 >http://epydoc.sourceforge.net</a>
263 </td>
264 </tr>
265 </table>
266
267 <script type="text/javascript">
268 <!--
269 // Private objects are initially displayed (because if
270 // javascript is turned off then we want them to be
271 // visible); but by default, we want to hide them. So hide
272 // them unless we have a cookie that says to show them.
273 checkCookie();
274 // -->
275 </script>
276 </body>
277 </html>
+0
-458
doc/epydoc/html/nodeset-pysrc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>nodeset</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <!-- ==================== NAVIGATION BAR ==================== -->
13 <table class="navbar" border="0" width="100%" cellpadding="0"
14 bgcolor="#a0c0ff" cellspacing="0">
15 <tr valign="middle">
16
17 <!-- Tree link -->
18 <th>&nbsp;&nbsp;&nbsp;<a
19 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
20
21 <!-- Index link -->
22 <th>&nbsp;&nbsp;&nbsp;<a
23 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
24
25 <!-- Help link -->
26 <th>&nbsp;&nbsp;&nbsp;<a
27 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
28
29 <!-- Project homepage -->
30 <th class="navbar" align="right" width="100%">
31 <table border="0" cellpadding="0" cellspacing="0">
32 <tr><th class="navbar" align="center"
33 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
34 </tr></table></th>
35 </tr>
36 </table>
37 <table width="100%" cellpadding="0" cellspacing="0">
38 <tr valign="top">
39 <td width="100%">
40 <span class="breadcrumbs">
41 Module&nbsp;nodeset
42 </span>
43 </td>
44 <td>
45 <table cellpadding="0" cellspacing="0">
46 <!-- hide/show private -->
47 <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48 onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49 <tr><td align="right"><span class="options"
50 >[<a href="frames.html" target="_top">frames</a
51 >]&nbsp;|&nbsp;<a href="nodeset-pysrc.html"
52 target="_top">no&nbsp;frames</a>]</span></td></tr>
53 </table>
54 </td>
55 </tr>
56 </table>
57 <h1 class="epydoc">Source Code for <a href="nodeset-module.html">Module nodeset</a></h1>
58 <pre class="py-src">
59 <a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
60 <a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
61 <a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"># Copyright CEA/DAM/DIF (2008, 2009, 2010)</tt> </tt>
62 <a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"># Contributor: Stephane THIELL &lt;stephane.thiell@cea.fr&gt;</tt> </tt>
63 <a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
64 <a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"># This file is part of the ClusterShell library.</tt> </tt>
65 <a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
66 <a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"># This software is governed by the CeCILL-C license under French law and</tt> </tt>
67 <a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># abiding by the rules of distribution of free software. You can use,</tt> </tt>
68 <a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment"># modify and/ or redistribute the software under the terms of the CeCILL-C</tt> </tt>
69 <a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment"># license as circulated by CEA, CNRS and INRIA at the following URL</tt> </tt>
70 <a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment"># "http://www.cecill.info".</tt> </tt>
71 <a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
72 <a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"># As a counterpart to the access to the source code and rights to copy,</tt> </tt>
73 <a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># modify and redistribute granted by the license, users are provided only</tt> </tt>
74 <a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># with a limited warranty and the software's author, the holder of the</tt> </tt>
75 <a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># economic rights, and the successive licensors have only limited</tt> </tt>
76 <a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment"># liability.</tt> </tt>
77 <a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
78 <a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment"># In this respect, the user's attention is drawn to the risks associated</tt> </tt>
79 <a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"># with loading, using, modifying and/or developing or reproducing the</tt> </tt>
80 <a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment"># software by the user in light of its specific status of free software,</tt> </tt>
81 <a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"># that may mean that it is complicated to manipulate, and that also</tt> </tt>
82 <a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"># therefore means that it is reserved for developers and experienced</tt> </tt>
83 <a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"># professionals having in-depth computer knowledge. Users are therefore</tt> </tt>
84 <a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># encouraged to load and test the software's suitability as regards their</tt> </tt>
85 <a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"># requirements in conditions enabling the security of their systems and/or</tt> </tt>
86 <a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"># data to be ensured and, more generally, to use and operate it in the</tt> </tt>
87 <a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment"># same conditions as regards security.</tt> </tt>
88 <a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
89 <a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment"># The fact that you are presently reading this means that you have had</tt> </tt>
90 <a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment"># knowledge of the CeCILL-C license and that you accept its terms.</tt> </tt>
91 <a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment">#</tt> </tt>
92 <a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-comment"># $Id: nodeset.py 280 2010-06-16 21:15:41Z st-cea $</tt> </tt>
93 <a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> </tt>
94 <a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
95 <a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring">Usage: nodeset [COMMAND] [OPTIONS] [ns1 [-ixX] ns2|...]</tt> </tt>
96 <a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
97 <a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring">Commands:</tt> </tt>
98 <a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring"> --count, -c &lt;nodeset&gt; [nodeset ...]</tt> </tt>
99 <a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"> Return the number of nodes in nodesets.</tt> </tt>
100 <a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> --expand, -e &lt;nodeset&gt; [nodeset ...]</tt> </tt>
101 <a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> Expand nodesets to separate nodes.</tt> </tt>
102 <a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> --fold, -f &lt;nodeset&gt; [nodeset ...]</tt> </tt>
103 <a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"> Compact/fold nodesets (or separate nodes) into one nodeset.</tt> </tt>
104 <a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> --list, -l</tt> </tt>
105 <a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"> List node groups (see --groupsource).</tt> </tt>
106 <a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring"> --regroup, -r &lt;nodeset&gt; [nodeset ...]</tt> </tt>
107 <a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring"> Fold nodes using node groups (see --groupsource).</tt> </tt>
108 <a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-docstring"> --groupsources</tt> </tt>
109 <a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-docstring"> List all configured group sources (see groups.conf(5)).</tt> </tt>
110 <a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-docstring">Options:</tt> </tt>
111 <a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt class="py-docstring"> --all, -a</tt> </tt>
112 <a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-docstring"> Call external node groups support to display all nodes.</tt> </tt>
113 <a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"> --autostep=&lt;number&gt;</tt> </tt>
114 <a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> Specify auto step threshold number when folding nodesets.</tt> </tt>
115 <a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> If not specified, auto step is disabled.</tt> </tt>
116 <a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> Example: autostep=4, "node2 node4 node6" folds in node[2,4,6]</tt> </tt>
117 <a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> autostep=3, "node2 node4 node6" folds in node[2-6/2]</tt> </tt>
118 <a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> --help, -h</tt> </tt>
119 <a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"> This help page.</tt> </tt>
120 <a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> --quiet, -q</tt> </tt>
121 <a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> Quiet mode, hide any parse error messages (on stderr).</tt> </tt>
122 <a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"> --rangeset, -R</tt> </tt>
123 <a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> Switch to RangeSet instead of NodeSet. Useful when working on</tt> </tt>
124 <a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> numerical cluster ranges, eg. 1,5,18-31.</tt> </tt>
125 <a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> --groupsource, -s &lt;GroupSource&gt;</tt> </tt>
126 <a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> Specify group source (ie. section to use in groups.conf(5)).</tt> </tt>
127 <a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> --groupbase, -G</tt> </tt>
128 <a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"> Do not display group source prefix (always "@groupname").</tt> </tt>
129 <a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-docstring"> --separator=&lt;string&gt;, -S &lt;string&gt;</tt> </tt>
130 <a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-docstring"> Specify separator string for expanding nodesets (default: ' ').</tt> </tt>
131 <a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt class="py-docstring"> --version, -v</tt> </tt>
132 <a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-docstring"> Show ClusterShell version and exit.</tt> </tt>
133 <a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring">Operations (default is union):</tt> </tt>
134 <a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt class="py-docstring"> The default operation is the union of node or nodeset.</tt> </tt>
135 <a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt class="py-docstring"> --exclude=&lt;nodeset&gt;, -x &lt;nodeset&gt;</tt> </tt>
136 <a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt class="py-docstring"> Exclude provided node or nodeset.</tt> </tt>
137 <a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-docstring"> --intersection, -i</tt> </tt>
138 <a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"> Calculate nodesets intersection.</tt> </tt>
139 <a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"> --xor, -X</tt> </tt>
140 <a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> Calculate symmetric difference (XOR) between two nodesets.</tt> </tt>
141 <a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
142 <a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
143 <a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">getopt</tt> </tt>
144 <a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
145 <a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">signal</tt> </tt>
146 <a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
147 <a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
148 <a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package ClusterShell=ClusterShell-module.html"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-0', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Module ClusterShell.NodeUtils=ClusterShell.NodeUtils-module.html"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-1', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverConfigError=ClusterShell.NodeUtils.GroupResolverConfigError-class.html"><a title="ClusterShell.NodeUtils.GroupResolverConfigError" class="py-name" href="#" onclick="return doclink('link-2', 'GroupResolverConfigError', 'link-2');">GroupResolverConfigError</a></tt> </tt>
149 <a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-3', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-4" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-4', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Class ClusterShell.NodeUtils.GroupResolverSourceError=ClusterShell.NodeUtils.GroupResolverSourceError-class.html"><a title="ClusterShell.NodeUtils.GroupResolverSourceError" class="py-name" href="#" onclick="return doclink('link-5', 'GroupResolverSourceError', 'link-5');">GroupResolverSourceError</a></tt> </tt>
150 <a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-6', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-7', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-8" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceException=ClusterShell.NodeUtils.GroupSourceException-class.html"><a title="ClusterShell.NodeUtils.GroupSourceException" class="py-name" href="#" onclick="return doclink('link-8', 'GroupSourceException', 'link-8');">GroupSourceException</a></tt> </tt>
151 <a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-9" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-9', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="ClusterShell.NodeUtils" class="py-name" href="#" onclick="return doclink('link-10', 'NodeUtils', 'link-1');">NodeUtils</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Class ClusterShell.NodeUtils.GroupSourceNoUpcall=ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-11', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt> </tt>
152 <a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
153 <a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-12" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-12', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Module ClusterShell.NodeSet=ClusterShell.NodeSet-module.html,Class ClusterShell.NodeSet.NodeSet=ClusterShell.NodeSet.NodeSet-class.html"><a title="ClusterShell.NodeSet
154 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-13', 'NodeSet', 'link-13');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-14" class="py-name"><a title="ClusterShell.NodeSet
155 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-14', 'NodeSet', 'link-13');">NodeSet</a></tt> </tt>
156 <a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-15" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-15', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="ClusterShell.NodeSet
157 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-16', 'NodeSet', 'link-13');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-17" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetExternalError=ClusterShell.NodeSet.NodeSetExternalError-class.html"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-17', 'NodeSetExternalError', 'link-17');">NodeSetExternalError</a></tt><tt class="py-op">,</tt> <tt id="link-18" class="py-name" targets="Class ClusterShell.NodeSet.NodeSetParseError=ClusterShell.NodeSet.NodeSetParseError-class.html"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-18', 'NodeSetParseError', 'link-18');">NodeSetParseError</a></tt> </tt>
158 <a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-19" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-19', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="ClusterShell.NodeSet
159 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-20', 'NodeSet', 'link-13');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-21" class="py-name" targets="Class ClusterShell.NodeSet.RangeSet=ClusterShell.NodeSet.RangeSet-class.html"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-21', 'RangeSet', 'link-21');">RangeSet</a></tt><tt class="py-op">,</tt> <tt id="link-22" class="py-name" targets="Class ClusterShell.NodeSet.RangeSetParseError=ClusterShell.NodeSet.RangeSetParseError-class.html"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-22', 'RangeSetParseError', 'link-22');">RangeSetParseError</a></tt> </tt>
160 <a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-23" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-23', 'ClusterShell', 'link-0');">ClusterShell</a></tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="ClusterShell.NodeSet
161 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-24', 'NodeSet', 'link-13');">NodeSet</a></tt> <tt class="py-keyword">import</tt> <tt id="link-25" class="py-name" targets="Function ClusterShell.NodeSet.grouplist()=ClusterShell.NodeSet-module.html#grouplist,Method ClusterShell.NodeUtils.GroupResolver.grouplist()=ClusterShell.NodeUtils.GroupResolver-class.html#grouplist"><a title="ClusterShell.NodeSet.grouplist
162 ClusterShell.NodeUtils.GroupResolver.grouplist" class="py-name" href="#" onclick="return doclink('link-25', 'grouplist', 'link-25');">grouplist</a></tt><tt class="py-op">,</tt> <tt id="link-26" class="py-name" targets="Variable ClusterShell.NodeSet.STD_GROUP_RESOLVER=ClusterShell.NodeSet-module.html#STD_GROUP_RESOLVER"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-26', 'STD_GROUP_RESOLVER', 'link-26');">STD_GROUP_RESOLVER</a></tt> </tt>
163 <a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt id="link-27" class="py-name"><a title="ClusterShell" class="py-name" href="#" onclick="return doclink('link-27', 'ClusterShell', 'link-0');">ClusterShell</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">__version__</tt> </tt>
164 <a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt class="py-keyword">except</tt> <tt id="link-28" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolverConfigError" class="py-name" href="#" onclick="return doclink('link-28', 'GroupResolverConfigError', 'link-2');">GroupResolverConfigError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
165 <a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> \ </tt>
166 <a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-string">"ERROR: ClusterShell Groups configuration error:\n\t%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">e</tt> </tt>
167 <a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
168 <a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> </tt>
169 <a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> </tt>
170 <a name="process_stdin"></a><div id="process_stdin-def"><a name="L106"></a><tt class="py-lineno">106</tt> <a class="py-toggle" href="#" id="process_stdin-toggle" onclick="return toggle('process_stdin');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nodeset-module.html#process_stdin">process_stdin</a><tt class="py-op">(</tt><tt class="py-param">xset</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
171 </div><div id="process_stdin-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="process_stdin-expanded"><a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-docstring">"""Process standard input and populate xset."""</tt> </tt>
172 <a name="L108"></a><tt class="py-lineno">108</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">sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">readlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
173 <a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-comment"># Support multi-lines and multi-nodesets per line</tt> </tt>
174 <a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'#'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
175 <a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.split()=ClusterShell.NodeSet.NodeSet-class.html#split,Method ClusterShell.NodeSet.RangeSet.split()=ClusterShell.NodeSet.RangeSet-class.html#split"><a title="ClusterShell.NodeSet.NodeSet.split
176 ClusterShell.NodeSet.RangeSet.split" class="py-name" href="#" onclick="return doclink('link-29', 'split', 'link-29');">split</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
177 <a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">xset</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.update()=ClusterShell.NodeSet.NodeSet-class.html#update,Method ClusterShell.NodeSet.NodeSetBase.update()=ClusterShell.NodeSet.NodeSetBase-class.html#update,Method ClusterShell.NodeSet.RangeSet.update()=ClusterShell.NodeSet.RangeSet-class.html#update,Method clush.RunTimer.update()=clush.RunTimer-class.html#update"><a title="ClusterShell.NodeSet.NodeSet.update
178 ClusterShell.NodeSet.NodeSetBase.update
179 ClusterShell.NodeSet.RangeSet.update
180 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-30', 'update', 'link-30');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">xset</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
181 </div><a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> </tt>
182 <a name="compute_nodeset"></a><div id="compute_nodeset-def"><a name="L114"></a><tt class="py-lineno">114</tt> <a class="py-toggle" href="#" id="compute_nodeset-toggle" onclick="return toggle('compute_nodeset');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nodeset-module.html#compute_nodeset">compute_nodeset</a><tt class="py-op">(</tt><tt class="py-param">xset</tt><tt class="py-op">,</tt> <tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-param">autostep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
183 </div><div id="compute_nodeset-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="compute_nodeset-expanded"><a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-docstring">"""Apply operations and operands from args on xset, an initial</tt> </tt>
184 <a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"><tt class="py-docstring"> RangeSet or NodeSet."""</tt> </tt>
185 <a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">class_set</tt> <tt class="py-op">=</tt> <tt class="py-name">xset</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt> </tt>
186 <a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-comment"># Process operations</tt> </tt>
187 <a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">args</tt><tt class="py-op">:</tt> </tt>
188 <a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-name">arg</tt> <tt class="py-op">=</tt> <tt class="py-name">args</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
189 <a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-i"</tt><tt class="py-op">,</tt> <tt class="py-string">"--intersection"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
190 <a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-name">xset</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.intersection_update()=ClusterShell.NodeSet.NodeSet-class.html#intersection_update,Method ClusterShell.NodeSet.NodeSetBase.intersection_update()=ClusterShell.NodeSet.NodeSetBase-class.html#intersection_update,Method ClusterShell.NodeSet.RangeSet.intersection_update()=ClusterShell.NodeSet.RangeSet-class.html#intersection_update"><a title="ClusterShell.NodeSet.NodeSet.intersection_update
191 ClusterShell.NodeSet.NodeSetBase.intersection_update
192 ClusterShell.NodeSet.RangeSet.intersection_update" class="py-name" href="#" onclick="return doclink('link-31', 'intersection_update', 'link-31');">intersection_update</a></tt><tt class="py-op">(</tt><tt class="py-name">class_set</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
193 <a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
194 <a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-x"</tt><tt class="py-op">,</tt> <tt class="py-string">"--exclude"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
195 <a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-name">xset</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.difference_update()=ClusterShell.NodeSet.NodeSet-class.html#difference_update,Method ClusterShell.NodeSet.NodeSetBase.difference_update()=ClusterShell.NodeSet.NodeSetBase-class.html#difference_update,Method ClusterShell.NodeSet.RangeSet.difference_update()=ClusterShell.NodeSet.RangeSet-class.html#difference_update"><a title="ClusterShell.NodeSet.NodeSet.difference_update
196 ClusterShell.NodeSet.NodeSetBase.difference_update
197 ClusterShell.NodeSet.RangeSet.difference_update" class="py-name" href="#" onclick="return doclink('link-32', 'difference_update', 'link-32');">difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">class_set</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
198 <a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
199 <a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-X"</tt><tt class="py-op">,</tt> <tt class="py-string">"--xor"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
200 <a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-name">xset</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.symmetric_difference_update()=ClusterShell.NodeSet.NodeSet-class.html#symmetric_difference_update,Method ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update()=ClusterShell.NodeSet.NodeSetBase-class.html#symmetric_difference_update,Method ClusterShell.NodeSet.RangeSet.symmetric_difference_update()=ClusterShell.NodeSet.RangeSet-class.html#symmetric_difference_update"><a title="ClusterShell.NodeSet.NodeSet.symmetric_difference_update
201 ClusterShell.NodeSet.NodeSetBase.symmetric_difference_update
202 ClusterShell.NodeSet.RangeSet.symmetric_difference_update" class="py-name" href="#" onclick="return doclink('link-33', 'symmetric_difference_update', 'link-33');">symmetric_difference_update</a></tt><tt class="py-op">(</tt><tt class="py-name">class_set</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
203 <a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
204 <a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">arg</tt> <tt class="py-op">==</tt> <tt class="py-string">'-'</tt><tt class="py-op">:</tt> </tt>
205 <a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt id="link-34" class="py-name" targets="Function nodeset.process_stdin()=nodeset-module.html#process_stdin"><a title="nodeset.process_stdin" class="py-name" href="#" onclick="return doclink('link-34', 'process_stdin', 'link-34');">process_stdin</a></tt><tt class="py-op">(</tt><tt class="py-name">xset</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
206 <a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
207 <a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-name">xset</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
208 ClusterShell.NodeSet.NodeSetBase.update
209 ClusterShell.NodeSet.RangeSet.update
210 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-35', 'update', 'link-30');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">class_set</tt><tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">=</tt><tt class="py-name">autostep</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
211 <a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> </tt>
212 <a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">xset</tt> </tt>
213 </div><a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> </tt>
214 <a name="error_exit"></a><div id="error_exit-def"><a name="L137"></a><tt class="py-lineno">137</tt> <a class="py-toggle" href="#" id="error_exit-toggle" onclick="return toggle('error_exit');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nodeset-module.html#error_exit">error_exit</a><tt class="py-op">(</tt><tt class="py-param">progname</tt><tt class="py-op">,</tt> <tt class="py-param">message</tt><tt class="py-op">,</tt> <tt class="py-param">status</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
215 </div><div id="error_exit-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="error_exit-expanded"><a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt id="link-36" class="py-name" targets="Method ClusterShell.MsgTree.MsgTreeElem.message()=ClusterShell.MsgTree.MsgTreeElem-class.html#message"><a title="ClusterShell.MsgTree.MsgTreeElem.message" class="py-name" href="#" onclick="return doclink('link-36', 'message', 'link-36');">message</a></tt> </tt>
216 <a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"Try `%s -h' for more information."</tt> <tt class="py-op">%</tt> <tt class="py-name">progname</tt> </tt>
217 <a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
218 </div><a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> </tt>
219 <a name="run_nodeset"></a><div id="run_nodeset-def"><a name="L142"></a><tt class="py-lineno">142</tt> <a class="py-toggle" href="#" id="run_nodeset-toggle" onclick="return toggle('run_nodeset');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nodeset-module.html#run_nodeset">run_nodeset</a><tt class="py-op">(</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
220 </div><div id="run_nodeset-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="run_nodeset-expanded"><a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
221 <a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"><tt class="py-docstring"> Main script function.</tt> </tt>
222 <a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
223 <a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">autostep</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
224 <a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-name">all</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
225 <a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
226 <a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-name">verbosity</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
227 <a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-name">class_set</tt> <tt class="py-op">=</tt> <tt id="link-37" class="py-name"><a title="ClusterShell.NodeSet
228 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-37', 'NodeSet', 'link-13');">NodeSet</a></tt> </tt>
229 <a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">separator</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt> </tt>
230 <a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
231 <a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-name">groupbase</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
232 <a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-name">progname</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>
233 <a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-name">multcmds_errstr</tt> <tt class="py-op">=</tt> <tt class="py-string">"ERROR: multiple commands not allowed"</tt> </tt>
234 <a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> </tt>
235 <a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-comment"># Parse getoptable options</tt> </tt>
236 <a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
237 <a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-name">opts</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt> <tt class="py-op">=</tt> <tt class="py-name">getopt</tt><tt class="py-op">.</tt><tt class="py-name">getopt</tt><tt class="py-op">(</tt><tt class="py-name">args</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-string">"acdefhlqs:vrGRS:"</tt><tt class="py-op">,</tt> </tt>
238 <a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-op">[</tt><tt class="py-string">"autostep="</tt><tt class="py-op">,</tt> <tt class="py-string">"count"</tt><tt class="py-op">,</tt> <tt class="py-string">"debug"</tt><tt class="py-op">,</tt> <tt class="py-string">"expand"</tt><tt class="py-op">,</tt> <tt class="py-string">"fold"</tt><tt class="py-op">,</tt> <tt class="py-string">"groupbase"</tt><tt class="py-op">,</tt> </tt>
239 <a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-string">"groupsource="</tt><tt class="py-op">,</tt> <tt class="py-string">"groupsources"</tt><tt class="py-op">,</tt> <tt class="py-string">"help"</tt><tt class="py-op">,</tt> <tt class="py-string">"list"</tt><tt class="py-op">,</tt> <tt class="py-string">"quiet"</tt><tt class="py-op">,</tt> </tt>
240 <a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-string">"regroup"</tt><tt class="py-op">,</tt> <tt class="py-string">"rangeset"</tt><tt class="py-op">,</tt> <tt class="py-string">"separator="</tt><tt class="py-op">,</tt> <tt class="py-string">"version"</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
241 <a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">getopt</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Method ClusterShell.Worker.Worker.WorkerSimple.error()=ClusterShell.Worker.Worker.WorkerSimple-class.html#error"><a title="ClusterShell.Worker.Worker.WorkerSimple.error" class="py-name" href="#" onclick="return doclink('link-38', 'error', 'link-38');">error</a></tt><tt class="py-op">,</tt> <tt class="py-name">err</tt><tt class="py-op">:</tt> </tt>
242 <a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">err</tt><tt class="py-op">.</tt><tt class="py-name">opt</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt> <tt class="py-string">"i"</tt><tt class="py-op">,</tt> <tt class="py-string">"intersection"</tt><tt class="py-op">,</tt> <tt class="py-string">"x"</tt><tt class="py-op">,</tt> <tt class="py-string">"exclude"</tt><tt class="py-op">,</tt> <tt class="py-string">"X"</tt><tt class="py-op">,</tt> <tt class="py-string">"xor"</tt> <tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
243 <a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt id="link-39" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.message" class="py-name" href="#" onclick="return doclink('link-39', 'message', 'link-36');">message</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"option -%s not allowed here"</tt> <tt class="py-op">%</tt> <tt class="py-name">err</tt><tt class="py-op">.</tt><tt class="py-name">opt</tt> </tt>
244 <a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
245 <a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt id="link-40" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.message" class="py-name" href="#" onclick="return doclink('link-40', 'message', 'link-36');">message</a></tt> <tt class="py-op">=</tt> <tt class="py-name">err</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method ClusterShell.Worker.EngineClient.EnginePort.msg()=ClusterShell.Worker.EngineClient.EnginePort-class.html#msg"><a title="ClusterShell.Worker.EngineClient.EnginePort.msg" class="py-name" href="#" onclick="return doclink('link-41', 'msg', 'link-41');">msg</a></tt> </tt>
246 <a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt id="link-42" class="py-name" targets="Function nodeset.error_exit()=nodeset-module.html#error_exit"><a title="nodeset.error_exit" class="py-name" href="#" onclick="return doclink('link-42', 'error_exit', 'link-42');">error_exit</a></tt><tt class="py-op">(</tt><tt class="py-name">progname</tt><tt class="py-op">,</tt> <tt id="link-43" class="py-name"><a title="ClusterShell.MsgTree.MsgTreeElem.message" class="py-name" href="#" onclick="return doclink('link-43', 'message', 'link-36');">message</a></tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
247 <a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> </tt>
248 <a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt> <tt class="py-keyword">in</tt> <tt class="py-name">opts</tt><tt class="py-op">:</tt> </tt>
249 <a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-a"</tt><tt class="py-op">,</tt> <tt class="py-string">"--all"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
250 <a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-name">all</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
251 <a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"--autostep"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
252 <a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
253 <a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-name">autostep</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
254 <a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt><tt class="py-op">:</tt> </tt>
255 <a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt> </tt>
256 <a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-c"</tt><tt class="py-op">,</tt> <tt class="py-string">"--count"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
257 <a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command</tt><tt class="py-op">:</tt> </tt>
258 <a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt id="link-44" class="py-name"><a title="nodeset.error_exit" class="py-name" href="#" onclick="return doclink('link-44', 'error_exit', 'link-42');">error_exit</a></tt><tt class="py-op">(</tt><tt class="py-name">progname</tt><tt class="py-op">,</tt> <tt class="py-name">multcmds_errstr</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
259 <a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-string">"count"</tt> </tt>
260 <a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-d"</tt><tt class="py-op">,</tt> <tt class="py-string">"--debug"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
261 <a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-name">verbosity</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> </tt>
262 <a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-e"</tt><tt class="py-op">,</tt> <tt class="py-string">"--expand"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
263 <a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command</tt><tt class="py-op">:</tt> </tt>
264 <a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt id="link-45" class="py-name"><a title="nodeset.error_exit" class="py-name" href="#" onclick="return doclink('link-45', 'error_exit', 'link-42');">error_exit</a></tt><tt class="py-op">(</tt><tt class="py-name">progname</tt><tt class="py-op">,</tt> <tt class="py-name">multcmds_errstr</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
265 <a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-string">"expand"</tt> </tt>
266 <a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-f"</tt><tt class="py-op">,</tt> <tt class="py-string">"--fold"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
267 <a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command</tt><tt class="py-op">:</tt> </tt>
268 <a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt id="link-46" class="py-name"><a title="nodeset.error_exit" class="py-name" href="#" onclick="return doclink('link-46', 'error_exit', 'link-42');">error_exit</a></tt><tt class="py-op">(</tt><tt class="py-name">progname</tt><tt class="py-op">,</tt> <tt class="py-name">multcmds_errstr</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
269 <a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-string">"fold"</tt> </tt>
270 <a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-h"</tt><tt class="py-op">,</tt> <tt class="py-string">"--help"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
271 <a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-name">__doc__</tt> </tt>
272 <a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
273 <a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-l"</tt><tt class="py-op">,</tt> <tt class="py-string">"--list"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
274 <a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command</tt><tt class="py-op">:</tt> </tt>
275 <a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt id="link-47" class="py-name"><a title="nodeset.error_exit" class="py-name" href="#" onclick="return doclink('link-47', 'error_exit', 'link-42');">error_exit</a></tt><tt class="py-op">(</tt><tt class="py-name">progname</tt><tt class="py-op">,</tt> <tt class="py-name">multcmds_errstr</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
276 <a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-string">"list"</tt> </tt>
277 <a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-G"</tt><tt class="py-op">,</tt> <tt class="py-string">"--groupbase"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
278 <a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">groupbase</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
279 <a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-q"</tt><tt class="py-op">,</tt> <tt class="py-string">"--quiet"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
280 <a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">verbosity</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
281 <a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-r"</tt><tt class="py-op">,</tt> <tt class="py-string">"--regroup"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
282 <a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command</tt><tt class="py-op">:</tt> </tt>
283 <a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt id="link-48" class="py-name"><a title="nodeset.error_exit" class="py-name" href="#" onclick="return doclink('link-48', 'error_exit', 'link-42');">error_exit</a></tt><tt class="py-op">(</tt><tt class="py-name">progname</tt><tt class="py-op">,</tt> <tt class="py-name">multcmds_errstr</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
284 <a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-string">"regroup"</tt> </tt>
285 <a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-R"</tt><tt class="py-op">,</tt> <tt class="py-string">"--rangeset"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
286 <a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">class_set</tt> <tt class="py-op">=</tt> <tt id="link-49" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-49', 'RangeSet', 'link-21');">RangeSet</a></tt> </tt>
287 <a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-S"</tt><tt class="py-op">,</tt> <tt class="py-string">"--separator"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
288 <a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">separator</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
289 <a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-s"</tt><tt class="py-op">,</tt> <tt class="py-string">"--groupsource"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
290 <a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">source</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
291 <a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"--groupsources"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
292 <a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-name">command</tt> <tt class="py-op">=</tt> <tt class="py-string">"groupsources"</tt> </tt>
293 <a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">"-v"</tt><tt class="py-op">,</tt> <tt class="py-string">"--version"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
294 <a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-name">__version__</tt> </tt>
295 <a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
296 <a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> </tt>
297 <a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-comment"># Check for command presence</tt> </tt>
298 <a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">command</tt><tt class="py-op">:</tt> </tt>
299 <a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: no command specified."</tt> </tt>
300 <a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-name">__doc__</tt> </tt>
301 <a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
302 <a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> </tt>
303 <a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">all</tt><tt class="py-op">:</tt> <tt class="py-keyword">assert</tt> <tt class="py-name">class_set</tt> <tt class="py-op">==</tt> <tt id="link-50" class="py-name"><a title="ClusterShell.NodeSet
304 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-50', 'NodeSet', 'link-13');">NodeSet</a></tt><tt class="py-op">,</tt> <tt class="py-string">"-a is only supported in NodeSet mode"</tt> </tt>
305 <a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> </tt>
306 <a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">source</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">class_set</tt> <tt class="py-op">==</tt> <tt id="link-51" class="py-name"><a title="ClusterShell.NodeSet.RangeSet" class="py-name" href="#" onclick="return doclink('link-51', 'RangeSet', 'link-21');">RangeSet</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">command</tt> <tt class="py-op">==</tt> <tt class="py-string">"groupsources"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
307 <a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"WARNING: option group source \"%s\" ignored"</tt> \ </tt>
308 <a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">source</tt> </tt>
309 <a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> </tt>
310 <a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-comment"># The list command doesn't need any NodeSet, check for it first.</tt> </tt>
311 <a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command</tt> <tt class="py-op">==</tt> <tt class="py-string">"list"</tt><tt class="py-op">:</tt> </tt>
312 <a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">group</tt> <tt class="py-keyword">in</tt> <tt id="link-52" class="py-name"><a title="ClusterShell.NodeSet.grouplist
313 ClusterShell.NodeUtils.GroupResolver.grouplist" class="py-name" href="#" onclick="return doclink('link-52', 'grouplist', 'link-25');">grouplist</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
314 <a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">source</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">groupbase</tt><tt class="py-op">:</tt> </tt>
315 <a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">"@%s:%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">)</tt> </tt>
316 <a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
317 <a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">"@%s"</tt> <tt class="py-op">%</tt> <tt class="py-name">group</tt> </tt>
318 <a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
319 <a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-comment"># Also, the groupsources command simply lists group sources.</tt> </tt>
320 <a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">command</tt> <tt class="py-op">==</tt> <tt class="py-string">"groupsources"</tt><tt class="py-op">:</tt> </tt>
321 <a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-name">dispdefault</tt> <tt class="py-op">=</tt> <tt class="py-string">"(default)"</tt> </tt>
322 <a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">src</tt> <tt class="py-keyword">in</tt> <tt id="link-53" class="py-name"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-53', 'STD_GROUP_RESOLVER', 'link-26');">STD_GROUP_RESOLVER</a></tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.sources()=ClusterShell.NodeUtils.GroupResolver-class.html#sources,Method ClusterShell.NodeUtils.GroupResolverConfig.sources()=ClusterShell.NodeUtils.GroupResolverConfig-class.html#sources"><a title="ClusterShell.NodeUtils.GroupResolver.sources
323 ClusterShell.NodeUtils.GroupResolverConfig.sources" class="py-name" href="#" onclick="return doclink('link-54', 'sources', 'link-54');">sources</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
324 <a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">"%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">src</tt><tt class="py-op">,</tt> <tt class="py-name">dispdefault</tt><tt class="py-op">)</tt> </tt>
325 <a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-name">dispdefault</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
326 <a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
327 <a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> </tt>
328 <a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
329 <a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">verbosity</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
330 <a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt id="link-55" class="py-name"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-55', 'STD_GROUP_RESOLVER', 'link-26');">STD_GROUP_RESOLVER</a></tt><tt class="py-op">.</tt><tt id="link-56" class="py-name" targets="Method ClusterShell.NodeUtils.GroupResolver.set_verbosity()=ClusterShell.NodeUtils.GroupResolver-class.html#set_verbosity"><a title="ClusterShell.NodeUtils.GroupResolver.set_verbosity" class="py-name" href="#" onclick="return doclink('link-56', 'set_verbosity', 'link-56');">set_verbosity</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
331 <a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> </tt>
332 <a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-comment"># We want -s &lt;groupsource&gt; to act as a substition of default groupsource</tt> </tt>
333 <a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-comment"># (ie. it's not necessary to prefix group names by this group source).</tt> </tt>
334 <a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">source</tt><tt class="py-op">:</tt> </tt>
335 <a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt id="link-57" class="py-name"><a title="ClusterShell.NodeSet.STD_GROUP_RESOLVER" class="py-name" href="#" onclick="return doclink('link-57', 'STD_GROUP_RESOLVER', 'link-26');">STD_GROUP_RESOLVER</a></tt><tt class="py-op">.</tt><tt class="py-name">default_sourcename</tt> <tt class="py-op">=</tt> <tt class="py-name">source</tt> </tt>
336 <a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> </tt>
337 <a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-comment"># Instantiate RangeSet or NodeSet object</tt> </tt>
338 <a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-name">xset</tt> <tt class="py-op">=</tt> <tt class="py-name">class_set</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
339 <a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> </tt>
340 <a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">all</tt><tt class="py-op">:</tt> </tt>
341 <a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-comment"># Include all nodes from external node groups support.</tt> </tt>
342 <a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-name">xset</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="ClusterShell.NodeSet.NodeSet.update
343 ClusterShell.NodeSet.NodeSetBase.update
344 ClusterShell.NodeSet.RangeSet.update
345 clush.RunTimer.update" class="py-name" href="#" onclick="return doclink('link-58', 'update', 'link-30');">update</a></tt><tt class="py-op">(</tt><tt id="link-59" class="py-name"><a title="ClusterShell.NodeSet
346 ClusterShell.NodeSet.NodeSet" class="py-name" href="#" onclick="return doclink('link-59', 'NodeSet', 'link-13');">NodeSet</a></tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Class Method ClusterShell.NodeSet.NodeSet.fromall()=ClusterShell.NodeSet.NodeSet-class.html#fromall"><a title="ClusterShell.NodeSet.NodeSet.fromall" class="py-name" href="#" onclick="return doclink('link-60', 'fromall', 'link-60');">fromall</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-comment"># uses default_sourcename</tt> </tt>
347 <a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: only union operation is supported when using -a due to</tt> </tt>
348 <a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-comment"># current options handling.</tt> </tt>
349 <a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-keyword">not</tt> <tt class="py-name">args</tt><tt class="py-op">:</tt> </tt>
350 <a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-comment"># No need to specify '-' to read stdin if no argument at all.</tt> </tt>
351 <a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt id="link-61" class="py-name"><a title="nodeset.process_stdin" class="py-name" href="#" onclick="return doclink('link-61', 'process_stdin', 'link-34');">process_stdin</a></tt><tt class="py-op">(</tt><tt class="py-name">xset</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
352 <a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> </tt>
353 <a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-comment"># Finish xset computing from args</tt> </tt>
354 <a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt id="link-62" class="py-name" targets="Function nodeset.compute_nodeset()=nodeset-module.html#compute_nodeset"><a title="nodeset.compute_nodeset" class="py-name" href="#" onclick="return doclink('link-62', 'compute_nodeset', 'link-62');">compute_nodeset</a></tt><tt class="py-op">(</tt><tt class="py-name">xset</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-name">autostep</tt><tt class="py-op">)</tt> </tt>
355 <a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> </tt>
356 <a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-comment"># Interprate special characters (may raise SyntaxError)</tt> </tt>
357 <a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-name">separator</tt> <tt class="py-op">=</tt> <tt class="py-name">eval</tt><tt class="py-op">(</tt><tt class="py-string">'\'%s\''</tt> <tt class="py-op">%</tt> <tt class="py-name">separator</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">"__builtins__"</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-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
358 <a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> </tt>
359 <a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-comment"># Display result according to command choice</tt> </tt>
360 <a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">command</tt> <tt class="py-op">==</tt> <tt class="py-string">"expand"</tt><tt class="py-op">:</tt> </tt>
361 <a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-name">separator</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method ClusterShell.Task.Task.join()=ClusterShell.Task.Task-class.html#join"><a title="ClusterShell.Task.Task.join" class="py-name" href="#" onclick="return doclink('link-63', 'join', 'link-63');">join</a></tt><tt class="py-op">(</tt><tt class="py-name">xset</tt><tt class="py-op">)</tt> </tt>
362 <a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">command</tt> <tt class="py-op">==</tt> <tt class="py-string">"fold"</tt><tt class="py-op">:</tt> </tt>
363 <a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-name">xset</tt> </tt>
364 <a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">command</tt> <tt class="py-op">==</tt> <tt class="py-string">"regroup"</tt><tt class="py-op">:</tt> </tt>
365 <a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-name">xset</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name" targets="Method ClusterShell.NodeSet.NodeSet.regroup()=ClusterShell.NodeSet.NodeSet-class.html#regroup"><a title="ClusterShell.NodeSet.NodeSet.regroup" class="py-name" href="#" onclick="return doclink('link-64', 'regroup', 'link-64');">regroup</a></tt><tt class="py-op">(</tt><tt class="py-name">source</tt><tt class="py-op">,</tt> <tt class="py-name">noprefix</tt><tt class="py-op">=</tt><tt class="py-name">groupbase</tt><tt class="py-op">)</tt> </tt>
366 <a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
367 <a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">xset</tt><tt class="py-op">)</tt> </tt>
368 <a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> </tt>
369 <a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt id="link-65" class="py-name"><a title="ClusterShell.NodeSet.NodeSetParseError" class="py-name" href="#" onclick="return doclink('link-65', 'NodeSetParseError', 'link-18');">NodeSetParseError</a></tt><tt class="py-op">,</tt> <tt id="link-66" class="py-name"><a title="ClusterShell.NodeSet.RangeSetParseError" class="py-name" href="#" onclick="return doclink('link-66', 'RangeSetParseError', 'link-22');">RangeSetParseError</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt><tt class="py-op">:</tt> </tt>
370 <a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">verbosity</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
371 <a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"%s parse error:"</tt> <tt class="py-op">%</tt> <tt class="py-name">class_set</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt> </tt>
372 <a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
373 </div><a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> </tt>
374 <a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> </tt>
375 <a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
376 <a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
377 <a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt id="link-67" class="py-name" targets="Function nodeset.run_nodeset()=nodeset-module.html#run_nodeset"><a title="nodeset.run_nodeset" class="py-name" href="#" onclick="return doclink('link-67', 'run_nodeset', 'link-67');">run_nodeset</a></tt><tt class="py-op">(</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">)</tt> </tt>
378 <a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
379 <a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AssertionError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
380 <a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
381 <a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
382 <a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IndexError</tt><tt class="py-op">:</tt> </tt>
383 <a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: syntax error"</tt> </tt>
384 <a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
385 <a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">SyntaxError</tt><tt class="py-op">:</tt> </tt>
386 <a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: invalid separator"</tt> </tt>
387 <a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
388 <a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-68" class="py-name"><a title="ClusterShell.NodeSet.NodeSetExternalError" class="py-name" href="#" onclick="return doclink('link-68', 'NodeSetExternalError', 'link-17');">NodeSetExternalError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
389 <a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: external error:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
390 <a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
391 <a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-69" class="py-name"><a title="ClusterShell.NodeUtils.GroupResolverSourceError" class="py-name" href="#" onclick="return doclink('link-69', 'GroupResolverSourceError', 'link-5');">GroupResolverSourceError</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
392 <a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: unknown group source: \"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-name">e</tt> </tt>
393 <a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
394 <a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-70" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceNoUpcall" class="py-name" href="#" onclick="return doclink('link-70', 'GroupSourceNoUpcall', 'link-11');">GroupSourceNoUpcall</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
395 <a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: no %s upcall defined for group "</tt> \ </tt>
396 <a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-string">"source \"%s\""</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">group_source</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
397 <a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
398 <a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-71" class="py-name"><a title="ClusterShell.NodeUtils.GroupSourceException" class="py-name" href="#" onclick="return doclink('link-71', 'GroupSourceException', 'link-8');">GroupSourceException</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
399 <a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"ERROR: other group error:"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
400 <a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
401 <a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyboardInterrupt</tt><tt class="py-op">:</tt> </tt>
402 <a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-number">128</tt> <tt class="py-op">+</tt> <tt class="py-name">signal</tt><tt class="py-op">.</tt><tt class="py-name">SIGINT</tt><tt class="py-op">)</tt> </tt>
403 <a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> </tt><script type="text/javascript">
404 <!--
405 expandto(location.href);
406 // -->
407 </script>
408 </pre>
409 <br />
410 <!-- ==================== NAVIGATION BAR ==================== -->
411 <table class="navbar" border="0" width="100%" cellpadding="0"
412 bgcolor="#a0c0ff" cellspacing="0">
413 <tr valign="middle">
414
415 <!-- Tree link -->
416 <th>&nbsp;&nbsp;&nbsp;<a
417 href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
418
419 <!-- Index link -->
420 <th>&nbsp;&nbsp;&nbsp;<a
421 href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
422
423 <!-- Help link -->
424 <th>&nbsp;&nbsp;&nbsp;<a
425 href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
426
427 <!-- Project homepage -->
428 <th class="navbar" align="right" width="100%">
429 <table border="0" cellpadding="0" cellspacing="0">
430 <tr><th class="navbar" align="center"
431 ><a class="navbar" target="_top" href="http://clustershell.sourceforge.net">ClusterShell</a></th>
432 </tr></table></th>
433 </tr>
434 </table>
435 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
436 <tr>
437 <td align="left" class="footer">
438 Generated by Epydoc 3.0.1 on Tue Jul 27 21:53:22 2010
439 </td>
440 <td align="right" class="footer">
441 <a target="mainFrame" href="http://epydoc.sourceforge.net"
442 >http://epydoc.sourceforge.net</a>
443 </td>
444 </tr>
445 </table>
446
447 <script type="text/javascript">
448 <!--
449 // Private objects are initially displayed (because if
450 // javascript is turned off then we want them to be
451 // visible); but by default, we want to hide them. So hide
452 // them unless we have a cookie that says to show them.
453 checkCookie();
454 // -->
455 </script>
456 </body>
457 </html>
+0
-38
doc/epydoc/html/redirect.html less more
0 <html><head><title>Epydoc Redirect Page</title>
1 <meta http-equiv="cache-control" content="no-cache" />
2 <meta http-equiv="expires" content="0" />
3 <meta http-equiv="pragma" content="no-cache" />
4 <script type="text/javascript" src="epydoc.js"></script>
5 </head>
6 <body>
7 <script type="text/javascript">
8 <!--
9 var pages = ["ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-c", "ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-c", "ClusterShell.Engine.Engine.EngineIllegalOperationError-c", "ClusterShell.Worker.EngineClient.EngineClientException-c", "ClusterShell.Engine.Engine.EngineAlreadyRunningError-c", "ClusterShell.Engine.Engine.EngineNotSupportedError-c", "ClusterShell.Worker.EngineClient.EngineClientError-c", "ClusterShell.Engine.Engine.EngineTimeoutException-c", "ClusterShell.Worker.Worker.WorkerBadArgumentError-c", "ClusterShell.Worker.EngineClient.EngineClientEOF-c", "ClusterShell.Worker.EngineClient.EnginePort._Msg-c", "ClusterShell.Engine.Engine.EngineAbortException-c", "ClusterShell.NodeUtils.GroupResolverConfigError-c", "ClusterShell.NodeUtils.GroupResolverSourceError-c", "ClusterShell.NodeUtils.GroupSourceQueryFailed-c", "ClusterShell.Worker.EngineClient.EngineClient-c", "ClusterShell.Engine.Factory.PreferredEngine-c", "ClusterShell.NodeSet.NodeSetParseRangeError-c", "ClusterShell.NodeUtils.GroupSourceException-c", "ClusterShell.Worker.EngineClient.EnginePort-c", "ClusterShell.Engine.Engine.EngineBaseTimer-c", "ClusterShell.Engine.Engine.EngineException-c", "ClusterShell.NodeUtils.GroupResolverConfig-c", "ClusterShell.NodeUtils.GroupSourceNoUpcall-c", "ClusterShell.Worker.Worker.WorkerException-c", "ClusterShell.NodeSet.NodeSetExternalError-c", "ClusterShell.NodeSet.RangeSetPaddingError-c", "ClusterShell.NodeUtils.GroupResolverError-c", "ClusterShell.Engine.Engine._EngineTimerQ-c", "ClusterShell.Task.Task._SuspendCondition-c", "ClusterShell.Worker.Worker.DistantWorker-c", "ClusterShell.NodeSet.RangeSetParseError-c", "ClusterShell.Worker.Worker.WorkerSimple-c", "ClusterShell.Engine.Engine.EngineTimer-c", "ClusterShell.NodeSet.NodeSetParseError-c", "ClusterShell.NodeSet.RangeSetException-c", "ClusterShell.Task.Task._SyncMsgHandler-c", "ClusterShell.Worker.Worker.WorkerError-c", "ClusterShell.Engine.EPoll.EngineEPoll-c", "ClusterShell.NodeSet.NodeSetException-c", "ClusterShell.Task.AlreadyRunningError-c", "ClusterShell.Task.Task.tasksyncmethod-c", "ClusterShell.Worker.Popen.WorkerPopen-c", "ClusterShell.NodeUtils.GroupResolver-c", "ClusterShell.Engine.Poll.EnginePoll-c", "ClusterShell.Worker.Pdsh.WorkerPdsh-c", "ClusterShell.NodeSet.NodeGroupBase-c", "ClusterShell.NodeSet.ParsingEngine-c", "ClusterShell.NodeUtils.GroupSource-c", "ClusterShell.Task.TaskMsgTreeError-c", "ClusterShell.Engine.Engine.Engine-c", "ClusterShell.Worker.Ssh.WorkerSsh-c", "ClusterShell.Worker.Worker.Worker-c", "ClusterShell.Worker.EngineClient-m", "ClusterShell.MsgTree.MsgTreeElem-c", "ClusterShell.NodeSet.NodeSetBase-c", "ClusterShell.Event.EventHandler-c", "ClusterShell.Task.TaskException-c", "ClusterShell.Task.TimeoutError-c", "ClusterShell.Task._TaskMsgTree-c", "ClusterShell.NodeSet.RangeSet-c", "ClusterShell.MsgTree.MsgTree-c", "ClusterShell.NodeSet.NodeSet-c", "ClusterShell.Engine.Factory-m", "ClusterShell.Task.TaskError-c", "ClusterShell.Worker.Ssh.Scp-c", "ClusterShell.Worker.Ssh.Ssh-c", "clush.UpdatePromptException-c", "ClusterShell.Engine.Engine-m", "ClusterShell.Worker.Worker-m", "ClusterShell.Engine.EPoll-m", "ClusterShell.Worker.Popen-m", "clush.DirectOutputHandler-c", "clush.GatherOutputHandler-c", "ClusterShell.Engine.Poll-m", "ClusterShell.Worker.Pdsh-m", "ClusterShell.Worker.Ssh-m", "ClusterShell.NodeUtils-m", "ClusterShell.Task.Task-c", "clush.ClushConfigError-c", "clush.StdInputHandler-c", "ClusterShell.MsgTree-m", "ClusterShell.NodeSet-m", "ClusterShell.Engine-m", "ClusterShell.Worker-m", "ClusterShell.Event-m", "ClusterShell.Task-m", "clush.ClushConfig-c", "clubak.Display-c", "clush.RunTimer-c", "clush.Display-c", "ClusterShell-m", "nodeset-m", "clubak-m", "clush-m"];
10 var dottedName = get_anchor();
11 if (dottedName) {
12 var target = redirect_url(dottedName);
13 if (target) window.location.replace(target);
14 }
15 // -->
16 </script>
17
18 <h3>Epydoc Auto-redirect page</h3>
19
20 <p>When javascript is enabled, this page will redirect URLs of
21 the form <tt>redirect.html#<i>dotted.name</i></tt> to the
22 documentation for the object with the given fully-qualified
23 dotted name.</p>
24 <p><a id="message"> &nbsp; </a></p>
25
26 <script type="text/javascript">
27 <!--
28 if (dottedName) {
29 var msg = document.getElementById("message");
30 msg.innerHTML = "No documentation found for <tt>"+
31 dottedName+"</tt>";
32 }
33 // -->
34 </script>
35
36 </body>
37 </html>
+0
-36
doc/epydoc/html/toc-ClusterShell-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>ClusterShell</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module ClusterShell</h1>
13 <hr />
14 <h2 class="toc">Variables</h2>
15 <a target="mainFrame" href="ClusterShell-module.html#__package__"
16 >__package__</a><br /> <a target="mainFrame" href="ClusterShell-module.html#__url__"
17 >__url__</a><br /> <a target="mainFrame" href="ClusterShell-module.html#__version_info__"
18 >__version_info__</a><br /> <div class="private">
19 <a target="mainFrame" href="ClusterShell-module.html#_n"
20 >_n</a><br /> </div>
21 <hr />
22 <span class="options">[<a href="javascript:void(0);" class="privatelink"
23 onclick="toggle_private();">hide&nbsp;private</a>]</span>
24
25 <script type="text/javascript">
26 <!--
27 // Private objects are initially displayed (because if
28 // javascript is turned off then we want them to be
29 // visible); but by default, we want to hide them. So hide
30 // them unless we have a cookie that says to show them.
31 checkCookie();
32 // -->
33 </script>
34 </body>
35 </html>
+0
-31
doc/epydoc/html/toc-ClusterShell.Engine-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Engine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Engine</h1>
13 <hr />
14 <h2 class="toc">Variables</h2>
15 <a target="mainFrame" href="ClusterShell.Engine-module.html#__package__"
16 >__package__</a><br /><hr />
17 <span class="options">[<a href="javascript:void(0);" class="privatelink"
18 onclick="toggle_private();">hide&nbsp;private</a>]</span>
19
20 <script type="text/javascript">
21 <!--
22 // Private objects are initially displayed (because if
23 // javascript is turned off then we want them to be
24 // visible); but by default, we want to hide them. So hide
25 // them unless we have a cookie that says to show them.
26 checkCookie();
27 // -->
28 </script>
29 </body>
30 </html>
+0
-33
doc/epydoc/html/toc-ClusterShell.Engine.EPoll-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>EPoll</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module EPoll</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html"
16 >EngineEPoll</a><br /> <h2 class="toc">Variables</h2>
17 <a target="mainFrame" href="ClusterShell.Engine.EPoll-module.html#__package__"
18 >__package__</a><br /><hr />
19 <span class="options">[<a href="javascript:void(0);" class="privatelink"
20 onclick="toggle_private();">hide&nbsp;private</a>]</span>
21
22 <script type="text/javascript">
23 <!--
24 // Private objects are initially displayed (because if
25 // javascript is turned off then we want them to be
26 // visible); but by default, we want to hide them. So hide
27 // them unless we have a cookie that says to show them.
28 checkCookie();
29 // -->
30 </script>
31 </body>
32 </html>
+0
-44
doc/epydoc/html/toc-ClusterShell.Engine.Engine-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Engine</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Engine</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Engine.Engine.Engine-class.html"
16 >Engine</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineAbortException-class.html"
17 >EngineAbortException</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html"
18 >EngineAlreadyRunningError</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html"
19 >EngineBaseTimer</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineException-class.html"
20 >EngineException</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html"
21 >EngineIllegalOperationError</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html"
22 >EngineNotSupportedError</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html"
23 >EngineTimeoutException</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineTimer-class.html"
24 >EngineTimer</a><br /> <div class="private">
25 <a target="mainFrame" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html"
26 >_EngineTimerQ</a><br /> </div>
27 <h2 class="toc">Variables</h2>
28 <a target="mainFrame" href="ClusterShell.Engine.Engine-module.html#__package__"
29 >__package__</a><br /><hr />
30 <span class="options">[<a href="javascript:void(0);" class="privatelink"
31 onclick="toggle_private();">hide&nbsp;private</a>]</span>
32
33 <script type="text/javascript">
34 <!--
35 // Private objects are initially displayed (because if
36 // javascript is turned off then we want them to be
37 // visible); but by default, we want to hide them. So hide
38 // them unless we have a cookie that says to show them.
39 checkCookie();
40 // -->
41 </script>
42 </body>
43 </html>
+0
-33
doc/epydoc/html/toc-ClusterShell.Engine.Factory-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Factory</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Factory</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Engine.Factory.PreferredEngine-class.html"
16 >PreferredEngine</a><br /> <h2 class="toc">Variables</h2>
17 <a target="mainFrame" href="ClusterShell.Engine.Factory-module.html#__package__"
18 >__package__</a><br /><hr />
19 <span class="options">[<a href="javascript:void(0);" class="privatelink"
20 onclick="toggle_private();">hide&nbsp;private</a>]</span>
21
22 <script type="text/javascript">
23 <!--
24 // Private objects are initially displayed (because if
25 // javascript is turned off then we want them to be
26 // visible); but by default, we want to hide them. So hide
27 // them unless we have a cookie that says to show them.
28 checkCookie();
29 // -->
30 </script>
31 </body>
32 </html>
+0
-33
doc/epydoc/html/toc-ClusterShell.Engine.Poll-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Poll</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Poll</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Engine.Poll.EnginePoll-class.html"
16 >EnginePoll</a><br /> <h2 class="toc">Variables</h2>
17 <a target="mainFrame" href="ClusterShell.Engine.Poll-module.html#__package__"
18 >__package__</a><br /><hr />
19 <span class="options">[<a href="javascript:void(0);" class="privatelink"
20 onclick="toggle_private();">hide&nbsp;private</a>]</span>
21
22 <script type="text/javascript">
23 <!--
24 // Private objects are initially displayed (because if
25 // javascript is turned off then we want them to be
26 // visible); but by default, we want to hide them. So hide
27 // them unless we have a cookie that says to show them.
28 checkCookie();
29 // -->
30 </script>
31 </body>
32 </html>
+0
-33
doc/epydoc/html/toc-ClusterShell.Event-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Event</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Event</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Event.EventHandler-class.html"
16 >EventHandler</a><br /> <h2 class="toc">Variables</h2>
17 <a target="mainFrame" href="ClusterShell.Event-module.html#__package__"
18 >__package__</a><br /><hr />
19 <span class="options">[<a href="javascript:void(0);" class="privatelink"
20 onclick="toggle_private();">hide&nbsp;private</a>]</span>
21
22 <script type="text/javascript">
23 <!--
24 // Private objects are initially displayed (because if
25 // javascript is turned off then we want them to be
26 // visible); but by default, we want to hide them. So hide
27 // them unless we have a cookie that says to show them.
28 checkCookie();
29 // -->
30 </script>
31 </body>
32 </html>
+0
-34
doc/epydoc/html/toc-ClusterShell.MsgTree-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>MsgTree</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module MsgTree</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.MsgTree.MsgTree-class.html"
16 >MsgTree</a><br /> <a target="mainFrame" href="ClusterShell.MsgTree.MsgTreeElem-class.html"
17 >MsgTreeElem</a><br /> <h2 class="toc">Variables</h2>
18 <a target="mainFrame" href="ClusterShell.MsgTree-module.html#__package__"
19 >__package__</a><br /><hr />
20 <span class="options">[<a href="javascript:void(0);" class="privatelink"
21 onclick="toggle_private();">hide&nbsp;private</a>]</span>
22
23 <script type="text/javascript">
24 <!--
25 // Private objects are initially displayed (because if
26 // javascript is turned off then we want them to be
27 // visible); but by default, we want to hide them. So hide
28 // them unless we have a cookie that says to show them.
29 checkCookie();
30 // -->
31 </script>
32 </body>
33 </html>
+0
-55
doc/epydoc/html/toc-ClusterShell.NodeSet-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>NodeSet</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module NodeSet</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.NodeSet.NodeGroupBase-class.html"
16 >NodeGroupBase</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSet-class.html"
17 >NodeSet</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetBase-class.html"
18 >NodeSetBase</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetException-class.html"
19 >NodeSetException</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetExternalError-class.html"
20 >NodeSetExternalError</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetParseError-class.html"
21 >NodeSetParseError</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html"
22 >NodeSetParseRangeError</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.ParsingEngine-class.html"
23 >ParsingEngine</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.RangeSet-class.html"
24 >RangeSet</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.RangeSetException-class.html"
25 >RangeSetException</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.RangeSetPaddingError-class.html"
26 >RangeSetPaddingError</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.RangeSetParseError-class.html"
27 >RangeSetParseError</a><br /> <h2 class="toc">Functions</h2>
28 <div class="private">
29 <a target="mainFrame" href="ClusterShell.NodeSet-module.html#_test"
30 >_test</a><br /> </div>
31 <a target="mainFrame" href="ClusterShell.NodeSet-module.html#expand"
32 >expand</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#fold"
33 >fold</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#grouplist"
34 >grouplist</a><br /> <h2 class="toc">Variables</h2>
35 <a target="mainFrame" href="ClusterShell.NodeSet-module.html#DEF_GROUPS_CONFIG"
36 >DEF_GROUPS_CONFIG</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#DEF_STD_GROUP_RESOLVER"
37 >DEF_STD_GROUP_RESOLVER</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#NOGROUP_RESOLVER"
38 >NOGROUP_RESOLVER</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#STD_GROUP_RESOLVER"
39 >STD_GROUP_RESOLVER</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#__package__"
40 >__package__</a><br /><hr />
41 <span class="options">[<a href="javascript:void(0);" class="privatelink"
42 onclick="toggle_private();">hide&nbsp;private</a>]</span>
43
44 <script type="text/javascript">
45 <!--
46 // Private objects are initially displayed (because if
47 // javascript is turned off then we want them to be
48 // visible); but by default, we want to hide them. So hide
49 // them unless we have a cookie that says to show them.
50 checkCookie();
51 // -->
52 </script>
53 </body>
54 </html>
+0
-41
doc/epydoc/html/toc-ClusterShell.NodeUtils-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>NodeUtils</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module NodeUtils</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolver-class.html"
16 >GroupResolver</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html"
17 >GroupResolverConfig</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html"
18 >GroupResolverConfigError</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolverError-class.html"
19 >GroupResolverError</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html"
20 >GroupResolverSourceError</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupSource-class.html"
21 >GroupSource</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupSourceException-class.html"
22 >GroupSourceException</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html"
23 >GroupSourceNoUpcall</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html"
24 >GroupSourceQueryFailed</a><br /> <h2 class="toc">Variables</h2>
25 <a target="mainFrame" href="ClusterShell.NodeUtils-module.html#__package__"
26 >__package__</a><br /><hr />
27 <span class="options">[<a href="javascript:void(0);" class="privatelink"
28 onclick="toggle_private();">hide&nbsp;private</a>]</span>
29
30 <script type="text/javascript">
31 <!--
32 // Private objects are initially displayed (because if
33 // javascript is turned off then we want them to be
34 // visible); but by default, we want to hide them. So hide
35 // them unless we have a cookie that says to show them.
36 checkCookie();
37 // -->
38 </script>
39 </body>
40 </html>
+0
-49
doc/epydoc/html/toc-ClusterShell.Task-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Task</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Task</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Task.AlreadyRunningError-class.html"
16 >AlreadyRunningError</a><br /> <a target="mainFrame" href="ClusterShell.Task.Task-class.html"
17 >Task</a><br /> <a target="mainFrame" href="ClusterShell.Task.TaskError-class.html"
18 >TaskError</a><br /> <a target="mainFrame" href="ClusterShell.Task.TaskException-class.html"
19 >TaskException</a><br /> <a target="mainFrame" href="ClusterShell.Task.TaskMsgTreeError-class.html"
20 >TaskMsgTreeError</a><br /> <a target="mainFrame" href="ClusterShell.Task.TimeoutError-class.html"
21 >TimeoutError</a><br /> <div class="private">
22 <a target="mainFrame" href="ClusterShell.Task._TaskMsgTree-class.html"
23 >_TaskMsgTree</a><br /> </div>
24 <h2 class="toc">Functions</h2>
25 <div class="private">
26 <a target="mainFrame" href="ClusterShell.Task-module.html#_task_print_debug"
27 >_task_print_debug</a><br /> </div>
28 <a target="mainFrame" href="ClusterShell.Task-module.html#task_cleanup"
29 >task_cleanup</a><br /> <a target="mainFrame" href="ClusterShell.Task-module.html#task_self"
30 >task_self</a><br /> <a target="mainFrame" href="ClusterShell.Task-module.html#task_terminate"
31 >task_terminate</a><br /> <a target="mainFrame" href="ClusterShell.Task-module.html#task_wait"
32 >task_wait</a><br /> <h2 class="toc">Variables</h2>
33 <a target="mainFrame" href="ClusterShell.Task-module.html#__package__"
34 >__package__</a><br /><hr />
35 <span class="options">[<a href="javascript:void(0);" class="privatelink"
36 onclick="toggle_private();">hide&nbsp;private</a>]</span>
37
38 <script type="text/javascript">
39 <!--
40 // Private objects are initially displayed (because if
41 // javascript is turned off then we want them to be
42 // visible); but by default, we want to hide them. So hide
43 // them unless we have a cookie that says to show them.
44 checkCookie();
45 // -->
46 </script>
47 </body>
48 </html>
+0
-31
doc/epydoc/html/toc-ClusterShell.Worker-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Worker</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Worker</h1>
13 <hr />
14 <h2 class="toc">Variables</h2>
15 <a target="mainFrame" href="ClusterShell.Worker-module.html#__package__"
16 >__package__</a><br /><hr />
17 <span class="options">[<a href="javascript:void(0);" class="privatelink"
18 onclick="toggle_private();">hide&nbsp;private</a>]</span>
19
20 <script type="text/javascript">
21 <!--
22 // Private objects are initially displayed (because if
23 // javascript is turned off then we want them to be
24 // visible); but by default, we want to hide them. So hide
25 // them unless we have a cookie that says to show them.
26 checkCookie();
27 // -->
28 </script>
29 </body>
30 </html>
+0
-38
doc/epydoc/html/toc-ClusterShell.Worker.EngineClient-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>EngineClient</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module EngineClient</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClient-class.html"
16 >EngineClient</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html"
17 >EngineClientEOF</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClientError-class.html"
18 >EngineClientError</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClientException-class.html"
19 >EngineClientException</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html"
20 >EngineClientNotSupportedError</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EnginePort-class.html"
21 >EnginePort</a><br /> <h2 class="toc">Variables</h2>
22 <a target="mainFrame" href="ClusterShell.Worker.EngineClient-module.html#__package__"
23 >__package__</a><br /><hr />
24 <span class="options">[<a href="javascript:void(0);" class="privatelink"
25 onclick="toggle_private();">hide&nbsp;private</a>]</span>
26
27 <script type="text/javascript">
28 <!--
29 // Private objects are initially displayed (because if
30 // javascript is turned off then we want them to be
31 // visible); but by default, we want to hide them. So hide
32 // them unless we have a cookie that says to show them.
33 checkCookie();
34 // -->
35 </script>
36 </body>
37 </html>
+0
-33
doc/epydoc/html/toc-ClusterShell.Worker.Pdsh-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Pdsh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Pdsh</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html"
16 >WorkerPdsh</a><br /> <h2 class="toc">Variables</h2>
17 <a target="mainFrame" href="ClusterShell.Worker.Pdsh-module.html#__package__"
18 >__package__</a><br /><hr />
19 <span class="options">[<a href="javascript:void(0);" class="privatelink"
20 onclick="toggle_private();">hide&nbsp;private</a>]</span>
21
22 <script type="text/javascript">
23 <!--
24 // Private objects are initially displayed (because if
25 // javascript is turned off then we want them to be
26 // visible); but by default, we want to hide them. So hide
27 // them unless we have a cookie that says to show them.
28 checkCookie();
29 // -->
30 </script>
31 </body>
32 </html>
+0
-33
doc/epydoc/html/toc-ClusterShell.Worker.Popen-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Popen</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Popen</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Worker.Popen.WorkerPopen-class.html"
16 >WorkerPopen</a><br /> <h2 class="toc">Variables</h2>
17 <a target="mainFrame" href="ClusterShell.Worker.Popen-module.html#__package__"
18 >__package__</a><br /><hr />
19 <span class="options">[<a href="javascript:void(0);" class="privatelink"
20 onclick="toggle_private();">hide&nbsp;private</a>]</span>
21
22 <script type="text/javascript">
23 <!--
24 // Private objects are initially displayed (because if
25 // javascript is turned off then we want them to be
26 // visible); but by default, we want to hide them. So hide
27 // them unless we have a cookie that says to show them.
28 checkCookie();
29 // -->
30 </script>
31 </body>
32 </html>
+0
-35
doc/epydoc/html/toc-ClusterShell.Worker.Ssh-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Ssh</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Ssh</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Worker.Ssh.Scp-class.html"
16 >Scp</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Ssh.Ssh-class.html"
17 >Ssh</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html"
18 >WorkerSsh</a><br /> <h2 class="toc">Variables</h2>
19 <a target="mainFrame" href="ClusterShell.Worker.Ssh-module.html#__package__"
20 >__package__</a><br /><hr />
21 <span class="options">[<a href="javascript:void(0);" class="privatelink"
22 onclick="toggle_private();">hide&nbsp;private</a>]</span>
23
24 <script type="text/javascript">
25 <!--
26 // Private objects are initially displayed (because if
27 // javascript is turned off then we want them to be
28 // visible); but by default, we want to hide them. So hide
29 // them unless we have a cookie that says to show them.
30 checkCookie();
31 // -->
32 </script>
33 </body>
34 </html>
+0
-38
doc/epydoc/html/toc-ClusterShell.Worker.Worker-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Worker</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module Worker</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Worker.Worker.DistantWorker-class.html"
16 >DistantWorker</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.Worker-class.html"
17 >Worker</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html"
18 >WorkerBadArgumentError</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.WorkerError-class.html"
19 >WorkerError</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.WorkerException-class.html"
20 >WorkerException</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.WorkerSimple-class.html"
21 >WorkerSimple</a><br /> <h2 class="toc">Variables</h2>
22 <a target="mainFrame" href="ClusterShell.Worker.Worker-module.html#__package__"
23 >__package__</a><br /><hr />
24 <span class="options">[<a href="javascript:void(0);" class="privatelink"
25 onclick="toggle_private();">hide&nbsp;private</a>]</span>
26
27 <script type="text/javascript">
28 <!--
29 // Private objects are initially displayed (because if
30 // javascript is turned off then we want them to be
31 // visible); but by default, we want to hide them. So hide
32 // them unless we have a cookie that says to show them.
33 checkCookie();
34 // -->
35 </script>
36 </body>
37 </html>
+0
-38
doc/epydoc/html/toc-clubak-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clubak</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module clubak</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="clubak.Display-class.html"
16 >Display</a><br /> <h2 class="toc">Functions</h2>
17 <a target="mainFrame" href="clubak-module.html#clubak"
18 >clubak</a><br /> <a target="mainFrame" href="clubak-module.html#display"
19 >display</a><br /> <a target="mainFrame" href="clubak-module.html#nodeset_cmp"
20 >nodeset_cmp</a><br /> <h2 class="toc">Variables</h2>
21 <a target="mainFrame" href="clubak-module.html#WHENCOLOR_CHOICES"
22 >WHENCOLOR_CHOICES</a><br /> <a target="mainFrame" href="clubak-module.html#__package__"
23 >__package__</a><br /><hr />
24 <span class="options">[<a href="javascript:void(0);" class="privatelink"
25 onclick="toggle_private();">hide&nbsp;private</a>]</span>
26
27 <script type="text/javascript">
28 <!--
29 // Private objects are initially displayed (because if
30 // javascript is turned off then we want them to be
31 // visible); but by default, we want to hide them. So hide
32 // them unless we have a cookie that says to show them.
33 checkCookie();
34 // -->
35 </script>
36 </body>
37 </html>
+0
-58
doc/epydoc/html/toc-clush-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>clush</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module clush</h1>
13 <hr />
14 <h2 class="toc">Classes</h2>
15 <a target="mainFrame" href="clush.ClushConfig-class.html"
16 >ClushConfig</a><br /> <a target="mainFrame" href="clush.ClushConfigError-class.html"
17 >ClushConfigError</a><br /> <a target="mainFrame" href="clush.DirectOutputHandler-class.html"
18 >DirectOutputHandler</a><br /> <a target="mainFrame" href="clush.Display-class.html"
19 >Display</a><br /> <a target="mainFrame" href="clush.GatherOutputHandler-class.html"
20 >GatherOutputHandler</a><br /> <a target="mainFrame" href="clush.RunTimer-class.html"
21 >RunTimer</a><br /> <a target="mainFrame" href="clush.StdInputHandler-class.html"
22 >StdInputHandler</a><br /> <a target="mainFrame" href="clush.UpdatePromptException-class.html"
23 >UpdatePromptException</a><br /> <h2 class="toc">Functions</h2>
24 <a target="mainFrame" href="clush-module.html#bind_stdin"
25 >bind_stdin</a><br /> <a target="mainFrame" href="clush-module.html#bufnodeset_cmp"
26 >bufnodeset_cmp</a><br /> <a target="mainFrame" href="clush-module.html#clush_excepthook"
27 >clush_excepthook</a><br /> <a target="mainFrame" href="clush-module.html#clush_exit"
28 >clush_exit</a><br /> <a target="mainFrame" href="clush-module.html#clush_main"
29 >clush_main</a><br /> <a target="mainFrame" href="clush-module.html#get_history_file"
30 >get_history_file</a><br /> <a target="mainFrame" href="clush-module.html#nodeset_cmp"
31 >nodeset_cmp</a><br /> <a target="mainFrame" href="clush-module.html#readline_setup"
32 >readline_setup</a><br /> <a target="mainFrame" href="clush-module.html#run_command"
33 >run_command</a><br /> <a target="mainFrame" href="clush-module.html#run_copy"
34 >run_copy</a><br /> <a target="mainFrame" href="clush-module.html#signal_handler"
35 >signal_handler</a><br /> <a target="mainFrame" href="clush-module.html#ttyloop"
36 >ttyloop</a><br /> <h2 class="toc">Variables</h2>
37 <a target="mainFrame" href="clush-module.html#VERB_DEBUG"
38 >VERB_DEBUG</a><br /> <a target="mainFrame" href="clush-module.html#VERB_QUIET"
39 >VERB_QUIET</a><br /> <a target="mainFrame" href="clush-module.html#VERB_STD"
40 >VERB_STD</a><br /> <a target="mainFrame" href="clush-module.html#VERB_VERB"
41 >VERB_VERB</a><br /> <a target="mainFrame" href="clush-module.html#WHENCOLOR_CHOICES"
42 >WHENCOLOR_CHOICES</a><br /> <a target="mainFrame" href="clush-module.html#__package__"
43 >__package__</a><br /><hr />
44 <span class="options">[<a href="javascript:void(0);" class="privatelink"
45 onclick="toggle_private();">hide&nbsp;private</a>]</span>
46
47 <script type="text/javascript">
48 <!--
49 // Private objects are initially displayed (because if
50 // javascript is turned off then we want them to be
51 // visible); but by default, we want to hide them. So hide
52 // them unless we have a cookie that says to show them.
53 checkCookie();
54 // -->
55 </script>
56 </body>
57 </html>
+0
-186
doc/epydoc/html/toc-everything.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Everything</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Everything</h1>
13 <hr />
14 <h2 class="toc">All Classes</h2>
15 <a target="mainFrame" href="ClusterShell.Engine.EPoll.EngineEPoll-class.html"
16 >ClusterShell.Engine.EPoll.EngineEPoll</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.Engine-class.html"
17 >ClusterShell.Engine.Engine.Engine</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineAbortException-class.html"
18 >ClusterShell.Engine.Engine.EngineAbortException</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineAlreadyRunningError-class.html"
19 >ClusterShell.Engine.Engine.EngineAlreadyRunningError</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineBaseTimer-class.html"
20 >ClusterShell.Engine.Engine.EngineBaseTimer</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineException-class.html"
21 >ClusterShell.Engine.Engine.EngineException</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineIllegalOperationError-class.html"
22 >ClusterShell.Engine.Engine.EngineIllegalOperationError</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineNotSupportedError-class.html"
23 >ClusterShell.Engine.Engine.EngineNotSupportedError</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineTimeoutException-class.html"
24 >ClusterShell.Engine.Engine.EngineTimeoutException</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine.EngineTimer-class.html"
25 >ClusterShell.Engine.Engine.EngineTimer</a><br /> <div class="private">
26 <a target="mainFrame" href="ClusterShell.Engine.Engine._EngineTimerQ-class.html"
27 >ClusterShell.Engine.Engine._EngineTimerQ</a><br /> </div>
28 <div class="private">
29 <a target="mainFrame" href="ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase-class.html"
30 >ClusterShell.Engine.Engine._EngineTimerQ._EngineTimerCase</a><br /> </div>
31 <a target="mainFrame" href="ClusterShell.Engine.Factory.PreferredEngine-class.html"
32 >ClusterShell.Engine.Factory.PreferredEngine</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Poll.EnginePoll-class.html"
33 >ClusterShell.Engine.Poll.EnginePoll</a><br /> <a target="mainFrame" href="ClusterShell.Event.EventHandler-class.html"
34 >ClusterShell.Event.EventHandler</a><br /> <a target="mainFrame" href="ClusterShell.MsgTree.MsgTree-class.html"
35 >ClusterShell.MsgTree.MsgTree</a><br /> <a target="mainFrame" href="ClusterShell.MsgTree.MsgTreeElem-class.html"
36 >ClusterShell.MsgTree.MsgTreeElem</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeGroupBase-class.html"
37 >ClusterShell.NodeSet.NodeGroupBase</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSet-class.html"
38 >ClusterShell.NodeSet.NodeSet</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetBase-class.html"
39 >ClusterShell.NodeSet.NodeSetBase</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetException-class.html"
40 >ClusterShell.NodeSet.NodeSetException</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetExternalError-class.html"
41 >ClusterShell.NodeSet.NodeSetExternalError</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetParseError-class.html"
42 >ClusterShell.NodeSet.NodeSetParseError</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.NodeSetParseRangeError-class.html"
43 >ClusterShell.NodeSet.NodeSetParseRangeError</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.ParsingEngine-class.html"
44 >ClusterShell.NodeSet.ParsingEngine</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.RangeSet-class.html"
45 >ClusterShell.NodeSet.RangeSet</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.RangeSetException-class.html"
46 >ClusterShell.NodeSet.RangeSetException</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.RangeSetPaddingError-class.html"
47 >ClusterShell.NodeSet.RangeSetPaddingError</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet.RangeSetParseError-class.html"
48 >ClusterShell.NodeSet.RangeSetParseError</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolver-class.html"
49 >ClusterShell.NodeUtils.GroupResolver</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolverConfig-class.html"
50 >ClusterShell.NodeUtils.GroupResolverConfig</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolverConfigError-class.html"
51 >ClusterShell.NodeUtils.GroupResolverConfigError</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolverError-class.html"
52 >ClusterShell.NodeUtils.GroupResolverError</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupResolverSourceError-class.html"
53 >ClusterShell.NodeUtils.GroupResolverSourceError</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupSource-class.html"
54 >ClusterShell.NodeUtils.GroupSource</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupSourceException-class.html"
55 >ClusterShell.NodeUtils.GroupSourceException</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupSourceNoUpcall-class.html"
56 >ClusterShell.NodeUtils.GroupSourceNoUpcall</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils.GroupSourceQueryFailed-class.html"
57 >ClusterShell.NodeUtils.GroupSourceQueryFailed</a><br /> <a target="mainFrame" href="ClusterShell.Task.AlreadyRunningError-class.html"
58 >ClusterShell.Task.AlreadyRunningError</a><br /> <a target="mainFrame" href="ClusterShell.Task.Task-class.html"
59 >ClusterShell.Task.Task</a><br /> <div class="private">
60 <a target="mainFrame" href="ClusterShell.Task.Task._SuspendCondition-class.html"
61 >ClusterShell.Task.Task._SuspendCondition</a><br /> </div>
62 <div class="private">
63 <a target="mainFrame" href="ClusterShell.Task.Task._SyncMsgHandler-class.html"
64 >ClusterShell.Task.Task._SyncMsgHandler</a><br /> </div>
65 <a target="mainFrame" href="ClusterShell.Task.Task.tasksyncmethod-class.html"
66 >ClusterShell.Task.Task.tasksyncmethod</a><br /> <a target="mainFrame" href="ClusterShell.Task.TaskError-class.html"
67 >ClusterShell.Task.TaskError</a><br /> <a target="mainFrame" href="ClusterShell.Task.TaskException-class.html"
68 >ClusterShell.Task.TaskException</a><br /> <a target="mainFrame" href="ClusterShell.Task.TaskMsgTreeError-class.html"
69 >ClusterShell.Task.TaskMsgTreeError</a><br /> <a target="mainFrame" href="ClusterShell.Task.TimeoutError-class.html"
70 >ClusterShell.Task.TimeoutError</a><br /> <div class="private">
71 <a target="mainFrame" href="ClusterShell.Task._TaskMsgTree-class.html"
72 >ClusterShell.Task._TaskMsgTree</a><br /> </div>
73 <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClient-class.html"
74 >ClusterShell.Worker.EngineClient.EngineClient</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClientEOF-class.html"
75 >ClusterShell.Worker.EngineClient.EngineClientEOF</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClientError-class.html"
76 >ClusterShell.Worker.EngineClient.EngineClientError</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClientException-class.html"
77 >ClusterShell.Worker.EngineClient.EngineClientException</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EngineClientNotSupportedError-class.html"
78 >ClusterShell.Worker.EngineClient.EngineClientNotSupportedError</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EnginePort-class.html"
79 >ClusterShell.Worker.EngineClient.EnginePort</a><br /> <div class="private">
80 <a target="mainFrame" href="ClusterShell.Worker.EngineClient.EnginePort._Msg-class.html"
81 >ClusterShell.Worker.EngineClient.EnginePort._Msg</a><br /> </div>
82 <a target="mainFrame" href="ClusterShell.Worker.Pdsh.WorkerPdsh-class.html"
83 >ClusterShell.Worker.Pdsh.WorkerPdsh</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Popen.WorkerPopen-class.html"
84 >ClusterShell.Worker.Popen.WorkerPopen</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Ssh.Scp-class.html"
85 >ClusterShell.Worker.Ssh.Scp</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Ssh.Ssh-class.html"
86 >ClusterShell.Worker.Ssh.Ssh</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Ssh.WorkerSsh-class.html"
87 >ClusterShell.Worker.Ssh.WorkerSsh</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.DistantWorker-class.html"
88 >ClusterShell.Worker.Worker.DistantWorker</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.Worker-class.html"
89 >ClusterShell.Worker.Worker.Worker</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.WorkerBadArgumentError-class.html"
90 >ClusterShell.Worker.Worker.WorkerBadArgumentError</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.WorkerError-class.html"
91 >ClusterShell.Worker.Worker.WorkerError</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.WorkerException-class.html"
92 >ClusterShell.Worker.Worker.WorkerException</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker.WorkerSimple-class.html"
93 >ClusterShell.Worker.Worker.WorkerSimple</a><br /> <a target="mainFrame" href="clubak.Display-class.html"
94 >clubak.Display</a><br /> <a target="mainFrame" href="clush.ClushConfig-class.html"
95 >clush.ClushConfig</a><br /> <a target="mainFrame" href="clush.ClushConfigError-class.html"
96 >clush.ClushConfigError</a><br /> <a target="mainFrame" href="clush.DirectOutputHandler-class.html"
97 >clush.DirectOutputHandler</a><br /> <a target="mainFrame" href="clush.Display-class.html"
98 >clush.Display</a><br /> <a target="mainFrame" href="clush.GatherOutputHandler-class.html"
99 >clush.GatherOutputHandler</a><br /> <a target="mainFrame" href="clush.RunTimer-class.html"
100 >clush.RunTimer</a><br /> <a target="mainFrame" href="clush.StdInputHandler-class.html"
101 >clush.StdInputHandler</a><br /> <a target="mainFrame" href="clush.UpdatePromptException-class.html"
102 >clush.UpdatePromptException</a><br /> <h2 class="toc">All Functions</h2>
103 <div class="private">
104 <a target="mainFrame" href="ClusterShell.NodeSet-module.html#_test"
105 >ClusterShell.NodeSet._test</a><br /> </div>
106 <a target="mainFrame" href="ClusterShell.NodeSet-module.html#expand"
107 >ClusterShell.NodeSet.expand</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#fold"
108 >ClusterShell.NodeSet.fold</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#grouplist"
109 >ClusterShell.NodeSet.grouplist</a><br /> <div class="private">
110 <a target="mainFrame" href="ClusterShell.Task-module.html#_task_print_debug"
111 >ClusterShell.Task._task_print_debug</a><br /> </div>
112 <a target="mainFrame" href="ClusterShell.Task-module.html#task_cleanup"
113 >ClusterShell.Task.task_cleanup</a><br /> <a target="mainFrame" href="ClusterShell.Task-module.html#task_self"
114 >ClusterShell.Task.task_self</a><br /> <a target="mainFrame" href="ClusterShell.Task-module.html#task_terminate"
115 >ClusterShell.Task.task_terminate</a><br /> <a target="mainFrame" href="ClusterShell.Task-module.html#task_wait"
116 >ClusterShell.Task.task_wait</a><br /> <a target="mainFrame" href="clubak-module.html#clubak"
117 >clubak.clubak</a><br /> <a target="mainFrame" href="clubak-module.html#display"
118 >clubak.display</a><br /> <a target="mainFrame" href="clubak-module.html#nodeset_cmp"
119 >clubak.nodeset_cmp</a><br /> <a target="mainFrame" href="clush-module.html#bind_stdin"
120 >clush.bind_stdin</a><br /> <a target="mainFrame" href="clush-module.html#bufnodeset_cmp"
121 >clush.bufnodeset_cmp</a><br /> <a target="mainFrame" href="clush-module.html#clush_excepthook"
122 >clush.clush_excepthook</a><br /> <a target="mainFrame" href="clush-module.html#clush_exit"
123 >clush.clush_exit</a><br /> <a target="mainFrame" href="clush-module.html#clush_main"
124 >clush.clush_main</a><br /> <a target="mainFrame" href="clush-module.html#get_history_file"
125 >clush.get_history_file</a><br /> <a target="mainFrame" href="clush-module.html#nodeset_cmp"
126 >clush.nodeset_cmp</a><br /> <a target="mainFrame" href="clush-module.html#readline_setup"
127 >clush.readline_setup</a><br /> <a target="mainFrame" href="clush-module.html#run_command"
128 >clush.run_command</a><br /> <a target="mainFrame" href="clush-module.html#run_copy"
129 >clush.run_copy</a><br /> <a target="mainFrame" href="clush-module.html#signal_handler"
130 >clush.signal_handler</a><br /> <a target="mainFrame" href="clush-module.html#ttyloop"
131 >clush.ttyloop</a><br /> <a target="mainFrame" href="nodeset-module.html#compute_nodeset"
132 >nodeset.compute_nodeset</a><br /> <a target="mainFrame" href="nodeset-module.html#error_exit"
133 >nodeset.error_exit</a><br /> <a target="mainFrame" href="nodeset-module.html#process_stdin"
134 >nodeset.process_stdin</a><br /> <a target="mainFrame" href="nodeset-module.html#run_nodeset"
135 >nodeset.run_nodeset</a><br /> <h2 class="toc">All Variables</h2>
136 <a target="mainFrame" href="ClusterShell.Engine.EPoll-module.html#__package__"
137 >ClusterShell.Engine.EPoll.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Engine-module.html#__package__"
138 >ClusterShell.Engine.Engine.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Factory-module.html#__package__"
139 >ClusterShell.Engine.Factory.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Engine.Poll-module.html#__package__"
140 >ClusterShell.Engine.Poll.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Engine-module.html#__package__"
141 >ClusterShell.Engine.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Event-module.html#__package__"
142 >ClusterShell.Event.__package__</a><br /> <a target="mainFrame" href="ClusterShell.MsgTree-module.html#__package__"
143 >ClusterShell.MsgTree.__package__</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#DEF_GROUPS_CONFIG"
144 >ClusterShell.NodeSet.DEF_GROUPS_CONFIG</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#DEF_STD_GROUP_RESOLVER"
145 >ClusterShell.NodeSet.DEF_STD_GROUP_RESOLVER</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#NOGROUP_RESOLVER"
146 >ClusterShell.NodeSet.NOGROUP_RESOLVER</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#STD_GROUP_RESOLVER"
147 >ClusterShell.NodeSet.STD_GROUP_RESOLVER</a><br /> <a target="mainFrame" href="ClusterShell.NodeSet-module.html#__package__"
148 >ClusterShell.NodeSet.__package__</a><br /> <a target="mainFrame" href="ClusterShell.NodeUtils-module.html#__package__"
149 >ClusterShell.NodeUtils.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Task-module.html#__package__"
150 >ClusterShell.Task.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Worker.EngineClient-module.html#__package__"
151 >ClusterShell.Worker.EngineClient.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Pdsh-module.html#__package__"
152 >ClusterShell.Worker.Pdsh.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Popen-module.html#__package__"
153 >ClusterShell.Worker.Popen.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Ssh-module.html#__package__"
154 >ClusterShell.Worker.Ssh.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Worker.Worker-module.html#__package__"
155 >ClusterShell.Worker.Worker.__package__</a><br /> <a target="mainFrame" href="ClusterShell.Worker-module.html#__package__"
156 >ClusterShell.Worker.__package__</a><br /> <a target="mainFrame" href="ClusterShell-module.html#__package__"
157 >ClusterShell.__package__</a><br /> <a target="mainFrame" href="ClusterShell-module.html#__url__"
158 >ClusterShell.__url__</a><br /> <a target="mainFrame" href="ClusterShell-module.html#__version_info__"
159 >ClusterShell.__version_info__</a><br /> <div class="private">
160 <a target="mainFrame" href="ClusterShell-module.html#_n"
161 >ClusterShell._n</a><br /> </div>
162 <a target="mainFrame" href="clubak-module.html#WHENCOLOR_CHOICES"
163 >clubak.WHENCOLOR_CHOICES</a><br /> <a target="mainFrame" href="clubak-module.html#__package__"
164 >clubak.__package__</a><br /> <a target="mainFrame" href="clush-module.html#VERB_DEBUG"
165 >clush.VERB_DEBUG</a><br /> <a target="mainFrame" href="clush-module.html#VERB_QUIET"
166 >clush.VERB_QUIET</a><br /> <a target="mainFrame" href="clush-module.html#VERB_STD"
167 >clush.VERB_STD</a><br /> <a target="mainFrame" href="clush-module.html#VERB_VERB"
168 >clush.VERB_VERB</a><br /> <a target="mainFrame" href="clush-module.html#WHENCOLOR_CHOICES"
169 >clush.WHENCOLOR_CHOICES</a><br /> <a target="mainFrame" href="clush-module.html#__package__"
170 >clush.__package__</a><br /> <a target="mainFrame" href="nodeset-module.html#__package__"
171 >nodeset.__package__</a><br /><hr />
172 <span class="options">[<a href="javascript:void(0);" class="privatelink"
173 onclick="toggle_private();">hide&nbsp;private</a>]</span>
174
175 <script type="text/javascript">
176 <!--
177 // Private objects are initially displayed (because if
178 // javascript is turned off then we want them to be
179 // visible); but by default, we want to hide them. So hide
180 // them unless we have a cookie that says to show them.
181 checkCookie();
182 // -->
183 </script>
184 </body>
185 </html>
+0
-36
doc/epydoc/html/toc-nodeset-module.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>nodeset</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Module nodeset</h1>
13 <hr />
14 <h2 class="toc">Functions</h2>
15 <a target="mainFrame" href="nodeset-module.html#compute_nodeset"
16 >compute_nodeset</a><br /> <a target="mainFrame" href="nodeset-module.html#error_exit"
17 >error_exit</a><br /> <a target="mainFrame" href="nodeset-module.html#process_stdin"
18 >process_stdin</a><br /> <a target="mainFrame" href="nodeset-module.html#run_nodeset"
19 >run_nodeset</a><br /> <h2 class="toc">Variables</h2>
20 <a target="mainFrame" href="nodeset-module.html#__package__"
21 >__package__</a><br /><hr />
22 <span class="options">[<a href="javascript:void(0);" class="privatelink"
23 onclick="toggle_private();">hide&nbsp;private</a>]</span>
24
25 <script type="text/javascript">
26 <!--
27 // Private objects are initially displayed (because if
28 // javascript is turned off then we want them to be
29 // visible); but by default, we want to hide them. So hide
30 // them unless we have a cookie that says to show them.
31 checkCookie();
32 // -->
33 </script>
34 </body>
35 </html>
+0
-52
doc/epydoc/html/toc.html less more
0 <?xml version="1.0" encoding="ascii"?>
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>Table of Contents</title>
6 <link rel="stylesheet" href="epydoc.css" type="text/css" />
7 <script type="text/javascript" src="epydoc.js"></script>
8 </head>
9
10 <body bgcolor="white" text="black" link="blue" vlink="#204080"
11 alink="#204080">
12 <h1 class="toc">Table&nbsp;of&nbsp;Contents</h1>
13 <hr />
14 <a target="moduleFrame" href="toc-everything.html">Everything</a>
15 <br />
16 <h2 class="toc">Modules</h2>
17 <a target="moduleFrame" href="toc-ClusterShell-module.html"
18 onclick="setFrame('toc-ClusterShell-module.html','ClusterShell-module.html');" >ClusterShell</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Engine-module.html"
19 onclick="setFrame('toc-ClusterShell.Engine-module.html','ClusterShell.Engine-module.html');" >ClusterShell.Engine</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Engine.EPoll-module.html"
20 onclick="setFrame('toc-ClusterShell.Engine.EPoll-module.html','ClusterShell.Engine.EPoll-module.html');" >ClusterShell.Engine.EPoll</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Engine.Engine-module.html"
21 onclick="setFrame('toc-ClusterShell.Engine.Engine-module.html','ClusterShell.Engine.Engine-module.html');" >ClusterShell.Engine.Engine</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Engine.Factory-module.html"
22 onclick="setFrame('toc-ClusterShell.Engine.Factory-module.html','ClusterShell.Engine.Factory-module.html');" >ClusterShell.Engine.Factory</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Engine.Poll-module.html"
23 onclick="setFrame('toc-ClusterShell.Engine.Poll-module.html','ClusterShell.Engine.Poll-module.html');" >ClusterShell.Engine.Poll</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Event-module.html"
24 onclick="setFrame('toc-ClusterShell.Event-module.html','ClusterShell.Event-module.html');" >ClusterShell.Event</a><br /> <a target="moduleFrame" href="toc-ClusterShell.MsgTree-module.html"
25 onclick="setFrame('toc-ClusterShell.MsgTree-module.html','ClusterShell.MsgTree-module.html');" >ClusterShell.MsgTree</a><br /> <a target="moduleFrame" href="toc-ClusterShell.NodeSet-module.html"
26 onclick="setFrame('toc-ClusterShell.NodeSet-module.html','ClusterShell.NodeSet-module.html');" >ClusterShell.NodeSet</a><br /> <a target="moduleFrame" href="toc-ClusterShell.NodeUtils-module.html"
27 onclick="setFrame('toc-ClusterShell.NodeUtils-module.html','ClusterShell.NodeUtils-module.html');" >ClusterShell.NodeUtils</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Task-module.html"
28 onclick="setFrame('toc-ClusterShell.Task-module.html','ClusterShell.Task-module.html');" >ClusterShell.Task</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Worker-module.html"
29 onclick="setFrame('toc-ClusterShell.Worker-module.html','ClusterShell.Worker-module.html');" >ClusterShell.Worker</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Worker.EngineClient-module.html"
30 onclick="setFrame('toc-ClusterShell.Worker.EngineClient-module.html','ClusterShell.Worker.EngineClient-module.html');" >ClusterShell.Worker.EngineClient</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Worker.Pdsh-module.html"
31 onclick="setFrame('toc-ClusterShell.Worker.Pdsh-module.html','ClusterShell.Worker.Pdsh-module.html');" >ClusterShell.Worker.Pdsh</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Worker.Popen-module.html"
32 onclick="setFrame('toc-ClusterShell.Worker.Popen-module.html','ClusterShell.Worker.Popen-module.html');" >ClusterShell.Worker.Popen</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Worker.Ssh-module.html"
33 onclick="setFrame('toc-ClusterShell.Worker.Ssh-module.html','ClusterShell.Worker.Ssh-module.html');" >ClusterShell.Worker.Ssh</a><br /> <a target="moduleFrame" href="toc-ClusterShell.Worker.Worker-module.html"
34 onclick="setFrame('toc-ClusterShell.Worker.Worker-module.html','ClusterShell.Worker.Worker-module.html');" >ClusterShell.Worker.Worker</a><br /> <a target="moduleFrame" href="toc-clubak-module.html"
35 onclick="setFrame('toc-clubak-module.html','clubak-module.html');" >clubak</a><br /> <a target="moduleFrame" href="toc-clush-module.html"
36 onclick="setFrame('toc-clush-module.html','clush-module.html');" >clush</a><br /> <a target="moduleFrame" href="toc-nodeset-module.html"
37 onclick="setFrame('toc-nodeset-module.html','nodeset-module.html');" >nodeset</a><br /><hr />
38 <span class="options">[<a href="javascript:void(0);" class="privatelink"
39 onclick="toggle_private();">hide&nbsp;private</a>]</span>
40
41 <script type="text/javascript">
42 <!--
43 // Private objects are initially displayed (because if
44 // javascript is turned off then we want them to be
45 // visible); but by default, we want to hide them. So hide
46 // them unless we have a cookie that says to show them.
47 checkCookie();
48 // -->
49 </script>
50 </body>
51 </html>
doc/epydoc/html/uml_class_diagram_for_clubak_d.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clush_cl.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clush_cl_2.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clush_di.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clush_di_2.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clush_ga.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clush_ru.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clush_st.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clush_up.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_10.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_11.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_12.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_13.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_14.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_15.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_16.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_17.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_18.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_19.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_2.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_20.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_21.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_22.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_23.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_24.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_25.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_26.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_27.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_28.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_29.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_3.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_30.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_31.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_32.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_33.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_34.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_35.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_36.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_37.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_38.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_39.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_4.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_40.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_41.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_42.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_43.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_44.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_45.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_46.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_47.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_48.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_49.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_5.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_50.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_51.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_52.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_53.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_54.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_55.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_56.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_57.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_58.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_59.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_6.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_60.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_61.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_62.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_63.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_7.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_8.png less more
Binary diff not shown
doc/epydoc/html/uml_class_diagram_for_clusters_9.png less more
Binary diff not shown
+0
-4
doc/txt/README less more
0 Files found in this directory are text files in reStructuredText format (Markup Syntax of Docutils).
1 We use rst1man.py to convert them to roff man pages.
2
3 See: http://docutils.sourceforge.net/rst.html
+0
-91
doc/txt/clubak.txt less more
0 =========
1 clubak
2 =========
3
4 -----------------------------------------
5 format output from clush/pdsh-like output
6 -----------------------------------------
7
8 :Author: Stephane Thiell, CEA DAM <stephane.thiell@cea.fr>
9 :Date: 2010-07-06
10 :Copyright: CeCILL-C V1
11 :Version: 1.3
12 :Manual section: 1
13 :Manual group: ClusterShell User Manual
14
15
16 SYNOPSIS
17 ========
18
19 ``clubak`` [ OPTIONS ]
20
21 DESCRIPTION
22 ===========
23 ``clubak`` formats text from standard input containing lines of the form
24 "`node:output`". It is fully backward compatible with ``dshbak``\(1) but
25 provides additonal features. For instance, ``clubak`` always displays
26 its results sorted by node/nodeset.
27
28 You do not need to use ``clubak`` when using ``clush``\(1) as all output
29 formatting features are already included in. It is provided for other usages,
30 like post-processing results of the form "`node:output`".
31
32 Like ``clush``\(1), ``clubak`` uses the `ClusterShell.MsgTree` module of the
33 ClusterShell library (see ``pydoc ClusterShell.MsgTree``).
34
35 INVOCATION
36 ==========
37
38 ``clubak`` should be started with connected standard input.
39
40 OPTIONS
41 =======
42
43 --version show ``clubak`` version number and exit
44 -b, -c gather nodes with same output (-c is provided for ``dshbak``\(1)
45 compatibility)
46 -d, --debug output more messages for debugging purpose
47 -L disable header block and order output by nodes
48 -r, --regroup fold nodeset using node groups
49 -s GROUPSOURCE, --groupsource=GROUPSOURCE
50 optional ``groups.conf``\(5) group source to use
51 -G, --groupbase
52 do not display group source prefix (always `@groupname`)
53 -S SEPARATOR, --separator=SEPARATOR
54 node / line content separator string (default: `:`)
55 --color=WHENCOLOR whether to use ANSI colors to surround node or nodeset prefix/header with escape sequences to display them in color on the terminal. *WHENCOLOR* is ``never``, ``always`` or ``auto`` (which use color if standard output refers to a terminal). Color is set to [34m (blue foreground text) and cannot be modified.
56
57
58 EXIT STATUS
59 ===========
60
61 An exit status of zero indicates success of the ``clubak`` command.
62
63 EXAMPLES
64 ===========
65
66 1. ``clubak`` can be used to gather some recorded ``clush``\(1) results:
67
68 Record ``clush``\(1) results in a file:
69 | # clush -w node[1-7] uname -r >/tmp/clush_output
70 | # clush -w node[32-159] uname -r >>/tmp/clush_output
71 Display file gathered results (in line-mode):
72 | # clubak -bL </tmp/clush_output
73
74 2. Another example, iterate over `node*` text files in current directory and gather characters count for all of them:
75
76 | # find -name "node*" -exec wc -c {} \; | awk '{ gsub("./","",$2); print $2": "$1 }' | clubak -bL
77 | node[1,3]: 7
78 | node2: 9
79
80 SEE ALSO
81 ========
82
83 ``clush``\(1), ``nodeset``\(1), ``groups.conf``\(5).
84
85 BUG REPORTS
86 ===========
87
88 Use the following URL to submit a bug report or feedback:
89 http://sourceforge.net/apps/trac/clustershell/report
90
+0
-108
doc/txt/clush.conf.txt less more
0 ============
1 clush.conf
2 ============
3
4 ------------------------------
5 Configuration file for `clush`
6 ------------------------------
7
8 :Author: Stephane Thiell, CEA DAM <stephane.thiell@cea.fr>
9 :Date: 2010-06-15
10 :Copyright: CeCILL-C V1
11 :Version: 1.3
12 :Manual section: 5
13 :Manual group: ClusterShell User Manual
14
15
16 DESCRIPTION
17 ===========
18
19 ``clush``\(1) obtains configuration options from the following sources in the
20 following order:
21
22 1. command-line options
23 2. user configuration file (*~/.clush.conf*)
24 3. system-wide configuration file (*/etc/clustershell/clush.conf*)
25
26 For each parameter, the first obtained value will be used.
27
28 The configuration file has a format in the style of RFC 822 composed
29 of one main section:
30
31 Main
32 Program options definition
33
34
35 [Main]
36 ------
37 Configuration parameters of the ``Main`` section are described below.
38
39 fanout
40 Size of the sliding window of ssh connectors.
41 connect_timeout
42 Timeout in seconds to allow a connection to establish. This parameter is
43 passed to ssh. If set to *0*, no timeout occurs.
44 command_timeout
45 Timeout in seconds to allow a command to complete since the connection has
46 been established. This parameter is passed to ssh. In addition, the
47 ClusterShell library ensures that any commands complete in less than
48 ( connect_timeout + command_timeout ). If set to *0*, no timeout occurs.
49 history_size
50 Set the maximum number of history entries saved in the GNU readline history
51 list. Negative values imply unlimited history file size.
52 color
53 Whether to use ANSI colors to surround node or nodeset prefix/header with escape sequences to display them in color on the terminal. Valid arguments are ``never``, ``always`` or ``auto`` (which use color if standard output/error refer to a terminal). Colors are set to [34m (blue foreground text) for stdout and [31m (red foreground text) for stderr, and cannot be modified.
54 verbosity
55 Set the verbosity level: `0` (quiet), `1` (default), `2` (verbose) or more (debug).
56 ssh_user
57 Set the ssh user to use for remote connection (default is to not specify).
58 ssh_path
59 Set the ssh binary path to use for remote connection (default is
60 `/usr/bin/ssh`).
61 ssh_options
62 Set additional options to pass to the underlying ssh command.
63
64
65 EXAMPLES
66 ===========
67
68 Simple configuration file.
69
70 *clush.conf*
71 ------------
72
73 | [Main]
74 | fanout: 128
75 | connect_timeout: 15
76 | command_timeout: 0
77 | history_size: 100
78 | color: auto
79 |
80
81
82 FILES
83 =====
84
85 *~/.clush.conf*
86 This is the per-user configuration file.
87
88 */etc/clustershell/clush.conf*
89 System-wide configuration file.
90
91
92 HISTORY
93 =======
94
95 As of ClusterShell version 1.3, the ``External`` section has been removed
96 from *clush.conf*. External commands whose outputs were used by `clush``
97 (-a, -g, -X) are now handled by the library itself and defined in
98 ``groups.conf``\(5).
99
100
101 SEE ALSO
102 ========
103
104 ``clush``\(1), ``nodeset``\(1), ``groups.conf``\(5)
105
106 http://clustershell.sourceforge.net/
107
+0
-224
doc/txt/clush.txt less more
0 =========
1 clush
2 =========
3
4 -----------------------------------
5 execute shell commands on a cluster
6 -----------------------------------
7
8 :Author: Stephane Thiell, CEA DAM <stephane.thiell@cea.fr>
9 :Date: 2010-06-15
10 :Copyright: CeCILL-C V1
11 :Version: 1.3
12 :Manual section: 1
13 :Manual group: ClusterShell User Manual
14
15
16 SYNOPSIS
17 ========
18
19 ``clush`` ``-a`` | ``-g`` *group* | ``-w`` *nodes* [ OPTIONS ]
20
21 ``clush`` ``-a`` | ``-g`` *group* | ``-w`` *nodes* [ OPTIONS ] *command*
22
23 ``clush`` ``-a`` | ``-g`` *group* | ``-w`` *nodes* [ OPTIONS ] --copy
24 *file* [ --dest *dest_path* ]
25
26 DESCRIPTION
27 ===========
28 ``clush`` is a program for executing commands in parallel on a cluster and for
29 gathering their results. ``clush`` executes commands interactively or can be
30 used within shell scripts and other applications. It is a partial front-end
31 to the ClusterShell library that ensures a light, unified and robust command
32 execution framework. ``clush`` currently makes use of the Ssh worker of
33 ClusterShell that only requires ``ssh``\(1) (OpenSSH SSH client).
34
35
36 INVOCATION
37 ==========
38
39 ``clush`` can be started non-interactively to run a shell *command*, or can
40 be invoked as an interactive shell. To start a ``clush`` interactive session,
41 invoke the ``clush`` command without providing *command*.
42
43 Non-interactive mode
44 When ``clush`` is started non-interactively, the *command* is executed on
45 the specified remote hosts in parallel. If option ``-b`` or ``--dshbak``
46 is specified, ``clush`` waits for command completion and then displays
47 gathered output results.
48
49 Unless option ``--nostdin`` is specified, ``clush`` detects when its
50 standard input is connected to a terminal (as determined by ``isatty``\(3)).
51 If actually connected to a terminal, ``clush`` listens to standard input
52 when commands are running, waiting for an `Enter` key press. Doing so will
53 display the status of current nodes. If standard input is not connected
54 to a terminal, and unless option ``--nostdin`` is specified, ``clush``
55 binds the standard input of the remote commands to its own standard input,
56 allowing scripting methods like:
57
58 | # echo foo | clush -w node[40-42] -b cat
59 | ---------------
60 | node[40-42]
61 | ---------------
62 | foo
63
64 Please see some other great examples in the EXAMPLES section below.
65
66 Interactive session
67 If a *command* is not specified, ``clush`` runs interactively. In this mode,
68 ``clush`` uses the GNU ``readline`` library to read command lines. Readline
69 provides commands for searching through the command history for lines
70 containing a specified string. For instance, type Control-R to search in the
71 history for the next entry matching the search string typed so far.
72 ``clush`` also recognizes special single-character prefixes that allows the
73 user to see and modify the current nodeset (the nodes where the commands are
74 executed).
75
76 Single-character interactive commands are:
77 clush> ?
78 show current nodeset
79 clush> =<NODESET>
80 set current nodeset
81 clush> +<NODESET>
82 add nodes to current nodeset
83 clush> -<NODESET>
84 remove nodes from current nodeset
85 clush> !COMMAND
86 execute COMMAND on the local system
87 clush> =
88 toggle the ouput format (gathered or standard mode)
89
90 To leave an interactive session, type ``quit`` or Control-D.
91
92 File copying mode
93 When ``clush`` is started with the ``-c`` or ``--copy`` option, it attempts
94 to copy *file* to the provided target cluster nodes. If the ``--dest``
95 option is specified, it will put the copied file there.
96
97
98 OPTIONS
99 =======
100
101 --version show ``clush`` version number and exit
102 --nostdin do not watch for possible input from stdin
103
104 Selecting target nodes:
105 -w NODES nodes where to run the command
106 -x EXCLUDE exclude nodes from the node list
107 -a, --all run command on all nodes
108 -g GROUP, --group=GROUP
109 run command on a group of nodes
110 -X EXGROUP exclude nodes from this group
111
112 Output behaviour:
113 -q, --quiet be quiet, print essential output only
114 -v, --verbose be verbose, print informative messages
115 -d, --debug output more messages for debugging purpose
116 -G, --groupbase do not display group source prefix
117 -L disable header block and order output by nodes (with -b or -B)
118 -N disable labeling of command line
119 -S return the largest of command return codes
120 -b, --dshbak display gathered results in a dshbak-like way
121 -B like -b but including standard error
122 -r, --regroup fold nodeset using node groups
123 -s GROUPSOURCE, --groupsource=GROUPSOURCE
124 optional ``groups.conf``\(5) group source to use
125 --color=WHENCOLOR whether to use ANSI colors to surround node or nodeset prefix/header with escape sequences to display them in color on the terminal. *WHENCOLOR* is ``never``, ``always`` or ``auto`` (which use color if standard output/error refer to a terminal). Colors are set to [34m (blue foreground text) for stdout and [31m (red foreground text) for stderr, and cannot be modified.
126
127 File copying:
128 -c SOURCE_PATH, --copy=SOURCE_PATH
129 copy local file or directory to the nodes
130 --dest=DEST_PATH destination file or directory on the nodes
131 (optional: use the source directory path
132 when not specified)
133
134 -p preserve modification times and modes
135
136 Ssh options:
137 -f FANOUT, --fanout=FANOUT
138 use a specified fanout
139 -l USER, --user=USER
140 execute remote command as user
141 -o OPTIONS, --options=OPTIONS
142 can be used to give ssh options, eg. ``-o "-oPort=2022"``
143 -t CONNECT_TIMEOUT, --connect_timeout=CONNECT_TIMEOUT
144 limit time to connect to a node
145 -u COMMAND_TIMEOUT, --command_timeout=COMMAND_TIMEOUT
146 limit time for command to run on the node
147
148 For a short explanation of these options, see ``-h, --help``.
149
150
151 EXIT STATUS
152 ===========
153
154 By default, an exit status of zero indicates success of the ``clush`` command
155 but gives no information about the remote commands exit status. However, when
156 the ``-S`` option is specified, the exit status of ``clush`` is the largest
157 value of the remote commands return codes.
158
159 For failed remote commands whose exit status is non-zero, ``clush`` displays
160 messages similar to:
161
162 :clush\: node[40-42]\: exited with exit code 1:
163
164
165 EXAMPLES
166 ===========
167
168 :# clush -w node[3-5,62] uname -r:
169 Run command `uname -r` on nodes: node3, node4, node5 and node62
170
171 :# clush -w node[3-5,62] -b uname -r:
172 Run command `uname -r` on nodes[3-5,62] and display gathered output results (``dshbak``-like).
173
174 :# ssh node32 find /etc/yum.repos.d -type f | clush -w node[40-42] -b xargs ls -l:
175 Search some files on node32 in /etc/yum.repos.d and use clush to list the matching ones on node[40-42], and use ``-b`` to display gathered results.
176
177 All/NodeGroups examples
178 -----------------------
179
180 :# clush -a uname -r:
181 Run command `uname -r` on all cluster nodes, see ``clush.conf``\(5) to setup all cluster nodes (`nodes_all:` field).
182
183 :# clush -a -x node[5,7] uname -r:
184 Run command `uname -r` on all cluster nodes except on nodes node5 and node7.
185
186 :# clush -g oss modprobe lustre:
187 Run command `modprobe lustre` on nodes from node group named `oss`, see ``clush.conf``\(5) to setup node groups (`nodes_group:` field).
188
189 Copy files
190 ----------
191 :# clush -w node[3-5,62] --copy /etc/motd:
192 Copy local file `/etc/motd` to remote nodes node[3-5,62].
193
194 :# clush -w node[3-5,62] --copy /etc/motd --dest /tmp/motd2:
195 Copy local file `/etc/motd` to remote nodes node[3-5,62] at path `/tmp/motd2`.
196
197 :# clush -w node[3-5,62] -c /usr/share/doc/clustershell:
198 Recursively copy local directory `/usr/share/doc/clustershell` to the same
199 path on remote nodes node[3-5,62].
200
201 FILES
202 =====
203
204 */etc/clustershell/clush.conf*
205 System-wide ``clush`` configuration file.
206
207 *~/.clush.conf*
208 This is the per-user ``clush`` configuration file.
209
210 *~/.clush_history*
211 File in which interactive ``clush`` command history is saved.
212
213 SEE ALSO
214 ========
215
216 ``clubak``\(1), ``nodeset``\(1), ``readline``\(3), ``clush.conf``\(5), ``groups.conf``\(5).
217
218 BUG REPORTS
219 ===========
220
221 Use the following URL to submit a bug report or feedback:
222 http://sourceforge.net/apps/trac/clustershell/report
223
+0
-113
doc/txt/groups.conf.txt less more
0 =============
1 groups.conf
2 =============
3
4 --------------------------------------------------------
5 Configuration file for ClusterShell external node groups
6 --------------------------------------------------------
7
8 :Author: Stephane Thiell, CEA DAM <stephane.thiell@cea.fr>
9 :Date: 2010-06-16
10 :Copyright: CeCILL-C V1
11 :Version: 1.3
12 :Manual section: 5
13 :Manual group: ClusterShell User Manual
14
15
16 DESCRIPTION
17 ===========
18
19 The ClusterShell library obtains node groups configuration options from the
20 system-wide configuration file */etc/clustershell/groups.conf*.
21
22 The configuration file has a format in the style of RFC 822 composed
23 of several sections which may be present in any order. Sections are:
24
25 Main
26 General options definition
27 *Group_source*
28 External commands definition for group source *Group_source* (map, all, list and reverse)
29
30
31 [Main]
32 ------
33 Configuration parameters of the ``Main`` section are described below.
34
35 default
36 Specify the default group source used by the NodeSet parser when the
37 user does not specify explicitly the group source (eg. "@io").
38
39 *Group_source*
40 -----------------
41 Configuration parameters of each group source section are described below.
42
43 map
44 Specify the external shell command used to resolve a group name into a
45 nodeset, list of nodes or list of nodeset (separated by space characters or
46 by carriage returns). The variable *$GROUP* is replaced before executing the
47 command.
48 all
49 Optional external shell command that should return a nodeset, list of
50 nodes or list of nodeset of all nodes for this group source. If not
51 specified, the library will try to resolve all nodes by using the ``list``
52 external command in the same group source followed by ``map`` for each group.
53 list
54 Optional external shell command that should return the list of all groups
55 for this group source (separated by space characters or by carriage
56 returns).
57 reverse
58 Optional external shell command used to find the group(s) of a single
59 node. The variable $NODE is previously replaced. If this upcall is not
60 specified, the reverse operation is computed in memory by the library from
61 the *list* and *map* external calls. Also, if the number of nodes to
62 reverse is greater than the number of available groups, the *reverse*
63 external command is avoided automatically.
64
65 Each external command might return a non-zero return code when the operation
66 is not doable. But if the call return zero, for instance, for a non-existing
67 group, the user will not receive any error when trying to resolve such unknown
68 group. The desired behaviour is up to the system administrator.
69
70
71 RESOURCE USAGE
72 ==============
73
74 All external command results are cached in memory to avoid multiple calls.
75
76
77 EXAMPLES
78 ========
79
80 Simple configuration file for local groups and slurm partitions binding.
81
82 *groups.conf*
83 -------------
84
85 | [Main]
86 | default: local
87 |
88 | [local]
89 | map: awk -F: '/^$GROUP:/ {print $2}' /etc/clustershell/groups
90 | list: awk -F: '/^\w/ {print $1}' /etc/clustershell/groups
91 |
92 | [slurm]
93 | map: sinfo -h -o "%N" -p $GROUP
94 | all: sinfo -h -o "%N"
95 | list: sinfo -h -o "%P"
96 | reverse: sinfo -h -N -o "%P" -n $NODE
97
98
99
100 FILES
101 =====
102
103 */etc/clustershell/groups.conf*
104 System-wide external node groups configuration file.
105
106 SEE ALSO
107 ========
108
109 ``clush``\(1), ``clubak``\(1), ``nodeset``\(1)
110
111 http://clustershell.sourceforge.net/
112
+0
-198
doc/txt/nodeset.txt less more
0 =========
1 nodeset
2 =========
3
4 -----------------------------------
5 compute advanced nodeset operations
6 -----------------------------------
7
8 :Author: Stephane Thiell, CEA DAM <stephane.thiell@cea.fr>
9 :Date: 2010-05-25
10 :Copyright: CeCILL-C V1
11 :Version: 1.3
12 :Manual section: 1
13 :Manual group: ClusterShell User Manual
14
15
16 SYNOPSIS
17 ========
18
19 ``nodeset`` [COMMAND] [OPTIONS] [nodeset1 [-ixX] nodeset2|...]
20
21
22 DESCRIPTION
23 ===========
24 The ``nodeset`` command is an utility command provided with the ClusterShell
25 library which implements some features of the NodeSet and RangeSet classes.
26 It provides easy manipulation of indexed cluster nodes and node groups.
27
28 OPTIONS
29 =======
30
31 Commands:
32 --count, -c
33 Return the number of nodes in nodesets.
34 --expand, -e
35 Expand nodesets to separate nodes.
36 --fold, -f
37 Compact/fold nodesets (or separate nodes) into one nodeset.
38 --list, -l
39 List node groups (see --groupsource).
40 --regroup, -r
41 Fold nodes using node groups (see --groupsource).
42 --groupsources
43 List all configured group sources (see ``groups.conf``\(5)).
44
45 Options:
46 --all, -a
47 Call external node groups support to display all nodes.
48 --autostep=NUMBER
49 Specify auto step threshold number when folding nodesets.
50 If not specified, auto step is disabled.
51 Example: autostep=4, "node2 node4 node6" folds in node[2,4,6] but autostep=3, "node2 node4 node6" folds in node[2-6/2]
52 --help, -h
53 This help page.
54 --quiet, -q
55 Quiet mode, hide any parse error messages (on stderr).
56 --rangeset, -R
57 Switch to RangeSet instead of NodeSet. Useful when working on
58 numerical cluster ranges, eg. 1,5,18-31.
59 --groupsource=GROUPSOURCE, -s GROUPSOURCE
60 Specify group source (section to use in ``groups.conf``\(5)).
61 --groupbase, -G
62 Do not display group source prefix (always `@groupname`).
63 --separator=STRING, -S STRING
64 Specify separator string for expanding nodesets (default: " ").
65 --version, -v
66 Show ClusterShell version and exit.
67 Operations (default is union):
68 --exclude=NODESET, -x NODESET
69 Exclude provided node or nodeset.
70 --intersection=NODESET, -i NODESET
71 Calculate nodesets intersection. This means that only nodes that
72 are in the two provided nodesets are used.
73 --xor=NODESET, -X NODESET
74 Calculate symmetric difference (XOR) between two nodesets. This
75 This means that nodes present in only one of the nodesets are
76 used.
77
78
79 For a short explanation of these options, see ``-h, --help``.
80
81 EXTENDED PATTERNS
82 =================
83
84 The ``nodeset`` command benefits from ClusterShell 1.3 NodeSet basic
85 arithmetic addition. This feature extends recognized string patterns by
86 supporting operators matching all Operations seen previously. String
87 patterns are read from left to right, by proceeding any character
88 operators accordinately.
89
90 Supported character operators
91 ``,``
92 indicates that the *union* of both left and right nodeset should be
93 computed before continuing
94 ``!``
95 indicates the *difference* operation
96 ``&``
97 indicates the *intersection* operation
98 ``^``
99 indicates the *symmetric difference* (XOR) operation
100
101 Care should be taken to escape these characters as needed when the shell
102 does not interpret them literally.
103
104 Examples of use of extended patterns
105 :$ nodeset -f node[0-7],node[8-10]:
106
107 | node[0-10]
108
109 :$ nodeset -f node[0-10]\!node[8-10]:
110
111 | node[0-7]
112
113 :$ nodeset -f node[0-10]\&node[5-13]:
114
115 | node[5-10]
116
117 :$ nodeset -f node[0-10]^node[5-13]:
118
119 | node[0-4,11-13]
120
121 Example of advanced usage
122 :$ nodeset -f @gpu^@slurm\:bigmem!@chassis[1-9/2]:
123
124 This computes a folded nodeset containing nodes found in group @gpu and @slurm:bigmem, but not in both, minus the nodes found in odd chassis groups from 1 to 9.
125
126
127 EXIT STATUS
128 ===========
129
130 An exit status of zero indicates success of the ``nodeset`` command. A non-zero
131 exit status indicates failure.
132
133 EXAMPLES
134 ===========
135
136 Getting the node count
137 :$ nodeset -c node[0-7,32-159]:
138
139 | 136
140
141 :$ nodeset -c node[0-7,32-159] node[160-163]:
142
143 | 140
144
145 Folding nodesets
146 :$ nodeset -f node[0-7,32-159] node[160-163]:
147
148 | node[0-7,32-163]
149
150 Expanding nodesets
151 :$ nodeset -e node[160-163]:
152
153 | node160 node161 node162 node163
154
155 Excluding nodes from nodeset
156 :$ nodeset -f node[32-159] -x node33:
157
158 | node[32,34-159]
159
160 Computing nodesets intersection
161 :$ nodeset -f node[32-159] -i node[0-7,20-21,32,156-159]:
162
163 | node[32,156-159]
164
165 Computing nodesets symmetric difference (xor)
166 :$ nodeset -f node[33-159] --xor node[32-33,156-159]:
167
168 | node[32,34-155]
169
170
171 HISTORY
172 =======
173
174 Command syntax has been changed since ``nodeset`` command available with ClusterShell v1.1. Operations, like *--intersection* or *-x*, are now specified between nodesets in the command line.
175
176 ClusterShell v1.1:
177 :$ nodeset -f -x node[3,5-6,9] node[1-9]:
178
179 | node[1-2,4,7-8]
180
181 ClusterShell v1.2+:
182 :$ nodeset -f node[1-9] -x node[3,5-6,9]:
183
184 | node[1-2,4,7-8]
185
186
187 SEE ALSO
188 ========
189
190 ``clush``\(1), ``clubak``\(1), ``groups.conf``\(5).
191
192 BUG REPORTS
193 ===========
194
195 Use the following URL to submit a bug report or feedback:
196 http://sourceforge.net/apps/trac/clustershell/report
197
lib/ClusterShell/Engine/EPoll.pyc less more
Binary diff not shown
lib/ClusterShell/Engine/Engine.pyc less more
Binary diff not shown
lib/ClusterShell/Engine/Factory.pyc less more
Binary diff not shown
lib/ClusterShell/Engine/Poll.pyc less more
Binary diff not shown
lib/ClusterShell/Engine/__init__.pyc less more
Binary diff not shown
lib/ClusterShell/Event.pyc less more
Binary diff not shown
lib/ClusterShell/MsgTree.pyc less more
Binary diff not shown
lib/ClusterShell/NodeSet.pyc less more
Binary diff not shown
lib/ClusterShell/NodeUtils.pyc less more
Binary diff not shown
2929 # The fact that you are presently reading this means that you have had
3030 # knowledge of the CeCILL-C license and that you accept its terms.
3131 #
32 # $Id: Task.py 295 2010-07-21 19:55:15Z st-cea $
32 # $Id: Task.py 389 2010-10-20 20:33:38Z st-cea $
3333
3434 """
3535 ClusterShell Task module.
430430 pairs can be passed to the engine and/or workers.
431431 Users may store their own task-specific info key, value pairs
432432 using this method and retrieve them with info().
433
434 The following example changes the fanout value to 128:
435 >>> task.set_info('fanout', 128)
436
437 The following example enables debug messages:
438 >>> task.set_info('debug', True)
433439
434440 Task info_keys are:
435441 - "debug": Boolean value indicating whether to enable library
459465
460466 def shell(self, command, **kwargs):
461467 """
462 Schedule a shell command for local or distant execution.
468 Schedule a shell command for local or distant parallel
469 execution. This key method in the ClusterShell library creates
470 a local or remote Worker (depending on the presence of the
471 nodes parameter) and immediately schedule it for execution in
472 task runloop. So, if the task is already running (ie. called
473 from an event handler), the command is started immediately,
474 assuming the fanout constraint is met. If the task is not
475 running, the command is not started but scheduled for late
476 execution. See resume() to start task runloop.
477
478 The following optional parameters are passed to the underlying
479 local or remote Worker constructor:
480 - handler: EventHandler instance to notify (on event) --
481 default is no handler (None)
482 - timeout: command timeout delay expressed in second using
483 a floating point value -- default is unlimited (None)
484 - autoclose: if set to True, the underlying Worker is
485 automatically aborted as soon as all other non-autoclosing
486 task objects (workers, ports, timers) have finished --
487 default is False
488 - stderr: separate stdout/stderr if set to True -- default
489 is False.
463490
464491 Local usage::
465492 task.shell(command [, key=key] [, handler=handler]
470497 task.shell(command, nodes=nodeset [, handler=handler]
471498 [, timeout=secs], [, autoclose=enable_autoclose]
472499 [, strderr=enable_stderr])
500
501 Example:
502 >>> task = task_self()
503 >>> task.shell("/bin/date", nodes="node[1-2345]")
504 >>> task.resume()
473505 """
474506
475507 handler = kwargs.get("handler", None)
547579 self._add_port(port)
548580 return port
549581
550 @tasksyncmethod()
551582 def timer(self, fire, handler, interval=-1.0, autoclose=False):
552583 """
553 Create task's timer.
584 Create a timer bound to this task that fires at a preset time
585 in the future by invoking the ev_timer() method of `handler'
586 (provided EventHandler object). Timers can fire either only
587 once or repeatedly at fixed time intervals. Repeating timers
588 can also have their next firing time manually adjusted.
589
590 The mandatory parameter `fire' sets the firing delay in seconds.
591
592 The optional parameter `interval' sets the firing interval of
593 the timer. If not specified, the timer fires once and then is
594 automatically invalidated.
595
596 Time values are expressed in second using floating point
597 values. Precision is implementation (and system) dependent.
598
599 The optional parameter `autoclose', if set to True, creates
600 an "autoclosing" timer: it will be automatically invalidated
601 as soon as all other non-autoclosing task's objects (workers,
602 ports, timers) have finished. Default value is False, which
603 means the timer will retain task's runloop until it is
604 invalidated.
605
606 Return a new EngineTimer instance.
607
608 See ClusterShell.Engine.Engine.EngineTimer for more details.
554609 """
555610 assert fire >= 0.0, \
556611 "timer's relative fire time must be a positive floating number"
557612
558613 timer = EngineTimer(fire, interval, autoclose, handler)
614 # The following method may be sent through msg port (async
615 # call) if called from another task.
616 self._add_timer(timer)
617 # always return new timer (sync)
618 return timer
619
620 @tasksyncmethod()
621 def _add_timer(self, timer):
622 """Add a timer to task engine (thread-safe)."""
559623 self._engine.add_timer(timer)
560 return timer
561624
562625 @tasksyncmethod()
563626 def schedule(self, worker):
564627 """
565 Schedule a worker for execution. Only useful for manually
566 instantiated workers.
628 Schedule a worker for execution, ie. add worker in task running
629 loop. Worker will start processing immediately if the task is
630 running (eg. called from an event handler) or as soon as the
631 task is started otherwise. Only useful for manually instantiated
632 workers, for example:
633 >>> task = task_self()
634 >>> worker = WorkerSsh("node[2-3]", None, 10, command="/bin/ls")
635 >>> task.schedule(worker)
636 >>> task.resume()
567637 """
568638 assert self in Task._tasks.values(), "deleted task"
569639
lib/ClusterShell/Task.pyc less more
Binary diff not shown
lib/ClusterShell/Worker/EngineClient.pyc less more
Binary diff not shown
2929 # The fact that you are presently reading this means that you have had
3030 # knowledge of the CeCILL-C license and that you accept its terms.
3131 #
32 # $Id: Pdsh.py 292 2010-07-15 22:43:46Z st-cea $
32 # $Id: Pdsh.py 385 2010-10-19 21:36:48Z st-cea $
3333
3434 """
3535 WorkerPdsh
215215 # close
216216 self.popen.stdin.close()
217217 self.popen.stdout.close()
218 if self.popen.stderr:
219 self.popen.stderr.close()
218220
219221 if timeout:
220222 for node in (self.nodes - self.closed_nodes):
lib/ClusterShell/Worker/Pdsh.pyc less more
Binary diff not shown
2929 # The fact that you are presently reading this means that you have had
3030 # knowledge of the CeCILL-C license and that you accept its terms.
3131 #
32 # $Id: Popen.py 292 2010-07-15 22:43:46Z st-cea $
32 # $Id: Popen.py 385 2010-10-19 21:36:48Z st-cea $
3333
3434 """
3535 WorkerPopen
122122
123123 self.popen.stdin.close()
124124 self.popen.stdout.close()
125 if self.popen.stderr:
126 self.popen.stderr.close()
125127
126128 if rc >= 0:
127129 self._on_rc(rc)
lib/ClusterShell/Worker/Popen.pyc less more
Binary diff not shown
00 #
1 # Copyright CEA/DAM/DIF (2008, 2009)
1 # Copyright CEA/DAM/DIF (2008, 2009, 2010)
22 # Contributor: Stephane THIELL <stephane.thiell@cea.fr>
33 #
44 # This file is part of the ClusterShell library.
2929 # The fact that you are presently reading this means that you have had
3030 # knowledge of the CeCILL-C license and that you accept its terms.
3131 #
32 # $Id: Ssh.py 292 2010-07-15 22:43:46Z st-cea $
32 # $Id: Ssh.py 385 2010-10-19 21:36:48Z st-cea $
3333
3434 """
3535 ClusterShell Ssh/Scp support
7272
7373 user = task.info("ssh_user")
7474 if user:
75 cmd_l.append("-l %s" % user)
75 cmd_l.append("-l")
76 cmd_l.append(user)
7677
7778 connect_timeout = task.info("connect_timeout", 0)
7879 if connect_timeout > 0:
125126
126127 self.popen.stdin.close()
127128 self.popen.stdout.close()
129 if self.popen.stderr:
130 self.popen.stderr.close()
128131
129132 if rc >= 0:
130133 self.worker._on_node_rc(self.key, rc)
203206
204207 user = task.info("scp_user") or task.info("ssh_user")
205208 if user:
206 cmd_l.append("-l %s" % user)
209 cmd_l.append("-l")
210 cmd_l.append(user)
207211
208212 connect_timeout = task.info("connect_timeout", 0)
209213 if connect_timeout > 0:
lib/ClusterShell/Worker/Ssh.pyc less more
Binary diff not shown
2929 # The fact that you are presently reading this means that you have had
3030 # knowledge of the CeCILL-C license and that you accept its terms.
3131 #
32 # $Id: Worker.py 289 2010-07-12 21:30:00Z st-cea $
32 # $Id: Worker.py 323 2010-08-29 21:00:18Z st-cea $
3333
3434 """
3535 ClusterShell worker interface.
132132
133133 self._last_node = None
134134 self._last_msg = None
135 self._last_errmsg = None
135136 self._last_rc = 0
136137 self.started = False
137138
323324 Worker.__init__(self, handler)
324325 EngineClient.__init__(self, self, stderr, timeout, autoclose)
325326
326 self.last_msg = None
327 self._last_msg = None
328 self._last_errmsg = None
329
327330 if key is None: # allow key=0
328331 self.key = self
329332 else:
445448 """
446449 Read last msg, useful in an EventHandler.
447450 """
448 return self.last_msg
451 return self._last_msg
449452
450453 def last_error(self):
451454 """
452455 Get last error message from event handler.
453456 """
454 return self.last_errmsg
457 return self._last_errmsg
455458
456459 def _on_msgline(self, msg):
457460 """
458461 Add a message.
459462 """
460463 # add last msg to local buffer
461 self.last_msg = msg
464 self._last_msg = msg
462465
463466 # update task
464467 self.task._msg_add((self, self.key), msg)
470473 Add a message.
471474 """
472475 # add last msg to local buffer
473 self.last_errmsg = msg
476 self._last_errmsg = msg
474477
475478 # update task
476479 self.task._errmsg_add((self, self.key), msg)
lib/ClusterShell/Worker/Worker.pyc less more
Binary diff not shown
lib/ClusterShell/Worker/__init__.pyc less more
Binary diff not shown
2929 # The fact that you are presently reading this means that you have had
3030 # knowledge of the CeCILL-C license and that you accept its terms.
3131 #
32 # $Id: __init__.py 304 2010-07-27 19:47:09Z st-cea $
32 # $Id: __init__.py 390 2010-10-20 21:07:44Z st-cea $
3333
3434
3535 """ClusterShell Python Library
3636
37 ClusterShell is a python event-based python library to execute commands
38 on local or distant cluster nodes in parallel depending on the selected
39 engine and worker mechanisms.
37 Event-based Python library to execute commands on local or distant
38 cluster nodes in parallel depending on the selected engine and worker
39 mechanisms. It also provides advanced NodeSet and NodeGroups handling
40 methods to ease and improve administration of large compute clusters
41 or server farms.
4042
4143 Please see first:
4244 - ClusterShell.NodeSet
4345 - ClusterShell.Task
4446 """
4547
46 __version__ = '1.3'
48 __version__ = '1.3.3'
4749 __version_info__ = tuple([ int(_n) for _n in __version__.split('.')])
48 __date__ = '2010/07/27'
50 __date__ = '2010/09/20'
4951 __author__ = 'Stephane Thiell <stephane.thiell@cea.fr>'
5052 __url__ = 'http://clustershell.sourceforge.net/'
5153
lib/ClusterShell/__init__.pyc less more
Binary diff not shown
+0
-55
mkrpm.sh less more
0 #!/bin/sh
1 # $Id: mkrpm.sh 257 2010-05-19 21:27:39Z st-cea $
2
3 if [ -z "$2" ]; then
4 echo "usage: $0 <version> <el5|fc11>"
5 exit 1
6 fi
7
8
9 VERS=$1
10 DIST=".$2"
11
12 PKGNAME=clustershell-$VERS
13
14 TMPDIR=/tmp/clustershell-build/$PKGNAME
15 rm -vrf /tmp/clustershell-build
16
17 mkdir -vp "$TMPDIR/lib/ClusterShell"
18 mkdir -vp "$TMPDIR/lib/ClusterShell/Engine"
19 mkdir -vp "$TMPDIR/lib/ClusterShell/Worker"
20 mkdir -vp "$TMPDIR/scripts"
21 mkdir -vp "$TMPDIR/conf"
22 mkdir -vp "$TMPDIR"/doc/man/{man1,man5}
23 mkdir -vp "$TMPDIR"/doc/extras/vim/{ftdetect,syntax}
24 mkdir -vp "$TMPDIR/doc/epydoc"
25
26
27 sed -e "s/^Version: %{version}$/Version: $VERS/" <clustershell.spec.in >"$TMPDIR/clustershell.spec"
28
29 cp -v setup.cfg setup.py "$TMPDIR/"
30 cp -v README ChangeLog Licence_CeCILL-C_V1-en.txt Licence_CeCILL-C_V1-fr.txt "$TMPDIR/"
31 cp -v lib/ClusterShell/*.py "$TMPDIR/lib/ClusterShell"
32 cp -v lib/ClusterShell/Engine/*.py "$TMPDIR/lib/ClusterShell/Engine/"
33 cp -v lib/ClusterShell/Worker/*.py "$TMPDIR/lib/ClusterShell/Worker/"
34 cp -v scripts/clubak.py "$TMPDIR/scripts/"
35 cp -v scripts/clush.py "$TMPDIR/scripts/"
36 cp -v scripts/nodeset.py "$TMPDIR/scripts/"
37 cp -v conf/clush.conf "$TMPDIR/conf/"
38 cp -v conf/groups.conf "$TMPDIR/conf/"
39 cp -v doc/nodeset.py "$TMPDIR/scripts/"
40 cp -v doc/man/man1/clubak.1 "$TMPDIR/doc/man/man1/"
41 cp -v doc/man/man1/clush.1 "$TMPDIR/doc/man/man1/"
42 cp -v doc/man/man1/nodeset.1 "$TMPDIR/doc/man/man1/"
43 cp -v doc/man/man5/clush.conf.5 "$TMPDIR/doc/man/man5/"
44 cp -v doc/man/man5/groups.conf.5 "$TMPDIR/doc/man/man5/"
45 cp -v doc/extras/vim/ftdetect/clustershell.vim "$TMPDIR/doc/extras/vim/ftdetect/"
46 cp -v doc/extras/vim/syntax/clushconf.vim "$TMPDIR/doc/extras/vim/syntax/"
47 cp -v doc/extras/vim/syntax/groupsconf.vim "$TMPDIR/doc/extras/vim/syntax/"
48 cp -rv doc/epydoc/html "$TMPDIR/doc/epydoc/"
49
50 cd "$TMPDIR/.."
51
52 tar -czf $PKGNAME.tar.gz $PKGNAME
53 rpmbuild -ta --define "dist $DIST" $PKGNAME.tar.gz
54
scripts/clubak.pyc less more
Binary diff not shown
3030 # The fact that you are presently reading this means that you have had
3131 # knowledge of the CeCILL-C license and that you accept its terms.
3232 #
33 # $Id: clush.py 302 2010-07-23 19:59:20Z st-cea $
33 # $Id: clush.py 387 2010-10-20 19:00:47Z st-cea $
3434
3535 """
3636 Utility program to run commands on a cluster using the ClusterShell
5656 import signal
5757 import ConfigParser
5858
59 from ClusterShell.MsgTree import MsgTree
5960 from ClusterShell.NodeUtils import GroupResolverConfigError
6061 from ClusterShell.NodeUtils import GroupResolverSourceError
6162 from ClusterShell.NodeUtils import GroupSourceException
192193 def ev_close(self, worker):
193194 self.master_worker.set_write_eof()
194195
195 class DirectOutputHandler(EventHandler):
196 class OutputHandler(EventHandler):
197 """Base class for clush output handlers."""
198 def update_prompt(self, worker):
199 """
200 If needed, notify main thread to update its prompt by sending
201 a SIGUSR1 signal. We use task-specific user-defined variable
202 to record current states (prefixed by USER_).
203 """
204 worker.task.set_default("USER_running", False)
205 if worker.task.default("USER_handle_SIGUSR1"):
206 os.kill(os.getpid(), signal.SIGUSR1)
207
208 class DirectOutputHandler(OutputHandler):
196209 """Direct output event handler class."""
197210
198211 def __init__(self, display):
221234 NodeSet.fromlist(worker.iter_keys_timeout())
222235
223236 def ev_close(self, worker):
224 # If needed, notify main thread to update its prompt by sending
225 # a SIGUSR1 signal. We use task-specific user-defined variable
226 # to record current states (prefixed by USER_).
227 worker.task.set_default("USER_running", False)
228 if worker.task.default("USER_handle_SIGUSR1"):
229 os.kill(os.getpid(), signal.SIGUSR1)
230
231 class GatherOutputHandler(EventHandler):
237 self.update_prompt(worker)
238
239 class GatherOutputHandler(OutputHandler):
232240 """Gathered output event handler class."""
233241
234 def __init__(self, display, runtimer, nodes):
242 def __init__(self, display, runtimer):
235243 self._display = display
236244 self._runtimer = runtimer
237 # needed for -L enhancement:
238 self._nodes = NodeSet(nodes)
239 self._nodemap_base = dict.fromkeys(self._nodes, 0)
240 self._nodemap = self._nodemap_base.copy()
241 self._nodes_cnt = 0
242
243 def ev_read(self, worker):
244 # Implementation of -bL "per line live gathering":
245 if not self._display.line_mode:
246 return
247 result = worker.last_read()
248 # keep counter and nodemap up-to-date
249 node = result[0]
250 self._nodes_cnt += 1
251 self._nodemap[node] += 1
252 self._live_line(worker)
253245
254246 def ev_error(self, worker):
255247 ns, buf = worker.last_error()
248 self._runtimer_clean()
249 self._display.print_line_error(ns, buf)
250 self._runtimer_set_dirty()
251
252 def _runtimer_clean(self):
253 """Hide runtimer counter"""
256254 if self._runtimer:
257255 self._runtimer.eh.erase_line()
258 self._display.print_line_error(ns, buf)
256
257 def _runtimer_set_dirty(self):
258 """Force redisplay of counter"""
259259 if self._runtimer:
260 # Force redisplay of counter
261260 self._runtimer.eh.set_dirty()
262261
263 def ev_hup(self, worker):
264 if self._display.line_mode and self._nodemap[worker.last_node()] == 0:
265 # forget node that doesn't answer (used for live line gathering)
266 self._nodes.remove(worker.last_node())
267 del self._nodemap[worker.last_node()]
268 del self._nodemap_base[worker.last_node()]
269 self._live_line(worker)
270
271 def _live_line(self, worker):
272 # if all nodes replied 1 (or n) time(s), display gathered line(s)
273 if self._nodes and self._nodes_cnt % len(self._nodes) == 0 and \
274 max(self._nodemap.itervalues()) == (self._nodes_cnt \
275 / len(self._nodes)):
276 nodesetify = lambda v: (v[0], NodeSet.fromlist(v[1]))
277 for buf, nodeset in sorted(map(nodesetify,
278 worker.iter_buffers()),
279 cmp=bufnodeset_cmp):
280 self._display.print_gather(nodeset, buf)
281 # clear worker buffers, reset nodemap and node counter
282 worker.flush_buffers()
283 self._nodemap = self._nodemap_base.copy()
284 self._nodes_cnt = 0
262 def _runtimer_finalize(self, worker):
263 """Finalize display of runtimer counter"""
264 if self._runtimer:
265 self._runtimer.eh.finalize(worker.task.default("USER_interactive"))
285266
286267 def ev_close(self, worker):
287268 # Worker is closing -- it's time to gather results...
288 if self._runtimer:
289 self._runtimer.eh.finalize(worker.task.default("USER_interactive"))
269 self._runtimer_finalize(worker)
290270
291271 # Display command output, try to order buffers by rc
292272 nodesetify = lambda v: (v[0], NodeSet.fromlist(v[1]))
297277 cmp=bufnodeset_cmp):
298278 self._display.print_gather(nodeset, buf)
299279
280 self._close_common(worker)
281
282 # Notify main thread to update its prompt
283 self.update_prompt(worker)
284
285 def _close_common(self, worker):
300286 # Display return code if not ok ( != 0)
301287 for rc, nodelist in worker.iter_retcodes():
302288 if rc != 0:
309295 print >> sys.stderr, "clush: %s: command timeout" % \
310296 NodeSet.fromlist(worker.iter_keys_timeout())
311297
298
299 class LiveGatherOutputHandler(GatherOutputHandler):
300 """Live line-gathered output event handler class."""
301
302 def __init__(self, display, runtimer, nodes):
303 GatherOutputHandler.__init__(self, display, runtimer)
304 self._nodes = NodeSet(nodes)
305 self._nodecnt = dict.fromkeys(self._nodes, 0)
306 self._mtreeq = []
307 self._offload = 0
308
309 def ev_read(self, worker):
310 # Read new line from node
311 node, line = worker.last_read()
312 self._nodecnt[node] += 1
313 cnt = self._nodecnt[node]
314 if len(self._mtreeq) < cnt:
315 self._mtreeq.append(MsgTree())
316 self._mtreeq[cnt - self._offload - 1].add(node, line)
317 self._live_line(worker)
318
319 def ev_hup(self, worker):
320 if self._mtreeq and worker.last_node() not in self._mtreeq[0]:
321 # forget a node that doesn't answer to continue live line
322 # gathering anyway
323 self._nodes.remove(worker.last_node())
324 self._live_line(worker)
325
326 def _live_line(self, worker):
327 # if all nodes have replied, display gathered line
328 while self._mtreeq and len(self._mtreeq[0]) == len(self._nodes):
329 mtree = self._mtreeq.pop(0)
330 self._offload += 1
331 self._runtimer_clean()
332 nodesetify = lambda v: (v[0], NodeSet.fromlist(v[1]))
333 for buf, nodeset in sorted(map(nodesetify, mtree.walk()),
334 cmp=bufnodeset_cmp):
335 self._display.print_gather(nodeset, buf)
336 self._runtimer_set_dirty()
337
338 def ev_close(self, worker):
339 # Worker is closing -- it's time to gather results...
340 self._runtimer_finalize(worker)
341
342 for mtree in self._mtreeq:
343 nodesetify = lambda v: (v[0], NodeSet.fromlist(v[1]))
344 for buf, nodeset in sorted(map(nodesetify, mtree.walk()),
345 cmp=bufnodeset_cmp):
346 self._display.print_gather(nodeset, buf)
347
348 self._close_common(worker)
349
312350 # Notify main thread to update its prompt
313 worker.task.set_default("USER_running", False)
314 if worker.task.default("USER_handle_SIGUSR1"):
315 os.kill(os.getpid(), signal.SIGUSR1)
351 self.update_prompt(worker)
316352
317353 class RunTimer(EventHandler):
318354 def __init__(self, task, total):
321357 self.cnt_last = -1
322358 self.tslen = len(str(self.total))
323359 self.wholelen = 0
360 self.started = False
324361
325362 def ev_timer(self, timer):
326363 self.update()
341378 self.tslen, self.total)
342379 self.wholelen = len(towrite)
343380 sys.stderr.write(towrite)
381 self.started = True
344382
345383 def finalize(self, cr):
384 if not self.started:
385 return
346386 # display completed/total clients
347387 fmt = 'clush: %*d/%*d'
348388 if cr:
625665 # number of completed commands
626666 runtimer = task.timer(2.0, RunTimer(task, len(ns)), interval=1./3.,
627667 autoclose=True)
628 worker = task.shell(cmd, nodes=ns,
629 handler=GatherOutputHandler(display, runtimer,
630 ns), timeout=timeout)
668 if display.line_mode:
669 handler = LiveGatherOutputHandler(display, runtimer, ns)
670 else:
671 handler = GatherOutputHandler(display, runtimer)
672
673 worker = task.shell(cmd, nodes=ns, handler=handler, timeout=timeout)
631674 else:
632675 worker = task.shell(cmd, nodes=ns,
633676 handler=DirectOutputHandler(display),
765808 optgrp.add_option("-s", "--groupsource", action="store",
766809 dest="groupsource", help="optional groups.conf(5) " \
767810 "group source to use")
768 parser.add_option_group(optgrp)
769811 optgrp.add_option("--color", action="store", dest="whencolor",
770812 choices=WHENCOLOR_CHOICES,
771813 help="whether to use ANSI colors (never, always or auto)")
924966 task.set_default("stderr", not options.gatherall)
925967
926968 # Disable MsgTree buffering if not gathering outputs
927 task.set_default("stdout_msgtree", gather)
969 task.set_default("stdout_msgtree", gather and not options.line_mode)
928970 # Always disable stderr MsgTree buffering
929971 task.set_default("stderr_msgtree", False)
930972
scripts/clush.pyc less more
Binary diff not shown
3030 # The fact that you are presently reading this means that you have had
3131 # knowledge of the CeCILL-C license and that you accept its terms.
3232 #
33 # $Id: nodeset.py 280 2010-06-16 21:15:41Z st-cea $
33 # $Id: nodeset.py 322 2010-08-29 20:44:30Z st-cea $
3434
3535 """
3636 Usage: nodeset [COMMAND] [OPTIONS] [ns1 [-ixX] ns2|...]
scripts/nodeset.pyc less more
Binary diff not shown
3030 # The fact that you are presently reading this means that you have had
3131 # knowledge of the CeCILL-C license and that you accept its terms.
3232 #
33 # $Id: setup.py 304 2010-07-27 19:47:09Z st-cea $
33 # $Id: setup.py 390 2010-10-20 21:07:44Z st-cea $
3434
35 from distutils.core import setup
35 from setuptools import setup, find_packages
3636 import os
3737
3838 if not os.access('scripts/clubak', os.F_OK):
4343 os.symlink('nodeset.py', 'scripts/nodeset')
4444
4545 setup(name='ClusterShell',
46 version='1.3',
46 version='1.3.3',
4747 license='CeCILL-C (French equivalent to LGPLv2+)',
4848 description='ClusterShell library',
4949 author='Stephane Thiell',
5050 author_email='stephane.thiell@cea.fr',
5151 url='http://clustershell.sourceforge.net/',
5252 package_dir={'': 'lib'},
53 packages=['ClusterShell',
54 'ClusterShell.Engine',
55 'ClusterShell.Worker'],
53 packages=find_packages('lib'),
5654 scripts=['scripts/clubak',
5755 'scripts/clush',
5856 'scripts/nodeset']
+0
-56
tests/LocalTests.py less more
0 #!/usr/bin/env python
1 # ClusterShell (local) test suite
2 # Written by S. Thiell 2008-04-09
3 # $Id$
4
5
6 """Unit test for ClusterShell"""
7
8 import copy
9 import sys
10 import unittest
11
12 sys.path.append('../lib')
13
14 import ClusterShell
15
16 from ClusterShell.NodeSet import NodeSet
17 from ClusterShell.Task import Task
18
19 import socket
20
21
22 class LocalTests(unittest.TestCase):
23
24 def test0(self):
25 task = Task.current()
26 assert task != None
27 work = task.shell("/bin/hostname")
28 task.run()
29
30 def test1(self):
31 task = Task.current()
32 assert task != None
33 work = task.shell("/bin/hostname", nodes=None, handler=None)
34 task.run()
35
36 def test2(self):
37 task = Task.current()
38 assert task != None
39 workers = []
40 for i in range(0, 9):
41 workers.append(task.shell("/bin/hostname"))
42 task.run()
43 hn = socket.gethostname()
44 for i in range(0, 9):
45 t_hn = workers[i].read_buffer().splitlines()[0]
46 assert t_hn == hn
47
48 def testVersion(self):
49 assert ClusterShell.version > 0.5
50
51
52 if __name__ == '__main__':
53 suite = unittest.TestLoader().loadTestsFromTestCase(LocalTests)
54 unittest.TextTestRunner(verbosity=2).run(suite)
55
(No changes)
(No changes)
00 #!/usr/bin/env python
11 # ClusterShell (distant) test suite
22 # Written by S. Thiell 2009-02-13
3 # $Id: TaskDistantTest.py 289 2010-07-12 21:30:00Z st-cea $
3 # $Id: TaskDistantTest.py 322 2010-08-29 20:44:30Z st-cea $
44
55
66 """Unit test for ClusterShell Task (distant)"""
00 #!/usr/bin/env python
11 # ClusterShell (local) test suite
22 # Written by S. Thiell 2008-04-09
3 # $Id: TaskEventTest.py 232 2010-02-23 23:19:17Z st-cea $
3 # $Id: TaskEventTest.py 323 2010-08-29 21:00:18Z st-cea $
44
55
66 """Unit test for ClusterShell Task (event-based mode)"""
5454 def ev_read(self, worker):
5555 self.did_read = True
5656 assert worker.last_read() == "abcdefghijklmnopqrstuvwxyz"
57 assert worker.last_error() != "abcdefghijklmnopqrstuvwxyz"
5758
5859 def ev_error(self, worker):
5960 self.did_readerr = True
6061 assert worker.last_error() == "errerrerrerrerrerrerrerr"
62 assert worker.last_read() != "errerrerrerrerrerrerrerr"
6163
6264 def ev_close(self, worker):
6365 self.did_close = True
00 #!/usr/bin/env python
11 # ClusterShell (local) test suite
22 # Written by S. Thiell 2008-04-09
3 # $Id: TaskLocalTest.py 296 2010-07-21 19:56:34Z st-cea $
3 # $Id: TaskLocalTest.py 322 2010-08-29 20:44:30Z st-cea $
44
55
66 """Unit test for ClusterShell Task (local)"""
0 #!/usr/bin/env python
1 # ClusterShell task resource consumption/limits test suite
2 # Written by S. Thiell 2010-10-19
3 # $Id$
4
5
6 """Unit test for ClusterShell Task (resource limits)"""
7
8 import resource
9 import sys
10 import unittest
11
12 sys.path.insert(0, '../lib')
13
14 from ClusterShell.Task import *
15 from ClusterShell.Worker.Pdsh import WorkerPdsh
16
17
18 class TaskRLimitsTest(unittest.TestCase):
19
20 def setUp(self):
21 """set soft nofile resource limit to 50"""
22 self.soft, self.hard = resource.getrlimit(resource.RLIMIT_NOFILE)
23 resource.setrlimit(resource.RLIMIT_NOFILE, (50, self.hard))
24
25 def tearDown(self):
26 """restore original resource limits"""
27 resource.setrlimit(resource.RLIMIT_NOFILE, (self.soft, self.hard))
28
29 def _testPopen(self, stderr):
30 task = task_self()
31 self.assert_(task != None)
32 task.set_info("fanout", 6)
33 for i in xrange(100):
34 worker = task.shell("/bin/hostname", stderr=stderr)
35 self.assert_(worker != None)
36 # run task
37 task.resume()
38
39 def testPopen(self):
40 """test resource usage with local task.shell(stderr=False)"""
41 self._testPopen(False)
42
43 def testPopenStderr(self):
44 """test resource usage with local task.shell(stderr=True)"""
45 self._testPopen(True)
46
47 def _testRemote(self, stderr):
48 task = task_self()
49 self.assert_(task != None)
50 task.set_info("fanout", 6)
51 for i in xrange(100):
52 worker = task.shell("/bin/hostname", nodes="localhost",
53 stderr=False)
54 self.assert_(worker != None)
55 # run task
56 task.resume()
57
58 def testRemote(self):
59 """test resource usage with remote task.shell(stderr=False)"""
60 self._testRemote(False)
61
62 def testRemoteStderr(self):
63 """test resource usage with remote task.shell(stderr=True)"""
64 self._testRemote(True)
65
66 def _testRemotePdsh(self, stderr):
67 task = task_self()
68 self.assert_(task != None)
69 task.set_info("fanout", 6)
70 for i in xrange(100):
71 worker = WorkerPdsh("localhost", handler=None,
72 timeout=0,
73 command="/bin/hostname",
74 stderr=stderr)
75 self.assert_(worker != None)
76 task.schedule(worker)
77 # run task
78 task.resume()
79
80 def testRemotePdsh(self):
81 """test resource usage with WorkerPdsh(stderr=False)"""
82 self._testRemotePdsh(False)
83
84 def testRemotePdshStderr(self):
85 """test resource usage with WorkerPdsh(stderr=True)"""
86 self._testRemotePdsh(True)
87
88 if __name__ == '__main__':
89 suite = unittest.TestLoader().loadTestsFromTestCase(TaskRLimitsTest)
90 unittest.TextTestRunner(verbosity=2).run(suite)
91
00 #!/usr/bin/env python
11 # ClusterShell timer test suite
22 # Written by S. Thiell 2009-02-15
3 # $Id: TaskTimerTest.py 296 2010-07-21 19:56:34Z st-cea $
3 # $Id: TaskTimerTest.py 328 2010-08-31 23:08:35Z st-cea $
44
55
66 """Unit test for ClusterShell Task's timer"""
77
88 import copy
9 import thread
10 from time import sleep, time
911 import sys
10 from time import sleep, time
1112 import unittest
1213
1314 sys.path.insert(0, '../lib')
432433 task._engine.remove_timer(timer)
433434 task_terminate()
434435
436 def _thread_timer_create_func(self, task):
437 """thread used to create a timer for another task; hey why not?"""
438 timer = task.timer(0.5, self.__class__.TSimpleTimerChecker())
439 self.assert_(timer != None)
440
441 def testTimerAddFromAnotherThread(self):
442 """test timer creation from another thread"""
443 task = task_self()
444 thread.start_new_thread(TaskTimerTest._thread_timer_create_func, (self, task))
445 task.resume()
446 task_wait()
447
435448
436449 if __name__ == '__main__':
437450 suite = unittest.TestLoader().loadTestsFromTestCase(TaskTimerTest)
00 #!/usr/bin/env python
11 # ClusterShell test suite
22 # Written by S. Thiell
3 # $Id: run_testsuite.py 246 2010-04-07 22:51:33Z st-cea $
3 # $Id: run_testsuite.py 385 2010-10-19 21:36:48Z st-cea $
44
55 """
66 run_testsuite.py [-hv]
5151 "TaskDistantPdshTest",
5252 "TaskMsgTreeTest",
5353 "TaskPortTest",
54 "TaskRLimitsTest",
5455 "TaskTimeoutTest",
5556 "TaskTimerTest",
5657 "TaskThreadJoinTest",
(No changes)