Revision 9e826a59 snf-pithos-tools/pithos/tools/dispatcher.py

b/snf-pithos-tools/pithos/tools/dispatcher.py
38 38

  
39 39
from optparse import OptionParser
40 40

  
41
from carrot.connection import BrokerConnection
42
from carrot.messaging import Consumer
43
from carrot.messaging import Publisher
41
try:
42
    from carrot.connection import BrokerConnection
43
    from carrot.messaging import Consumer
44
    from carrot.messaging import Publisher
45
except ImportError:
46
    sys.stderr.write("Dispatcher requires 'carrot' python library to " \
47
                     "be installed\n")
48
    sys.exit(1)
49

  
44 50

  
45 51

  
46 52
BROKER_HOST = 'localhost'
......
56 62
DEBUG = False
57 63

  
58 64

  
59
if __name__ == '__main__':
65
def main():
60 66
    parser = OptionParser()
61 67
    parser.add_option('-v', '--verbose', action='store_true', default=False,
62 68
                      dest='verbose', help='Enable verbose logging')
......
81 87
    parser.add_option('--test', action='store_true', default=False,
82 88
                      dest='test', help='Produce a dummy message for testing')
83 89
    opts, args = parser.parse_args()
84
    
90

  
85 91
    if opts.verbose:
86 92
        DEBUG = True
87 93
    logging.basicConfig(format='%(asctime)s [%(levelname)s] %(name)s %(message)s',
88 94
                        datefmt='%Y-%m-%d %H:%M:%S',
89 95
                        level=logging.DEBUG if DEBUG else logging.INFO)
90 96
    logger = logging.getLogger('dispatcher')
91
    
97

  
92 98
    conn = BrokerConnection(hostname=opts.host, port=opts.port,
93 99
                            userid=opts.user, password=opts.password,
94 100
                            virtual_host=opts.vhost)
......
103 109
    consumer = Consumer(connection=conn, queue=opts.queue,
104 110
                        exchange=opts.exchange, routing_key=opts.key,
105 111
                        exchange_type="topic")
106
    
112

  
107 113
    callback = None
108 114
    if opts.callback:
109 115
        cb = opts.callback.rsplit('.', 1)
......
111 117
            __import__(cb[0])
112 118
            cb_module = sys.modules[cb[0]]
113 119
            callback = getattr(cb_module, cb[1])
114
    
120

  
115 121
    def process_message(message_data, message):
116 122
        logger.debug('%s', message_data)
117 123
        if callback:
118 124
            callback(message_data)
119 125
        message.ack()
120
    
126

  
121 127
    consumer.register_callback(process_message)
122 128
    try:
123 129
        consumer.wait()
124 130
    except KeyboardInterrupt:
125 131
        pass
126 132

  
133
if __name__ == '__main__':
134
    main()
135

  

Also available in: Unified diff