Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_direct.py.html.in URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_direct.py.html.in?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_direct.py.html.in (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_direct.py.html.in Tue Sep 29 20:27:56 2015 @@ -0,0 +1,46 @@ + +<h1>server_direct.py</h1> +<div class="highlight"><pre><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">generate_uuid</span><span class="p">,</span> <span class="n">Message</span> +<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span> +<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span> + +<span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Server</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span> + <span class="bp">self</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="k">print</span><span class="p">(</span><span class="s">"Listening on"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span> + <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">on_link_opening</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span> + <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">dynamic</span><span class="p">:</span> + <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">generate_uuid</span><span class="p">())</span> + <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span> + <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span><span class="p">:</span> + <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span> + <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span> + <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="p">:</span> + <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span> + <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="p">:</span> + <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span> + + <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="k">print</span><span class="p">(</span><span class="s">"Received"</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span> + <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span> + <span class="k">print</span><span class="p">(</span><span class="s">"No link for reply"</span><span class="p">)</span> + <span class="k">return</span> + <span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">address</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> + <span class="n">correlation_id</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">correlation_id</span><span class="p">))</span> + +<span class="k">try</span><span class="p">:</span> + <span class="n">Container</span><span class="p">(</span><span class="n">Server</span><span class="p">(</span><span class="s">"0.0.0.0:8888"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span> +<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span> +</pre></div> + +<p><a href="server_direct.py">Download this file</a></p>
Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py Tue Sep 29 20:27:56 2015 @@ -0,0 +1,79 @@ +#!/usr/bin/env python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from __future__ import print_function +from proton import Message +from proton.reactor import Container +from proton.handlers import MessagingHandler, TransactionHandler + +class TxRequest(TransactionHandler): + def __init__(self, response, sender, request_delivery): + super(TxRequest, self).__init__() + self.response = response + self.sender = sender + self.request_delivery = request_delivery + + def on_transaction_declared(self, event): + event.transaction.send(self.sender, self.response) + event.transaction.accept(self.request_delivery) + event.transaction.commit() + + def on_transaction_committed(self, event): + print("Request processed successfully") + + def on_transaction_aborted(self, event): + print("Request processing aborted") + + +class TxServer(MessagingHandler): + def __init__(self, host, address): + super(TxServer, self).__init__(auto_accept=False) + self.host = host + self.address = address + + def on_start(self, event): + self.container = event.container + self.conn = event.container.connect(self.host, reconnect=False) + self.receiver = event.container.create_receiver(self.conn, self.address) + self.senders = {} + self.relay = None + + def on_message(self, event): + sender = self.relay + if not sender: + sender = self.senders.get(event.message.reply_to) + if not sender: + sender = self.container.create_sender(self.conn, event.message.reply_to) + self.senders[event.message.reply_to] = sender + + response = Message(address=event.message.reply_to, body=event.message.body.upper(), + correlation_id=event.message.correlation_id) + self.container.declare_transaction(self.conn, handler=TxRequest(response, sender, event.delivery)) + + def on_connection_open(self, event): + if event.connection.remote_offered_capabilities and 'ANONYMOUS-RELAY' in event.connection.remote_offered_capabilities: + self.relay = self.container.create_sender(self.conn, None) + +try: + Container(TxServer("localhost:5672", "examples")).run() +except KeyboardInterrupt: pass + + + Propchange: qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py ------------------------------------------------------------------------------ svn:executable = * Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py.html.in URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py.html.in?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py.html.in (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/server_tx.py.html.in Tue Sep 29 20:27:56 2015 @@ -0,0 +1,61 @@ + +<h1>server_tx.py</h1> +<div class="highlight"><pre><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span> +<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span> +<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span> + +<span class="k">class</span> <span class="nc">TxRequest</span><span class="p">(</span><span class="n">TransactionHandler</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">request_delivery</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">TxRequest</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">response</span> <span class="o">=</span> <span class="n">response</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">sender</span> + <span class="bp">self</span><span class="o">.</span><span class="n">request_delivery</span> <span class="o">=</span> <span class="n">request_delivery</span> + + <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">response</span><span class="p">)</span> + <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request_delivery</span><span class="p">)</span> + <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span> + + <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="k">print</span><span class="p">(</span><span class="s">"Request processed successfully"</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">on_transaction_aborted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="k">print</span><span class="p">(</span><span class="s">"Request processing aborted"</span><span class="p">)</span> + + +<span class="k">class</span> <span class="nc">TxServer</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">TxServer</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">=</span> <span class="n">host</span> + <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span> + + <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span> + <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">host</span><span class="p">,</span> <span class="n">reconnect</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">relay</span> <span class="o">=</span> <span class="bp">None</span> + + <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relay</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span> + <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span> + <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">]</span> <span class="o">=</span> <span class="n">sender</span> + + <span class="n">response</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">address</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> + <span class="n">correlation_id</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">correlation_id</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="n">TxRequest</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">))</span> + + <span class="k">def</span> <span class="nf">on_connection_open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">remote_offered_capabilities</span> <span class="ow">and</span> <span class="s">'ANONYMOUS-RELAY'</span> <span class="ow">in</span> <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">remote_offered_capabilities</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">relay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> + +<span class="k">try</span><span class="p">:</span> + <span class="n">Container</span><span class="p">(</span><span class="n">TxServer</span><span class="p">(</span><span class="s">"localhost:5672"</span><span class="p">,</span> <span class="s">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span> +<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span> +</pre></div> + +<p><a href="server_tx.py">Download this file</a></p> Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py Tue Sep 29 20:27:56 2015 @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from __future__ import print_function +import optparse +from proton.handlers import MessagingHandler +from proton.reactor import Container + +class Recv(MessagingHandler): + def __init__(self, url, count): + super(Recv, self).__init__() + self.url = url + self.expected = count + self.received = 0 + + def on_start(self, event): + event.container.create_receiver(self.url) + + def on_message(self, event): + if event.message.id and event.message.id < self.received: + # ignore duplicate message + return + if self.expected == 0 or self.received < self.expected: + print(event.message.body) + self.received += 1 + if self.received == self.expected: + event.receiver.close() + event.connection.close() + +parser = optparse.OptionParser(usage="usage: %prog [options]") +parser.add_option("-a", "--address", default="localhost:5672/examples", + help="address from which messages are received (default %default)") +parser.add_option("-m", "--messages", type="int", default=100, + help="number of messages to receive; 0 receives indefinitely (default %default)") +opts, args = parser.parse_args() + +try: + Container(Recv(opts.address, opts.messages)).run() +except KeyboardInterrupt: pass + + + Propchange: qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py ------------------------------------------------------------------------------ svn:executable = * Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py.html.in URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py.html.in?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py.html.in (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_recv.py.html.in Tue Sep 29 20:27:56 2015 @@ -0,0 +1,41 @@ + +<h1>simple_recv.py</h1> +<div class="highlight"><pre><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> +<span class="kn">import</span> <span class="nn">optparse</span> +<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span> +<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span> + +<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span> + <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">count</span> + <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span><span class="p">:</span> + <span class="c"># ignore duplicate message</span> + <span class="k">return</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span> + <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span> + <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + +<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s">"usage: %prog [options]"</span><span class="p">)</span> +<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-a"</span><span class="p">,</span> <span class="s">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"localhost:5672/examples"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s">"address from which messages are received (default </span><span class="si">%d</span><span class="s">efault)"</span><span class="p">)</span> +<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-m"</span><span class="p">,</span> <span class="s">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s">efault)"</span><span class="p">)</span> +<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> + +<span class="k">try</span><span class="p">:</span> + <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span> +<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span> +</pre></div> + +<p><a href="simple_recv.py">Download this file</a></p> Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py Tue Sep 29 20:27:56 2015 @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from __future__ import print_function, unicode_literals +import optparse +from proton import Message +from proton.handlers import MessagingHandler +from proton.reactor import Container + +class Send(MessagingHandler): + def __init__(self, url, messages): + super(Send, self).__init__() + self.url = url + self.sent = 0 + self.confirmed = 0 + self.total = messages + + def on_start(self, event): + event.container.create_sender(self.url) + + def on_sendable(self, event): + while event.sender.credit and self.sent < self.total: + msg = Message(id=(self.sent+1), body={'sequence':(self.sent+1)}) + event.sender.send(msg) + self.sent += 1 + + def on_accepted(self, event): + self.confirmed += 1 + if self.confirmed == self.total: + print("all messages confirmed") + event.connection.close() + + def on_disconnected(self, event): + self.sent = self.confirmed + +parser = optparse.OptionParser(usage="usage: %prog [options]", + description="Send messages to the supplied address.") +parser.add_option("-a", "--address", default="localhost:5672/examples", + help="address to which messages are sent (default %default)") +parser.add_option("-m", "--messages", type="int", default=100, + help="number of messages to send (default %default)") +opts, args = parser.parse_args() + +try: + Container(Send(opts.address, opts.messages)).run() +except KeyboardInterrupt: pass Propchange: qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py ------------------------------------------------------------------------------ svn:executable = * Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py.html.in URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py.html.in?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py.html.in (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/simple_send.py.html.in Tue Sep 29 20:27:56 2015 @@ -0,0 +1,48 @@ + +<h1>simple_send.py</h1> +<div class="highlight"><pre><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span> +<span class="kn">import</span> <span class="nn">optparse</span> +<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span> +<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span> +<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span> + +<span class="k">class</span> <span class="nc">Send</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Send</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">messages</span> + + <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="k">while</span> <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span> + <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="n">body</span><span class="o">=</span><span class="p">{</span><span class="s">'sequence'</span><span class="p">:(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">)})</span> + <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span> + <span class="k">print</span><span class="p">(</span><span class="s">"all messages confirmed"</span><span class="p">)</span> + <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + + <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> + +<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s">"usage: %prog [options]"</span><span class="p">,</span> + <span class="n">description</span><span class="o">=</span><span class="s">"Send messages to the supplied address."</span><span class="p">)</span> +<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-a"</span><span class="p">,</span> <span class="s">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"localhost:5672/examples"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s">"address to which messages are sent (default </span><span class="si">%d</span><span class="s">efault)"</span><span class="p">)</span> +<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-m"</span><span class="p">,</span> <span class="s">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s">"number of messages to send (default </span><span class="si">%d</span><span class="s">efault)"</span><span class="p">)</span> +<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> + +<span class="k">try</span><span class="p">:</span> + <span class="n">Container</span><span class="p">(</span><span class="n">Send</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span> +<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span> +</pre></div> + +<p><a href="simple_send.py">Download this file</a></p> Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py Tue Sep 29 20:27:56 2015 @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +""" +Demonstrates the client side of the synchronous request-response pattern +(also known as RPC or Remote Procecure Call) using proton. + +""" +from __future__ import print_function + +import optparse +from proton import Message, Url, ConnectionException, Timeout +from proton.utils import SyncRequestResponse, BlockingConnection +from proton.handlers import IncomingMessageHandler +import sys + +parser = optparse.OptionParser(usage="usage: %prog [options]", + description="Send requests to the supplied address and print responses.") +parser.add_option("-a", "--address", default="localhost:5672/examples", + help="address to which messages are sent (default %default)") +parser.add_option("-t", "--timeout", type="float", default=5, + help="Give up after this time out (default %default)") +opts, args = parser.parse_args() + +url = Url(opts.address) +client = SyncRequestResponse(BlockingConnection(url, timeout=opts.timeout), url.path) + +try: + REQUESTS= ["Twas brillig, and the slithy toves", + "Did gire and gymble in the wabe.", + "All mimsy were the borogroves,", + "And the mome raths outgrabe."] + for request in REQUESTS: + response = client.call(Message(body=request)) + print("%s => %s" % (request, response.body)) +finally: + client.connection.close() + Propchange: qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py ------------------------------------------------------------------------------ svn:executable = * Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py.html.in URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py.html.in?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py.html.in (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/sync_client.py.html.in Tue Sep 29 20:27:56 2015 @@ -0,0 +1,39 @@ + +<h1>sync_client.py</h1> +<div class="highlight"><pre><span class="sd">"""</span> +<span class="sd">Demonstrates the client side of the synchronous request-response pattern</span> +<span class="sd">(also known as RPC or Remote Procecure Call) using proton.</span> + +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> + +<span class="kn">import</span> <span class="nn">optparse</span> +<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span><span class="p">,</span> <span class="n">Url</span><span class="p">,</span> <span class="n">ConnectionException</span><span class="p">,</span> <span class="n">Timeout</span> +<span class="kn">from</span> <span class="nn">proton.utils</span> <span class="kn">import</span> <span class="n">SyncRequestResponse</span><span class="p">,</span> <span class="n">BlockingConnection</span> +<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">IncomingMessageHandler</span> +<span class="kn">import</span> <span class="nn">sys</span> + +<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s">"usage: %prog [options]"</span><span class="p">,</span> + <span class="n">description</span><span class="o">=</span><span class="s">"Send requests to the supplied address and print responses."</span><span class="p">)</span> +<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-a"</span><span class="p">,</span> <span class="s">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"localhost:5672/examples"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s">"address to which messages are sent (default </span><span class="si">%d</span><span class="s">efault)"</span><span class="p">)</span> +<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-t"</span><span class="p">,</span> <span class="s">"--timeout"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">"float"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s">"Give up after this time out (default </span><span class="si">%d</span><span class="s">efault)"</span><span class="p">)</span> +<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> + +<span class="n">url</span> <span class="o">=</span> <span class="n">Url</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">)</span> +<span class="n">client</span> <span class="o">=</span> <span class="n">SyncRequestResponse</span><span class="p">(</span><span class="n">BlockingConnection</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">timeout</span><span class="p">),</span> <span class="n">url</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> + +<span class="k">try</span><span class="p">:</span> + <span class="n">REQUESTS</span><span class="o">=</span> <span class="p">[</span><span class="s">"Twas brillig, and the slithy toves"</span><span class="p">,</span> + <span class="s">"Did gire and gymble in the wabe."</span><span class="p">,</span> + <span class="s">"All mimsy were the borogroves,"</span><span class="p">,</span> + <span class="s">"And the mome raths outgrabe."</span><span class="p">]</span> + <span class="k">for</span> <span class="n">request</span> <span class="ow">in</span> <span class="n">REQUESTS</span><span class="p">:</span> + <span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="n">request</span><span class="p">))</span> + <span class="k">print</span><span class="p">(</span><span class="s">"</span><span class="si">%s</span><span class="s"> => </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">body</span><span class="p">))</span> +<span class="k">finally</span><span class="p">:</span> + <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</pre></div> + +<p><a href="sync_client.py">Download this file</a></p> Added: qpid/site/input/releases/qpid-proton-master/proton/python/examples/test_examples.py URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-proton-master/proton/python/examples/test_examples.py?rev=1705923&view=auto ============================================================================== --- qpid/site/input/releases/qpid-proton-master/proton/python/examples/test_examples.py (added) +++ qpid/site/input/releases/qpid-proton-master/proton/python/examples/test_examples.py Tue Sep 29 20:27:56 2015 @@ -0,0 +1,151 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +import sys +import subprocess +import time +import unittest + +if sys.version_info[0] == 2: + _unicode_prefix = 'u' +else: + _unicode_prefix = '' + + +class ExamplesTest(unittest.TestCase): + def test_helloworld(self, example="helloworld.py"): + p = subprocess.Popen([example], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + p.wait() + output = [l.strip() for l in p.stdout] + self.assertEqual(output, ['Hello World!']) + + def test_helloworld_direct(self): + self.test_helloworld('helloworld_direct.py') + + def test_helloworld_blocking(self): + self.test_helloworld('helloworld_blocking.py') + + def test_helloworld_tornado(self): + self.test_helloworld('helloworld_tornado.py') + + def test_helloworld_direct_tornado(self): + self.test_helloworld('helloworld_direct_tornado.py') + + def test_simple_send_recv(self, recv='simple_recv.py', send='simple_send.py'): + r = subprocess.Popen([recv], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + s = subprocess.Popen([send], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + s.wait() + r.wait() + actual = [l.strip() for l in r.stdout] + expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)] + self.assertEqual(actual, expected) + + def test_client_server(self, client=['client.py'], server=['server.py'], sleep=0): + s = subprocess.Popen(server, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + if sleep: + time.sleep(sleep) + c = subprocess.Popen(client, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + c.wait() + s.terminate() + actual = [l.strip() for l in c.stdout] + inputs = ["Twas brillig, and the slithy toves", + "Did gire and gymble in the wabe.", + "All mimsy were the borogroves,", + "And the mome raths outgrabe."] + expected = ["%s => %s" % (l, l.upper()) for l in inputs] + self.assertEqual(actual, expected) + + def test_sync_client_server(self): + self.test_client_server(client=['sync_client.py']) + + def test_client_server_tx(self): + self.test_client_server(server=['server_tx.py']) + + def test_sync_client_server_tx(self): + self.test_client_server(client=['sync_client.py'], server=['server_tx.py']) + + def test_client_server_direct(self): + self.test_client_server(client=['client.py', '-a', 'localhost:8888/examples'], server=['server_direct.py'], sleep=0.5) + + def test_sync_client_server_direct(self): + self.test_client_server(client=['sync_client.py', '-a', 'localhost:8888/examples'], server=['server_direct.py'], sleep=0.5) + + def test_db_send_recv(self): + self.maxDiff = None + # setup databases + subprocess.check_call(['db_ctrl.py', 'init', './src_db']) + subprocess.check_call(['db_ctrl.py', 'init', './dst_db']) + fill = subprocess.Popen(['db_ctrl.py', 'insert', './src_db'], + stdin=subprocess.PIPE, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + for i in range(100): + fill.stdin.write("Message-%i\n" % (i+1)) + fill.stdin.close() + fill.wait() + # run send and recv + r = subprocess.Popen(['db_recv.py', '-m', '100'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + s = subprocess.Popen(['db_send.py', '-m', '100'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + s.wait() + r.wait() + # verify output of receive + actual = [l.strip() for l in r.stdout] + expected = ["inserted message %i" % (i+1) for i in range(100)] + self.assertEqual(actual, expected) + # verify state of databases + v = subprocess.Popen(['db_ctrl.py', 'list', './dst_db'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + v.wait() + expected = ["(%i, %s'Message-%i')" % ((i+1), _unicode_prefix, (i+1)) for i in range(100)] + actual = [l.strip() for l in v.stdout] + self.assertEqual(actual, expected) + + def test_tx_send_tx_recv(self): + self.test_simple_send_recv(recv='tx_recv.py', send='tx_send.py') + + def test_simple_send_direct_recv(self): + self.maxDiff = None + r = subprocess.Popen(['direct_recv.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + time.sleep(0.5) + s = subprocess.Popen(['simple_send.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + s.wait() + r.wait() + actual = [l.strip() for l in r.stdout] + expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)] + self.assertEqual(actual, expected) + + def test_direct_send_simple_recv(self): + s = subprocess.Popen(['direct_send.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + time.sleep(0.5) + r = subprocess.Popen(['simple_recv.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + universal_newlines=True) + r.wait() + s.wait() + actual = [l.strip() for l in r.stdout] + expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)] + self.assertEqual(actual, expected) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
