index.py
author Tero Marttila <terom@fixme.fi>
Mon, 26 Nov 2012 15:19:26 +0200
changeset 21 945f5a8cfefb
parent 20 3feaac71738a
permissions -rwxr-xr-x
fixfix splitline + opts weirdness
21
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
     1
#!/usr/bin/python
18
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     2
# Copyright 2009 Tero Marttila
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     3
#
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     4
#   This program is free software: you can redistribute it and/or modify
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     5
#   it under the terms of the GNU General Public License as published by
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     6
#   the Free Software Foundation, either version 3 of the License, or
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     7
#   (at your option) any later version.
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     8
#
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
     9
#   This program is distributed in the hope that it will be useful,
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    10
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    11
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    12
#   GNU General Public License for more details.
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    13
#
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    14
#   You should have received a copy of the GNU General Public License
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    15
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    16
#
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
    17
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    18
import werkzeug
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    19
from werkzeug.exceptions import HTTPException
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
1
71c7382994c4 rename logo.py -> index.cgi, and implement blurring
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    21
from PIL import Image, ImageDraw, ImageFont, ImageEnhance
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
from cStringIO import StringIO
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    23
import random, itertools, time, os.path
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
20
3feaac71738a doc+lang fixes (?)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    25
# monkeypatch 2.5 to add missing 2.6 features
5
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    26
if not hasattr(itertools, 'izip_longest') :
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    27
    def izip_longest(*args, **kwds):
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    28
        # izip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    29
        fillvalue = kwds.get('fillvalue')
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    30
        def sentinel(counter = ([fillvalue]*(len(args)-1)).pop):
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    31
            yield counter()         # yields the fillvalue, or raises IndexError
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    32
        fillers = itertools.repeat(fillvalue)
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    33
        iters = [itertools.chain(it, sentinel(), fillers) for it in args]
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    34
        try:
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    35
            for tup in itertools.izip(*iters):
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    36
                yield tup
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    37
        except IndexError:
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    38
            pass
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    39
    
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    40
    itertools.izip_longest = izip_longest 
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    41
    
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    42
class Defaults :
20
3feaac71738a doc+lang fixes (?)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    43
    """
3feaac71738a doc+lang fixes (?)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    44
        Default values for parameters
3feaac71738a doc+lang fixes (?)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    45
    """
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    46
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    47
    text_lang = 'en'
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
7
9a6ac93e7446 implement image-format
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    49
    chars = [ u'"', u'!', u'?' ]
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    51
    colors = [
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    52
        "#0469af",
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    53
        "#fbc614",
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    54
        "#e1313b",
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    55
    ]
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    56
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    57
    font_name = 'helvetica'
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    58
    font_size = 30
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    59
    
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    60
    bg_color = "#ffffff"
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    61
    line_spacing = -10
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    62
    sharpness = 0.6
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
7
9a6ac93e7446 implement image-format
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    64
    img_format = 'png'
9a6ac93e7446 implement image-format
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    65
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    66
TEXT_BY_LANG = dict(
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    67
    en = [
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    68
        u"aalto",
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    69
        u"unive",
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    70
        u"rsity"
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    71
    ],
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    72
    fi = [
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    73
        u"aalto",
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    74
        u"yliop",
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    75
        u"isto"
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    76
    ],
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    77
    se = [
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    78
        u"aalto",
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    79
        u"univer",
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    80
        u"sitetet",
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    81
    ],
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    82
)
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    83
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    84
STATIC_PATH = "static"
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    85
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    86
FONTS = {
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    87
        'dejavu-sans-bold':     "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf",
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    88
        'helvetica':            "fonts/HELR65W.TTF",
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    89
    }
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    91
IMAGE_FORMATS = {
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    92
    'jpeg': 'jpeg',
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    93
    'png':  'png',
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    94
    'bmp':  'bmp'
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    95
}
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    96
6
f61000aa264b limit max font size
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    97
FONT_SIZE_MAX = 1024
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    98
IMG_SIZE_MAX  = 1024
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    99
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   100
TILE_SIZE = (100, 100)
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   101
18
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   102
SITE_URL = "http://qmsk.net/stuff/aaltologo/"
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   103
SOURCE_URL = "http://hg.qmsk.net/aaltologotin"
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   104
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   105
# enable debugging
6
f61000aa264b limit max font size
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   106
DEBUG = True
f61000aa264b limit max font size
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   107
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
def randomize (seq) :
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
        Returns the given sequence in random order as a list
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
    
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    # copy
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
    l = list(seq)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
    
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    # rearrange
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
    random.shuffle(l)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
    return l
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
11
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   122
def randomize_str_char (str) :
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   123
    """
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   124
        Randomize the given string by moving one char around
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   125
    """
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   126
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   127
    l = list(str)
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   128
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   129
    c = l.pop(random.randint(0, len(l) - 1))
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   130
    l.insert(random.randint(0, len(l)), c)
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   131
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   132
    return ''.join(l)
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   133
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   134
def build_data (text, chars, line_colors, random_chars=True, random_text=False, random_text_char=False) :
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
        Returns a matrix of (text, color) tuples representing the data to render
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
        [ [ (str, str) ] ]
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
            text        - list of lines
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
            chars       - list of random chars to interpse
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
            line_colors - list of colors to draw the chars in
11
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   143
            random_chars        - randomize the lines the chars go in
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   144
            random_text         - randomize the chars in each line
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   145
            random_text_char    - randomize each line by moving one char around
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
    data = []
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   149
    
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   150
    # if no chars given, don't insert any
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   151
    if not chars :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   152
        chars = []
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   153
    
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   154
    # randomize char order across lines?
9
efb80785ca9b add random-text
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   155
    if random_chars :
efb80785ca9b add random-text
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   156
        chars = randomize(chars)
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
    
5
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   158
    for line, char, color in itertools.izip_longest(text, chars, line_colors, fillvalue=None) :
15
707ddd7a7912 fix if fewer text than chars
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   159
        if not line :
707ddd7a7912 fix if fewer text than chars
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   160
            continue
707ddd7a7912 fix if fewer text than chars
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
   161
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
        # pick position to place char
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   163
        if len(line) >= 2 :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   164
            pos = random.randint(1, len(line) - 1)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   165
        else :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   166
            pos = random.randint(0, 1)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   167
        
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   168
        # default color
5
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   169
        if not color :
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   170
            color = "#000000"
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   171
        
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   172
        # randomize text in some way?
9
efb80785ca9b add random-text
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   173
        if random_text :
efb80785ca9b add random-text
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   174
            line = ''.join(randomize(line))
11
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   175
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   176
        if random_text_char :
0f070e9daa71 implement random-text-char
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
   177
            line = randomize_str_char(line)
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
        
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
        # split into three parts
5
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   180
        if char :
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   181
            data.append([
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   182
                    (line[:pos], "#000000"),
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   183
                    (char, color),
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   184
                    (line[pos:], "#000000"),
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   185
                ])
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   186
        else :
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   187
            data.append([
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   188
                    (line, "#000000"),
6d0e03f2fef4 replace zip with itertools.izip_longest
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   189
                ])
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
    
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
    return data
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
def load_font (font_name, font_size) :
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
        Load a font by name
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
    
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
    # load font
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   199
    font_path = FONTS[font_name]
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
    font = ImageFont.truetype(font_path, font_size)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
    
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
    return font
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   204
def render_img (data, font, background_color="#ffffff", line_spacing=0, img_size=None) :
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
        Render the data (as from build_data) as an image, using the given PIL.ImageFont, and return the PIL Image object
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
    img_width = img_height = 0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
    img_data = []
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
    
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   213
    # compute image/segment width/height
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
    for segments in data :
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
        line_width = line_height = 0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
        
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
        # build a new list of segments with additional info
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
        line_segments = []
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
        
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
        for seg_text, seg_color in segments :
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
            # compute rendered text size
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
            seg_width, seg_height = font.getsize(seg_text)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
            
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
            # update line_*
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
            line_width += seg_width
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
            line_height = max(line_height, seg_height)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
            
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
            # build the new segments list
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
            line_segments.append((seg_text, seg_color, seg_width))
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
        
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
        # update img_*
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
        img_width = max(img_width, line_width)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
        img_height += line_height
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
        img_data.append((line_segments, line_height))
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   235
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   236
    if img_size :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   237
        # override size
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   238
        img_width, img_height = img_size
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   240
    else :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   241
        # calculate height needed for line spacing
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   242
        img_height += (len(img_data) - 1) * line_spacing
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
    # create image
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
    img = Image.new("RGB", (img_width, img_height), background_color)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
    draw = ImageDraw.Draw(img)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248
    # draw text
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   249
    img_y = 0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   250
    for segments, line_height in img_data :
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
        img_x = 0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
        
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
        # draw each segment build above, incremeing along img_x
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
        for seg_text, seg_color, seg_width in segments :
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
            draw.text((img_x, img_y), seg_text, font=font, fill=seg_color)
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
            img_x += seg_width
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
        
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259
        img_y += line_height + line_spacing
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
    
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   261
    return img
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   263
def effect_sharpness (img, factor) :
1
71c7382994c4 rename logo.py -> index.cgi, and implement blurring
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   264
    """
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   265
        Sharpen the image by the given factor
1
71c7382994c4 rename logo.py -> index.cgi, and implement blurring
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   266
    """
71c7382994c4 rename logo.py -> index.cgi, and implement blurring
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   267
71c7382994c4 rename logo.py -> index.cgi, and implement blurring
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   268
    return ImageEnhance.Sharpness(img).enhance(factor)
71c7382994c4 rename logo.py -> index.cgi, and implement blurring
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
   269
7
9a6ac93e7446 implement image-format
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   270
def build_img (img, format='png') :
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
        Write the given PIL.Image as a string, returning the raw binary data
7
9a6ac93e7446 implement image-format
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   273
9a6ac93e7446 implement image-format
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   274
        Format should be one of the PIL-supported image foarts
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
    # render PNG output
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
    buf = StringIO()
7
9a6ac93e7446 implement image-format
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   279
    img.save(buf, format)
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
    data = buf.getvalue()
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
    return data
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   284
class OptionType (object) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   285
    def parse (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   286
        """
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   287
            Unicode value -> object
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   288
        """
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   289
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   290
        abstract
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   291
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   292
    def build (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   293
        """
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   294
            object -> unicode value
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   295
        """
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   296
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   297
        return unicode(val)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   298
    
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   299
    def input (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   300
        """
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   301
            HTML input item
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   302
        """
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   303
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   304
        abstract
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   305
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   306
class StringOption (OptionType) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   307
    def parse (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   308
        return unicode(val)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   309
    
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   310
    def build (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   311
        if val is None :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   312
            return ""
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   313
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   314
        else :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   315
            return val
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   316
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   317
    def input (self, opt, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   318
        return """<input type="text" name="%(name)s" id="%(name)s" value="%(value)s" />""" % dict(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   319
            name        = opt.name,
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   320
            value       = self.build(val),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   321
        )
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   322
    
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   323
    def select (self, opt, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   324
        return """<select name="%(name)s">
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   325
%(options)s
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   326
</select>""" % dict(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   327
            name        = opt.name,
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   328
            options     = '\n'.join(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   329
                "\t<option %(selected)s>%(value)s</option>" % dict(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   330
                    value       = self.build(optval),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   331
                    selected    = 'selected="selected"' if val == optval else "",
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   332
                ) for optval in opt.range
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   333
            ),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   334
        )
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   335
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   336
class BoolOption (OptionType) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   337
    def parse (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   338
        if val.lower() in ('true', 't', '1', 'yes', 'y') :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   339
            return True
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   340
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   341
        elif val.lower() in ('false', 'f', '0', 'no', 'n') :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   342
            return False
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   343
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   344
        else :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   345
            raise ValueError(val)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   346
    
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   347
    def input (self, opt, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   348
        return """<input type="checkbox" name="%(name)s" id="%(name)s" %(checked)s/>""" % dict(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   349
            name        = opt.name,
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   350
            checked     = 'checked="checked"' if val else '',
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   351
        )
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   352
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   353
class IntOption (StringOption) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   354
    def parse (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   355
        return int(val)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   356
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   357
class FloatOption (StringOption) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   358
    def parse (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   359
        return float(val)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   360
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   361
class ColorOption (StringOption) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   362
    def _parse (self, val) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   363
        if val.startswith('#') :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   364
            int(val[1:], 16)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   365
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   366
            return val
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   367
        else :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   368
            raise ValueError(val)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   369
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   370
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   371
class Option (object) :
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   372
    def __init__ (self, name, is_list, type, default, range) :
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   373
        self.name = name
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   374
        self.is_list = is_list
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   375
        self.type = type
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   376
        self.default = default
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   377
        self.range = range
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   378
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   379
    def parse (self, args, force_bool=False) :
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   380
        if self.is_list :
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   381
            if self.name in args :
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   382
                l = args.getlist(self.name, self.type.parse)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   383
                
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   384
                # special-case to handle a single param with a newline-separtated list
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   385
                if len(l) == 1 :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   386
                    if not l[0] :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   387
                        return None
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   388
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   389
                    else :
21
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   390
                        return l[0].splitlines() # ('\r\n')
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   391
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   392
                else :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   393
                    return l
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   394
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   395
            else :
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   396
                return self.default
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   397
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   398
        else :
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   399
            if isinstance(self.type, BoolOption) and force_bool :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   400
                return self.name in args
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   401
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   402
            elif isinstance(self.type, BoolOption) and not self.default and self.name in args :
10
6add80d3993b enable arg_bools by just giving an empty opt
Tero Marttila <terom@fixme.fi>
parents: 9
diff changeset
   403
                return True
6add80d3993b enable arg_bools by just giving an empty opt
Tero Marttila <terom@fixme.fi>
parents: 9
diff changeset
   404
6add80d3993b enable arg_bools by just giving an empty opt
Tero Marttila <terom@fixme.fi>
parents: 9
diff changeset
   405
            else :
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   406
                return args.get(self.name, self.default, self.type.parse)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   407
    
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   408
    def build_list (self, value) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   409
        if self.is_list and value :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   410
            return [self.type.build(val) for val in value]
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   411
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   412
        else :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   413
            return [self.type.build(value)]
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   414
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   415
    def _build_input (self, value) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   416
        if self.is_list :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   417
            return """\
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   418
<textarea name="%(name)s" cols="30">\
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   419
%(data)s\
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   420
</textarea>""" % dict(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   421
                name        = self.name,
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   422
                data        = '\n'.join(self.type.build(val) for val in value) if value else '',
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   423
            )
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   424
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   425
        elif self.range :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   426
            return self.type.select(self, value)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   427
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   428
        else :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   429
            return self.type.input(self, value)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   430
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   431
    def build_form (self, opts) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   432
        value = opts[self.name]
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   433
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   434
        return """\
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   435
<div class="param"><label for="%(name)s">%(title)s</label>%(input)s</div>\
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   436
        """ % dict(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   437
            name        = self.name,
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   438
            title       = self.name.title().replace('-', ' '),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   439
            input       = self._build_input(value)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   440
        )
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   441
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   442
class Options (object) :
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   443
    def __init__ (self, *options) :
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   444
        self.options = list(options)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   445
        self.options_by_name = dict((opt.name, opt) for opt in options)
6
f61000aa264b limit max font size
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   446
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   447
    def parse (self, args, **kwargs) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   448
        return dict((opt.name, opt.parse(args, **kwargs)) for opt in self.options)
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   449
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   450
OPTIONS = Options(
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   451
    Option('lang',          False,  StringOption(), Defaults.text_lang,     TEXT_BY_LANG.keys()),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   452
    Option('text',          True,   StringOption(), None,                   None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   453
    Option('random-text',   False,  BoolOption(),   False,                  None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   454
    Option('random-text-char',False,BoolOption(),   False,                  None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   455
    Option('chars',         True,   StringOption(), Defaults.chars,         None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   456
    Option('random-chars',  False,  BoolOption(),   True,                   None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   457
    Option('colors',        True,   ColorOption(),  Defaults.colors,        None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   458
    Option('font',          False,  StringOption(), Defaults.font_name,     FONTS.keys()),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   459
    Option('font-size',     False,  IntOption(),    Defaults.font_size,     None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   460
    Option('bg-color',      False,  ColorOption(),  Defaults.bg_color,      None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   461
    Option('line-spacing',  False,  IntOption(),    Defaults.line_spacing,  None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   462
    Option('sharpness',     False,  FloatOption(),  Defaults.sharpness,     None),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   463
    Option('image-format',  False,  StringOption(), Defaults.img_format,    IMAGE_FORMATS.keys()),
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   464
    Option('seed',          False,  IntOption(),    None,                   None),
19
0187eddad3eb fix img_* -> img-*
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   465
    Option('img-width',     False,  IntOption(),    None,                   None),
0187eddad3eb fix img_* -> img-*
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   466
    Option('img-height',    False,  IntOption(),    None,                   None),
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   467
)
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   468
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   469
def handle_generic (req, img_size=None) :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   470
    # parse options
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   471
    opts = OPTIONS.parse(req.args)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   472
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   473
    # postprocess
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   474
    if opts['text'] is None :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   475
        opts['text'] = TEXT_BY_LANG[opts['lang']]
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   476
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   477
    if opts['font-size'] > FONT_SIZE_MAX :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   478
        raise ValueError(opts['font-size'])
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   479
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   480
    if opts['seed'] is None :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   481
        opts['seed'] = time.time()
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   482
19
0187eddad3eb fix img_* -> img-*
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   483
    if opts['img-width'] and opts['img-height'] :
0187eddad3eb fix img_* -> img-*
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   484
        img_size = (opts['img-width'], opts['img-height'])
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   485
19
0187eddad3eb fix img_* -> img-*
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   486
        if opts['img-width'] > IMG_SIZE_MAX or opts['img-height'] > IMG_SIZE_MAX :
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   487
            raise ValueError(img_size)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   488
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   489
    # load/prep resources
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   490
    random.seed(opts['seed'])
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   491
    data = build_data(opts['text'], opts['chars'], opts['colors'], opts['random-chars'], opts['random-text'], opts['random-text-char'])
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   492
    font = load_font(opts['font'], opts['font-size'])
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   493
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   494
    # render the image
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   495
    img = render_img(data, font, opts['bg-color'], opts['line-spacing'], img_size)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   496
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   497
    img = effect_sharpness(img, opts['sharpness'])
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   498
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   499
    png_data = build_img(img, opts['image-format'])
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   500
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   501
    # build the response
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   502
    response = werkzeug.Response(png_data, mimetype='image/%s' % opts['image-format'])
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   503
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   504
    return response
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   505
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   506
def handle_help (req) :
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   507
    return werkzeug.Response('\n'.join(
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   508
        "%-15s %4s  %-10s %-20s %s" % data for data in [
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   509
            ("name", "", "type", "default", "range"),
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   510
            ("", "", "", "", ""),
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   511
        ] + [(
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   512
            opt.name, 
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   513
            'list' if opt.is_list else 'item', 
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   514
            opt.type.__name__, 
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   515
            repr(opt.default), 
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   516
            opt.range if opt.range else ""
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   517
        ) for opt in OPTIONS.options]
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   518
    ), mimetype='text/plain')
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   519
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   520
def handle_logo (req) :
8
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   521
    if 'help' in req.args :
44d5ead35f4b implement Options/?help
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   522
        return handle_help(req)
12
aa6b83c94528 implement ?seed
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   523
    
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   524
    return handle_generic(req)
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   525
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   526
def handle_tile (req) :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   527
    return handle_generic(req, img_size=TILE_SIZE)
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   528
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   529
def handle_index (options, req) :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   530
    # parse options, force booleans if any form data was submitted, as checkboxes work that way
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   531
    opts = options.parse(req.values, force_bool=bool(req.form))
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   532
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   533
    # build query string of req things
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   534
    qargs = [
21
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   535
        # XXX: eek, this is weird
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   536
        (opt.name, val)
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   537
            for opt, vals in (
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   538
                (options.options_by_name[opt_name], vals) for opt_name, vals in opts.iteritems()
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   539
            ) if vals != opt.default
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   540
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   541
            # unpack (a, [b, c]) -> (a, b), (a, c)
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   542
            for val in opt.build_list(vals)
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   543
    ]
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   544
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   545
    img_url = req.url_root + "logo" + ("?%s" % werkzeug.url_encode(qargs) if qargs else '')
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   546
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   547
    return werkzeug.Response("""\
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   548
<html>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   549
    <head>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   550
        <title>Aaltologotin</title>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   551
        <style type="text/css">
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   552
div#logo {
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   553
    text-align: center;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   554
    padding: 100px;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   555
}
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   556
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   557
img {
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   558
    border: none;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   559
}
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   560
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   561
div#info {
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   562
    font-size: small;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   563
    padding-left: 25px;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   564
    margin-top: 50px;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   565
    color: grey;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   566
}
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   567
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   568
label {
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   569
    display: block;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   570
    float: left;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   571
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   572
    width: 150px;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   573
}
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   574
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   575
div.param {
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   576
    padding: 3px;
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   577
}
18
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   578
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   579
div#footer {
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   580
    text-align: center;
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   581
    font-size: x-small;
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   582
    font-style: italic;
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   583
}
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   584
        </style>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   585
    </head>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   586
    <body>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   587
        <div id='logo'>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   588
            <a href="%(img_url)s"><img src="%(img_url)s" alt="Aaltologo" /></a>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   589
        </div>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   590
        <div id='info'>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   591
            <h1>Aaltologotin</h1>
20
3feaac71738a doc+lang fixes (?)
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   592
            <p>Aaltologotin pulauttaa sinulle uuden, sattumanvaraisesti valitun aalto-logon!</p>
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   593
            
17
301725d72e29 late bugs
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
   594
            <form action="%(script_url)s" method="POST">
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   595
                <fieldset>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   596
                    <legend>Aalto-parameterit</legend>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   597
%(form_fields)s
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   598
                    <input type="submit" value="Logota!" />
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   599
                </fieldset>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   600
            </form>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   601
        </div>
18
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   602
        <div id='footer'>
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   603
            <a href="%(site_url)s">Aaltologotin</a> &copy; 2009 Tero Marttila :: GPL <a href="%(source_url)s">Source code</a>
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   604
        </div>
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   605
    </body>
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   606
</html>""" % dict(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   607
        img_url     = img_url,
17
301725d72e29 late bugs
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
   608
        script_url  = req.url_root,
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   609
        form_fields = "\n".join(
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   610
            "\t%s" % opt.build_form(opts) for opt in options.options
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   611
        ),
18
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   612
        site_url    = SITE_URL,
17e1136cc257 license/copyright/footer
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   613
        source_url  = SOURCE_URL,
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   614
    ), mimetype='text/html')
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   615
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   616
def handle_request (req) :
16
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   617
    if req.path == '/' :
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   618
        return handle_index(OPTIONS, req)
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   619
    
9234f5ae765b add index HTML interface
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   620
    elif req.path.startswith('/logo') :
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   621
        return handle_logo(req)
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   622
    
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   623
    elif req.path == '/tile' :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   624
        return handle_tile(req)
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   625
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   626
    else :
21
945f5a8cfefb fixfix splitline + opts weirdness
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   627
        raise ValueError(req.path)
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   628
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   629
@werkzeug.Request.application
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   630
def wsgi_application (request) :
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   631
    """
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   632
        Our werkzeug WSGI handler
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   633
    """
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   634
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   635
    try :
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   636
        # request -> response
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   637
        response = handle_request(request)
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   638
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   639
        return response
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   640
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   641
    except HTTPException, e :
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   642
        # return as HTTP response
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   643
        return e
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   644
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   645
def build_app () :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   646
    """
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   647
        Build and return a WSGI application
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   648
    """
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   649
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   650
    app = wsgi_application
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   651
 
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   652
    # add other middleware
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   653
    app = werkzeug.SharedDataMiddleware(app, {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   654
        '/static': STATIC_PATH,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   655
    })
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   656
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   657
   
6
f61000aa264b limit max font size
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   658
    if DEBUG :
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   659
        # enable debugging
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   660
        app = werkzeug.DebuggedApplication(app, evalex=False)
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   661
    
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   662
    return app
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   663
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   664
def main_cgi (app) :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   665
    import wsgiref.handlers
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   666
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   667
    handler = wsgiref.handlers.CGIHandler()
3
ac063212bd67 implement params
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   668
    handler.run(app)
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   669
13
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   670
def main_fastcgi (app) :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   671
    import flup.server.fcgi
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   672
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   673
    server = flup.server.fcgi.WSGIServer(app,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   674
        multithreaded   = False,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   675
        multiprocess    = False,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   676
        multiplexed     = False,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   677
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   678
        bindAddress     = None,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   679
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   680
        umask           = None,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   681
        debug           = True,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   682
    )
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   683
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   684
    server.run()
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   685
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   686
def main () :
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   687
    from sys import argv
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   688
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   689
    # get our file extension
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   690
    root, ext = os.path.splitext(argv[0])
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   691
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   692
    # get our handler
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   693
    handler = {
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   694
        '.cgi':     main_cgi,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   695
        '.fcgi':    main_fastcgi,
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   696
    }[ext]
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   697
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   698
    # get our app
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   699
    app = build_app()
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   700
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   701
    # run
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   702
    handler(app)
a0cb32f3de3d add silly crap (FastCGI, tiles.*)
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
   703
0
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   704
if __name__ == '__main__' :
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   705
    main()
44c5c8c2ac66 initial code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   706