Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 23rd, 2012  |  syntax: None  |  size: 1.80 KB  |  hits: 8  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  
  2.  
  3. from datetime import datetime
  4.  
  5.  
  6. #########################################
  7. # Set up the django environment
  8. #########################################
  9. from django.core.management import setup_environ
  10.  
  11. import settings
  12. setup_environ(settings)
  13.  
  14. from django.contrib.auth.models import User
  15.  
  16.  
  17. #########################################
  18. # Set the granularity of the report
  19. #########################################
  20. GRANULARITIES = {
  21.     'y': (lambda x: [x.year, 1, 1],
  22.           '%Y'),
  23.     'm': (lambda x: [x.year, x.month, 1],
  24.           '%Y-%m'),
  25.     'd': (lambda x: [x.year, x.month, x.day],
  26.           '%Y-%m-%d'),
  27.     'H': (lambda x: [x.year, x.month, x.day, x.hour],
  28.           '%Y-%m-%d %H:%M'),
  29.     'M': (lambda x: [x.year, x.month, x.day, x.hour, x.minute],
  30.           '%Y-%m-%d %H:%M'),
  31. }
  32.  
  33.  
  34. def get_granulatity_options(granularity):
  35.     return GRANULARITIES[granularity]
  36.  
  37.  
  38. def group_users_by_join_date(date_fields):
  39.     grouped_users = {}
  40.     for u in User.objects.all().values_list('date_joined'):
  41.         join_date = datetime(*date_fields(u[0]))
  42.         grouped_users.setdefault(join_date, 0)
  43.         grouped_users[join_date] += 1
  44.     return grouped_users
  45.  
  46.  
  47. def convert_to_list(grouped_users, date_format):
  48.     grouped_users_keys = grouped_users.keys()
  49.     grouped_users_keys.sort()
  50.     return ["%s: %d" % (x.strftime(date_format), grouped_users[x])
  51.                                                 for x in grouped_users_keys]
  52.  
  53.  
  54. if __name__ == "__main__":
  55.     from sys import argv
  56.     granularity = 'y' if len(argv) == 1 else argv[1]
  57.     date_fields, date_format = get_granulatity_options(granularity)
  58.     grouped_users = group_users_by_join_date(date_fields)
  59.     total_user_count = sum(grouped_users.values())
  60.     for grouping in convert_to_list(grouped_users, date_format):
  61.         print grouping
  62.     print 'Total Users: %d' % total_user_count