Show
Ignore:
Timestamp:
09/12/07 20:35:55 (5 years ago)
Author:
trivoallan
Message:

cleverbox :

  • client and projects can now be generated without human interaction
  • started implementation of project unit tests
Location:
cleverbox/trunk/cleverbox
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • cleverbox/trunk/cleverbox/client.py

    r196 r200  
    4747    return list_clients 
    4848 
    49 def add(environment, client_name): 
     49def add(environment, client_name, parameters = {}): 
    5050    """ 
    5151    Creates a new client in supplied environment. 
     
    118118    # -- Enable client ? 
    119119    print styles.style.RESET('') 
    120     enable_client = raw_input('Enable client ? [y/N]> ').strip() or False 
    121  
    122     if enable_client == 'y': 
     120    try: 
     121        enable_client = parameters['enable'] 
     122    except KeyError: 
     123        enable_client = raw_input('Enable client ? [y/N]> ').strip() or False 
     124 
     125    if str(enable_client).find('y') == 0: 
    123126        enable(environment,client_name) 
    124127 
  • cleverbox/trunk/cleverbox/environment.py

    r196 r200  
    102102 
    103103        except Exception, exception: 
    104              
    105104            logging.error(exception) 
    106105            logging.error("  Environment couldn't be initialized in %(env_dir)s" % {'env_dir' : self.path}) 
  • cleverbox/trunk/cleverbox/project.py

    r194 r200  
    8282    print styles.style.RESET('') 
    8383 
    84 def add(environment, client_name, project_name): 
     84def add(environment, client_name, project_name, parameters = {}): 
    8585    """ 
    8686    Creates a new project for client in environment. 
     
    101101        'short_name' : project_name, 
    102102        'full_name'  : None 
    103         } 
    104  
    105     print 
    106     print "Creating a new project for client '%s'" % client_name 
    107     print "Let's collect some informations about the project :" 
    108     print 
    109     print "  Please enter project's full name." 
    110     print "  This will be displayed in various places and emails." 
    111     print 
    112  
    113     dfn = project_name.capitalize() 
    114     collected_infos['full_name'] = raw_input('Full Name [%s]> ' % dfn).strip() or dfn 
    115  
    116     print 
    117     print "  What configuration profile should be used ?" 
    118     print "  Those reside in %s/profiles/" % environment.path 
    119     print 
    120  
    121     dp = environment.config.get('general', 'default_profile') 
    122     collected_infos['profile'] = raw_input('Configuration profile [%s]> ' % dp).strip() or dp 
     103    } 
     104 
     105    try: 
     106        collected_infos['full_name'] = parameters['full_name'] 
     107    except KeyError: 
     108        print 
     109        print "Creating a new project for client '%s'" % client_name 
     110        print "Let's collect some informations about the project :" 
     111        print 
     112        print "  Please enter project's full name." 
     113        print "  This will be displayed in various places and emails." 
     114        print 
     115     
     116        dfn = project_name.capitalize() 
     117        collected_infos['full_name'] = raw_input('Full Name [%s]> ' % dfn).strip() or dfn 
     118 
     119    try: 
     120        collected_infos['profile'] = parameters['profile'] 
     121    except KeyError: 
     122        print 
     123        print "  What configuration profile should be used ?" 
     124        print "  Those reside in %s/profiles/" % environment.path 
     125        print 
     126     
     127        dp = environment.config.get('general', 'default_profile') 
     128        collected_infos['profile'] = raw_input('Configuration profile [%s]> ' % dp).strip() or dp 
    123129 
    124130    # Project creation 
     
    130136    try: 
    131137        # -- Apache configuration file 
    132         _write_apache_conf(environment, collected_infos) 
     138        _write_apache_conf(environment, collected_infos, parameters) 
    133139 
    134140        # -- Create required dirs 
    135         _create_dirs(environment, collected_infos) 
     141        _create_dirs(environment, collected_infos, parameters) 
    136142 
    137143        # -- SVN repository creation 
    138         _create_svn_repos(environment, collected_infos) 
     144        _create_svn_repos(environment, collected_infos, parameters) 
    139145 
    140146        # -- Trac environment initialisation 
    141         _trac_initenv(environment, collected_infos) 
     147        _trac_initenv(environment, collected_infos, parameters) 
    142148 
    143149        # -- Trac initial permissions 
    144         _trac_setperms(environment, collected_infos) 
     150        _trac_setperms(environment, collected_infos, parameters) 
    145151 
    146152        # -- Modifies Trac default conf 
    147         _trac_defaultconf(environment, collected_infos) 
     153        _trac_defaultconf(environment, collected_infos, parameters) 
    148154         
    149155        # -- Fix perms 
    150         _fix_perms(environment, collected_infos) 
     156        _fix_perms(environment, collected_infos, parameters) 
    151157 
    152158    except Exception, e: 
     
    155161        traceback.print_exc() 
    156162 
    157     # -- Enable client ? 
    158     print "Project has been created. Do you want to enable it ?" 
    159     print 
    160     enable_project = raw_input('Enable project ? [y/N]> ').strip() or 'n' 
     163    try: 
     164        enable_project = parameters['enable'] 
     165    except KeyError: 
     166        # -- Enable client ? 
     167        print "Project has been created. Do you want to enable it ?" 
     168        print 
     169        enable_project = raw_input('Enable project ? [y/N]> ').strip() or 'n' 
    161170 
    162171    if str(enable_project).find('y') == 0: 
    163172        enable(environment, client_name, project_name) 
    164173 
    165 def _create_dirs(environment, infos): 
     174def _create_dirs(environment, infos, parameters): 
    166175    os.makedirs(os.path.join(environment.config.get('general', 'clients_root'), 
    167176                             infos['client'], 
     
    171180    print "  Creating project's directory layout\n" 
    172181 
    173 def _write_apache_conf(environment, infos): 
     182def _write_apache_conf(environment, infos, parameters): 
    174183    """ 
    175184    TODO : clients may not be stored in 'clients_root', be careful with that. 
     
    190199    print "  Apache configuration written to %s\n" % apache_conf_filepath 
    191200 
    192 def _create_svn_repos(environment, infos): 
     201def _create_svn_repos(environment, infos, parameters): 
    193202    repos_path = os.path.join( environment.config.get('general', 'clients_root'), infos['client'], 'var/svn', infos['short_name'] ) 
    194203    create_cmd = 'svnadmin create %s' % repos_path 
     
    201210    print "  Subversion repository created in %s\n" % repos_path 
    202211 
    203 def _trac_initenv(environment, infos): 
     212def _trac_initenv(environment, infos, parameters): 
    204213 
    205214    trac_env_path = os.path.join( environment.config.get('general', 'clients_root'), 
     
    231240    print "  Trac project initialized in %s\n" % trac_env_path 
    232241 
    233 def _trac_setperms(environment, infos): 
     242def _trac_setperms(environment, infos, parameters): 
    234243    trac_env_path = os.path.join( environment.config.get('general', 'clients_root'), 
    235244                                 infos['client'], 
     
    272281                                     'perms'      : perms_config.get('trac', profile)} ) 
    273282 
    274     # Let user choose who gets admin rights 
    275     print "  Please enter trac administrator username." 
    276     print "  This user will be granted full privileges on project's Trac instance." 
    277     print 
    278  
    279     dan = infos['short_name'] + '-admin' 
    280     admin_login = raw_input('Admin Login [%s]> ' % dan).strip() or dan 
     283    try: 
     284        admin_login = parameters['profile'] 
     285    except KeyError: 
     286        # Let user choose who gets admin rights 
     287        print "  Please enter trac administrator username." 
     288        print "  This user will be granted full privileges on project's Trac instance." 
     289        print 
     290     
     291        dan = infos['short_name'] + '-admin' 
     292        admin_login = raw_input('Admin Login [%s]> ' % dan).strip() or dan 
    281293 
    282294    os.system( trac_perms_cmd % {'env_path'   : trac_env_path, 
     
    287299    print "  Trac initial permissions set (admin rights given to '%s')\n" % admin_login 
    288300 
    289 def _fix_perms(environment, infos): 
     301def _fix_perms(environment, infos, parameters): 
    290302    """ 
    291303    chown -R dev:www-data /$CLIENTSROOT/$CLIENTNAME/var/svn/$PROJECTNAME 
     
    339351    print "  Perms fixed\n" 
    340352 
    341 def _trac_defaultconf(environment, infos): 
     353def _trac_defaultconf(environment, infos, parameters): 
    342354    """ 
    343355    Overrides project's default trac.ini with values provided in configuration profile. 
  • cleverbox/trunk/cleverbox/tests/__init__.py

    r195 r200  
    3535    env = Environment(env_path) 
    3636    parameters = {'general' : 
    37                      {'clients_root' : os.path.join(test_root, 'var', 'cleverbox'), 
    38                       'assets_dir'   : os.path.join('/home/trivoallan/workspace/cleverbox-trunk/assets'), 
    39                       'apache_group' : 'www-data', 
    40                       'ssh_user'     : 'root', 
    41                       'ssh_group'    : 'root'}} 
     37                     {'clients_root'     : os.path.join(test_root, 'var', 'cleverbox'), 
     38                      'assets_dir'       : os.path.join('/home/trivoallan/workspace/cleverbox-trunk/assets'), 
     39                      'apache_group'     : 'www-data', 
     40                      'ssh_user'         : 'root', 
     41                      'ssh_group'        : 'root', 
     42                      'default_profile'  : 'default', 
     43                      'authbackend_pass' : '', 
     44                      'domain'           : 'test.domain.tld', 
     45                      'apache_user'      : 'www-data', 
     46                      'apache_group'     : 'www-data'}, 
     47                  'trac' : 
     48                     {'lib_dir'          : '/usr/share/python-support/trac', 
     49                      'assets_dir'       : '/usr/share/trac'}} 
    4250    env.create(version, parameters) 
    4351 
  • cleverbox/trunk/cleverbox/tests/client.py

    r196 r200  
    2525    def test_client_add_generate_expected_layout(self): 
    2626        client_name = 'testclient' 
    27         client.add(self.env, client_name)  
     27        client.add(self.env, client_name, {'enable' : 'y'})  
    2828        clients_root = self.env.config.get('general', 'clients_root') 
    2929        expected = {os.path.join(self.env.path, 'clients-available', client_name)          : ('S_ISREG', '0640', 'root', 'www-data'), 
     
    4040    def test_client_add_generates_expected_apache_configuration(self): 
    4141        client_name = 'testclient' 
    42         client.add(self.env, client_name)  
     42        client.add(self.env, client_name, {'enable' : 'y'})  
    4343        expected =  """ 
    4444# -- Include enabled projects configuration files 
     
    5454        """ 
    5555        client_name = 'testclient' 
    56         client.add(self.env, client_name) 
     56        client.add(self.env, client_name, {'enable' : 'y'}) 
    5757        try:  
    58             client.add(self.env, client_name + 'f') 
     58            client.add(self.env, client_name, {'enable' : 'y'}) 
    5959        except Exception, e: 
    6060            pass 
     
    6565        client_name = 'test-client' 
    6666        try: 
    67             client.add(self.env, client_name) 
     67            client.add(self.env, client_name, {'enable' : 'y'}) 
    6868        except Exception, e: 
    6969            pass 
  • cleverbox/trunk/cleverbox/tests/project.py

    r177 r200  
    11import unittest 
     2 
     3import logging, os, shutil, tempfile 
     4from cleverbox.environment import Environment 
     5from cleverbox.scripts.admin import CleverboxAdmin 
     6from cleverbox import client, project 
     7import cleverbox.tests 
     8 
     9logging.basicConfig(stream=open('/dev/null', 'w+')) 
    210 
    311class ProjectTestCase(unittest.TestCase): 
     
    513    # Fixtures 
    614    def setUp(self): 
    7         pass 
     15        self.env = cleverbox.tests.create_environment('0.5test') 
    816     
    917    def tearDown(self): 
    10         pass 
     18        shutil.rmtree(self.env.path) 
     19        shutil.rmtree(self.env.config.get('general', 'clients_root')) 
     20         
     21    def test_exists_return_true_if_client_exists(self): 
     22         
     23        client_name = 'testclient' 
     24        client.add(self.env, client_name, {'enable' : 'y'}) 
     25         
     26        project_name = 'testproject' 
     27        project_parameters = {'full_name'   : 'Test Project', 
     28                              'profile'     : 'default', 
     29                              'admin_login' : 'admin', 
     30                              'enable'      : 'y'} 
     31        project.add(self.env, client_name, project_name, project_parameters) 
     32        assert project.exists(self.env, client_name, project_name), 'project.exists() returns true if project already exists' 
     33         
     34         
    1135     
    1236def suite(): 
    13     return unittest.makeSuite(ProjectTestCase,'test') 
     37    return unittest.makeSuite(ProjectTestCase, 'test') 
    1438 
    1539if __name__ == '__main__':