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
