Skip to content

Instantly share code, notes, and snippets.

Peter Bengtsson peterbe

Block or report user

Report or block peterbe

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
peterbe / gist:630965
Created Oct 17, 2010
Use this instead of version numbering in your git projects
View gist:630965
import os, re
import logging
from subprocess import Popen, PIPE
def get_git_revision():
return _get_git_revision()
def _get_git_revision():
# this is actually very fast. Takes about 0.01 seconds on my machine!
home = os.path.dirname(__file__)
peterbe /
Created Nov 28, 2010
This doesn't work: When you pip install it you get: IOError: [Errno 2] No such file or directory: '/home/peterbe/bin/build/python-donecal/'
from setuptools import setup
import sys, os
version = '0.2.3'
here = os.path.dirname(__file__)
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
def md2stx(s):
peterbe / edit_distance.js
Created Feb 5, 2011
EditDistanceMatcher function
View edit_distance.js
exports.EditDistanceMatcher = function(against, alphabet) {
this.against = against;
this.alphabet = alphabet || "abcdefghijklmnopqrstuvwxyz";
this.edits1 = function(word) {
var n = word.length;
var al = this.alphabet.length;
var set = new Array(), t;
// deletion
for (var i=0, len=n; i < len; i++) {
peterbe / test_edit_distance.js
Created Feb 5, 2011
Tests for EditDistanceMatcher
View test_edit_distance.js
var EditDistanceMatcher = require('../edit_distance').EditDistanceMatcher;
var testCase = require('nodeunit').testCase;
module.exports = testCase({
test_match: function(test) {
var edm = new EditDistanceMatcher(["peter"]);
test.equal(typeof edm.match('petter'), 'object');
test.equal(typeof edm.match('junk'), 'object');
// edm.match returns an array and remember,
// in javascript ['peter'] == ['peter'] => false
from tornado.web
class route(object):
decorates RequestHandlers and builds up a list of routables handlers
Tech Notes (or "What the *@# is really happening here?")
Everytime @route('...') is called, we instantiate a new route object which
saves off the passed in URI. Then, since it's a decorator, the function is
peterbe /
Created Feb 22, 2011
Use these instead of django.forms.Form or django.forms.ModelForm
class _BaseForm(object):
def clean(self):
cleaned_data = super(_BaseForm, self).clean()
for field in cleaned_data:
if isinstance(cleaned_data[field], basestring):
cleaned_data[field] = \
return cleaned_data
peterbe / gist:905558
Created Apr 6, 2011
Mixing class for dealing with HTTPS URL related stuff
View gist:905558
class HTTPSMixin(object):
def is_secure(self):
return self.request.headers.get('X-Scheme') == 'https'
def httpify_url(self, url=None):
url = url if url else self.request.full_url()
if url.startswith('/'):
parsed = urlparse(self.request.full_url())
return 'http://%s%s' % (parsed.netloc, url)
peterbe /
Created Apr 7, 2011
local settings to do github oauth on localhost:8000
'client_id': '1ccb7f00082bc45047e7', # peterbe
'client_secret': 'b406117bf98898e0ffe1b1757e64f76a3c439bea',
'base_url': '',
'redirect_url': ''
peterbe / gist:908208
Created Apr 7, 2011
Starting tornado with preforking (multiple threads, one port)
View gist:908208
def main(): # pragma: no cover
if options.showurls:
for path, class_ in route.get_routes():
print path
http_server = tornado.httpserver.HTTPServer(Application())
print "Starting tornado on port", options.port
if options.prefork:
peterbe / gist:920958
Created Apr 15, 2011
Like an abstract class that requires you subclass certain methods but for settings. Just a thought
View gist:920958
class LazyNotImplementedError:
def __init__(self, error_msg):
self.error_msg = error_msg
def __call__(self, *__):
raise NotImplementedError(self.error_msg)
__str__ = __add__ = __call__
# example
BASE = LazyNotImplementedError("You must set this in your settings_local")
You can’t perform that action at this time.