1
# Copyright (C) 2009 Robert Collins <robertc@robertcollins.net>
2
# Licenced under the txaws licence available at /LICENSE in the txaws source.
4
"""A GTK client for working with aws."""
6
from __future__ import absolute_import
12
class AWSStatusIcon(gtk.StatusIcon):
13
"""A status icon shown when instances are running."""
15
def __init__(self, reactor):
16
gtk.StatusIcon.__init__(self)
17
self.set_from_stock(gtk.STOCK_NETWORK)
18
self.set_visible(True)
19
self.reactor = reactor
20
self.connect('activate', self.on_activate)
22
# Nested import because otherwise we get 'reactor already installed'.
23
from txaws.ec2.client import EC2Client
24
self.client = EC2Client()
25
self.on_activate(None)
27
def on_activate(self, data):
29
# don't ask multiple times.
32
self.client.describe_instances().addCallbacks(self.showhide, self.errorit)
34
def showhide(self, reservation):
36
for instance in reservation:
37
if instance.instanceState == 'running':
39
self.set_tooltip('AWS Status - %d instances' % active)
40
self.set_visible(active != 0)
43
def queue_check(self):
45
self.reactor.callLater(60, self.on_activate, None)
47
def errorit(self, error):
48
# debugging output for now.
49
print error.value, error.value.response
53
def main(argv, reactor=None):
54
"""Run the client GUI.
57
>>> sys.exit(main(sys.argv))
59
:param argv: The arguments to run it with, e.g. sys.argv.
60
:param reactor: The reactor to use. Must be compatible with gtk as this
61
module uses gtk API's.
62
:return exitcode: The exit code it returned, as per sys.exit.
65
from twisted.internet import gtk2reactor
67
from twisted.internet import reactor
68
status = AWSStatusIcon(reactor)