Skip to content

Instantly share code, notes, and snippets.

@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)
@stephenmcd
stephenmcd / metrics.py
Created January 23, 2014 05:20
Baseline system metrics daemon for statsd
import os
import time
from django.conf import settings
from django.contrib.auth.models import User
from django.core.management.base import NoArgsCommand
from django.db.models import Sum
import psutil
import redis
import statsd
from rest_framework import serializers
class HyperlinkedIdentityField(serializers.HyperlinkedIdentityField):
"""
This is a performance wrapper for HyperlinkedIdentityField.
We save a ton of time by not calling reverse potentially
thousands of times per request.
"""
def __init__(self, *args, **kwargs):
@stephenmcd
stephenmcd / django_browsable_email_backend.py
Last active August 29, 2015 13:56
An email backend for Django that opens each HTML email sent in a local webbrowser
from tempfile import NamedTemporaryFile
import webbrowser
from django.core.mail import EmailMultiAlternatives
class BrowsableEmailBackend(BaseEmailBackend):
def send_messages(self, email_messages):
for message in email_messages:
for body, content_type in getattr(message, "alternatives", []):
@stephenmcd
stephenmcd / parallel_merge_sort.py
Last active June 4, 2024 12:02
Parallel Merge Sort
import math
import multiprocessing
import random
import sys
import time
def merge(*args):
# Support explicit left/right args, as well as a two-item
# tuple which works more cleanly with multiprocessing.