Discussions JG : comment on écrit qu'il s'agit de classe abstraite/interface ? FS : cela n'existe pas en Python. La philosophie est de faire confiance aux développeurs. En plus, python utilise le duck typing : http://en.wikipedia.org/wiki/Duck_typing#In_Python

JG : ne devrait on pas définir le FS de base de l'appli afin de structurer d'une manière plus cohérentes les modules? FS : Si, de plus Python utilise le nom d'un dossier comme nom de module


FS de l'appli

aedifico
    modules
        apache
        mysql
        bind
        trac
        php

Les modules suivantes seront à développer :

Generic

class GenericConf(object):
    def save_as_file(self, file_object, content):
        pass

    def save_as_dbrow()
        pass

abstract class GenericInitScript(object):
    def start():
        pass
    def stop():
        pass
    def restart():
        pass
    def reload():
        pass
    def status():
        pass
    def killall():
        pass
    def zap():
        pass
    def winZombieWar(): 
        pass

interface class GenericWebApps(object):
    def install :
        pass
    def uninstall :
        pass
    def upgrade :
        pass

System

class User:
    pass

class HomeDirectory:
    pass

Ce module étant très dépendante du système employer, il faudra se définir des fonctions faisant office d'interface entre l'action à réaliser et l'OS.

C'est ainsi que nous allons utiliser les fonctions suivantes :

  • chown(path, user, group)
  • chmod ?
  • shellexec : ceci afin que nous utilisions qu'une seule méthode d'accès à l'éxécution de sous programme.

Apache

Httpd

class ApacheConf(ApacheConf):
    pass
class ApacheInitScript(GenericInitScript)
    def start():
        pass

    def stop():
        pass

    def restart():
        pass

    def reload():
        pass

    def status():
        pass

    def killall():
        pass

    def zap()
        pass

    def winZombieWar(self): 
        self.zap()
         self.killall();
         self.start();

Vhost

class Vhost(ApacheConf):
    def set(self, key_name, key_value):
        pass

    def save():
        self.save_as_file(file_object, repr(self))

Bind

class BindConf(GenericConf):
    def add_soa(self):
        pass
    def add_cname(self):
        pass
    def add_a(self):
        pass
    def add_mx:
        pass
    def add_domain(self):
        pass

MySQL

class MySqlDataBase(GenericConf):
    def __init__(self, database_name):
        pass
    def save_on_server(self):
        pass
    def add_rights(self, rights, user):
        pass

Trac

class Trac(GenericWebApps):
    pass

class TracConf(GenericConf):
    pass

Subversion

class Subversion(GenericConf):
    def create(self):
        pass
    def add_admin(self):
        pass

Parsers (meilleur nom à trouver)

Ini

Markup

CommonRegex?

Templature

URL : http://www.python.org/pypi/httpdrun