From e16e3f8d2d72db52ca836b9838f62efb589bb95f Mon Sep 17 00:00:00 2001 From: Nick Sergeant Date: Sun, 14 Apr 2013 23:35:05 -0400 Subject: [PATCH] Gravatar scraper. --- fabfile.py | 120 +++++++++++++++++------- media/img/default-gravatar-homepage.gif | Bin 1 -> 1609 bytes settings.py | 2 +- templates/homepage.html | 2 +- views.py | 2 +- 5 files changed, 90 insertions(+), 36 deletions(-) diff --git a/fabfile.py b/fabfile.py index b7d0861..ab324d6 100644 --- a/fabfile.py +++ b/fabfile.py @@ -1,9 +1,12 @@ +#!/usr/bin/env python +# -- coding: utf-8 -- + from fabric.api import cd, local, env, run, sudo from boto.s3.connection import S3Connection from boto.s3.key import Key -import datetime, sys +import datetime, hashlib, sys from settings_local import AMAZON_API_KEY, AMAZON_API_SECRET, ENV_HOST @@ -12,9 +15,21 @@ env.hosts = [ENV_HOST] env.site_path = '/var/www/snipt' env.venv_path = '/home/nick/.virtualenvs/snipt' +def _display_message(message, extra_line=True): + if extra_line: + msg = '\n{}\n========================\n\n'.format(message) + else: + msg = '{}\n========================\n\n'.format(message) + try: + from fabric.colors import cyan + sys.stderr.write(cyan(msg)) + except ImportError: + print(msg) + def _python(cmd): return env.venv_path.rstrip('/') + '/bin/python ' + cmd + def dep(): _display_message('Collect static (local)') @@ -48,28 +63,6 @@ def dep(): run(_python('manage.py collectstatic --ignore cache --noinput')) -def db(): - with cd(env.site_path): - - _display_message('Sync DB and migrate') - ################ - - run(_python('manage.py syncdb')) - run(_python('manage.py migrate')) - -def re(): - with cd(env.site_path): - - _display_message('Kill gunicorn process') - ################ - - sudo('supervisorctl stop snipt') - - _display_message('Restart gunicorn process') - ################ - - sudo('supervisorctl start snipt') - def db_backup(): filename = datetime.datetime.now().strftime('%h-%d-%y__%I-%M-%S_%p.pgdump') @@ -85,14 +78,75 @@ def db_backup(): local('rm {}'.format(filename)) -def _display_message(message, extra_line=True): - if extra_line: - msg = '\n{}\n========================\n\n'.format(message) - else: - msg = '{}\n========================\n\n'.format(message) - try: - from fabric.colors import cyan - sys.stderr.write(cyan(msg)) - except ImportError: - print(msg) +def db(): + with cd(env.site_path): + + _display_message('Sync DB and migrate') + ################ + + run(_python('manage.py syncdb')) + run(_python('manage.py migrate')) + +def gravatars(): + + from fabric.contrib import django + django.settings_module('settings') + + from django.contrib.auth.models import User + + import requests + + _display_message('Updating all users\' Gravatar flags') + ################ + + for user in User.objects.all().order_by('id'): + + _display_message('{}. {}'.format(user.pk, user.username.encode('ascii', 'ignore'))) + ################ + + email_md5 = hashlib.md5(user.email.lower()).hexdigest() + + print 'Email MD5: {}'.format(email_md5) + + if user.profile.has_gravatar == False: + + greq = requests.get('http://en.gravatar.com/{}.json'.format(email_md5)) + + if greq.json() == 'User not found': + has_gravatar = False + else: + has_gravatar = True + + else: + has_gravatar = True + print 'Already had Gravatar! Not checking again.' + + if has_gravatar and not user.profile.has_gravatar: + profile = user.profile + profile.has_gravatar = True + profile.save() + + try: + from fabric.colors import green, red + + if has_gravatar: + print 'Has Gravatar: {}'.format(green(has_gravatar)) + else: + print 'Has Gravatar: {}'.format(red(has_gravatar)) + + except ImportError: + print 'Has Gravatar: {}'.format(has_gravatar) + +def re(): + with cd(env.site_path): + + _display_message('Kill gunicorn process') + ################ + + sudo('supervisorctl stop snipt') + + _display_message('Restart gunicorn process') + ################ + + sudo('supervisorctl start snipt') diff --git a/media/img/default-gravatar-homepage.gif b/media/img/default-gravatar-homepage.gif index 8b137891791fe96927ad78e64b0aad7bded08bdc..aaa75294d4770fc4545f3d3a0e145e03c56443ef 100644 GIT binary patch literal 1609 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1SBWM%0B~Ak|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFjeFsTY(OatnYqyQCInmZhe+73JqDfIV%MiQ6saIL(9V zO~LIJ3!HlOfsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;usy^diZC!R?e=tW45_&F zX2#BJBS(<~k9WE?cep1hGO8-H39tw@b@`r<7htK*)@3pi3!9etiJe1BN$eJvVBqBz z1&&)cG$fpxx|-OB?*CnnETRr)(@VAqWrvzVjlpe84 z`WqgxHA+{6>*m{Ut5<9D9ClHfcrf9^&zkx3=ZEYJTcR@my!Bkal_9&z&VK&Pk_Xeme8G z5Lc_wOrDc0q4RmfWd45pHf@Jp|MB12Pv70>oN%!7wZ2&Q`t|y^y8U;??Ax)!A?kjP zS-+cd)n&~k$HP{)rUdDTc`p@uo6l|f;Af59j(OiaTzD%wT$ToT>WjTucr|OHPl=T* zr_K|;M{nQqmMQJ{@%8K1SzJJpMqjrmi=+p^p5zu&)q|GmxG zSw73APoEyOwykaI*)&_Z^JmZUu8nsMFpSl^{`$4H$+hSWLY*voBipqjNdz0`+E*Q zTytg}^|=y=!4`K|Tt$Cod|8yFc5 W)`&2$6=%K#74Dv{elF{r5}E*i@n>fM literal 1 Icmd-A000XB3jhEB diff --git a/settings.py b/settings.py index 9157b44..a9c652b 100644 --- a/settings.py +++ b/settings.py @@ -76,7 +76,7 @@ STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.AppDirectoriesFinder', ) -SECRET_KEY = '' +SECRET_KEY = 'changethis' INSTALLED_APPS = ( 'gunicorn', diff --git a/templates/homepage.html b/templates/homepage.html index 3e89316..e72760e 100644 --- a/templates/homepage.html +++ b/templates/homepage.html @@ -59,7 +59,7 @@
{% for coder in coders %} - {{ coder.username }} + {{ coder.username }} {% endfor %}
diff --git a/views.py b/views.py index ab197db..2a5d61c 100644 --- a/views.py +++ b/views.py @@ -18,7 +18,7 @@ from settings_local import STRIPE_SECRET_KEY @render_to('homepage.html') def homepage(request): - random_users = UserProfile.objects.filter(has_gravatar=True).order_by('?')[:100] + random_users = UserProfile.objects.filter(has_gravatar=True).order_by('?')[:50] coders = [] for random_user in random_users: