/usr/share/proton-0.14.0/examples/python/reactor/tornado-send.py is in libqpid-proton8-dev-examples 0.14.0-5.1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #!/usr/bin/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.
#
import sys, tornado.ioloop
from tornado_app import TornadoApp
from proton import Message, Url
from proton.handlers import CHandshaker
class Send:
def __init__(self, message, target):
self.message = message
self.target = target if target is not None else "examples"
# Use the handlers property to add some default handshaking
# behaviour.
self.handlers = [CHandshaker()]
def on_connection_init(self, event):
conn = event.connection
# Every session or link could have their own handler(s) if we
# wanted simply by setting the "handler" slot on the
# given session or link.
ssn = conn.session()
# If a link doesn't have an event handler, the events go to
# its parent session. If the session doesn't have a handler
# the events go to its parent connection. If the connection
# doesn't have a handler, the events go to the reactor.
snd = ssn.sender("sender")
snd.target.address = self.target
conn.open()
ssn.open()
snd.open()
def on_link_flow(self, event):
snd = event.sender
if snd.credit > 0:
dlv = snd.send(self.message)
dlv.settle()
snd.close()
snd.session.close()
snd.connection.close()
class Program:
def __init__(self, url, content):
self.url = url
self.content = content
def on_reactor_init(self, event):
# You can use the connection method to create AMQP connections.
# This connection's handler is the Send object. All the events
# for this connection will go to the Send object instead of
# going to the reactor. If you were to omit the Send object,
# all the events would go to the reactor.
event.reactor.connection_to_host(self.url.host, self.url.port,
Send(Message(self.content),
self.url.path))
args = sys.argv[1:]
url = Url(args.pop() if args else "localhost:5672/examples")
content = args.pop() if args else "Hello World!"
TornadoApp(Program(url, content))
tornado.ioloop.IOLoop.instance().start()
|