]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/backend/accounts.py
people: Show some stats
[ipfire.org.git] / src / backend / accounts.py
index bc284bffc1063046953004505dab3c1ecb9b2162..ff2988c1a4879ae91fb5c3bd4ae2d965f64451eb 100644 (file)
@@ -5,6 +5,7 @@ import base64
 import datetime
 import hashlib
 import hmac
+import iso3166
 import json
 import ldap
 import ldap.modlist
@@ -164,6 +165,16 @@ class Accounts(Object):
        def init(self):
                self.search_base = self.settings.get("ldap_search_base")
 
+       def __len__(self):
+               count = self.memcache.get("accounts:count")
+
+               if count is None:
+                       count = self._count("(objectClass=person)")
+
+                       self.memcache.set("accounts:count", count, 300)
+
+               return count
+
        def __iter__(self):
                # Only return developers (group with ID 1000)
                accounts = self._search("(&(objectClass=posixAccount)(gidNumber=1000))")
@@ -206,6 +217,11 @@ class Accounts(Object):
 
                return results
 
+       def _count(self, query):
+               res = self._query(query, attrlist=["dn"])
+
+               return len(res)
+
        def _search(self, query, attrlist=None, limit=0):
                accounts = []
                for dn, attrs in self._query(query, attrlist=["dn"], limit=limit):
@@ -502,6 +518,18 @@ class Accounts(Object):
 
                return h.hexdigest()
 
+       @property
+       def countries(self):
+               ret = {}
+
+               for country in iso3166.countries:
+                       count = self._count("(&(objectClass=person)(st=%s))" % country.alpha2)
+
+                       if count:
+                               ret[country] = count
+
+               return ret
+
 
 class Account(LDAPObject):
        def __str__(self):