Skip to content

Instantly share code, notes, and snippets.

#!/bin/bash -x
# Usage: python-bootstrap.sh <PYTHON PREFIX> <VIRTUALENV PREFIX>
# Define these env variables to override the defaults
PYTHON_VERSIONS=${PYTHON_VERSIONS:-"2.5.6 2.6.7 2.7.2"}
VIRTUALENV_VERSION=${VIRTUALENV_VERSION:-1.7}
PYTHON_MODULES=${PYTHON_MODULES:-"distribute requests"}
CPU_COUNT=${CPU_COUNT:-4}
@pmuller
pmuller / downloader.sh
Created February 9, 2012 18:07
wget wrapper, with caching
#!/bin/bash -x
set -e
str_md5() {
MD5=$(md5sum <<< $*)
echo ${MD5:0:32}
}
force_download() {
@pmuller
pmuller / automagically-manage-tmp-dirs.sh
Created February 9, 2012 18:46
Automagically manage temporary directories
#!/bin/bash -x
set -e
mktempdir() {
case $OSTYPE in
darwin*)
PREFIX=$(basename $0)
DIR=$(mktemp -d -t $PREFIX)
;;
@pmuller
pmuller / perforce.py
Created March 7, 2012 13:04
perforce client
import os
import P4
class Perforce(object):
def __init__(self, user=None, password=None, auto_login=True):
if not user:
if 'P4USER' in os.environ:
@pmuller
pmuller / streamlogger.py
Created April 13, 2012 11:55
StreamLogger is a context handler which proxies an output stream to python's logging
"""\
See `StreamLogger`.
"""
import sys
import logging
import cStringIO
class StreamLogger(object):
@pmuller
pmuller / fabric_roles.py
Created April 25, 2012 13:32
Fabric roles backend
"""\
Init:
from fabric.api import env
if isinstance(env.roledefs, dict):
env.roledefs = RolesManager(env.roledefs)
dummy_backend = {'foo': 'some.fqdn'}
env.roledefs.register_backend('dummy', dummy_backend)
@pmuller
pmuller / http_tests.py
Created April 27, 2012 12:19
Packages repository HTTP tests
import os
import unittest
import ConfigParser
import cStringIO
import requests
from bs4 import BeautifulSoup
class TestHttp(unittest.TestCase):
@pmuller
pmuller / ftp_tests.py
Created April 27, 2012 12:19
Packages repository FTP tests
import os
import unittest
import ftplib
import cStringIO
import hashlib
def fileobj_md5(fileobj, blocksize=128):
fileobj.seek(0)
md5 = hashlib.md5()
import SOAPpy
# Fix for the bogus Confluence XML answers
def confluence_soap_parser(xml_str, rules=None, parser=SOAPpy.Parser._parseSOAP):
attribute = 'xsi:type="soapenc:Array"'
xml_str = xml_str.replace('%s %s' % (attribute, attribute), attribute)
return parser(xml_str, rules=rules)
SOAPpy.Parser._parseSOAP = confluence_soap_parser
#!/usr/bin/env python
import os
import flask
app = flask.Flask(__name__,
static_url_path='/pypi',
static_folder=os.environ['PACKAGES_DIR'])