From ec3146d12630f0ee2a9ca966627df776d62aa881 Mon Sep 17 00:00:00 2001
From: Marco Mariani <marco.mariani@nexedi.com>
Date: Thu, 18 Apr 2013 14:53:56 +0200
Subject: [PATCH] cli refactoring: node bang

---
 setup.py            |  3 ++-
 slapos/bang.py      | 44 +++++++++++++++++++++++++-------------------
 slapos/cli/bang.py  | 21 +++++++++++++++++++++
 slapos/cli/cache.py |  8 ++++----
 4 files changed, 52 insertions(+), 24 deletions(-)
 create mode 100644 slapos/cli/bang.py

diff --git a/setup.py b/setup.py
index 29ffe5efc..e50075b21 100644
--- a/setup.py
+++ b/setup.py
@@ -73,7 +73,8 @@ setup(name=name,
           'slap2 = slapos.cli.entry:main',
         ],
         'slapos.cli': [
-          'cache lookup = slapos.cli.cache:CacheLookup',
+          'cache lookup = slapos.cli.cache:CacheLookupCommand',
+          'node bang = slapos.cli.bang:BangCommand',
         ]
       },
       test_suite="slapos.tests",
diff --git a/slapos/bang.py b/slapos/bang.py
index 0bec8eef2..c7cb76223 100644
--- a/slapos/bang.py
+++ b/slapos/bang.py
@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-
+# vim: set et sts=2:
 ##############################################################################
 #
 # Copyright (c) 2011, 2012 Vifib SARL and Contributors.
@@ -31,11 +32,31 @@ import slapos.slap.slap
 import argparse
 import ConfigParser
 
+
+def do_bang(config, message):
+  computer_id = config.get('slapos', 'computer_id')
+  master_url = config.get('slapos', 'master_url')
+  if config.has_option('slapos', 'key_file'):
+    key_file = config.get('slapos', 'key_file')
+  else:
+    key_file = None
+  if config.has_option('slapos', 'cert_file'):
+    cert_file = config.get('slapos', 'cert_file')
+  else:
+    cert_file = None
+  slap = slapos.slap.slap()
+  slap.initializeConnection(master_url, key_file=key_file, cert_file=cert_file)
+  computer = slap.registerComputer(computer_id)
+  print 'Banging to %r' % master_url
+  computer.bang(message)
+  print 'Bang with message %r' % message
+
+
 def main(*args):
   parser = argparse.ArgumentParser()
   parser.add_argument("-m", "--message", default='', help="Message for bang.")
   parser.add_argument("configuration_file", nargs=1, type=argparse.FileType(),
-      help="SlapOS configuration file.")
+                      help="SlapOS configuration file.")
   if len(args) == 0:
     argument = parser.parse_args()
   else:
@@ -43,21 +64,6 @@ def main(*args):
   configuration_file = argument.configuration_file[0]
   message = argument.message
   # Loads config (if config specified)
-  configuration = ConfigParser.SafeConfigParser()
-  configuration.readfp(configuration_file)
-  computer_id = configuration.get('slapos', 'computer_id')
-  master_url = configuration.get('slapos', 'master_url')
-  if configuration.has_option('slapos', 'key_file'):
-    key_file = configuration.get('slapos', 'key_file')
-  else:
-    key_file = None
-  if configuration.has_option('slapos', 'cert_file'):
-    cert_file = configuration.get('slapos', 'cert_file')
-  else:
-    cert_file = None
-  slap = slapos.slap.slap()
-  slap.initializeConnection(master_url, key_file=key_file, cert_file=cert_file)
-  computer = slap.registerComputer(computer_id)
-  print 'Banging to %r' % master_url
-  computer.bang(message)
-  print 'Bang with message %r' % message
+  config = ConfigParser.SafeConfigParser()
+  config.readfp(configuration_file)
+  do_bang(config, message)
diff --git a/slapos/cli/bang.py b/slapos/cli/bang.py
new file mode 100644
index 000000000..4a39507f6
--- /dev/null
+++ b/slapos/cli/bang.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+
+import logging
+
+from slapos.cli.config import ConfigCommand
+from slapos.bang import do_bang
+
+
+class BangCommand(ConfigCommand):
+
+    log = logging.getLogger(__name__)
+
+    def get_parser(self, prog_name):
+        parser = super(BangCommand, self).get_parser(prog_name)
+        parser.add_argument('-m', '--message',
+                            help='Message for bang')
+        return parser
+
+    def take_action(self, args):
+        config = self.fetch_config(args)
+        do_bang(config, args.message)
diff --git a/slapos/cli/cache.py b/slapos/cli/cache.py
index 32e516f6c..59f205b63 100644
--- a/slapos/cli/cache.py
+++ b/slapos/cli/cache.py
@@ -6,15 +6,15 @@ from slapos.cli.config import ConfigCommand
 from slapos.cache import do_lookup
 
 
-class CacheLookup(ConfigCommand):
+class CacheLookupCommand(ConfigCommand):
 
     log = logging.getLogger(__name__)
 
     def get_parser(self, prog_name):
-        parser = super(CacheLookup, self).get_parser(prog_name)
+        parser = super(CacheLookupCommand, self).get_parser(prog_name)
         # XXX this argument could use a better name
-        parser.add_argument("software_url",
-                            help="Your software url or MD5 hash")
+        parser.add_argument('software_url',
+                            help='Your software url or MD5 hash')
         return parser
 
     def take_action(self, args):
-- 
2.30.9