]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - bde/stats/who_haz_photos.py
Path problems
[scripts-20-100.git] / bde / stats / who_haz_photos.py
1 #!/usr/bin/env python
2 #-*- encoding: utf-8 -*-
3
4 """ Pour déterminer combien d'adhérents ont une photo dans chaque promo. """
5
6 import sys
7 import os.path
8 import collections
9
10 #: Chemin où est rangé le code de la Note Kfet
11 NOTE_ROOT_DIR = "/home/note/note-kfet-2015-serveur/"
12
13 sys.path.append("%sserveur/" % NOTE_ROOT_DIR)
14 # BaseFonctions importe la conf, donc on a besoin de l'avoir dans le path
15 sys.path.append("%sconfig/" % NOTE_ROOT_DIR)
16 import BaseFonctions
17
18 #: requête SQL pour récupérer les premières années d'adhésion de tout le monde
19 req_first_years = """SELECT adhesions.idbde, min(annee) AS year_first_adhesion
20 FROM adhesions INNER JOIN comptes ON comptes.idbde=adhesions.idbde
21 WHERE comptes.type='personne'
22 GROUP BY adhesions.idbde;"""
23
24 #: requête SQL pour récupérer les id des clubs
25 req_clubs = "SELECT idbde FROM comptes WHERE type='club';"
26
27 def get_ids():
28 """Récupère les ids des clubs et des adhérents."""
29 con, cur = BaseFonctions.getcursor()
30 cur.execute(req_first_years)
31 adhs = cur.fetchall()
32 cur.execute(req_clubs)
33 clubs = cur.fetchall()
34 return adhs, clubs
35
36 def check_photos(ids):
37 """Renvoie un dico ``id -> True/False`` en fonction de si le compte ``id``
38 a une photo pour chaque ``id`` dans ``ids``."""
39 d = {i : os.path.isfile("%sphotos/%s.png" % (NOTE_ROOT_DIR, i)) for i in ids}
40 return d
41
42 def compute():
43 """Do the job"""
44 adhs, clubs = get_ids()
45 adhs = {a["idbde"] : a for a in adhs}
46 id_adhs = adhs.keys()
47 clubs = [c["idbde"] for c in clubs]
48 photos_adhs = check_photos(id_adhs)
49 photos_clubs = check_photos(clubs)
50 d = collections.defaultdict(lambda : {"has" : 0, "tot" : 0})
51 for (i, has_photo) in photos_adhs.iteritems():
52 d[adhs[i]["year_first_adhesion"]]["has"] += has_photo
53 d[adhs[i]["year_first_adhesion"]]["tot"] += 1
54 for (i, has_photo) in photos_clubs.iteritems():
55 d["clubs"]["has"] += has_photo
56 d["clubs"]["tot"] += 1
57 return dict(d)
58
59 if __name__ == "__main__":
60 import pprint
61 d = compute()
62 keys = d.keys()
63 keys.sort()
64 for k in keys:
65 v = d[k]
66 print "%s : %s/%s %s%%" % (k, v["has"], v["tot"], int(float(v["has"])/v["tot"] * 100))