/klpmis/django_extensions/build/lib.linux-i686-2.6/django_extensions/management/commands/set_fake_emails.py

https://github.com/klpdotorg/KLP-MIS · Python · 105 lines · 89 code · 6 blank · 10 comment · 0 complexity · 26306e3136b175fa7dddb59e7ac09d81 MD5 · raw file

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. """
  4. set_fake_emails.py
  5. Give all users a new email account. Useful for testing in a
  6. development environment. As such, this command is only available when
  7. setting.DEBUG is True.
  8. """
  9. from optparse import make_option
  10. from django.conf import settings
  11. from django.core.management.base import NoArgsCommand, CommandError
  12. DEFAULT_FAKE_EMAIL = '%(username)s@example.com'
  13. class Command(NoArgsCommand):
  14. option_list = NoArgsCommand.option_list + (
  15. make_option('--email', dest='default_email',
  16. default=DEFAULT_FAKE_EMAIL,
  17. help='Use this as the new email format.'),
  18. make_option(
  19. '-a',
  20. '--no-admin',
  21. action='store_true',
  22. dest='no_admin',
  23. default=False,
  24. help='Do not change administrator accounts',
  25. ),
  26. make_option(
  27. '-s',
  28. '--no-staff',
  29. action='store_true',
  30. dest='no_staff',
  31. default=False,
  32. help='Do not change staff accounts',
  33. ),
  34. make_option('--include', dest='include_regexp', default=None,
  35. help='Include usernames matching this regexp.'),
  36. make_option('--exclude', dest='exclude_regexp', default=None,
  37. help='Exclude usernames matching this regexp.'),
  38. make_option('--include-groups', dest='include_groups',
  39. default=None,
  40. help='Include users matching this group. (use comma seperation for multiple groups)'
  41. ),
  42. make_option('--exclude-groups', dest='exclude_groups',
  43. default=None,
  44. help='Exclude users matching this group. (use comma seperation for multiple groups)'
  45. ),
  46. )
  47. help = \
  48. '''DEBUG only: give all users a new email based on their account data ("%s" by default). Possible parameters are: username, first_name, last_name''' \
  49. % (DEFAULT_FAKE_EMAIL, )
  50. requires_model_validation = False
  51. def handle_noargs(self, **options):
  52. if not settings.DEBUG:
  53. raise CommandError('Only available in debug mode')
  54. from django.contrib.auth.models import User, Group
  55. email = options.get('default_email', DEFAULT_FAKE_EMAIL)
  56. include_regexp = options.get('include_regexp', None)
  57. exclude_regexp = options.get('exclude_regexp', None)
  58. include_groups = options.get('include_groups', None)
  59. exclude_groups = options.get('exclude_groups', None)
  60. no_admin = options.get('no_admin', False)
  61. no_staff = options.get('no_staff', False)
  62. users = User.objects.all()
  63. if no_admin:
  64. users = users.exclude(is_superuser=True)
  65. if no_staff:
  66. users = users.exclude(is_staff=True)
  67. if exclude_groups:
  68. groups = \
  69. Group.objects.filter(name__in=exclude_groups.split(','))
  70. if groups:
  71. users = users.exclude(groups__in=groups)
  72. else:
  73. raise CommandError('No group matches filter: %s'
  74. % exclude_groups)
  75. if include_groups:
  76. groups = \
  77. Group.objects.filter(name__in=include_groups.split(','))
  78. if groups:
  79. users = users.filter(groups__in=groups)
  80. else:
  81. raise CommandError('No groups matches filter: %s'
  82. % include_groups)
  83. if exclude_regexp:
  84. users = users.exclude(username__regex=exclude_regexp)
  85. if include_regexp:
  86. users = users.filter(username__regex=include_regexp)
  87. for user in users:
  88. user.email = email % {'username': user.username,
  89. 'first_name': user.first_name,
  90. 'last_name': user.last_name}
  91. user.save()
  92. print 'Changed %d emails' % users.count()