Skip to content

Instantly share code, notes, and snippets.

@stephenmcd
stephenmcd / gist:1374413
Created November 17, 2011 20:27
Sort object list by index of attribute in a keylist
def sort_by_keylist(objects, attr, keylist):
indexes = dict([(x, i) for i, x in enumerate(keylist)])
return sorted(objects, key=lambda x: indexes.get(getattr(x, attr)))
@stephenmcd
stephenmcd / tag_closer.py
Created November 18, 2011 20:07
HTMLParser that closes open tags
class TagCloser(HTMLParser):
"""
HTMLParser that closes open tags. Call close_tags with a HTML
string arg which returns it with any required closing tags
appended.
"""
def __init__(self):
HTMLParser.__init__(self)
self.tags = []
@stephenmcd
stephenmcd / declauser.py
Created January 21, 2012 02:16
Convert 3-clause BSD licenses to 2-clause in a directory of projects, commit and push to BitBucket and GitHub
#!/usr/bin/env python
import os
cwd = os.path.abspath(os.getcwd())
for project in os.listdir("."):
path = os.path.join(cwd, project)
if not os.path.isdir(path):
@stephenmcd
stephenmcd / slumber_django_testclient.py
Created February 8, 2012 04:58
Subclass of ``slumber.API`` that patches ``requests.request`` with Django test client compatible HTTP requests.
from collections import namedtuple
from django.test import TestCase
from requests.auth import HTTPBasicAuth
import slumber
class SlumberTestClientAPI(slumber.API):
"""
Subclass of ``slumber.API`` that patches ``requests.request``
@stephenmcd
stephenmcd / requirements_report.py
Created June 18, 2012 00:45
Build a report of Python requirements for multiple repositories.
#!/usr/bin/env python
"""
Given the current directory contains multiple repositories, each with a
requirements/project.txt file, build a report of all requirements.
"""
import os
reqs = {}
@stephenmcd
stephenmcd / trans_stats.py
Created June 18, 2012 11:33
A super-messy Django translation file parser.
import os
translators = []
languages = []
for root, dirs, files in os.walk("mezz_current/mezzanine"):
if root.endswith("locale"):
languages.extend(dirs)
for name in files:
if name == "django.po":
@stephenmcd
stephenmcd / cache_stats.py
Created August 3, 2012 02:40
Quick cache stats scraper using django-debug-toolbar's cache panel.
#!/usr/bin/env python
import os
import sys
import urllib
name, url, num = sys.argv[1:]
print name, url, num
first = not os.path.exists("output.csv")
f = open("output.csv", "a")
@stephenmcd
stephenmcd / deep_force_unicode.py
Created August 5, 2012 00:37
Recursive force_unicode
from django.utils.encoding import force_unicode
from django.utils.functional import Promise
def deep_force_unicode(value):
"""
Recursively call force_unicode on value.
"""
if isinstance(value (list, tuple, set)):
value = type(value)(map(deep_force_unicode, value))
elif isinstance(value, dict):
@stephenmcd
stephenmcd / linkedin_viewers_rss.py
Created December 7, 2013 21:28
Convert linkedin profile viewers to RSS.
import cgi
import getpass
import mechanize
import json
import SimpleHTTPServer
import SocketServer
import uuid
@stephenmcd
stephenmcd / rtl_field.py
Created December 11, 2013 19:54
Calculated RTL field handling in Django Rest Framework.
from unicodedata import bidirectional
from django.template.defaultfilters import striptags
from rest_framework import serializers
class RTLField(serializers.BooleanField):
def __init__(self, *args, **kwargs):
kwargs.setdefault("read_only", True)
super(RTLField, self).__init__(*args, **kwargs)