Skip to content
Snippets Groups Projects
Commit 1d1a9173 authored by Calen Pennington's avatar Calen Pennington
Browse files

Cleaning up pep8 violations

parent 7ef8b6ac
No related merge requests found
Showing
with 107 additions and 79 deletions
...@@ -19,10 +19,12 @@ def user(email): ...@@ -19,10 +19,12 @@ def user(email):
'''look up a user by email''' '''look up a user by email'''
return User.objects.get(email=email) return User.objects.get(email=email)
def registration(email): def registration(email):
'''look up registration object by email''' '''look up registration object by email'''
return Registration.objects.get(user__email=email) return Registration.objects.get(user__email=email)
class AuthTestCase(TestCase): class AuthTestCase(TestCase):
"""Check that various permissions-related things work""" """Check that various permissions-related things work"""
...@@ -36,7 +38,7 @@ class AuthTestCase(TestCase): ...@@ -36,7 +38,7 @@ class AuthTestCase(TestCase):
resp = self.client.get(url) resp = self.client.get(url)
self.assertEqual(resp.status_code, expected) self.assertEqual(resp.status_code, expected)
return resp return resp
def test_public_pages_load(self): def test_public_pages_load(self):
"""Make sure pages that don't require login load without error.""" """Make sure pages that don't require login load without error."""
pages = ( pages = (
...@@ -60,11 +62,11 @@ class AuthTestCase(TestCase): ...@@ -60,11 +62,11 @@ class AuthTestCase(TestCase):
'username': username, 'username': username,
'email': email, 'email': email,
'password': pw, 'password': pw,
'location' : 'home', 'location': 'home',
'language' : 'Franglish', 'language': 'Franglish',
'name' : 'Fred Weasley', 'name': 'Fred Weasley',
'terms_of_service' : 'true', 'terms_of_service': 'true',
'honor_code' : 'true', 'honor_code': 'true',
}) })
return resp return resp
...@@ -99,7 +101,6 @@ class AuthTestCase(TestCase): ...@@ -99,7 +101,6 @@ class AuthTestCase(TestCase):
self.create_account(self.username, self.email, self.pw) self.create_account(self.username, self.email, self.pw)
self.activate_user(self.email) self.activate_user(self.email)
def _login(self, email, pw): def _login(self, email, pw):
'''Login. View should always return 200. The success/fail is in the '''Login. View should always return 200. The success/fail is in the
returned json''' returned json'''
...@@ -108,7 +109,6 @@ class AuthTestCase(TestCase): ...@@ -108,7 +109,6 @@ class AuthTestCase(TestCase):
self.assertEqual(resp.status_code, 200) self.assertEqual(resp.status_code, 200)
return resp return resp
def login(self, email, pw): def login(self, email, pw):
'''Login, check that it worked.''' '''Login, check that it worked.'''
resp = self._login(self.email, self.pw) resp = self._login(self.email, self.pw)
...@@ -162,7 +162,6 @@ class AuthTestCase(TestCase): ...@@ -162,7 +162,6 @@ class AuthTestCase(TestCase):
for page in simple_auth_pages: for page in simple_auth_pages:
print "Checking '{0}'".format(page) print "Checking '{0}'".format(page)
self.check_page_get(page, expected=200) self.check_page_get(page, expected=200)
def test_index_auth(self): def test_index_auth(self):
......
...@@ -58,7 +58,7 @@ def export_to_github(course, commit_message, author_str=None): ...@@ -58,7 +58,7 @@ def export_to_github(course, commit_message, author_str=None):
git_repo.git.commit(m=commit_message, author=author_str) git_repo.git.commit(m=commit_message, author=author_str)
else: else:
git_repo.git.commit(m=commit_message) git_repo.git.commit(m=commit_message)
origin = git_repo.remotes.origin origin = git_repo.remotes.origin
if settings.MITX_FEATURES['GITHUB_PUSH']: if settings.MITX_FEATURES['GITHUB_PUSH']:
push_infos = origin.push() push_infos = origin.push()
......
...@@ -50,4 +50,3 @@ class PostReceiveTestCase(TestCase): ...@@ -50,4 +50,3 @@ class PostReceiveTestCase(TestCase):
import_from_github.assert_called_with(settings.REPOS['repo']) import_from_github.assert_called_with(settings.REPOS['repo'])
mock_revision, mock_course = import_from_github.return_value mock_revision, mock_course = import_from_github.return_value
export_to_github.assert_called_with(mock_course, 'path', "Changes from cms import of revision %s" % mock_revision) export_to_github.assert_called_with(mock_course, 'path', "Changes from cms import of revision %s" % mock_revision)
...@@ -13,6 +13,7 @@ from django.db import DEFAULT_DB_ALIAS ...@@ -13,6 +13,7 @@ from django.db import DEFAULT_DB_ALIAS
from . import app_settings from . import app_settings
def get_instance(model, instance_or_pk, timeout=None, using=None): def get_instance(model, instance_or_pk, timeout=None, using=None):
""" """
Returns the ``model`` instance with a primary key of ``instance_or_pk``. Returns the ``model`` instance with a primary key of ``instance_or_pk``.
...@@ -87,6 +88,7 @@ def get_instance(model, instance_or_pk, timeout=None, using=None): ...@@ -87,6 +88,7 @@ def get_instance(model, instance_or_pk, timeout=None, using=None):
return instance return instance
def delete_instance(model, *instance_or_pk): def delete_instance(model, *instance_or_pk):
""" """
Purges the cache keys for the instances of this model. Purges the cache keys for the instances of this model.
...@@ -94,6 +96,7 @@ def delete_instance(model, *instance_or_pk): ...@@ -94,6 +96,7 @@ def delete_instance(model, *instance_or_pk):
cache.delete_many([instance_key(model, x) for x in instance_or_pk]) cache.delete_many([instance_key(model, x) for x in instance_or_pk])
def instance_key(model, instance_or_pk): def instance_key(model, instance_or_pk):
""" """
Returns the cache key for this (model, instance) pair. Returns the cache key for this (model, instance) pair.
......
...@@ -84,6 +84,7 @@ from django.contrib.auth.middleware import AuthenticationMiddleware ...@@ -84,6 +84,7 @@ from django.contrib.auth.middleware import AuthenticationMiddleware
from .model import cache_model from .model import cache_model
class CacheBackedAuthenticationMiddleware(AuthenticationMiddleware): class CacheBackedAuthenticationMiddleware(AuthenticationMiddleware):
def __init__(self): def __init__(self):
cache_model(User) cache_model(User)
......
...@@ -58,6 +58,7 @@ from django.db.models.signals import post_save, post_delete ...@@ -58,6 +58,7 @@ from django.db.models.signals import post_save, post_delete
from .core import get_instance, delete_instance from .core import get_instance, delete_instance
def cache_model(model, timeout=None): def cache_model(model, timeout=None):
if hasattr(model, 'get_cached'): if hasattr(model, 'get_cached'):
# Already patched # Already patched
......
...@@ -74,6 +74,7 @@ from django.db.models.signals import post_save, post_delete ...@@ -74,6 +74,7 @@ from django.db.models.signals import post_save, post_delete
from .core import get_instance, delete_instance from .core import get_instance, delete_instance
def cache_relation(descriptor, timeout=None): def cache_relation(descriptor, timeout=None):
rel = descriptor.related rel = descriptor.related
related_name = '%s_cache' % rel.field.related_query_name() related_name = '%s_cache' % rel.field.related_query_name()
......
...@@ -5,6 +5,7 @@ from django.template import resolve_variable ...@@ -5,6 +5,7 @@ from django.template import resolve_variable
register = template.Library() register = template.Library()
class CacheNode(Node): class CacheNode(Node):
def __init__(self, nodelist, expire_time, key): def __init__(self, nodelist, expire_time, key):
self.nodelist = nodelist self.nodelist = nodelist
...@@ -21,6 +22,7 @@ class CacheNode(Node): ...@@ -21,6 +22,7 @@ class CacheNode(Node):
cache.set(key, value, expire_time) cache.set(key, value, expire_time)
return value return value
@register.tag @register.tag
def cachedeterministic(parser, token): def cachedeterministic(parser, token):
""" """
...@@ -42,6 +44,7 @@ def cachedeterministic(parser, token): ...@@ -42,6 +44,7 @@ def cachedeterministic(parser, token):
raise TemplateSyntaxError(u"'%r' tag requires 2 arguments." % tokens[0]) raise TemplateSyntaxError(u"'%r' tag requires 2 arguments." % tokens[0])
return CacheNode(nodelist, tokens[1], tokens[2]) return CacheNode(nodelist, tokens[1], tokens[2])
class ShowIfCachedNode(Node): class ShowIfCachedNode(Node):
def __init__(self, key): def __init__(self, key):
self.key = key self.key = key
...@@ -50,6 +53,7 @@ class ShowIfCachedNode(Node): ...@@ -50,6 +53,7 @@ class ShowIfCachedNode(Node):
key = resolve_variable(self.key, context) key = resolve_variable(self.key, context)
return cache.get(key) or '' return cache.get(key) or ''
@register.tag @register.tag
def showifcached(parser, token): def showifcached(parser, token):
""" """
......
...@@ -60,6 +60,7 @@ def csrf_response_exempt(view_func): ...@@ -60,6 +60,7 @@ def csrf_response_exempt(view_func):
PendingDeprecationWarning) PendingDeprecationWarning)
return view_func return view_func
def csrf_view_exempt(view_func): def csrf_view_exempt(view_func):
""" """
Marks a view function as being exempt from CSRF view protection. Marks a view function as being exempt from CSRF view protection.
...@@ -68,6 +69,7 @@ def csrf_view_exempt(view_func): ...@@ -68,6 +69,7 @@ def csrf_view_exempt(view_func):
PendingDeprecationWarning) PendingDeprecationWarning)
return csrf_exempt(view_func) return csrf_exempt(view_func)
def csrf_exempt(view_func): def csrf_exempt(view_func):
""" """
Marks a view function as being exempt from the CSRF view protection. Marks a view function as being exempt from the CSRF view protection.
......
...@@ -6,6 +6,7 @@ from pipeline.conf import settings ...@@ -6,6 +6,7 @@ from pipeline.conf import settings
from pipeline.packager import Packager from pipeline.packager import Packager
from pipeline.utils import guess_type from pipeline.utils import guess_type
def compressed_css(package_name): def compressed_css(package_name):
package = settings.PIPELINE_CSS.get(package_name, {}) package = settings.PIPELINE_CSS.get(package_name, {})
if package: if package:
...@@ -20,6 +21,7 @@ def compressed_css(package_name): ...@@ -20,6 +21,7 @@ def compressed_css(package_name):
paths = packager.compile(package.paths) paths = packager.compile(package.paths)
return render_individual_css(package, paths) return render_individual_css(package, paths)
def render_css(package, path): def render_css(package, path):
template_name = package.template_name or "mako/css.html" template_name = package.template_name or "mako/css.html"
context = package.extra_context context = package.extra_context
...@@ -29,6 +31,7 @@ def render_css(package, path): ...@@ -29,6 +31,7 @@ def render_css(package, path):
}) })
return render_to_string(template_name, context) return render_to_string(template_name, context)
def render_individual_css(package, paths): def render_individual_css(package, paths):
tags = [render_css(package, path) for path in paths] tags = [render_css(package, path) for path in paths]
return '\n'.join(tags) return '\n'.join(tags)
...@@ -49,6 +52,7 @@ def compressed_js(package_name): ...@@ -49,6 +52,7 @@ def compressed_js(package_name):
templates = packager.pack_templates(package) templates = packager.pack_templates(package)
return render_individual_js(package, paths, templates) return render_individual_js(package, paths, templates)
def render_js(package, path): def render_js(package, path):
template_name = package.template_name or "mako/js.html" template_name = package.template_name or "mako/js.html"
context = package.extra_context context = package.extra_context
...@@ -58,6 +62,7 @@ def render_js(package, path): ...@@ -58,6 +62,7 @@ def render_js(package, path):
}) })
return render_to_string(template_name, context) return render_to_string(template_name, context)
def render_inline_js(package, js): def render_inline_js(package, js):
context = package.extra_context context = package.extra_context
context.update({ context.update({
...@@ -65,6 +70,7 @@ def render_inline_js(package, js): ...@@ -65,6 +70,7 @@ def render_inline_js(package, js):
}) })
return render_to_string("mako/inline_js.html", context) return render_to_string("mako/inline_js.html", context)
def render_individual_js(package, paths, templates=None): def render_individual_js(package, paths, templates=None):
tags = [render_js(package, js) for js in paths] tags = [render_js(package, js) for js in paths]
if templates: if templates:
......
...@@ -15,4 +15,3 @@ admin.site.register(CourseEnrollment) ...@@ -15,4 +15,3 @@ admin.site.register(CourseEnrollment)
admin.site.register(Registration) admin.site.register(Registration)
admin.site.register(PendingNameChange) admin.site.register(PendingNameChange)
...@@ -25,27 +25,29 @@ import mitxmako.middleware as middleware ...@@ -25,27 +25,29 @@ import mitxmako.middleware as middleware
middleware.MakoMiddleware() middleware.MakoMiddleware()
class Command(BaseCommand): class Command(BaseCommand):
help = \ help = \
'''Exports all users and user profiles. '''Exports all users and user profiles.
Caveat: Should be looked over before any run Caveat: Should be looked over before any run
for schema changes. for schema changes.
Current version grabs user_keys from Current version grabs user_keys from
django.contrib.auth.models.User and up_keys django.contrib.auth.models.User and up_keys
from student.userprofile. ''' from student.userprofile. '''
def handle(self, *args, **options): def handle(self, *args, **options):
users = list(User.objects.all()) users = list(User.objects.all())
user_profiles = list(UserProfile.objects.all()) user_profiles = list(UserProfile.objects.all())
user_profile_dict = dict([(up.user_id, up) for up in user_profiles]) user_profile_dict = dict([(up.user_id, up) for up in user_profiles])
user_tuples = [(user_profile_dict[u.id], u) for u in users if u.id in user_profile_dict] user_tuples = [(user_profile_dict[u.id], u) for u in users if u.id in user_profile_dict]
user_keys = ['id', 'username', 'email', 'password', 'is_staff', user_keys = ['id', 'username', 'email', 'password', 'is_staff',
'is_active', 'is_superuser', 'last_login', 'date_joined', 'is_active', 'is_superuser', 'last_login', 'date_joined',
'password'] 'password']
up_keys = ['language', 'location','meta','name', 'id','user_id'] up_keys = ['language', 'location', 'meta', 'name', 'id', 'user_id']
def extract_dict(keys, object): def extract_dict(keys, object):
d = {} d = {}
for key in keys: for key in keys:
......
...@@ -22,6 +22,7 @@ import mitxmako.middleware as middleware ...@@ -22,6 +22,7 @@ import mitxmako.middleware as middleware
middleware.MakoMiddleware() middleware.MakoMiddleware()
def import_user(u): def import_user(u):
user_info = u['u'] user_info = u['u']
up_info = u['up'] up_info = u['up']
...@@ -30,11 +31,10 @@ def import_user(u): ...@@ -30,11 +31,10 @@ def import_user(u):
user_info['last_login'] = dateutil.parser.parse(user_info['last_login']) user_info['last_login'] = dateutil.parser.parse(user_info['last_login'])
user_info['date_joined'] = dateutil.parser.parse(user_info['date_joined']) user_info['date_joined'] = dateutil.parser.parse(user_info['date_joined'])
user_keys = ['id', 'username', 'email', 'password', 'is_staff', user_keys = ['id', 'username', 'email', 'password', 'is_staff',
'is_active', 'is_superuser', 'last_login', 'date_joined', 'is_active', 'is_superuser', 'last_login', 'date_joined',
'password'] 'password']
up_keys = ['language', 'location','meta','name', 'id','user_id'] up_keys = ['language', 'location', 'meta', 'name', 'id', 'user_id']
u = User() u = User()
for key in user_keys: for key in user_keys:
...@@ -47,20 +47,22 @@ def import_user(u): ...@@ -47,20 +47,22 @@ def import_user(u):
up.__setattr__(key, up_info[key]) up.__setattr__(key, up_info[key])
up.save() up.save()
class Command(BaseCommand): class Command(BaseCommand):
help = \ help = \
'''Exports all users and user profiles. '''Exports all users and user profiles.
Caveat: Should be looked over before any run Caveat: Should be looked over before any run
for schema changes. for schema changes.
Current version grabs user_keys from Current version grabs user_keys from
django.contrib.auth.models.User and up_keys django.contrib.auth.models.User and up_keys
from student.userprofile. ''' from student.userprofile. '''
def handle(self, *args, **options): def handle(self, *args, **options):
extracted = json.load(open('transfer_users.txt')) extracted = json.load(open('transfer_users.txt'))
n=0 n = 0
for u in extracted: for u in extracted:
import_user(u) import_user(u)
if n%100 == 0: if n % 100 == 0:
print n print n
n = n+1 n = n + 1
...@@ -17,29 +17,32 @@ import json ...@@ -17,29 +17,32 @@ import json
middleware.MakoMiddleware() middleware.MakoMiddleware()
def group_from_value(groups, v): def group_from_value(groups, v):
''' Given group: (('a',0.3),('b',0.4),('c',0.3)) And random value ''' Given group: (('a',0.3),('b',0.4),('c',0.3)) And random value
in [0,1], return the associated group (in the above case, return in [0,1], return the associated group (in the above case, return
'a' if v<0.3, 'b' if 0.3<=v<0.7, and 'c' if v>0.7 'a' if v<0.3, 'b' if 0.3<=v<0.7, and 'c' if v>0.7
''' '''
sum = 0 sum = 0
for (g,p) in groups: for (g, p) in groups:
sum = sum + p sum = sum + p
if sum > v: if sum > v:
return g return g
return g # For round-off errors return g # For round-off errors
class Command(BaseCommand): class Command(BaseCommand):
help = \ help = \
''' Assign users to test groups. Takes a list ''' Assign users to test groups. Takes a list
of groups: of groups:
a:0.3,b:0.4,c:0.3 file.txt "Testing something" a:0.3,b:0.4,c:0.3 file.txt "Testing something"
Will assign each user to group a, b, or c with Will assign each user to group a, b, or c with
probability 0.3, 0.4, 0.3. Probabilities must probability 0.3, 0.4, 0.3. Probabilities must
add up to 1. add up to 1.
Will log what happened to file.txt. Will log what happened to file.txt.
''' '''
def handle(self, *args, **options): def handle(self, *args, **options):
if len(args) != 3: if len(args) != 3:
print "Invalid number of options" print "Invalid number of options"
...@@ -47,13 +50,13 @@ Will log what happened to file.txt. ...@@ -47,13 +50,13 @@ Will log what happened to file.txt.
# Extract groups from string # Extract groups from string
group_strs = [x.split(':') for x in args[0].split(',')] group_strs = [x.split(':') for x in args[0].split(',')]
groups = [(group,float(value)) for group,value in group_strs] groups = [(group, float(value)) for group, value in group_strs]
print "Groups", groups print "Groups", groups
## Confirm group probabilities add up to 1 ## Confirm group probabilities add up to 1
total = sum(zip(*groups)[1]) total = sum(zip(*groups)[1])
print "Total:", total print "Total:", total
if abs(total-1)>0.01: if abs(total - 1) > 0.01:
print "Total not 1" print "Total not 1"
sys.exit(-1) sys.exit(-1)
...@@ -65,15 +68,15 @@ Will log what happened to file.txt. ...@@ -65,15 +68,15 @@ Will log what happened to file.txt.
group_objects = {} group_objects = {}
f = open(args[1],"a+") f = open(args[1], "a+")
## Create groups ## Create groups
for group in dict(groups): for group in dict(groups):
utg = UserTestGroup() utg = UserTestGroup()
utg.name=group utg.name = group
utg.description = json.dumps({"description":args[2]}, utg.description = json.dumps({"description": args[2]},
{"time":datetime.datetime.utcnow().isoformat()}) {"time": datetime.datetime.utcnow().isoformat()})
group_objects[group]=utg group_objects[group] = utg
group_objects[group].save() group_objects[group].save()
## Assign groups ## Assign groups
...@@ -83,11 +86,11 @@ Will log what happened to file.txt. ...@@ -83,11 +86,11 @@ Will log what happened to file.txt.
if count % 1000 == 0: if count % 1000 == 0:
print count print count
count = count + 1 count = count + 1
v = random.uniform(0,1) v = random.uniform(0, 1)
group = group_from_value(groups,v) group = group_from_value(groups, v)
group_objects[group].users.add(user) group_objects[group].users.add(user)
f.write("Assigned user {name} ({id}) to {group}\n".format(name=user.username, f.write("Assigned user {name} ({id}) to {group}\n".format(name=user.username,
id=user.id, id=user.id,
group=group)) group=group))
## Save groups ## Save groups
......
...@@ -10,9 +10,11 @@ import mitxmako.middleware as middleware ...@@ -10,9 +10,11 @@ import mitxmako.middleware as middleware
middleware.MakoMiddleware() middleware.MakoMiddleware()
class Command(BaseCommand): class Command(BaseCommand):
help = \ help = \
''' Extract an e-mail list of all active students. ''' ''' Extract an e-mail list of all active students. '''
def handle(self, *args, **options): def handle(self, *args, **options):
#text = open(args[0]).read() #text = open(args[0]).read()
#subject = open(args[1]).read() #subject = open(args[1]).read()
......
...@@ -10,18 +10,20 @@ import mitxmako.middleware as middleware ...@@ -10,18 +10,20 @@ import mitxmako.middleware as middleware
middleware.MakoMiddleware() middleware.MakoMiddleware()
class Command(BaseCommand): class Command(BaseCommand):
help = \ help = \
'''Sends an e-mail to all users. Takes a single '''Sends an e-mail to all users. Takes a single
parameter -- name of e-mail template -- located parameter -- name of e-mail template -- located
in templates/email. Adds a .txt for the message in templates/email. Adds a .txt for the message
body, and an _subject.txt for the subject. ''' body, and an _subject.txt for the subject. '''
def handle(self, *args, **options): def handle(self, *args, **options):
#text = open(args[0]).read() #text = open(args[0]).read()
#subject = open(args[1]).read() #subject = open(args[1]).read()
users = User.objects.all() users = User.objects.all()
text = middleware.lookup['main'].get_template('email/'+args[0]+".txt").render() text = middleware.lookup['main'].get_template('email/' + args[0] + ".txt").render()
subject = middleware.lookup['main'].get_template('email/'+args[0]+"_subject.txt").render().strip() subject = middleware.lookup['main'].get_template('email/' + args[0] + "_subject.txt").render().strip()
for user in users: for user in users:
if user.is_active: if user.is_active:
user.email_user(subject, text) user.email_user(subject, text)
...@@ -16,16 +16,18 @@ import datetime ...@@ -16,16 +16,18 @@ import datetime
middleware.MakoMiddleware() middleware.MakoMiddleware()
def chunks(l, n): def chunks(l, n):
""" Yield successive n-sized chunks from l. """ Yield successive n-sized chunks from l.
""" """
for i in xrange(0, len(l), n): for i in xrange(0, len(l), n):
yield l[i:i+n] yield l[i:i + n]
class Command(BaseCommand): class Command(BaseCommand):
help = \ help = \
'''Sends an e-mail to all users in a text file. '''Sends an e-mail to all users in a text file.
E.g. E.g.
manage.py userlist.txt message logfile.txt rate manage.py userlist.txt message logfile.txt rate
userlist.txt -- list of all users userlist.txt -- list of all users
message -- prefix for template with message message -- prefix for template with message
...@@ -35,28 +37,28 @@ rate -- messages per second ...@@ -35,28 +37,28 @@ rate -- messages per second
log_file = None log_file = None
def hard_log(self, text): def hard_log(self, text):
self.log_file.write(datetime.datetime.utcnow().isoformat()+' -- '+text+'\n') self.log_file.write(datetime.datetime.utcnow().isoformat() + ' -- ' + text + '\n')
def handle(self, *args, **options): def handle(self, *args, **options):
global log_file global log_file
(user_file, message_base, logfilename, ratestr) = args (user_file, message_base, logfilename, ratestr) = args
users = [u.strip() for u in open(user_file).readlines()] users = [u.strip() for u in open(user_file).readlines()]
message = middleware.lookup['main'].get_template('emails/'+message_base+"_body.txt").render() message = middleware.lookup['main'].get_template('emails/' + message_base + "_body.txt").render()
subject = middleware.lookup['main'].get_template('emails/'+message_base+"_subject.txt").render().strip() subject = middleware.lookup['main'].get_template('emails/' + message_base + "_subject.txt").render().strip()
rate = int(ratestr) rate = int(ratestr)
self.log_file = open(logfilename, "a+", buffering = 0)
i=0 self.log_file = open(logfilename, "a+", buffering=0)
i = 0
for users in chunks(users, rate): for users in chunks(users, rate):
emails = [ (subject, message, settings.DEFAULT_FROM_EMAIL, [u]) for u in users ] emails = [(subject, message, settings.DEFAULT_FROM_EMAIL, [u]) for u in users]
self.hard_log(" ".join(users)) self.hard_log(" ".join(users))
send_mass_mail( emails, fail_silently = False ) send_mass_mail(emails, fail_silently=False)
time.sleep(1) time.sleep(1)
print datetime.datetime.utcnow().isoformat(), i print datetime.datetime.utcnow().isoformat(), i
i = i+len(users) i = i + len(users)
# Emergency interruptor # Emergency interruptor
if os.path.exists("/tmp/stopemails.txt"): if os.path.exists("/tmp/stopemails.txt"):
self.log_file.close() self.log_file.close()
......
...@@ -13,26 +13,28 @@ from student.models import UserProfile ...@@ -13,26 +13,28 @@ from student.models import UserProfile
middleware.MakoMiddleware() middleware.MakoMiddleware()
class Command(BaseCommand): class Command(BaseCommand):
help = \ help = \
''' Extract full user information into a JSON file. ''' Extract full user information into a JSON file.
Pass a single filename.''' Pass a single filename.'''
def handle(self, *args, **options): def handle(self, *args, **options):
f = open(args[0],'w') f = open(args[0], 'w')
#text = open(args[0]).read() #text = open(args[0]).read()
#subject = open(args[1]).read() #subject = open(args[1]).read()
users = User.objects.all() users = User.objects.all()
l = [] l = []
for user in users: for user in users:
up = UserProfile.objects.get(user = user) up = UserProfile.objects.get(user=user)
d = { 'username':user.username, d = {'username': user.username,
'email':user.email, 'email': user.email,
'is_active':user.is_active, 'is_active': user.is_active,
'joined':user.date_joined.isoformat(), 'joined': user.date_joined.isoformat(),
'name':up.name, 'name': up.name,
'language':up.language, 'language': up.language,
'location':up.location} 'location': up.location}
l.append(d) l.append(d)
json.dump(l,f) json.dump(l, f)
f.close() f.close()
...@@ -4,10 +4,11 @@ from south.db import db ...@@ -4,10 +4,11 @@ from south.db import db
from south.v2 import SchemaMigration from south.v2 import SchemaMigration
from django.db import models from django.db import models
class Migration(SchemaMigration): class Migration(SchemaMigration):
def forwards(self, orm): def forwards(self, orm):
# Adding model 'UserProfile' # Adding model 'UserProfile'
db.create_table('auth_userprofile', ( db.create_table('auth_userprofile', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
...@@ -28,16 +29,14 @@ class Migration(SchemaMigration): ...@@ -28,16 +29,14 @@ class Migration(SchemaMigration):
)) ))
db.send_create_signal('student', ['Registration']) db.send_create_signal('student', ['Registration'])
def backwards(self, orm): def backwards(self, orm):
# Deleting model 'UserProfile' # Deleting model 'UserProfile'
db.delete_table('auth_userprofile') db.delete_table('auth_userprofile')
# Deleting model 'Registration' # Deleting model 'Registration'
db.delete_table('auth_registration') db.delete_table('auth_registration')
models = { models = {
'auth.group': { 'auth.group': {
'Meta': {'object_name': 'Group'}, 'Meta': {'object_name': 'Group'},
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment