#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Random Avatar
~~~~~~~~~~~~~
You might want to use this as your avatar picture in discussion
forums.
With a chance of 1:ratio, one of the images in the current
directory will be randomly selected and sent to the browser.
Otherwise, the given default image will be used.
To get a random selection from all images, set
``DEFAULT_IMAGE = ''``.
Python 2.5 or higher is required.
If the script's ``.py`` ending is not accepted by forums, you can
use `mod_rewrite`_ to create an alias. In the same directory as
the script, create a .htaccess file with this content (without
leading whitespace)::
RewriteEngine On
Options +FollowSymLinks
RewriteRule ^avatar.jpg$ avatar.py [PT,L]
:Copyright: 2005-2008 Jochen Kupperschmidt
:Date: 13-Nov-2008
:License: MIT
.. _mod_rewrite: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
"""
from __future__ import with_statement
from itertools import ifilterfalse
import os
from random import choice
import sys
import time
# Adjust these values.
DEFAULT_IMAGE = 'your_default_image.png'
RATIO = 5
# MIME types according to file extension.
MIMETYPES = {
'gif': 'image/gif',
'jpg': 'image/jpeg',
'png': 'image/png',
}
def get_ext(filename):
"""Return the filename's extension."""
return filename.rpartition('.')[-1]
def choose_image():
"""Choose the name of an image to display."""
# Build a list of files in the current directory.
images = ifilterfalse(os.path.isdir, os.listdir(os.curdir))
# Only keep the file extensions defined above.
images = filter(lambda image: get_ext(image) in MIMETYPES, images)
# Return a random image if no default image is set.
if not DEFAULT_IMAGE:
return choice(images)
# Return default image depending on the timestamp.
if int(time.time()) % RATIO != 0:
return DEFAULT_IMAGE
# Remove default image from list.
if DEFAULT_IMAGE in images:
images.remove(DEFAULT_IMAGE)
# Select random image.
return choice(images)
if __name__ == '__main__':
image = choose_image()
type_ = MIMETYPES[get_ext(image)]
sys.stdout.write('Content-Type: %s\n\n' % type_)
with open(image, 'rb')as f:
sys.stdout.write(f.read())