# -*- encoding: iso-8859-1 -*-
import os
class AccountList:
home = "/home"
www = "/www"
url = "http://perso.crans.org/%s/"
def __init__(self):
return
def comptes(self):
"""Retourne la liste des comptes"""
return filter(lambda x: os.path.isdir(u"/home/%s/www" % x) and not os.path.islink(u"/home/%s/www" % x),
os.listdir(u"/home/mail"))
def makeAnchor(self,letter):
return u"
" % ( letter, letter )
def makeIndex(self,letter_list):
index = u''
for aLetter in letter_list:
index = u"%s%s" % ( index, aLetter, aLetter)
return u"%s
" % index
def to_html(self):
dirs = self.comptes()
dirs.sort()
html = u""
premiere_lettre = ''
letter_list = []
for d in dirs:
if premiere_lettre != d[0]:
premiere_lettre = d[0]
letter_list.append(premiere_lettre)
html = u"%s\n%s" % ( html, self.makeAnchor(premiere_lettre) )
html = u"%s\n%s" % (html, Account(self.home, d, self.www, self.url).to_html())
index = self.makeIndex(letter_list)
html = index + html
html += u'
'
return html
class Account:
"""Classe représentant la page perso d'une personne"""
def __init__(self, home, login, www, url):
"""Instanciation avec le `login' de la personne"""
self.login = login
self.home = "%s/%s" % (home, login)
self.www = www
self.url = url
_info = None
def info(self, champ):
"""Retourne le contenu du champ `champ' dans le fichier info"""
if self._info == None:
try:
lignes = file("%s/.info" % self.home)
except IOError:
lignes = []
# self._info est un dictionnaire qui reprend le contenu du .info
self._info = dict(map(lambda z: (unicode(z[0].lower(),"iso-8859-15"),
unicode(z[1],"iso-8859-15")),
filter(lambda w: len(w) == 2 and len(w[1]),
map(lambda x: map(lambda y: y.strip(),
x.split(":")),
lignes))))
if self._info.has_key(champ.lower()):
return self._info[champ.lower()]
else:
return u""
def chemin(self):
"""Chemin vers le www"""
return u"%s%s" % (self.home, self.www)
def logo(self):
"""URL du logo s'il y en a un"""
if self.info("logo"):
# Le logo peut être en absolu ou en relatif
if self.info("logo").startswith(self.chemin()):
logo = self.info("logo").replace("%s/" % self.chemin(), "")
else:
logo = self.info("logo")
if os.path.isfile("%s/%s" % (self.chemin(), logo)):
return u"%s%s" % (self.url % self.login, logo)
return u"http://perso.crans.org/pageperso.png"
def to_html(self):
"""Renvoie le code HTML correspondant au fichier .info"""
html = [ u'' ]
return u'\n'.join(html)
def execute(macro, args):
return macro.formatter.rawHTML(AccountList().to_html())