~tribaal/txaws/xss-hardening

« back to all changes in this revision

Viewing changes to txaws/client/gui/gtk.py

  • Committer: Tristan Seligmann
  • Date: 2009-04-27 23:53:32 UTC
  • mfrom: (3.1.5 client)
  • Revision ID: mithrandi@mithrandi.net-20090427235332-l8azkl1kvn5pjtay
mergeĀ lp:~lifeless/txaws/client

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2009 Robert Collins <robertc@robertcollins.net>
 
2
# Licenced under the txaws licence available at /LICENSE in the txaws source.
 
3
 
 
4
"""A GTK client for working with aws."""
 
5
 
 
6
from __future__ import absolute_import
 
7
 
 
8
__all__ = ['main']
 
9
 
 
10
import gtk
 
11
 
 
12
class AWSStatusIcon(gtk.StatusIcon):
 
13
    """A status icon shown when instances are running."""
 
14
 
 
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)
 
21
        self.probing = False
 
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)
 
26
 
 
27
    def on_activate(self, data):
 
28
        if self.probing:
 
29
            # don't ask multiple times.
 
30
            return
 
31
        self.probing = True
 
32
        self.client.describe_instances().addCallbacks(self.showhide, self.errorit)
 
33
 
 
34
    def showhide(self, reservation):
 
35
        active = 0
 
36
        for instance in reservation:
 
37
            if instance.instanceState == 'running':
 
38
                active += 1
 
39
        self.set_tooltip('AWS Status - %d instances' % active)
 
40
        self.set_visible(active != 0)
 
41
        self.queue_check()
 
42
 
 
43
    def queue_check(self):
 
44
        self.probing = False
 
45
        self.reactor.callLater(60, self.on_activate, None)
 
46
 
 
47
    def errorit(self, error):
 
48
        # debugging output for now.
 
49
        print error.value, error.value.response
 
50
        self.queue_check()
 
51
 
 
52
 
 
53
def main(argv, reactor=None):
 
54
    """Run the client GUI.
 
55
 
 
56
    Typical use:
 
57
    >>> sys.exit(main(sys.argv))
 
58
 
 
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.
 
63
    """
 
64
    if reactor is None:
 
65
        from twisted.internet import gtk2reactor
 
66
        gtk2reactor.install()
 
67
        from twisted.internet import reactor
 
68
    status = AWSStatusIcon(reactor)
 
69
    reactor.run()