Skip to content

Instantly share code, notes, and snippets.

@thepaul
thepaul / export2csv.py
Created June 22, 2009 22:41
export random database stuff to csv
# export2csv.py
#
# export random database stuff to csv
from __future__ import with_statement
import csv
def export2csv(cursor, outf):
"""
cursor should have an executed query already
@thepaul
thepaul / have_pidfile.py
Created October 9, 2010 22:12
pidfile context manager
import os
import contextmanager
@contextlib.contextmanager
def have_pidfile(fname):
f = open(fname, 'w')
f.write('%d\n' % os.getpid())
f.flush()
s = os.fstat(f.fileno())
dev, ino = s.st_dev, s.st_ino
@thepaul
thepaul / socket_info.py
Created October 9, 2010 23:04
output info about socket objects
import socket
from subprocess import check_output
from sys import stdout
from os import getpid
def info_about_socket(s, out=stdout):
"""
Write some information about the status and state of a socket object
to the file-like object 'out' (stdout, by default).
@thepaul
thepaul / gist:660680
Created November 3, 2010 01:52
index records by first field and output according to that index. original need called for commas, but set VSEP to the empty string if you just want separation of multiple values with OFS.
awk '{x[$1]=x[$1]?(x[$1] VSEP OFS $2):$2}END{for(e in x){print e,x[e]}}' VSEP=,
@thepaul
thepaul / ParallelBatcher.py
Created January 13, 2011 19:08
Do Twisted Deferred-producing jobs, X at a time
# ParallelBatcher.py
#
# Job pipeline for Twisted Matrix
# the paul 2011
#
# Sort of goes between defer.DeferredList and plain Deferred chaining.
# When you have lots of jobs to do which take time (most likely because
# they have to wait on some network action) but you don't want to do
# them all at the same time (maybe the remote network action is CPU- or
# bandwidth-intensive and you want to avoid overloading the remote
@thepaul
thepaul / noisyInlineTracebacks.py
Created January 14, 2011 18:38
additions to twisted.internet.defer.inlineCallbacks with lots of debugging info
# Copyright (c) 2001-2010 Twisted Matrix Laboratories.
# See LICENSE for details.
import traceback
import warnings
from sys import exc_info
# Twisted imports
from twisted.python import failure, lockfile
from twisted.python.util import mergeFunctionMetadata
@thepaul
thepaul / .gitconfig
Created January 20, 2011 18:23
i <3 my git xlog
[alias]
xlog = log --graph --pretty=format:\"%C(yellow)%h%Creset %ad %s%C(cyan)%d%Creset %C(green)[%an]%Creset\" --date=short
@thepaul
thepaul / shell_escape.py
Created January 22, 2011 00:46
escape random strings to make them single words in shells
import re
backslash_shell_quote_re = re.compile(r'([^A-Za-z0-9_.,:/])')
def shell_escape(s, flavor='sh'):
"""
Escape a random string (s) so that it reads as a single word when
undergoing shell command-line parsing.
The default flavor should be safe for all mainstream shells I know
about, but there are some other escaping modes which may result in
@thepaul
thepaul / changelog_from_deb.sh
Created June 1, 2011 17:01
extract and output the changelog from a .deb file, when possible
changelog_from_deb () {
# won't work when packages symlink their docs from another package from the same source;
# you'll get "No changelog found."
t="$(mktemp -d)"
p="$(dpkg-deb -f "$1" Package)"
fail=1
dpkg-deb --fsys-tarfile "$1" | \
tar -x --wildcards -C $t ./usr/share/doc/"$p"/changelog\* 2>/dev/null
for f in changelog.Debian.gz changelog.gz; do
@thepaul
thepaul / print_table.py
Created July 17, 2011 04:26
print stuff arranged in a table with silly ascii box characters
def center(text, width):
if len(text) < width:
diff = width - len(text)
pad = ' ' * (diff / 2)
text = pad + text + pad
if diff % 2:
text += ' '
return text
def print_table(fieldnames, table, outstream=None):